View Javadoc
1   /*
2    * Copyright 2009-2011 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *     
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.openehealth.ipf.commons.ihe.xds.core.ebxml.ebxml30;
17  
18  import lombok.experimental.Delegate;
19  import org.openehealth.ipf.commons.ihe.xds.core.ebxml.*;
20  import org.openehealth.ipf.commons.ihe.xds.core.metadata.LocalizedString;
21  import org.openehealth.ipf.commons.ihe.xds.core.metadata.Version;
22  import org.openehealth.ipf.commons.ihe.xds.core.stub.ebrs30.rim.*;
23  
24  import java.util.List;
25  import java.util.UUID;
26  import java.util.stream.Collectors;
27  
28  import static org.apache.commons.lang3.Validate.notNull;
29  
30  /**
31   * Encapsulation of {@link RegistryObjectType}.
32   * @param <E>
33   *          the EBXML type of the registry object.
34   * @author Jens Riemschneider
35   */
36  public abstract class EbXMLRegistryObject30<E extends RegistryObjectType> implements EbXMLRegistryObject {
37      private final E registryEntry;
38      private final EbXMLObjectLibrary objectLibrary;
39      
40      /**
41       * Constructs a registry entry by wrapping the given ebXML 3.0 object. 
42       * @param registryEntry
43       *          the object to wrap.
44       * @param objectLibrary
45       *          the object library to use.
46       */
47      protected EbXMLRegistryObject30(E registryEntry, EbXMLObjectLibrary objectLibrary) {
48          notNull(registryEntry, "registryEntry cannot be null");
49          notNull(objectLibrary, "objectLibrary cannot be null");
50          this.registryEntry = registryEntry;
51          this.objectLibrary = objectLibrary;
52      }
53  
54      /**
55       * @return the object library.
56       */
57      protected EbXMLObjectLibrary getObjectLibrary() {
58          return objectLibrary;
59      }
60  
61      @Override
62      public void addClassification(EbXMLClassification classification, String scheme) {
63          notNull(scheme, "scheme cannot be null");
64       
65          if (classification != null) {
66              classification.setClassificationScheme(scheme);
67              classification.setClassifiedObject(registryEntry.getId());
68              classification.assignUniqueId();
69              List<ClassificationType> classifications = registryEntry.getClassification();
70              classifications.add(((EbXMLClassification30)classification).getInternal());
71          }
72      }
73  
74      @Override
75      public void addExternalIdentifier(String value, String scheme, String name) {
76          notNull(name, "name cannot be null");
77          notNull(scheme, "scheme cannot be null");
78  
79          if (value != null) {
80              ExternalIdentifierType identifier = EbXMLFactory30.RIM_FACTORY.createExternalIdentifierType();
81              EbXMLExternalIdentifier externalIdentifier = new EbXMLExternalIdentifier30(identifier);
82              
83              externalIdentifier.setValue(value);
84              externalIdentifier.setIdentificationScheme(scheme);
85              externalIdentifier.setRegistryObject(registryEntry.getId());
86              externalIdentifier.setId("urn:uuid:" + UUID.randomUUID().toString());
87                          
88              LocalizedString localized = new LocalizedString(name, null, null);
89              externalIdentifier.setName(new EbXMLInternationalString30(localized));
90              
91              List<ExternalIdentifierType> externalIdentifiers = registryEntry.getExternalIdentifier();
92              externalIdentifiers.add(identifier);
93          }
94      }
95  
96      @Override
97      public List<EbXMLClassification> getClassifications() {
98          List<ClassificationType> classifications = registryEntry.getClassification();
99          return classifications.stream()
100                 .map(EbXMLClassification30::new)
101                 .collect(Collectors.toList());
102     }
103 
104     @Override
105     public List<EbXMLClassification> getClassifications(String scheme) {
106         notNull(scheme, "scheme cannot be null");
107         
108         return registryEntry.getClassification().stream()
109                 .filter(classification -> scheme.equals(classification.getClassificationScheme()))
110                 .map(EbXMLClassification30::new)
111                 .collect(Collectors.toList());
112     }
113 
114     @Override
115     public LocalizedString getDescription() {
116         InternationalStringType description = registryEntry.getDescription();
117         EbXMLInternationalString encapsulated = new EbXMLInternationalString30(description);
118         return encapsulated.getSingleLocalizedString();
119     }
120 
121     @Override
122     public String getExternalIdentifierValue(String scheme) {        
123         for (ExternalIdentifierType identifier : registryEntry.getExternalIdentifier()) {
124             if (scheme.equals(identifier.getIdentificationScheme())) {
125                 return identifier.getValue();
126             }
127         }
128         
129         return null;
130     }
131 
132     @Override
133     public List<EbXMLExternalIdentifier> getExternalIdentifiers() {
134         List<ExternalIdentifierType> externalIdentifiers = registryEntry.getExternalIdentifier();
135         return externalIdentifiers.stream()
136                 .map(EbXMLExternalIdentifier30::new)
137                 .collect(Collectors.toList());
138     }
139 
140     @Override
141     public String getId() {
142         return registryEntry.getId();
143     }
144 
145     @Override
146     public void setId(String id) {
147         registryEntry.setId(id);
148     }
149 
150     @Override
151     public String getLid() {
152         return registryEntry.getLid();
153     }
154 
155     @Override
156     public void setLid(String lid) {
157         registryEntry.setLid(lid);
158     }
159 
160     @Override
161     public Version getVersionInfo() {
162         VersionInfoType versionInfo = registryEntry.getVersionInfo();
163         if (versionInfo == null) {
164             return null;
165         }
166 
167         return new Version(versionInfo.getVersionName(), versionInfo.getComment());
168     }
169 
170     @Override
171     public void setVersionInfo(Version version) {
172         VersionInfoType versionInfo = null;
173         if (version != null) {
174             versionInfo = EbXMLFactory30.RIM_FACTORY.createVersionInfoType();
175             versionInfo.setVersionName(version.getVersionName());
176             versionInfo.setComment(version.getComment());
177         }
178         registryEntry.setVersionInfo(versionInfo);
179     }
180 
181     @Override
182     public LocalizedString getName() {
183         InternationalStringType name = registryEntry.getName();
184         EbXMLInternationalString encapsulated = new EbXMLInternationalString30(name);
185         return encapsulated.getSingleLocalizedString();
186     }
187 
188     @Override
189     public String getObjectType() {
190         return registryEntry.getObjectType();
191     }
192 
193     @Override
194     public EbXMLClassification getSingleClassification(String scheme) {
195         List<EbXMLClassification> filtered = getClassifications(scheme);
196         if (filtered.size() == 0) {
197             return null;
198         }
199         
200         return filtered.get(0);
201     }
202 
203     @Override
204     public void setDescription(LocalizedString description) {        
205         EbXMLInternationalString30 encapsulated = new EbXMLInternationalString30(description);
206         registryEntry.setDescription(encapsulated.getInternal());
207     }
208 
209     @Override
210     public void setName(LocalizedString name) {
211         EbXMLInternationalString30 encapsulated = new EbXMLInternationalString30(name);
212         registryEntry.setName(encapsulated.getInternal());
213     }
214 
215     @Override
216     public void setObjectType(String objectType) {
217         registryEntry.setObjectType(objectType);
218     }
219 
220     @Override
221     public String getHome() {
222         return registryEntry.getHome();
223     }
224 
225     @Override
226     public void setHome(String home) {
227         registryEntry.setHome(home);
228     }
229 
230     @Override
231     public E getInternal() {
232         return registryEntry;
233     }
234 
235     /**
236      * Implements the {@link org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLSlotList} interface
237      * by delegating the calls to a "proper" slot list.
238      */
239     @Delegate
240     private EbXMLSlotList30 getSlotList() {
241         return new EbXMLSlotList30(registryEntry.getSlot());
242     }    
243 }