=UTF-8
+encoding/bnd.bnd=UTF-8
+encoding/launch.bndrun=UTF-8
diff --git a/org.avatar.himsa.dummy.data.component/.settings/org.eclipse.jdt.core.prefs b/org.avatar.himsa.dummy.data.component/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8c9943d
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/org.avatar.himsa.dummy.data.component/bnd.bnd b/org.avatar.himsa.dummy.data.component/bnd.bnd
new file mode 100644
index 0000000..78c24d6
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/bnd.bnd
@@ -0,0 +1,17 @@
+-library: enable-emf
+
+Bundle-Version: ${project-version}
+-privatepackage: org.avatar.himsa.dummy.data.component
+-buildpath: \
+ org.gecko.emf.repository.api,\
+ org.gecko.emf.repository.mongo,\
+ osgi.cmpn,\
+ org.avatar.himsa.model;version=latest,\
+ org.gecko.emf.mongo.component,\
+ net.datafaker;version=latest,\
+ org.emau.icmvc.ganimed.ttp.cm2,\
+ org.avatar.gics.service;version=latest
+
+-includeresource: OSGI-INF/configurator/=config/
+Require-Capability: \
+ osgi.extender;filter:='(osgi.extender=osgi.configurator)'
\ No newline at end of file
diff --git a/org.avatar.himsa.dummy.data.component/config/config.json b/org.avatar.himsa.dummy.data.component/config/config.json
new file mode 100644
index 0000000..403af08
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/config/config.json
@@ -0,0 +1,15 @@
+{
+ ":configurator:resource-version": 1,
+
+ "EMFMongoRepositoryConfigurator":
+ {
+ "mongo.instances": "test1",
+ "test1.baseUris": "mongodb://localhost:27017",
+ "test1.databases": "test",
+ "test1.test.repoType": "PROTOTYPE"
+ },
+ "GICSService~test":
+ {
+ "url": "http://localhost:8080/gics/gicsService"
+ }
+}
\ No newline at end of file
diff --git a/org.avatar.himsa.dummy.data.component/gics_data/2024-12-02 AVATAR COMPLETE.json b/org.avatar.himsa.dummy.data.component/gics_data/2024-12-02 AVATAR COMPLETE.json
new file mode 100644
index 0000000..0869b2f
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/gics_data/2024-12-02 AVATAR COMPLETE.json
@@ -0,0 +1 @@
+{"resourceType":"ExchangeFormatDefinition","meta":{"profile":["http://example.com/StructureDefinition/dontuse#ExchangeFormatDefinition"]},"supportedVersion":"2024.2.0","domain":{"name":"avatar","finalized":true,"label":"AVATAR","signerIdType":["Patient ID"],"policyVersionConverter":"org.emau.icmvc.ganimed.ttp.cm2.version.MajorMinorVersionConverter","moduleVersionConverter":"org.emau.icmvc.ganimed.ttp.cm2.version.MajorMinorVersionConverter","consentTemplateVersionConverter":"org.emau.icmvc.ganimed.ttp.cm2.version.MajorMinorVersionConverter","config":{"qualityControl":{"types":[{"id":"checked_major_faults","labels":[{"lang":"de","value":"Checked, major faults"},{"lang":"en","value":"Checked, major faults"}],"status":"INVALID"},{"id":"checked_minor_faults","status":"VALID"},{"id":"invalidated","labels":[{"lang":"de","value":"Invalidated"},{"lang":"en","value":"Invalidated"}],"status":"INVALID"},{"id":"checked_no_faults","status":"VALID"},{"id":"###_auto_generated_###","status":"VALID"},{"id":"not_checked","status":"VALID"}],"defaultType":"not_checked"},"statistic":{"calculateDocumentDetails":true,"calculatePolicyDetails":true},"policies":{"permanentRevoke":false,"takeHighestVersionInsteadOfNewest":false,"takeMostSpecificValidityInsteadOfShortest":false},"scans":{"mandatory":false,"sizeLimit":10485760},"notifications":{"sendFromWeb":false},"application":{"enableChromePdfExport":false,"templateTypes":["REVOCATION","REFUSAL","CONSENT"]}},"creationDate":"2024-11-28T13:35:26+01:00"},"policiesConsentPolicy":[{"domainName":"avatar","name":"medical_history_policy","label":"Medical History Policy","version":"1.0","finalized":false},{"domainName":"avatar","name":"hearing_policy","label":"Hearing Policy","version":"1.0","finalized":false}],"modulesConsentModule":[{"domainName":"avatar","name":"medical_history_module","label":"Medical History Module","version":"1.0","title":"Medical History Module
","text":"I give my consent to the collection, storage, processing and scientific use of my medical history data
","policiesAssignedConsentPolicy":[{"policyKey":"avatar;medical_history_policy;1.0"}],"finalized":true},{"domainName":"avatar","name":"hearing_module","label":"Hearing Module","version":"1.0","title":"Hearing Module
","text":"I give my consent to the collection, storage, processing and scientific use of my hearing data
","policiesAssignedConsentPolicy":[{"policyKey":"avatar;hearing_policy;1.0"}],"finalized":true}],"templatesConsentTemplate":[{"domainName":"avatar","Name":"test_avatar_consent","Label":"Test Avatar Consent","version":"1.0","type":"CONSENT","title":"Test Avatar Consent Form
","header":"Test Avatar Consent Form
","modulesAssignedConsentModule":[{"displayCheckBoxes":["ACCEPTED","DECLINED"],"mandatory":false,"moduleKey":"avatar;medical_history_module;1.0","orderNumber":1},{"displayCheckBoxes":["ACCEPTED","DECLINED"],"mandatory":false,"moduleKey":"avatar;hearing_module;1.0","orderNumber":0}],"finalized":true}]}
\ No newline at end of file
diff --git a/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions1.png b/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions1.png
new file mode 100644
index 0000000..1b05457
Binary files /dev/null and b/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions1.png differ
diff --git a/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions2.png b/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions2.png
new file mode 100644
index 0000000..e649b94
Binary files /dev/null and b/org.avatar.himsa.dummy.data.component/gics_data/ImportInstructions2.png differ
diff --git a/org.avatar.himsa.dummy.data.component/gics_data/README.md b/org.avatar.himsa.dummy.data.component/gics_data/README.md
new file mode 100644
index 0000000..c8bba39
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/gics_data/README.md
@@ -0,0 +1,31 @@
+# gICS Data
+
+The file `2024-12-02 AVATAR COMPLETE.json` contains the gICS data that needs to be imported when launching the gICS container.
+
+In particular, it contains the definition of:
+
++ The *AVATAR* domain (key `avatar`);
++ Two policy definitions associated which the AVATAR domain
+ + `hearing_policy`
+ + `medical_history_policy`
++ Two module definitions associated with the AVATAR domain
+ + `hearing_module` (to which the `hearing_policy` corresponds)
+ + `medical_history_module` (to which the `medical_history_policy` corresponds)
++ One consent template form, associated with the AVATAR domain and than contains the two modules (key `test_avatar_consent`)
+
+To import the file, simply launch the gICS application through `docker-compose` (it can be downloaded [here](https://www.ths-greifswald.de/en/researchers-general-public/gics/)).
+
+The UI is then available under `http://localhost:8080/gics-web`
+
+Once in the UI, click on the `Import/Export` button and then select the `json` file to import.
+
+
+
+After selecting the `json` file you should see something like this:
+
+
+
+Remember to check the `Finalised imported elements` checkbox and then click `Import`
+
+Now you have everything you need to start the avatar app and create some fake patients and some fake contents in the gICS system.
+
diff --git a/org.avatar.himsa.dummy.data.component/launch.bndrun b/org.avatar.himsa.dummy.data.component/launch.bndrun
new file mode 100644
index 0000000..77a93ff
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/launch.bndrun
@@ -0,0 +1,56 @@
+#-runfw: org.apache.felix.framework;version=5
+#-runee: JavaSE-1.8
+
+-runprovidedcapabilities: ${native_capability}
+
+-resolve.effective: active;skip:="osgi.service"
+
+-runbundles: \
+ org.apache.felix.cm.json;version='[2.0.4,2.0.5)',\
+ org.apache.felix.configadmin;version='[1.9.26,1.9.27)',\
+ org.apache.felix.configurator;version='[1.0.18,1.0.19)',\
+ org.apache.felix.gogo.command;version='[1.1.2,1.1.3)',\
+ org.apache.felix.gogo.runtime;version='[1.1.6,1.1.7)',\
+ org.apache.felix.gogo.shell;version='[1.1.4,1.1.5)',\
+ org.apache.felix.metatype;version='[1.2.4,1.2.5)',\
+ org.apache.felix.scr;version='[2.2.10,2.2.11)',\
+ org.avatar.himsa.dummy.data.component;version=snapshot,\
+ org.avatar.himsa.model;version=snapshot,\
+ org.eclipse.parsson.jakarta.json;version='[1.1.5,1.1.6)',\
+ org.gecko.emf.collections;version='[2.2.2,2.2.3)',\
+ org.gecko.emf.mongo.component;version='[6.1.0,6.1.1)',\
+ org.gecko.emf.osgi.component;version='[6.0.1,6.0.2)',\
+ org.gecko.emf.repository.api;version='[9.3.0,9.3.1)',\
+ org.gecko.mongo.osgi.component;version='[6.1.0,6.1.1)',\
+ org.mongodb.mongo-java-driver;version='[3.12.14,3.12.15)',\
+ org.osgi.service.component;version='[1.5.1,1.5.2)',\
+ org.osgi.service.log;version='[1.5.0,1.5.1)',\
+ org.osgi.service.metatype;version='[1.4.1,1.4.2)',\
+ org.osgi.util.converter;version='[1.0.9,1.0.10)',\
+ org.osgi.util.function;version='[1.2.0,1.2.1)',\
+ org.osgi.util.promise;version='[1.3.0,1.3.1)',\
+ org.gecko.emf.mongo.pushstream;version='[6.1.0,6.1.1)',\
+ org.gecko.emf.pushstreams;version='[1.2.2,1.2.3)',\
+ org.gecko.emf.repository.mongo;version='[3.2.0,3.2.1)',\
+ org.osgi.util.pushstream;version='[1.1.0,1.1.1)',\
+ com.googlecode.libphonenumber;version='[8.13.50,8.13.51)',\
+ net.datafaker;version='[2.4.2,2.4.3)',\
+ org.eclipse.emf.common;version='[2.29.0,2.29.1)',\
+ org.eclipse.emf.ecore;version='[2.35.0,2.35.1)',\
+ org.eclipse.emf.ecore.xmi;version='[2.36.0,2.36.1)',\
+ org.emau.icmvc.ganimed.ttp.cm2;version='[1.0.0,1.0.1)',\
+ org.avatar.gics.service;version=snapshot,\
+ org.xmlsoap.model;version='[1.0.0,1.0.1)'
+
+-runrequires: \
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',\
+ bnd.identity;id='org.avatar.himsa.dummy.data.component',\
+ bnd.identity;id='org.mongodb.mongo-java-driver',\
+ bnd.identity;id='org.gecko.emf.mongo.component',\
+ bnd.identity;id='org.gecko.emf.mongo.pushstream',\
+ bnd.identity;id='org.gecko.mongo.osgi.component',\
+ bnd.identity;id='org.gecko.emf.repository.mongo',\
+ bnd.identity;id='org.gecko.emf.osgi.component'
+-runfw: org.apache.felix.framework;version='[7.0.5,7.0.5]'
+-runee: JavaSE-17
\ No newline at end of file
diff --git a/org.avatar.himsa.dummy.data.component/src/org/avatar/himsa/dummy/data/component/DummyDataComponent.java b/org.avatar.himsa.dummy.data.component/src/org/avatar/himsa/dummy/data/component/DummyDataComponent.java
new file mode 100644
index 0000000..14e0f1d
--- /dev/null
+++ b/org.avatar.himsa.dummy.data.component/src/org/avatar/himsa/dummy/data/component/DummyDataComponent.java
@@ -0,0 +1,250 @@
+package org.avatar.himsa.dummy.data.component;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Collection;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import org.avatar.gics.service.api.GICSService;
+import org.avatar.himsa.export.Patient;
+import org.avatar.himsa.export.PatientExportFactory;
+import org.avatar.himsa.export.PatientExportPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.emau.icmvc.ganimed.ttp.cm2.Cm2Factory;
+import org.emau.icmvc.ganimed.ttp.cm2.ConsentDTO;
+import org.emau.icmvc.ganimed.ttp.cm2.ConsentKeyDTO;
+import org.emau.icmvc.ganimed.ttp.cm2.ConsentStatus;
+import org.emau.icmvc.ganimed.ttp.cm2.ConsentTemplateKeyDTO;
+import org.emau.icmvc.ganimed.ttp.cm2.ConsentTemplateType;
+import org.emau.icmvc.ganimed.ttp.cm2.EntryType1;
+import org.emau.icmvc.ganimed.ttp.cm2.ModuleKeyDTO;
+import org.emau.icmvc.ganimed.ttp.cm2.ModuleStateDTO;
+import org.emau.icmvc.ganimed.ttp.cm2.ModuleStatesType;
+import org.emau.icmvc.ganimed.ttp.cm2.Qcdto;
+import org.emau.icmvc.ganimed.ttp.cm2.SignerIdDTO;
+import org.gecko.emf.repository.EMFRepository;
+import org.osgi.service.component.ComponentServiceObjects;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.util.promise.PromiseFactory;
+
+import net.datafaker.Faker;
+
+@Component(immediate=true, name="DummyDataComponent")
+public class DummyDataComponent {
+
+ @Reference(target="(repo_id=test1.test)")
+ ComponentServiceObjects repoSO;
+
+ @Reference
+ GICSService gicsService;
+
+ private static final Logger LOGGER = Logger.getLogger(DummyDataComponent.class.getName());
+ private static final List HEALTH_INSURANCE_COMPANIES_GERMANY = List.of("AOK", "BARMER", "HKK", "hkk health insurance", "KNIGHTSHAFT",
+ "DAK health", "KKH", "Techniker Krankenkasse", "TK", "HEK", "Hanseatic Health Insurance", "BKK", "IKK");
+
+ private Faker faker = new Faker(new Locale("de"));
+ private PromiseFactory factory = new PromiseFactory(Executors.newFixedThreadPool(4));
+
+ @Activate
+ public void activate() {
+ factory.submit(() -> {
+ doCreateDummyData();
+ return true;
+ }).onSuccess(t -> LOGGER.info("Finished creating dummy data!"))
+ .onFailure(t -> LOGGER.log(Level.SEVERE, String.format("Something went wrong when creating dummy data!"), t));
+ }
+
+
+ private void doCreateDummyData() {
+ EMFRepository repo = repoSO.getService();
+ try {
+ List existingPatients = repo.getAllEObjects(PatientExportPackage.eINSTANCE.getPatient());
+ boolean createPatients = existingPatients.isEmpty();
+
+ if(createPatients) {
+ Collection patients = createDummyPatients(10);
+ repo.save(patients.stream().map(mr -> (EObject) mr).toList());
+ for(Patient patient : patients) {
+ ConsentDTO consent = doCreateDummyConsent(patient);
+ gicsService.addConsent(consent);
+ }
+ }
+ } finally {
+ repoSO.ungetService(repo);
+ }
+
+ }
+
+
+
+ private Collection createDummyPatients(int numberOfInstances) {
+ List patients = new ArrayList<>(numberOfInstances);
+ for(int i = 0; i < numberOfInstances; i++) {
+ patients.add(doCreateDummyPatient());
+ }
+ return patients;
+ }
+
+
+ private Patient doCreateDummyPatient() {
+ Patient patient = PatientExportFactory.eINSTANCE.createPatient();
+ patient.setFirstName(faker.name().firstName());
+ patient.setLastName(faker.name().lastName());
+ patient.setMiddleName(faker.name().firstName());
+// patient.setGender((GenderType) selectRandomElement(GenderType.values()));
+ patient.setTitle(faker.name().title());
+
+ patient.setCity(faker.address().city());
+ patient.setZip(faker.address().zipCode());
+ patient.setProvince(faker.address().state());
+ patient.setCountry("Germany");
+ StringBuilder sb = new StringBuilder(patient.getCity());
+ sb.append(","+patient.getZip());
+ sb.append(","+patient.getProvince());
+ sb.append(","+patient.getCountry());
+ patient.setAddress1(sb.toString());
+
+ patient.setEMail(faker.internet().emailAddress());
+ patient.setHomeTelephone(faker.phoneNumber().phoneNumber());
+ patient.setWorkTelephone(faker.phoneNumber().phoneNumber());
+
+ patient.setInsurance1((String) selectRandomElement(HEALTH_INSURANCE_COMPANIES_GERMANY.toArray(new String[] {})));
+ patient.setSSNumber(faker.idNumber().ssnValid());
+
+ patient.setPhysician("Dr ".concat(faker.name().firstName().concat(" " + faker.name().lastName())));
+ patient.setReferral(faker.name().fullName());
+
+ patient.setPatientNo(faker.number().digits(6));
+ patient.setPatientGUID(UUID.randomUUID().toString());
+ patient.setUserId(UUID.randomUUID().toString());
+ patient.setActivePatient((Boolean) selectRandomElement(new Boolean[] {Boolean.TRUE, Boolean.FALSE}));
+
+ try {
+ GregorianCalendar c = new GregorianCalendar();
+ c.setTime(faker.date().birthday());
+ XMLGregorianCalendar xmlCalendar;
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ patient.setBirthDate(xmlCalendar);
+
+ c.setTime(faker.date().past(7, TimeUnit.DAYS));
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ patient.setCreateDate(xmlCalendar);
+ } catch (DatatypeConfigurationException e) {
+ e.printStackTrace();
+ }
+
+ return patient;
+ }
+
+ private ConsentDTO doCreateDummyConsent(Patient patient) {
+ ConsentDTO consent = Cm2Factory.eINSTANCE.createConsentDTO();
+ consent.setTemplateType(ConsentTemplateType.CONSENT);
+ ConsentKeyDTO consentKey = Cm2Factory.eINSTANCE.createConsentKeyDTO();
+ ConsentTemplateKeyDTO consentTemplateKey = Cm2Factory.eINSTANCE.createConsentTemplateKeyDTO();
+ consentTemplateKey.setDomainName("avatar");
+ consentTemplateKey.setName("test_avatar_consent");
+ consentTemplateKey.setVersion("1.0");
+ consentKey.setConsentTemplateKey(consentTemplateKey);
+ SignerIdDTO sid = Cm2Factory.eINSTANCE.createSignerIdDTO();
+ sid.setIdType("Patient ID");
+ sid.setId(patient.getPatientGUID());
+ consentKey.getSignerIds().add(sid);
+ consent.setKey(consentKey);
+ ModuleStatesType mst1 = Cm2Factory.eINSTANCE.createModuleStatesType();
+ EntryType1 et1 = Cm2Factory.eINSTANCE.createEntryType1();
+ ModuleKeyDTO mk = Cm2Factory.eINSTANCE.createModuleKeyDTO();
+ mk.setDomainName("avatar");
+ mk.setName("hearing_module");
+ mk.setVersion("1.0");
+ et1.setKey(mk);
+ ModuleStateDTO ms = Cm2Factory.eINSTANCE.createModuleStateDTO();
+ ms.setConsentState((ConsentStatus) selectRandomElement(new ConsentStatus[] {ConsentStatus.ACCEPTED, ConsentStatus.DECLINED}));
+ et1.setValue(ms);
+
+ EntryType1 et2 = Cm2Factory.eINSTANCE.createEntryType1();
+ ModuleKeyDTO mk2 = Cm2Factory.eINSTANCE.createModuleKeyDTO();
+ mk2.setDomainName("avatar");
+ mk2.setName("medical_history_module");
+ mk2.setVersion("1.0");
+ et2.setKey(mk2);
+ ModuleStateDTO ms2 = Cm2Factory.eINSTANCE.createModuleStateDTO();
+ ms2.setConsentState((ConsentStatus) selectRandomElement(new ConsentStatus[] {ConsentStatus.ACCEPTED, ConsentStatus.DECLINED}));
+ et2.setValue(ms2);
+
+ mst1.getEntry().add(et1);
+ mst1.getEntry().add(et2);
+ consent.setModuleStates(mst1);
+
+ consent.setPatientSignatureIsFromGuardian(false);
+ consent.setPatientSigningPlace(faker.address().city());
+ consent.setPatientSignatureBase64(Base64.getEncoder().encodeToString(faker.name().fullName().getBytes()));
+
+ consent.setPhysicianId(patient.getPhysician());
+ consent.setPhysicianSigningPlace(faker.address().city());
+ consent.setPhysicianSignatureBase64(Base64.getEncoder().encodeToString(faker.name().fullName().getBytes()));
+ Qcdto qualityControl = Cm2Factory.eINSTANCE.createQcdto();
+ try {
+ GregorianCalendar c = new GregorianCalendar();
+ Timestamp d1 = faker.date().past(100, 7, TimeUnit.DAYS);
+ Timestamp d2 = faker.date().past(100, 7, TimeUnit.DAYS);
+ Timestamp d3 = faker.date().past(100, 7, TimeUnit.DAYS);
+
+ Timestamp creation = d1.before(d2) ? d1 : d2;
+ creation = creation.before(d3) ? creation : d3;
+ Timestamp patientSig = creation.before(d3) ? d3 : creation;
+ Timestamp physicianSig = faker.date().between(patientSig, faker.date().past(6, TimeUnit.DAYS));
+
+ c.setTime(creation.equals(d1) ? d2 : d1);
+ XMLGregorianCalendar xmlCalendar;
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ consent.setCreationDate(xmlCalendar);
+ consentKey.setConsentDate(xmlCalendar);
+
+ c = new GregorianCalendar();
+ c.setTime(patientSig);
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ consent.setPatientSigningDate(xmlCalendar);
+
+ c = new GregorianCalendar();
+ c.setTime(physicianSig);
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ consent.setPhysicianSigningDate(xmlCalendar);
+
+ Timestamp d4 = faker.date().past(7, TimeUnit.DAYS);
+ c = new GregorianCalendar();
+ c.setTime(d4);
+ xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
+ qualityControl.setDate(xmlCalendar);
+ } catch (DatatypeConfigurationException e) {
+ e.printStackTrace();
+ }
+
+ qualityControl.setInspector(faker.name().fullName());
+ qualityControl.setType((String) selectRandomElement(new String[] {"checked_minor_faults", "checked_no_faults"}));
+ consent.setQualityControl(qualityControl);
+ return consent;
+ }
+
+ private Object selectRandomElement(T[] elements) {
+ Random rndm = new Random();
+ int rndmIndx = rndm.nextInt(elements.length);
+ Object rndmElem = elements[rndmIndx];
+ return rndmElem;
+ }
+
+}
diff --git a/org.avatar.himsa.rest/bnd.bnd b/org.avatar.himsa.rest/bnd.bnd
index f90fdfd..dc66fd9 100644
--- a/org.avatar.himsa.rest/bnd.bnd
+++ b/org.avatar.himsa.rest/bnd.bnd
@@ -4,7 +4,8 @@
org.gecko.emf.rest.jakartars;version=latest,\
org.gecko.emf.json;version=latest,\
org.avatar.himsa.model;version=project,\
- org.avatar.himsa.service.example
+ org.avatar.himsa.service.example,\
+ org.gecko.emf.util.model
-library: \
enableJakartaREST,\
diff --git a/org.avatar.himsa.rest/src/org/avatar/himsa/rest/DemoResource.java b/org.avatar.himsa.rest/src/org/avatar/himsa/rest/DemoResource.java
index 3ac2fac..83d410f 100644
--- a/org.avatar.himsa.rest/src/org/avatar/himsa/rest/DemoResource.java
+++ b/org.avatar.himsa.rest/src/org/avatar/himsa/rest/DemoResource.java
@@ -13,10 +13,12 @@
*/
package org.avatar.himsa.rest;
+import java.util.List;
import java.util.Objects;
import org.avatar.himsa.export.Patient;
import org.avatar.himsa.service.example.api.PatientService;
+import org.gecko.emf.utilities.UtilitiesFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ServiceScope;
@@ -74,11 +76,28 @@ public Response patient(@PathParam("id") String id) {
}
Patient p = patientService.getPatient(id);
if (Objects.isNull(p)) {
- System.out.println("Na patient found with id " + id);
+ System.out.println("No patient found with id " + id);
return Response.noContent().build();
} else {
return Response.ok(p).build();
}
}
-
+
+ @GET
+ @Path("/patient/with/consent/{domainId}/{policyId}/{policyVersion}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response patientWithConsent(@PathParam("domainId") String domainId, @PathParam("policyId") String policyId,
+ @PathParam("policyVersion") String policyVersion) {
+ if (Objects.isNull(domainId) || Objects.isNull(policyId)) {
+ return Response.noContent().build();
+ }
+ List patientsWithConsent = patientService.getPatientsWithConsent(domainId, policyId, policyVersion == null ? "1.0" : policyVersion);
+ if(patientsWithConsent.isEmpty()) {
+ System.out.println("No patients with consent found");
+ return Response.noContent().build();
+ }
+ org.gecko.emf.utilities.Response emfResponse = UtilitiesFactory.eINSTANCE.createResponse();
+ emfResponse.getData().addAll(patientsWithConsent);
+ return Response.ok(emfResponse).build();
+ }
}
diff --git a/org.avatar.himsa.runtime.config/configs/config.json b/org.avatar.himsa.runtime.config/configs/config.json
index 6246b28..1c38b2a 100644
--- a/org.avatar.himsa.runtime.config/configs/config.json
+++ b/org.avatar.himsa.runtime.config/configs/config.json
@@ -21,5 +21,9 @@
"test1.baseUris": "mongodb://localhost:27017",
"test1.databases": "test",
"test1.test.repoType": "PROTOTYPE"
+ },
+ "GICSService~test":
+ {
+ "url": "http://localhost:8080/gics/gicsService"
}
}
\ No newline at end of file
diff --git a/org.avatar.himsa.runtime/launch.bndrun b/org.avatar.himsa.runtime/launch.bndrun
index ac8f8e9..f7d6b6a 100644
--- a/org.avatar.himsa.runtime/launch.bndrun
+++ b/org.avatar.himsa.runtime/launch.bndrun
@@ -31,9 +31,6 @@
org.avatar.himsa.rest;version=snapshot,\
org.avatar.himsa.runtime.config;version=snapshot,\
org.avatar.himsa.service.example;version=snapshot,\
- org.eclipse.emf.common;version='[2.28.0,2.28.1)',\
- org.eclipse.emf.ecore;version='[2.33.0,2.33.1)',\
- org.eclipse.emf.ecore.xmi;version='[2.18.0,2.18.1)',\
org.eclipse.osgitech.rest;version='[1.2.2,1.2.3)',\
org.eclipse.osgitech.rest.servlet.whiteboard;version='[1.2.2,1.2.3)',\
org.eclipse.osgitech.rest.sse;version='[1.2.2,1.2.3)',\
@@ -60,7 +57,6 @@
org.glassfish.jersey.media.jersey-media-sse;version='[3.1.3,3.1.4)',\
org.mongodb.mongo-java-driver;version='[3.12.14,3.12.15)',\
org.objectweb.asm;version='[9.6.0,9.6.1)',\
- org.osgi.service.cm;version='[1.6.1,1.6.2)',\
org.osgi.service.component;version='[1.5.1,1.5.2)',\
org.osgi.service.jakartars;version='[2.0.0,2.0.1)',\
org.osgi.service.log;version='[1.5.0,1.5.1)',\
@@ -81,5 +77,14 @@
org.gecko.emf.rest.jakartars;version='[2.3.0,2.3.1)',\
org.yaml.snakeyaml;version='[1.33.0,1.33.1)',\
org.apache.felix.http.jetty12;version='[1.0.4,1.0.5)',\
- org.apache.felix.http.servlet-api;version='[3.0.0,3.0.1)'
+ org.apache.felix.http.servlet-api;version='[3.0.0,3.0.1)',\
+ org.avatar.gics.service;version=snapshot,\
+ org.eclipse.emf.common;version='[2.29.0,2.29.1)',\
+ org.eclipse.emf.ecore;version='[2.35.0,2.35.1)',\
+ org.eclipse.emf.ecore.xmi;version='[2.36.0,2.36.1)',\
+ org.emau.icmvc.ganimed.ttp.cm2;version='[1.0.0,1.0.1)',\
+ org.gecko.emf.mongo.api;version='[6.1.0,6.1.1)',\
+ org.osgi.service.metatype;version='[1.4.1,1.4.2)',\
+ org.xmlsoap.model;version='[1.0.0,1.0.1)',\
+ org.gecko.emf.util.model;version='[2.2.2,2.2.3)'
-runblacklist: bnd.identity;id='org.apache.felix.http.jetty'
\ No newline at end of file
diff --git a/org.avatar.himsa.service.example/bnd.bnd b/org.avatar.himsa.service.example/bnd.bnd
index f4d940e..ac0f261 100644
--- a/org.avatar.himsa.service.example/bnd.bnd
+++ b/org.avatar.himsa.service.example/bnd.bnd
@@ -3,4 +3,7 @@
-buildpath: \
org.gecko.emf.repository.mongo;version=latest,\
org.gecko.emf.repository.api;version=latest,\
- org.avatar.himsa.model;version=project
\ No newline at end of file
+ org.avatar.himsa.model;version=project,\
+ org.avatar.gics.service;version=latest,\
+ org.emau.icmvc.ganimed.ttp.cm2,\
+ osgi.cmpn
\ No newline at end of file
diff --git a/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/PatientServiceTest.java b/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/PatientServiceTest.java
index 70c7581..7733cff 100644
--- a/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/PatientServiceTest.java
+++ b/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/PatientServiceTest.java
@@ -13,14 +13,19 @@
*/
package org.avatar.himsa.service.example;
+import java.util.List;
import java.util.Objects;
+import org.avatar.gics.service.api.GICSService;
import org.avatar.himsa.export.Patient;
import org.avatar.himsa.export.PatientExportFactory;
import org.avatar.himsa.export.PatientExportPackage;
import org.avatar.himsa.service.example.api.PatientService;
+import org.emau.icmvc.ganimed.ttp.cm2.GetAllConsentedIdsForResponse;
import org.gecko.emf.repository.EMFRepository;
-import org.osgi.service.component.annotations.Activate;
+import org.gecko.emf.repository.query.IQuery;
+import org.gecko.emf.repository.query.QueryRepository;
+import org.osgi.service.component.ComponentServiceObjects;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ServiceScope;
@@ -37,20 +42,22 @@ public class PatientServiceTest implements PatientService {
private PatientExportFactory modelFactory;
@Reference
private PatientExportPackage modelPackage;
+ @Reference(target="(repo_id=test1.test)")
+ ComponentServiceObjects repoSO;
@Reference
- private EMFRepository repo;
+ GICSService gicsService;
- @Activate
- public void activate() {
- Patient patient = modelFactory.createPatient();
-// patient.setPatientGUID(UUID.randomUUID().toString());
- patient.setPatientGUID("etester");
- patient.setFirstName("Emil");
- patient.setLastName("Tester");
- System.out.println("Ready to do something with " + patient);
- // untested!!!!
- repo.save(patient);
- }
+// @Activate
+// public void activate() {
+// Patient patient = modelFactory.createPatient();
+//// patient.setPatientGUID(UUID.randomUUID().toString());
+// patient.setPatientGUID("etester");
+// patient.setFirstName("Emil");
+// patient.setLastName("Tester");
+// System.out.println("Ready to do something with " + patient);
+// // untested!!!!
+// repo.save(patient);
+// }
/*
* (non-Javadoc)
@@ -61,10 +68,28 @@ public Patient getPatient(String id) {
if (Objects.isNull(id)) {
return null;
}
- return repo.getEObject(modelPackage.getPatient(), id);
+ EMFRepository repo = repoSO.getService();
+ try {
+ return repo.getEObject(modelPackage.getPatient(), id);
+ } finally {
+ repoSO.ungetService(repo);
+ }
}
-
-
-
+ /*
+ * (non-Javadoc)
+ * @see org.avatar.himsa.service.example.api.PatientService#getPatientsWithConsent(java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public List getPatientsWithConsent(String domainId, String policyId, String policyVersion) {
+ GetAllConsentedIdsForResponse allConsentedIdsFor = gicsService.getAllConsentedIdsFor(domainId, policyId, policyVersion, "Patient ID");
+ List patientIdsWithConsent = allConsentedIdsFor.getReturn().getConsentIds();
+ QueryRepository repo = (QueryRepository) repoSO.getService();
+ try {
+ IQuery query = repo.createQueryBuilder().column(modelPackage.getPatient_PatientGUID()).in(patientIdsWithConsent.toArray()).build();
+ return repo.getEObjectsByQuery(modelPackage.getPatient(), query);
+ } finally {
+ repoSO.ungetService(repo);
+ }
+ }
}
diff --git a/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/api/PatientService.java b/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/api/PatientService.java
index 36a2fa5..f2c033a 100644
--- a/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/api/PatientService.java
+++ b/org.avatar.himsa.service.example/src/org/avatar/himsa/service/example/api/PatientService.java
@@ -13,6 +13,8 @@
*/
package org.avatar.himsa.service.example.api;
+import java.util.List;
+
import org.avatar.himsa.export.Patient;
/**
@@ -23,5 +25,7 @@
public interface PatientService {
Patient getPatient(String id);
+
+ List getPatientsWithConsent(String domainId, String policyId, String policyVersion);
}