Skip to content

Commit

Permalink
Merge pull request #92 from ehrbase/feature/84_fix_enum_generation
Browse files Browse the repository at this point in the history
Feature/84 fix enum generation
  • Loading branch information
stefanspiska authored Sep 30, 2020
2 parents 4f8f67b + bfeb86a commit d7651b4
Show file tree
Hide file tree
Showing 203 changed files with 9,267 additions and 117 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Note: version releases in the 0.x.y range may introduce breaking changes.
- Web-Templates (see https://github.com/ehrbase/openEHR_SDK/pull/81)
### Fixed
- Error when extracting name from a template where name has more than one child (see https://github.com/ehrbase/openEHR_SDK/pull/79)
- Enums where not correctly generated for value-sets (see https://github.com/ehrbase/openEHR_SDK/pull/92)

## 0.3.5

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ private Map<String, Node> handleCOBJECT(COBJECT cobject, String
term = term + TERM_DIVIDER + termDef.get(cobject.getNodeId()).getValue();
}
}
return Collections.singletonMap(path, new SlotNode(findJavaClass(cobject.getRmTypeName()), term, new ValueSet(LOCAL, Collections.emptySet()), multi));
return Collections.singletonMap(path, new SlotNode(findJavaClass(cobject.getRmTypeName()), term, new ValueSet(LOCAL, LOCAL, Collections.emptySet()), multi));

} else {

Expand Down Expand Up @@ -313,17 +313,14 @@ private ValueSet buildTermSet(COBJECT cobject, Map<String, TermDefinition> termD
CCODEPHRASE ccodephrase = (CCODEPHRASE) cobject;
String terminologyId = Optional.of(ccodephrase).map(CCODEPHRASE::getTerminologyId).map(OBJECTID::getValue).orElse("");
if (terminologyId.equals("local")) {
valueSet = new ValueSet(terminologyId, Arrays.stream(ccodephrase.getCodeListArray()).filter(termDef::containsKey).map(termDef::get).collect(Collectors.toSet()));
valueSet = new ValueSet(terminologyId, LOCAL, Arrays.stream(ccodephrase.getCodeListArray()).filter(termDef::containsKey).map(termDef::get).collect(Collectors.toSet()));
} else if (StringUtils.isNotBlank(terminologyId)) {
valueSet = TerminologyProvider.findOpenEhrValueSet(terminologyId, ccodephrase.getCodeListArray());
String id = valueSet.getId();
if (valueSet.getTherms().stream().map(TermDefinition::getCode).anyMatch(termDef::containsKey)) {
id = id + ":local";
}

Set<TermDefinition> termDefinitions = valueSet.getTherms().stream()
.map(t -> termDef.getOrDefault(t.getCode(), t)).collect(Collectors.toSet());

valueSet = new ValueSet(id, termDefinitions);
valueSet = new ValueSet(valueSet.getTerminologyId(), LOCAL, termDefinitions);
} else {
valueSet = EMPTY_VALUE_SET;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ public interface RmIntrospectConfig extends ClassDependent<Object> {
Set<String> getNonTemplateFields();

default ValueSet findExternalValueSet(String fieldName) {
return new ValueSet(ValueSet.LOCAL, Collections.emptySet());
return new ValueSet(ValueSet.LOCAL, ValueSet.LOCAL, Collections.emptySet());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ public class TerminologyProvider {
public static ValueSet findOpenEhrValueSet(String id, String group) {
try {
if (StringUtils.isNotBlank(group)) {
return new ValueSet(id + ":" + group, LOCALIZED_TERMINOLOGIES.getDefault().terminology(id).codesForGroupId(group).stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
return new ValueSet(id, group, LOCALIZED_TERMINOLOGIES.getDefault().terminology(id).codesForGroupId(group).stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
} else {
return new ValueSet(id + ":all", LOCALIZED_TERMINOLOGIES.getDefault().codeSet(id).allCodes().stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
return new ValueSet(id, "all", LOCALIZED_TERMINOLOGIES.getDefault().codeSet(id).allCodes().stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
}
} catch (RuntimeException e) {
LOGGER.warn("Unknown group {} in Terminology {}", group, id);
Expand All @@ -60,9 +60,9 @@ public static ValueSet findOpenEhrValueSet(String id, String group) {
public static ValueSet findOpenEhrValueSet(String id, String[] values) {
try {
if (ArrayUtils.isNotEmpty(values)) {
return new ValueSet(id + ":" + values.toString(), Arrays.stream(values).map(v -> new CodePhrase(new TerminologyId(id), v)).map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
return new ValueSet(id, "local", Arrays.stream(values).map(v -> new CodePhrase(new TerminologyId(id), v)).map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
} else {
return new ValueSet(id + ":all", LOCALIZED_TERMINOLOGIES.getDefault().codeSet(id).allCodes().stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
return new ValueSet(id, "all", LOCALIZED_TERMINOLOGIES.getDefault().codeSet(id).allCodes().stream().map((CodePhrase cp) -> convert(id, cp)).collect(Collectors.toSet()));
}
} catch (RuntimeException e) {
LOGGER.warn("Unknown value {} in Terminology {}", values, id);
Expand Down
21 changes: 14 additions & 7 deletions client/src/main/java/org/ehrbase/client/terminology/ValueSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,42 @@

public class ValueSet {
public static final String LOCAL = "local";
public static final ValueSet EMPTY_VALUE_SET = new ValueSet(LOCAL, Collections.emptySet());
public static final ValueSet EMPTY_VALUE_SET = new ValueSet(LOCAL, LOCAL, Collections.emptySet());

private final String terminologyId;
private final String id;
private final Set<TermDefinition> therms;

public ValueSet(String id, Set<TermDefinition> therms) {
public ValueSet(String terminologyId, String id, Set<TermDefinition> therms) {
this.terminologyId = terminologyId;
this.id = id;
this.therms = therms;
}

public String getId() {
return id;
public String getTerminologyId() {
return terminologyId;
}

public Set<TermDefinition> getTherms() {
return therms;
}

public String getId() {
return id;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ValueSet valueSet = (ValueSet) o;
return Objects.equals(id, valueSet.id) &&
Objects.equals(therms, valueSet.therms);
return terminologyId.equals(valueSet.terminologyId) &&
id.equals(valueSet.id) &&
therms.equals(valueSet.therms);
}

@Override
public int hashCode() {
return Objects.hash(id, therms);
return Objects.hash(terminologyId, id, therms);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class AufenthaltInGesundheitseinrichtungObservation {
private String exposureEnValue;

@Path("/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code")
private VorhandenseinDefiningcode vorhandenseinDefiningcode;
private VorhandenseinDefiningcodeSpecificExposureEn vorhandenseinDefiningcode;

@Path("/language")
private Language language;
Expand Down Expand Up @@ -67,11 +67,12 @@ public String getExposureEnValue() {
return this.exposureEnValue;
}

public void setVorhandenseinDefiningcode(VorhandenseinDefiningcode vorhandenseinDefiningcode) {
public void setVorhandenseinDefiningcode(
VorhandenseinDefiningcodeSpecificExposureEn vorhandenseinDefiningcode) {
this.vorhandenseinDefiningcode = vorhandenseinDefiningcode;
}

public VorhandenseinDefiningcode getVorhandenseinDefiningcode() {
public VorhandenseinDefiningcodeSpecificExposureEn getVorhandenseinDefiningcode() {
return this.vorhandenseinDefiningcode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class AufenthaltInGesundheitseinrichtungObservationContainment extends Co

public SelectAqlField<String> EXPOSURE_EN_VALUE = new AqlFieldImp<String>(AufenthaltInGesundheitseinrichtungObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0045]/value|value", "exposureEnValue", String.class, this);

public SelectAqlField<VorhandenseinDefiningcode> VORHANDENSEIN_DEFININGCODE = new AqlFieldImp<VorhandenseinDefiningcode>(AufenthaltInGesundheitseinrichtungObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code", "vorhandenseinDefiningcode", VorhandenseinDefiningcode.class, this);
public SelectAqlField<VorhandenseinDefiningcodeSpecificExposureEn> VORHANDENSEIN_DEFININGCODE = new AqlFieldImp<VorhandenseinDefiningcodeSpecificExposureEn>(AufenthaltInGesundheitseinrichtungObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code", "vorhandenseinDefiningcode", VorhandenseinDefiningcodeSpecificExposureEn.class, this);

public SelectAqlField<Language> LANGUAGE = new AqlFieldImp<Language>(AufenthaltInGesundheitseinrichtungObservation.class, "/language", "language", Language.class, this);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

@Entity
@OptionFor("CLUSTER")
public class BewertungDesGesundheitsrisikosDetailsClusterSpezifischerRisikofaktor implements BewertungDesGesundheitsrisikosDetailsChoice {
public class BewertungDesGesundheitsrisikosBewertungDesGesundheitsrisikosDetailsClusterSpezi_ implements BewertungDesGesundheitsrisikosDetailsChoice {
@Path("")
private List<Cluster> details;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Entity
@OptionFor("DV_TEXT")
public class BewertungDesGesundheitsrisikosRisikofaktorDvtextSpezifischerRisikofaktor implements BewertungDesGesundheitsrisikosRisikofaktorChoice {
public class BewertungDesGesundheitsrisikosBewertungDesGesundheitsrisikosRisikofaktorDvtextS_ implements BewertungDesGesundheitsrisikosRisikofaktorChoice {
@Path("|value")
private String risikofaktorValue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Entity
@OptionFor("DV_CODED_TEXT")
public class BewertungDesGesundheitsrisikosVorhandenseinDvcodedtextSpezifischerRisikofaktor implements BewertungDesGesundheitsrisikosVorhandenseinChoice {
public class BewertungDesGesundheitsrisikosBewertungDesGesundheitsrisikosVorhandenseinDvcode_ implements BewertungDesGesundheitsrisikosVorhandenseinChoice {
@Path("|defining_code")
private VorhandenseinDefiningcode vorhandenseinDefiningcode;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class PersonenkontaktObservation {
private String exposureEnValue;

@Path("/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code")
private VorhandenseinDefiningcode vorhandenseinDefiningcode;
private VorhandenseinDefiningcodeSpecificExposureEn vorhandenseinDefiningcode;

@Path("/language")
private Language language;
Expand Down Expand Up @@ -67,11 +67,12 @@ public String getExposureEnValue() {
return this.exposureEnValue;
}

public void setVorhandenseinDefiningcode(VorhandenseinDefiningcode vorhandenseinDefiningcode) {
public void setVorhandenseinDefiningcode(
VorhandenseinDefiningcodeSpecificExposureEn vorhandenseinDefiningcode) {
this.vorhandenseinDefiningcode = vorhandenseinDefiningcode;
}

public VorhandenseinDefiningcode getVorhandenseinDefiningcode() {
public VorhandenseinDefiningcodeSpecificExposureEn getVorhandenseinDefiningcode() {
return this.vorhandenseinDefiningcode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class PersonenkontaktObservationContainment extends Containment {

public SelectAqlField<String> EXPOSURE_EN_VALUE = new AqlFieldImp<String>(PersonenkontaktObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0045]/value|value", "exposureEnValue", String.class, this);

public SelectAqlField<VorhandenseinDefiningcode> VORHANDENSEIN_DEFININGCODE = new AqlFieldImp<VorhandenseinDefiningcode>(PersonenkontaktObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code", "vorhandenseinDefiningcode", VorhandenseinDefiningcode.class, this);
public SelectAqlField<VorhandenseinDefiningcodeSpecificExposureEn> VORHANDENSEIN_DEFININGCODE = new AqlFieldImp<VorhandenseinDefiningcodeSpecificExposureEn>(PersonenkontaktObservation.class, "/data[at0001]/events[at0002]/data[at0042]/items[at0044]/items[at0046]/value|defining_code", "vorhandenseinDefiningcode", VorhandenseinDefiningcodeSpecificExposureEn.class, this);

public SelectAqlField<Language> LANGUAGE = new AqlFieldImp<Language>(PersonenkontaktObservation.class, "/language", "language", Language.class, this);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.ehrbase.client.classgenerator.examples.coronaanamnesecomposition.definition;

import org.ehrbase.client.classgenerator.EnumValueSet;

public enum VorhandenDefiningcode2 implements EnumValueSet {
NICHT_VORHANDEN("Nicht vorhanden", "Das spezifische Symptom oder Anzeichen ist nicht vorhanden.", "local", "at0024"),

VORHANDEN("Vorhanden", "Das spezifische Symptom oder Anzeichen ist vorhanden.", "local", "at0023"),

UNBEKANNT("Unbekannt", "Es ist nicht bekannt, ob das Symptom oder Anzeichen vorhanden ist oder nicht.", "local", "at0027");

private String value;

private String description;

private String terminologyId;

private String code;

VorhandenDefiningcode2(String value, String description, String terminologyId, String code) {
this.value = value;
this.description = description;
this.terminologyId = terminologyId;
this.code = code;
}

public String getValue() {
return this.value;
}

public String getDescription() {
return this.description;
}

public String getTerminologyId() {
return this.terminologyId;
}

public String getCode() {
return this.code;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import org.ehrbase.client.classgenerator.EnumValueSet;

public enum VorhandenseinDefiningcode implements EnumValueSet {
NICHT_VORHANDEN("Nicht vorhanden", "*The specific exposure is or has been absent at or during the event.(en)", "local", "at0049"),
VORHANDEN("Vorhanden", "Der Risikofaktor wurde bei der Person identifiziert.", "local", "at0018"),

VORHANDEN("Vorhanden", "*The specific exposure is or has been present at or during the event.(en)", "local", "at0047");
UNBESTIMMT("Unbestimmt", "Es ist nicht möglich festzustellen, ob der Risikofaktor vorhanden oder nicht vorhanden ist.", "local", "at0026"),

NICHT_VORHANDEN("Nicht vorhanden", "Der Risikofaktor wurde bei der Person nicht festgestellt.", "local", "at0019");

private String value;

Expand All @@ -23,7 +25,7 @@ public enum VorhandenseinDefiningcode implements EnumValueSet {
}

public String getValue() {
return this.value;
return this.value;
}

public String getDescription() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.ehrbase.client.classgenerator.examples.coronaanamnesecomposition.definition;

import org.ehrbase.client.classgenerator.EnumValueSet;

public enum VorhandenseinDefiningcodeSpecificExposureEn implements EnumValueSet {
NICHT_VORHANDEN("Nicht vorhanden", "*The specific exposure is or has been absent at or during the event.(en)", "local", "at0049"),

VORHANDEN("Vorhanden", "*The specific exposure is or has been present at or during the event.(en)", "local", "at0047");

private String value;

private String description;

private String terminologyId;

private String code;

VorhandenseinDefiningcodeSpecificExposureEn(String value, String description,
String terminologyId, String code) {
this.value = value;
this.description = description;
this.terminologyId = terminologyId;
this.code = code;
}

public String getValue() {
return this.value;
}

public String getDescription() {
return this.description;
}

public String getTerminologyId() {
return this.terminologyId;
}

public String getCode() {
return this.code;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Entity
public class WeitereSymptomeSpezifischesSymptomAnzeichenCluster {
@Path("/items[at0005]/value|defining_code")
private VorhandenDefiningcode vorhandenDefiningcode;
private VorhandenDefiningcode2 vorhandenDefiningcode;

@Path("/items[at0004]/value|value")
private String bezeichnungDesSymptomsOderAnzeichensValue;
Expand All @@ -20,11 +20,11 @@ public class WeitereSymptomeSpezifischesSymptomAnzeichenCluster {
@Path("/items[at0026]")
private List<Cluster> anzeichen;

public void setVorhandenDefiningcode(VorhandenDefiningcode vorhandenDefiningcode) {
public void setVorhandenDefiningcode(VorhandenDefiningcode2 vorhandenDefiningcode) {
this.vorhandenDefiningcode = vorhandenDefiningcode;
}

public VorhandenDefiningcode getVorhandenDefiningcode() {
public VorhandenDefiningcode2 getVorhandenDefiningcode() {
return this.vorhandenDefiningcode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
public enum SchweregradDefiningcode implements EnumValueSet {
SCHWER("Schwer", "Das Problem oder die Diagnose verhindert die normale Aktivität oder verursacht schwerwiegende gesundheitliche Schäden, falls es nicht behandelt wird.", "local", "at0049"),

MA_IG("Mäßig", "Das Problem oder die Diagnose beeinträchtigt die normale Aktivität oder verursacht bleibende gesundheitliche Schäden, falls es nicht behandelt wird.", "local", "at0048"),
MASSIG("Mäßig", "Das Problem oder die Diagnose beeinträchtigt die normale Aktivität oder verursacht bleibende gesundheitliche Schäden, falls es nicht behandelt wird.", "local", "at0048"),

LEICHT("Leicht", "Das Problem oder die Diagnose beeinträchtigt die normale Aktivität nicht, bzw. verursacht nicht bleibende gesundheitliche Schäden, falls es nicht behandelt wird.", "local", "at0047");

Expand All @@ -25,7 +25,7 @@ public enum SchweregradDefiningcode implements EnumValueSet {
}

public String getValue() {
return this.value;
return this.value;
}

public String getDescription() {
Expand Down
Loading

0 comments on commit d7651b4

Please sign in to comment.