Skip to content

Commit

Permalink
Merge pull request #143 from medizininformatik-initiative/feature/142…
Browse files Browse the repository at this point in the history
…-Add-builders-to-records

#142 - Add builders to records
  • Loading branch information
michael-82 authored Jul 20, 2023
2 parents a4eb68c + 6380db8 commit ce03806
Show file tree
Hide file tree
Showing 49 changed files with 1,197 additions and 384 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import de.numcodex.feasibility_gui_backend.query.api.AttributeFilter;
import de.numcodex.feasibility_gui_backend.query.api.TimeRestriction;
import de.numcodex.feasibility_gui_backend.query.api.ValueFilter;
import lombok.Builder;

import java.util.List;

@JsonInclude(Include.NON_NULL)
@Builder
public record Criterion (
@JsonProperty("termCodes") List<TermCode> termCodes,
@JsonProperty("attributeFilters") List<AttributeFilter> attributeFilters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;

import java.util.Objects;

@JsonInclude(Include.NON_NULL)
@Builder
public record TermCode(
@JsonProperty("code") String code,
@JsonProperty("system") String system,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;

@JsonInclude(Include.NON_NULL)
@Builder
public record Unit(
@JsonProperty("code") String code,
@JsonProperty("display") String display
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,17 @@ private Query convertQueryToApi(de.numcodex.feasibility_gui_backend.query.persis
throws JsonProcessingException {

if (savedQuery.isPresent()) {
return new Query(in.getId(), jsonUtil.readValue(in.getQueryContent().getQueryContent(), StructuredQuery.class), savedQuery.get().getLabel(), savedQuery.get().getComment(), null);
return Query.builder()
.id(in.getId())
.content(jsonUtil.readValue(in.getQueryContent().getQueryContent(), StructuredQuery.class))
.label(savedQuery.get().getLabel())
.comment(savedQuery.get().getComment())
.build();
} else {
return new Query(in.getId(), jsonUtil.readValue(in.getQueryContent().getQueryContent(), StructuredQuery.class),null, null, null);
return Query.builder()
.id(in.getId())
.content(jsonUtil.readValue(in.getQueryContent().getQueryContent(), StructuredQuery.class))
.build();
}
}

Expand Down Expand Up @@ -188,10 +196,17 @@ public List<QueryListEntry> convertQueriesToQueryListEntries(List<de.numcodex.fe
queryList.forEach(q -> {
if (q.getSavedQuery() != null) {
ret.add(
new QueryListEntry(q.getId(), q.getSavedQuery().getLabel(), q.getCreatedAt()));
QueryListEntry.builder()
.id(q.getId())
.label(q.getSavedQuery().getLabel())
.createdAt(q.getCreatedAt())
.build());
} else {
ret.add(
new QueryListEntry(q.getId(), null, q.getCreatedAt()));
QueryListEntry.builder()
.id(q.getId())
.createdAt(q.getCreatedAt())
.build());
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
import de.numcodex.feasibility_gui_backend.common.api.Comparator;
import de.numcodex.feasibility_gui_backend.common.api.TermCode;
import de.numcodex.feasibility_gui_backend.common.api.Unit;
import lombok.Builder;

import java.util.List;
import java.util.Objects;


@JsonInclude(Include.NON_NULL)
@Builder
public record AttributeFilter(
@JsonProperty(value = "type", required = true) ValueFilterType type,
@JsonProperty("selectedConcepts") List<TermCode> selectedConcepts,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import de.numcodex.feasibility_gui_backend.common.api.TermCode;
import lombok.Builder;

import java.util.List;

@JsonInclude(Include.NON_NULL)
@Builder
public record Query(
@JsonProperty long id,
@JsonProperty StructuredQuery content,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;

import java.sql.Timestamp;

@JsonInclude(Include.NON_NULL)
@Builder
public record QueryListEntry(
@JsonProperty long id,
@JsonProperty String label,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import java.util.List;


@Builder
public record QueryResult(
long totalNumberOfPatients,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import de.numcodex.feasibility_gui_backend.common.api.TermCode;
import de.numcodex.feasibility_gui_backend.query.api.validation.QueryTemplateValidation;
import lombok.Builder;

import java.util.List;

@JsonInclude(Include.NON_NULL)
@QueryTemplateValidation
@Builder
public record QueryTemplate(
@JsonProperty long id,
@JsonProperty StructuredQuery content,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;

@JsonInclude(Include.NON_NULL)
@Builder
public record SavedQuery(
@JsonProperty String label,
@JsonProperty String comment
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import de.numcodex.feasibility_gui_backend.common.api.Criterion;
import de.numcodex.feasibility_gui_backend.query.api.validation.StructuredQueryValidation;
import lombok.Builder;

import java.net.URI;
import java.util.List;

@JsonInclude(Include.NON_EMPTY)
@StructuredQueryValidation
@Builder
public record StructuredQuery(
@JsonProperty URI version,
@JsonProperty("inclusionCriteria") List<List<Criterion>> inclusionCriteria,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;

@JsonInclude(Include.NON_NULL)
@Builder
public record TimeRestriction(
@JsonProperty("beforeDate") String beforeDate,
@JsonProperty("afterDate") String afterDate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
import de.numcodex.feasibility_gui_backend.common.api.Comparator;
import de.numcodex.feasibility_gui_backend.common.api.TermCode;
import de.numcodex.feasibility_gui_backend.common.api.Unit;
import lombok.Builder;

import java.util.Objects;

import java.util.List;

@JsonInclude(Include.NON_NULL)
@Builder
public record ValueFilter(
@JsonProperty(value = "type", required = true) ValueFilterType type,
@JsonProperty("selectedConcepts") List<TermCode> selectedConcepts,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.List;

import lombok.Builder;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@JsonSerialize()
public class FeasibilityIssues {

public List<FeasibilityIssue> issues;

public FeasibilityIssues(List<FeasibilityIssue> issues) {
this.issues = issues;
}
@Builder
public record FeasibilityIssues(
List<FeasibilityIssue> issues
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void onRequestStatusUpdate(int requestId, int nodeId, String status) {
}catch( IllegalArgumentException e ) {
return; // unsupported/unrecognized status
}

queryStatus = switch (rs) {
case completed -> QueryStatus.COMPLETED;
case processing -> QueryStatus.EXECUTING;
Expand All @@ -58,8 +58,13 @@ public void onRequestStatusUpdate(int requestId, int nodeId, String status) {
default -> QueryStatus.FAILED;
};
log.log(Level.INFO,"Request status updated {0} {1} {2}", new Object[] {requestId,nodeId,status});
var statusUpdate = new QueryStatusUpdate(client, client.wrapQueryId(requestId), client.wrapSiteId(nodeId),
queryStatus);
var statusUpdate = QueryStatusUpdate.builder()
.source(client)
.brokerQueryId(client.wrapQueryId(requestId))
.brokerSiteId(client.wrapSiteId(nodeId))
.status(queryStatus)
.build();

var associatedBackendQueryId = client.getBackendQueryId(client.wrapQueryId(requestId));
statusListener.onClientUpdate(associatedBackendQueryId, statusUpdate);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,12 @@ protected int obfuscate(int resultCount) {
* @param queryStatus the {@link QueryStatus} to publish to the listeners
*/
protected void updateQueryStatus(DirectQuery query, QueryStatus queryStatus) {
var statusUpdate = new QueryStatusUpdate(this, query.getQueryId(), SITE_ID_LOCAL, queryStatus);
var statusUpdate = QueryStatusUpdate.builder()
.source(this)
.brokerQueryId(query.getQueryId())
.brokerSiteId(SITE_ID_LOCAL)
.status(queryStatus)
.build();
listeners.forEach(
l -> l.onClientUpdate(query.getBackendQueryId(), statusUpdate)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,12 @@ private void notifyResultListeners(DSFQueryResult result) {
for (Entry<DSFBrokerClient, QueryStatusListener> listener : listeners.entrySet()) {
var broker = listener.getKey();
var statusListener = listener.getValue();
var statusUpdate = new QueryStatusUpdate(broker, result.getQueryId(), result.getSiteId(),
QueryStatus.COMPLETED);
var statusUpdate = QueryStatusUpdate.builder()
.source(broker)
.brokerQueryId(result.getQueryId())
.brokerSiteId(result.getSiteId())
.status(QueryStatus.COMPLETED)
.build();
var associatedBackendQueryId = broker.getBackendQueryId(result.getQueryId());

statusListener.onClientUpdate(associatedBackendQueryId, statusUpdate);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,22 @@ public void publishQuery(String brokerQueryId) throws QueryNotFoundException {
try {
Thread.sleep(Math.round(2000 + 6000 * Math.random()));
query.registerSiteResults(siteId, (int) Math.round(10 + 500 * Math.random()));
var statusUpdate = new QueryStatusUpdate(this, brokerQueryId, siteId, COMPLETED);
var statusUpdate = QueryStatusUpdate.builder()
.source(this)
.brokerQueryId(brokerQueryId)
.brokerSiteId(siteId)
.status(COMPLETED)
.build();
var associatedBackendQueryId = brokerToBackendQueryIdMapping.get(brokerQueryId);
listeners.forEach(l -> l.onClientUpdate(associatedBackendQueryId, statusUpdate));
} catch (InterruptedException e) {
log.error(e.getMessage(), e);
var statusUpdate = new QueryStatusUpdate(this, brokerQueryId, siteId, FAILED);
var statusUpdate = QueryStatusUpdate.builder()
.source(this)
.brokerQueryId(brokerQueryId)
.brokerSiteId(siteId)
.status(FAILED)
.build();
var associatedBackendQueryId = brokerToBackendQueryIdMapping.get(brokerQueryId);
listeners.forEach(l -> l.onClientUpdate(associatedBackendQueryId, statusUpdate));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,11 @@ private String resolveSiteName(String externalSiteId, BrokerClient client) throw

private void persistResult(Query internalQuery, String siteName, Integer matchesInPopulation)
throws QueryResultCollectException {
var resultLine = new ResultLine(siteName, (matchesInPopulation == null) ? ERROR : SUCCESS,
(matchesInPopulation == null) ? 0 : matchesInPopulation);
var resultLine = ResultLine.builder()
.siteName(siteName)
.type((matchesInPopulation == null) ? ERROR : SUCCESS)
.result((matchesInPopulation == null) ? 0 : matchesInPopulation)
.build();

resultService.addResultLine(internalQuery.getId(), resultLine);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package de.numcodex.feasibility_gui_backend.query.collect;

import de.numcodex.feasibility_gui_backend.query.broker.BrokerClient;
import lombok.Builder;

/**
* Defines a status update on a broker specific query.
* <p>
* Comprises information about the broker that the update originates from, the associated broker specific query ID, the
* associated broker specific site ID as well as the query status itself.
*/
@Builder
public record QueryStatusUpdate(BrokerClient source, String brokerQueryId, String brokerSiteId,
QueryStatus status) {
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package de.numcodex.feasibility_gui_backend.query.result;

import de.numcodex.feasibility_gui_backend.query.persistence.ResultType;
import lombok.Builder;

import java.util.Objects;

/**
Expand All @@ -11,6 +13,7 @@
* implementations. It holds information about the site name (as submitted by the
* {@code BrokerClient}, the {@link ResultType} (success or error)and the number of patients.
*/
@Builder
public record ResultLine(String siteName, ResultType type, long result) {

public ResultLine {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import lombok.Builder;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.aktin.broker.client2.BrokerAdmin2;
Expand Down Expand Up @@ -119,16 +121,21 @@ public void addResultLine(Long queryId, ResultLine result) {
/**
* Holds all submitted {@link ResultLine results} from sites to a query.
*/
@Builder
private record QueryResult(Map<String, ResultLine> resultsBySite) {

private static final QueryResult EMPTY = new QueryResult(Map.of());
private static final QueryResult EMPTY = QueryResult.builder()
.resultsBySite(Map.of())
.build();

private QueryResult {
resultsBySite = Map.copyOf(resultsBySite);
}

private static QueryResult ofResultLine(ResultLine resultLine) {
return new QueryResult(Map.of(resultLine.siteName(), resultLine));
return QueryResult.builder()
.resultsBySite(Map.of(resultLine.siteName(), resultLine))
.build();
}

/**
Expand All @@ -148,7 +155,9 @@ private QueryResult merge(QueryResult other) {
Map<String, ResultLine> mergedResultsBySite = new HashMap<>(
resultsBySite);
other.resultsBySite.forEach(mergedResultsBySite::putIfAbsent);
return new QueryResult(mergedResultsBySite);
return QueryResult.builder()
.resultsBySite(mergedResultsBySite)
.build();
}
}
}
Loading

0 comments on commit ce03806

Please sign in to comment.