Skip to content

Commit

Permalink
Add InstanceSessionResolver to obtain instance entities for instanceS…
Browse files Browse the repository at this point in the history
…essions when requested by the client.
  • Loading branch information
stuartcaunt committed Dec 3, 2024
1 parent 2ba97c3 commit 806d681
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,14 @@ public void save(Instance instance) {
}
}

public List<Instance> getAll(final InstanceFilter filter) {
return this.getAll(filter, null, null);
}

public List<Instance> getAll(final InstanceFilter filter, final OrderBy orderBy) {
return this.getAll(filter, orderBy, null);
}

public List<Instance> getAll(final InstanceFilter filter, final OrderBy orderBy, final Pagination pagination) {
return this.repository.getAll(filter, orderBy, pagination);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ public void instancesForInstrumentScientistWithFilters() {
assertNotNull(user1);

InstanceFilter filter = new InstanceFilter();
filter.setId(1000L);
filter.setIds(List.of(1000L));
List<Instance> instances = this.instanceService.getAllForInstrumentScientist(user1, filter, null, null);
assertEquals(1, instances.size());

Expand Down Expand Up @@ -316,7 +316,7 @@ public void instancesAllForScientificSupportWithFilters() {
assertEquals(2 , instances.size());

filter = new InstanceFilter();
filter.setId(1008L);
filter.setIds(List.of(1008L));
instances = this.instanceService.getAllForInstrumentControlSupport(filter, null, null);
assertEquals(1 , instances.size());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import eu.ill.visa.core.entity.enumerations.InstanceState;
import jakarta.ws.rs.QueryParam;

import java.util.List;

public class InstanceFilter {

@QueryParam("id")
private Long id;
private List<Long> ids;

@QueryParam("nameLike")
private String nameLike;
Expand All @@ -27,12 +29,12 @@ public class InstanceFilter {
@QueryParam("ownerId")
private String ownerId;

public Long getId() {
return id;
public List<Long> getIds() {
return ids;
}

public void setId(Long id) {
this.id = id;
public void setIds(List<Long> ids) {
this.ids = ids;
}

public String getNameLike() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,8 @@ protected List<Predicate> convertFilterToPredicates(final InstanceFilter filter,

final List<Predicate> predicates = new ArrayList<>();

if (filter.getId() != null) {
predicates.add(cb.equal(root.get("id"), filter.getId()));
if (filter.getIds() != null && !filter.getIds().isEmpty()) {
predicates.add(root.get("id").in(filter.getIds()));
}

if (filter.getNameLike() != null) {
Expand Down Expand Up @@ -511,9 +511,9 @@ public Instance getDeletedInstanceByComputeId(String computeId) {
private <T> TypedQuery<T> createFilteredQuery(String queryString, InstanceFilter filter, OrderBy orderBy, Pagination pagination, Class<T> type) {
List<Entry<String, Object>> queryParameters = new ArrayList<>();

if (filter != null && filter.getId() != null) {
queryString += " AND i.id = :id";
queryParameters.add(new SimpleEntry<>("id", filter.getId()));
if (filter != null && filter.getIds() != null && !filter.getIds().isEmpty()) {
queryString += " AND i.id IN (:ids)";
queryParameters.add(new SimpleEntry<>("ids", filter.getIds()));
}
if (filter != null && filter.getNameLike() != null) {
queryString += " AND LOWER(i.name) like LOWER(:name)";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import eu.ill.visa.broker.EventDispatcher;
import eu.ill.visa.broker.MessageBroker;
import eu.ill.visa.business.services.*;
import eu.ill.visa.core.domain.fetches.InstanceFetch;
import eu.ill.visa.core.entity.Instance;
import eu.ill.visa.core.entity.InstanceSession;
import eu.ill.visa.core.entity.enumerations.InstanceActivityType;
Expand Down Expand Up @@ -311,7 +312,7 @@ private void onSessionLocked(final Long sessionId, final ConnectedUser user) {

desktopSession.filterMembers(desktopSessionMember -> !desktopSessionMember.connectedUser().getRole().equals(InstanceMemberRole.OWNER))
.forEach(desktopSessionMember -> {
final Instance instance = this.instanceService.getFullById(desktopSession.getInstanceId());
final Instance instance = this.instanceService.getById(desktopSession.getInstanceId(), List.of(InstanceFetch.members));
if (desktopSessionMember.connectedUser().isRole(InstanceMemberRole.SUPPORT) && instanceSessionService.canConnectWhileOwnerAway(instance, desktopSessionMember.connectedUser().getId())) {
this.eventDispatcher.sendEventToClient(desktopSessionMember.clientId(), USER_DISCONNECTED_EVENT, new UserDisconnectedEvent(user, desktopSession.getInstanceId()));

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package eu.ill.visa.web.graphql.resolvers;

import eu.ill.visa.business.services.InstanceService;
import eu.ill.visa.core.domain.filters.InstanceFilter;
import eu.ill.visa.core.entity.Instance;
import eu.ill.visa.web.graphql.types.InstanceSessionType;
import eu.ill.visa.web.graphql.types.InstanceType;
import jakarta.inject.Inject;
import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Source;

import java.util.List;


@GraphQLApi
public class InstanceSessionResolver {

private final InstanceService instanceService;

@Inject
public InstanceSessionResolver(final InstanceService instanceService) {
this.instanceService = instanceService;
}

public List<InstanceType> instance(@Source List<InstanceSessionType> instanceSessions) {
final InstanceFilter instanceFilter = new InstanceFilter();
instanceFilter.setIds(instanceSessions.stream().map(InstanceSessionType::getInstanceId).toList());
List<Instance> instances = this.instanceService.getAll(instanceFilter);

return instanceSessions.stream().map(instanceSessionType -> {
return instances.stream().filter(instance -> instance.getId().equals(instanceSessionType.getInstanceId())).findFirst().orElse(null);
})
.map(instance -> instance == null ? null : new InstanceType(instance))
.toList();
}


}

Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@ public class InstanceSessionType {
private final @NotNull Long id;
private final @NotNull String connectionId;
private final @NotNull boolean current;
@AdaptToScalar(Scalar.Int.class)
private final @NotNull Long instanceId;

public InstanceSessionType(final InstanceSession session) {
this.id = session.getId();
this.connectionId = session.getConnectionId();
this.current = session.getCurrent();
this.instanceId = session.getInstanceId();
}

public Long getId() {
Expand All @@ -31,4 +34,8 @@ public String getConnectionId() {
public boolean isCurrent() {
return current;
}

public @NotNull Long getInstanceId() {
return instanceId;
}
}

0 comments on commit 806d681

Please sign in to comment.