1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.commons.ihe.xds.core.transform.ebxml;
17
18 import static org.apache.commons.lang3.Validate.notNull;
19 import static org.openehealth.ipf.commons.ihe.xds.core.metadata.Vocabulary.*;
20 import static org.openehealth.ipf.commons.ihe.xds.core.metadata.Timestamp.toHL7;
21
22 import java.util.List;
23 import java.util.stream.Collectors;
24
25 import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLClassification;
26 import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLFactory;
27 import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLObjectLibrary;
28 import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLRegistryPackage;
29 import org.openehealth.ipf.commons.ihe.xds.core.metadata.Code;
30 import org.openehealth.ipf.commons.ihe.xds.core.metadata.Folder;
31
32
33
34
35
36 public class FolderTransformer extends XDSMetaClassTransformer<EbXMLRegistryPackage, Folder> {
37 private final EbXMLFactory factory;
38
39 private final CodeTransformer codeTransformer;
40
41
42
43
44
45
46 public FolderTransformer(EbXMLFactory factory) {
47 super(FOLDER_PATIENT_ID_EXTERNAL_ID,
48 FOLDER_LOCALIZED_STRING_PATIENT_ID,
49 FOLDER_UNIQUE_ID_EXTERNAL_ID,
50 FOLDER_LOCALIZED_STRING_UNIQUE_ID);
51
52 notNull(factory, "factory cannot be null");
53
54 this.factory = factory;
55 codeTransformer = new CodeTransformer(factory);
56 }
57
58 @Override
59 protected EbXMLRegistryPackage createEbXMLInstance(String id, EbXMLObjectLibrary objectLibrary) {
60 return factory.createRegistryPackage(id, objectLibrary);
61 }
62
63 @Override
64 protected Folder createMetaClassInstance() {
65 return new Folder();
66 }
67
68 @Override
69 protected void addAttributes(Folder metaData, EbXMLRegistryPackage ebXML, EbXMLObjectLibrary objectLibrary) {
70 super.addAttributes(metaData, ebXML, objectLibrary);
71 ebXML.setStatus(metaData.getAvailabilityStatus());
72 ebXML.setHome(metaData.getHomeCommunityId());
73 }
74
75 @Override
76 protected void addAttributesFromEbXML(Folder metaData, EbXMLRegistryPackage ebXML) {
77 super.addAttributesFromEbXML(metaData, ebXML);
78 metaData.setAvailabilityStatus(ebXML.getStatus());
79 metaData.setHomeCommunityId(ebXML.getHome());
80 }
81
82 @Override
83 protected void addSlotsFromEbXML(Folder folder, EbXMLRegistryPackage regPackage) {
84 super.addSlotsFromEbXML(folder, regPackage);
85
86 folder.setLastUpdateTime(regPackage.getSingleSlotValue(SLOT_NAME_LAST_UPDATE_TIME));
87 }
88
89 @Override
90 protected void addSlots(Folder folder, EbXMLRegistryPackage regPackage, EbXMLObjectLibrary objectLibrary) {
91 super.addSlots(folder, regPackage, objectLibrary);
92
93 regPackage.addSlot(SLOT_NAME_LAST_UPDATE_TIME, toHL7(folder.getLastUpdateTime()));
94 }
95
96 @Override
97 protected void addClassificationsFromEbXML(Folder folder, EbXMLRegistryPackage regPackage) {
98 super.addClassificationsFromEbXML(folder, regPackage);
99
100 List<Code> codes = folder.getCodeList();
101 codes.addAll(regPackage.getClassifications(FOLDER_CODE_LIST_CLASS_SCHEME).stream()
102 .map(codeTransformer::fromEbXML)
103 .collect(Collectors.toList()));
104
105 List<EbXMLClassification> limitedMetadata = regPackage.getClassifications(FOLDER_LIMITED_METADATA_CLASS_SCHEME);
106 folder.setLimitedMetadata(! limitedMetadata.isEmpty());
107 }
108
109 @Override
110 protected void addClassifications(Folder folder, EbXMLRegistryPackage regPackage, EbXMLObjectLibrary objectLibrary) {
111 super.addClassifications(folder, regPackage, objectLibrary);
112
113 for (Code codeListElem : folder.getCodeList()) {
114 EbXMLClassification code = codeTransformer.toEbXML(codeListElem, objectLibrary);
115 regPackage.addClassification(code, FOLDER_CODE_LIST_CLASS_SCHEME);
116 }
117
118 if (folder.isLimitedMetadata()) {
119 EbXMLClassification classification = factory.createClassification(objectLibrary);
120 regPackage.addClassification(classification, FOLDER_LIMITED_METADATA_CLASS_SCHEME);
121 }
122 }
123 }