001package org.hl7.fhir.dstu3.utils; 002 003/* 004Copyright (c) 2011+, HL7, Inc 005All rights reserved. 006 007Redistribution and use in source and binary forms, with or without modification, 008are permitted provided that the following conditions are met: 009 010 * Redistributions of source code must retain the above copyright notice, this 011 list of conditions and the following disclaimer. 012 * Redistributions in binary form must reproduce the above copyright notice, 013 this list of conditions and the following disclaimer in the documentation 014 and/or other materials provided with the distribution. 015 * Neither the name of HL7 nor the names of its contributors may be used to 016 endorse or promote products derived from this software without specific 017 prior written permission. 018 019THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 022IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 023INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 024NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 025PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 026WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 027ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 028POSSIBILITY OF SUCH DAMAGE. 029 030 */ 031 032import java.util.ArrayList; 033import java.util.Iterator; 034import java.util.List; 035 036import org.apache.commons.lang3.StringUtils; 037import org.hl7.fhir.dstu3.model.BooleanType; 038import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent; 039import org.hl7.fhir.dstu3.model.CodeType; 040import org.hl7.fhir.dstu3.model.CodeableConcept; 041import org.hl7.fhir.dstu3.model.Coding; 042import org.hl7.fhir.dstu3.model.DataElement; 043import org.hl7.fhir.dstu3.model.DomainResource; 044import org.hl7.fhir.dstu3.model.Element; 045import org.hl7.fhir.dstu3.model.ElementDefinition; 046import org.hl7.fhir.dstu3.model.Extension; 047import org.hl7.fhir.dstu3.model.ExtensionHelper; 048import org.hl7.fhir.dstu3.model.Factory; 049import org.hl7.fhir.dstu3.model.Identifier; 050import org.hl7.fhir.dstu3.model.IntegerType; 051import org.hl7.fhir.dstu3.model.MarkdownType; 052import org.hl7.fhir.dstu3.model.PrimitiveType; 053import org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemComponent; 054import org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemType; 055import org.hl7.fhir.dstu3.model.StringType; 056import org.hl7.fhir.dstu3.model.StructureDefinition; 057import org.hl7.fhir.dstu3.model.Type; 058import org.hl7.fhir.dstu3.model.UriType; 059import org.hl7.fhir.dstu3.model.ValueSet.ConceptReferenceComponent; 060import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent; 061import org.hl7.fhir.utilities.validation.ValidationMessage.Source; 062 063 064public class ToolingExtensions { 065 066 // validated 067 public static final String EXT_SUBSUMES = "http://hl7.org/fhir/StructureDefinition/codesystem-subsumes"; 068// private static final String EXT_OID = "http://hl7.org/fhir/StructureDefinition/valueset-oid"; 069// public static final String EXT_DEPRECATED = "http://hl7.org/fhir/StructureDefinition/codesystem-deprecated"; 070 public static final String EXT_DEFINITION = "http://hl7.org/fhir/StructureDefinition/valueset-definition"; 071 public static final String EXT_CS_COMMENT = "http://hl7.org/fhir/StructureDefinition/codesystem-comments"; 072 public static final String EXT_VS_COMMENT = "http://hl7.org/fhir/StructureDefinition/valueset-comments"; 073 private static final String EXT_IDENTIFIER = "http://hl7.org/fhir/StructureDefinition/identifier"; 074 public static final String EXT_TRANSLATION = "http://hl7.org/fhir/StructureDefinition/translation"; 075 public static final String EXT_ISSUE_SOURCE = "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source"; 076 public static final String EXT_DISPLAY_HINT = "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint"; 077 public static final String EXT_REPLACED_BY = "http://hl7.org/fhir/StructureDefinition/valueset-replacedby"; 078 public static final String EXT_JSON_TYPE = "http://hl7.org/fhir/StructureDefinition/structuredefinition-json-type"; 079 public static final String EXT_RDF_TYPE = "http://hl7.org/fhir/StructureDefinition/structuredefinition-rdf-type"; 080 public static final String EXT_XML_TYPE = "http://hl7.org/fhir/StructureDefinition/structuredefinition-xml-type"; 081 public static final String EXT_REGEX = "http://hl7.org/fhir/StructureDefinition/structuredefinition-regex"; 082 public static final String EXT_CONTROL = "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"; 083 public static final String EXT_MINOCCURS = "http://hl7.org/fhir/StructureDefinition/questionnaire-minOccurs"; 084 public static final String EXT_MAXOCCURS = "http://hl7.org/fhir/StructureDefinition/questionnaire-maxOccurs"; 085 public static final String EXT_ALLOWEDRESOURCE = "http://hl7.org/fhir/StructureDefinition/questionnaire-allowedResource"; 086 public static final String EXT_REFERENCEFILTER = "http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter"; 087 public static final String EXT_CODE_GENERATION_PARENT = "http://hl7.org/fhir/StructureDefinition/structuredefinition-codegen-super"; 088 089 // unregistered? 090 public static final String EXT_MAPPING_PREFIX = "http://hl7.org/fhir/tools/StructureDefinition/logical-mapping-prefix"; 091 public static final String EXT_MAPPING_SUFFIX = "http://hl7.org/fhir/tools/StructureDefinition/logical-mapping-suffix"; 092 093// public static final String EXT_FLYOVER = "http://hl7.org/fhir/Profile/questionnaire-extensions#flyover"; 094 public static final String EXT_QTYPE = "http://hl7.org/fhir/StructureDefinition/questionnnaire-baseType"; 095// private static final String EXT_QREF = "http://www.healthintersections.com.au/fhir/Profile/metadata#reference"; 096// private static final String EXTENSION_FILTER_ONLY = "http://www.healthintersections.com.au/fhir/Profile/metadata#expandNeedsFilter"; 097// private static final String EXT_TYPE = "http://www.healthintersections.com.au/fhir/Profile/metadata#type"; 098// private static final String EXT_REFERENCE = "http://www.healthintersections.com.au/fhir/Profile/metadata#reference"; 099 private static final String EXT_FHIRTYPE = "http://hl7.org/fhir/StructureDefinition/questionnaire-fhirType"; 100 private static final String EXT_ALLOWABLE_UNITS = "http://hl7.org/fhir/StructureDefinition/elementdefinition-allowedUnits"; 101 public static final String EXT_CIMI_REFERENCE = "http://hl7.org/fhir/StructureDefinition/cimi-reference"; 102 public static final String EXT_UNCLOSED = "http://hl7.org/fhir/StructureDefinition/valueset-unclosed"; 103 public static final String EXT_FMM_LEVEL = "http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm"; 104 public static final String EXT_RESOURCE_CATEGORY = "http://hl7.org/fhir/StructureDefinition/structuredefinition-category"; 105 public static final String EXT_TABLE_NAME = "http://hl7.org/fhir/StructureDefinition/structuredefinition-table-name"; 106 public static final String EXT_OO_FILE = "http://hl7.org/fhir/StructureDefinition/operationoutcome-file"; 107 public static final String EXT_WORKGROUP = "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg"; 108 public static final String EXT_BALLOT_STATUS = "http://hl7.org/fhir/StructureDefinition/structuredefinition-ballot-status"; 109 110 111 // specific extension helpers 112 113 public static Extension makeIssueSource(Source source) { 114 Extension ex = new Extension(); 115 // todo: write this up and get it published with the pack (and handle the redirect?) 116 ex.setUrl(ToolingExtensions.EXT_ISSUE_SOURCE); 117 CodeType c = new CodeType(); 118 c.setValue(source.toString()); 119 ex.setValue(c); 120 return ex; 121 } 122 123 public static boolean hasExtension(DomainResource de, String url) { 124 return getExtension(de, url) != null; 125 } 126 127 public static boolean hasExtension(Element e, String url) { 128 return getExtension(e, url) != null; 129 } 130 131// public static void addStringExtension(DomainResource dr, String url, String content) { 132// if (!StringUtils.isBlank(content)) { 133// Extension ex = getExtension(dr, url); 134// if (ex != null) 135// ex.setValue(new StringType(content)); 136// else 137// dr.getExtension().add(Factory.newExtension(url, new StringType(content), true)); 138// } 139// } 140 141 public static void addMarkdownExtension(DomainResource dr, String url, String content) { 142 if (!StringUtils.isBlank(content)) { 143 Extension ex = getExtension(dr, url); 144 if (ex != null) 145 ex.setValue(new StringType(content)); 146 else 147 dr.getExtension().add(Factory.newExtension(url, new MarkdownType(content), true)); 148 } 149 } 150 151 public static void addStringExtension(Element e, String url, String content) { 152 if (!StringUtils.isBlank(content)) { 153 Extension ex = getExtension(e, url); 154 if (ex != null) 155 ex.setValue(new StringType(content)); 156 else 157 e.getExtension().add(Factory.newExtension(url, new StringType(content), true)); 158 } 159 } 160 161 public static void addStringExtension(DomainResource e, String url, String content) { 162 if (!StringUtils.isBlank(content)) { 163 Extension ex = getExtension(e, url); 164 if (ex != null) 165 ex.setValue(new StringType(content)); 166 else 167 e.getExtension().add(Factory.newExtension(url, new StringType(content), true)); 168 } 169 } 170 171 public static void addIntegerExtension(DomainResource dr, String url, int value) { 172 Extension ex = getExtension(dr, url); 173 if (ex != null) 174 ex.setValue(new IntegerType(value)); 175 else 176 dr.getExtension().add(Factory.newExtension(url, new IntegerType(value), true)); 177 } 178 179 public static void addVSComment(ConceptSetComponent nc, String comment) { 180 if (!StringUtils.isBlank(comment)) 181 nc.getExtension().add(Factory.newExtension(EXT_VS_COMMENT, Factory.newString_(comment), true)); 182 } 183 public static void addVSComment(ConceptReferenceComponent nc, String comment) { 184 if (!StringUtils.isBlank(comment)) 185 nc.getExtension().add(Factory.newExtension(EXT_VS_COMMENT, Factory.newString_(comment), true)); 186 } 187 188 public static void addCSComment(ConceptDefinitionComponent nc, String comment) { 189 if (!StringUtils.isBlank(comment)) 190 nc.getExtension().add(Factory.newExtension(EXT_CS_COMMENT, Factory.newString_(comment), true)); 191 } 192 193// public static void markDeprecated(Element nc) { 194// setDeprecated(nc); 195// } 196// 197 public static void addSubsumes(ConceptDefinitionComponent nc, String code) { 198 nc.getModifierExtension().add(Factory.newExtension(EXT_SUBSUMES, Factory.newCode(code), true)); 199 } 200 201 public static void addDefinition(Element nc, String definition) { 202 if (!StringUtils.isBlank(definition)) 203 nc.getExtension().add(Factory.newExtension(EXT_DEFINITION, Factory.newString_(definition), true)); 204 } 205 206 public static void addDisplayHint(Element def, String hint) { 207 if (!StringUtils.isBlank(hint)) 208 def.getExtension().add(Factory.newExtension(EXT_DISPLAY_HINT, Factory.newString_(hint), true)); 209 } 210 211 public static String getDisplayHint(Element def) { 212 return readStringExtension(def, EXT_DISPLAY_HINT); 213 } 214 215 public static String readStringExtension(Element c, String uri) { 216 Extension ex = ExtensionHelper.getExtension(c, uri); 217 if (ex == null) 218 return null; 219 if (ex.getValue() instanceof UriType) 220 return ((UriType) ex.getValue()).getValue(); 221 if (ex.getValue() instanceof CodeType) 222 return ((CodeType) ex.getValue()).getValue(); 223 if (ex.getValue() instanceof IntegerType) 224 return ((IntegerType) ex.getValue()).asStringValue(); 225 if ((ex.getValue() instanceof MarkdownType)) 226 return ((MarkdownType) ex.getValue()).getValue(); 227 if (!(ex.getValue() instanceof StringType)) 228 return null; 229 return ((StringType) ex.getValue()).getValue(); 230 } 231 232 public static String readStringExtension(DomainResource c, String uri) { 233 Extension ex = getExtension(c, uri); 234 if (ex == null) 235 return null; 236 if ((ex.getValue() instanceof StringType)) 237 return ((StringType) ex.getValue()).getValue(); 238 if ((ex.getValue() instanceof UriType)) 239 return ((UriType) ex.getValue()).getValue(); 240 if (ex.getValue() instanceof CodeType) 241 return ((CodeType) ex.getValue()).getValue(); 242 if (ex.getValue() instanceof IntegerType) 243 return ((IntegerType) ex.getValue()).asStringValue(); 244 if ((ex.getValue() instanceof MarkdownType)) 245 return ((MarkdownType) ex.getValue()).getValue(); 246 return null; 247 } 248 249 @SuppressWarnings("unchecked") 250 public static PrimitiveType<Type> readPrimitiveExtension(DomainResource c, String uri) { 251 Extension ex = getExtension(c, uri); 252 if (ex == null) 253 return null; 254 return (PrimitiveType<Type>) ex.getValue(); 255 } 256 257 public static boolean findStringExtension(Element c, String uri) { 258 Extension ex = ExtensionHelper.getExtension(c, uri); 259 if (ex == null) 260 return false; 261 if (!(ex.getValue() instanceof StringType)) 262 return false; 263 return !StringUtils.isBlank(((StringType) ex.getValue()).getValue()); 264 } 265 266 public static Boolean readBooleanExtension(Element c, String uri) { 267 Extension ex = ExtensionHelper.getExtension(c, uri); 268 if (ex == null) 269 return null; 270 if (!(ex.getValue() instanceof BooleanType)) 271 return null; 272 return ((BooleanType) ex.getValue()).getValue(); 273 } 274 275 public static boolean findBooleanExtension(Element c, String uri) { 276 Extension ex = ExtensionHelper.getExtension(c, uri); 277 if (ex == null) 278 return false; 279 if (!(ex.getValue() instanceof BooleanType)) 280 return false; 281 return true; 282 } 283 284 public static String getCSComment(ConceptDefinitionComponent c) { 285 return readStringExtension(c, EXT_CS_COMMENT); 286 } 287// 288// public static Boolean getDeprecated(Element c) { 289// return readBooleanExtension(c, EXT_DEPRECATED); 290// } 291 292 public static boolean hasCSComment(ConceptDefinitionComponent c) { 293 return findStringExtension(c, EXT_CS_COMMENT); 294 } 295 296// public static boolean hasDeprecated(Element c) { 297// return findBooleanExtension(c, EXT_DEPRECATED); 298// } 299 300 public static List<CodeType> getSubsumes(ConceptDefinitionComponent c) { 301 List<CodeType> res = new ArrayList<CodeType>(); 302 303 for (Extension e : c.getExtension()) { 304 if (EXT_SUBSUMES.equals(e.getUrl())) 305 res.add((CodeType) e.getValue()); 306 } 307 return res; 308 } 309 310 public static void addFlyOver(QuestionnaireItemComponent item, String text){ 311 if (!StringUtils.isBlank(text)) { 312 QuestionnaireItemComponent display = item.addItem(); 313 display.setType(QuestionnaireItemType.DISPLAY); 314 display.setText(text); 315 display.getExtension().add(Factory.newExtension(EXT_CONTROL, Factory.newCodeableConcept("flyover", "http://hl7.org/fhir/questionnaire-item-control", "Fly-over"), true)); 316 } 317 } 318 319 public static void addMin(QuestionnaireItemComponent item, int min) { 320 item.getExtension().add(Factory.newExtension(EXT_MINOCCURS, Factory.newInteger(min), true)); 321 } 322 323 public static void addMax(QuestionnaireItemComponent item, int max) { 324 item.getExtension().add(Factory.newExtension(EXT_MAXOCCURS, Factory.newInteger(max), true)); 325 } 326 327 public static void addFhirType(QuestionnaireItemComponent group, String value) { 328 group.getExtension().add(Factory.newExtension(EXT_FHIRTYPE, Factory.newString_(value), true)); 329 } 330 331 public static void addControl(QuestionnaireItemComponent group, String value) { 332 group.getExtension().add(Factory.newExtension(EXT_CONTROL, Factory.newCodeableConcept(value, "http://hl7.org/fhir/questionnaire-item-control", value), true)); 333 } 334 335 public static void addAllowedResource(QuestionnaireItemComponent group, String value) { 336 group.getExtension().add(Factory.newExtension(EXT_ALLOWEDRESOURCE, Factory.newCode(value), true)); 337 } 338 339 public static void addReferenceFilter(QuestionnaireItemComponent group, String value) { 340 group.getExtension().add(Factory.newExtension(EXT_REFERENCEFILTER, Factory.newString_(value), true)); 341 } 342 343 public static void addIdentifier(Element element, Identifier value) { 344 element.getExtension().add(Factory.newExtension(EXT_IDENTIFIER, value, true)); 345 } 346 347 /** 348 * @param name the identity of the extension of interest 349 * @return The extension, if on this element, else null 350 */ 351 public static Extension getExtension(DomainResource resource, String name) { 352 if (name == null) 353 return null; 354 if (!resource.hasExtension()) 355 return null; 356 for (Extension e : resource.getExtension()) { 357 if (name.equals(e.getUrl())) 358 return e; 359 } 360 return null; 361 } 362 363 public static Extension getExtension(Element el, String name) { 364 if (name == null) 365 return null; 366 if (!el.hasExtension()) 367 return null; 368 for (Extension e : el.getExtension()) { 369 if (name.equals(e.getUrl())) 370 return e; 371 } 372 return null; 373 } 374 375 public static void setStringExtension(DomainResource resource, String uri, String value) { 376 Extension ext = getExtension(resource, uri); 377 if (ext != null) 378 ext.setValue(new StringType(value)); 379 else 380 resource.getExtension().add(new Extension(new UriType(uri)).setValue(new StringType(value))); 381 } 382 383 public static void setStringExtension(Element element, String uri, String value) { 384 Extension ext = getExtension(element, uri); 385 if (ext != null) 386 ext.setValue(new StringType(value)); 387 else 388 element.getExtension().add(new Extension(new UriType(uri)).setValue(new StringType(value))); 389 } 390 391 public static void setCodeExtension(DomainResource resource, String uri, String value) { 392 Extension ext = getExtension(resource, uri); 393 if (ext != null) 394 ext.setValue(new CodeType(value)); 395 else 396 resource.getExtension().add(new Extension(new UriType(uri)).setValue(new CodeType(value))); 397 } 398 399 public static void setIntegerExtension(DomainResource resource, String uri, int value) { 400 Extension ext = getExtension(resource, uri); 401 if (ext != null) 402 ext.setValue(new IntegerType(value)); 403 else 404 resource.getExtension().add(new Extension(new UriType(uri)).setValue(new IntegerType(value))); 405 } 406 407// public static String getOID(CodeSystem define) { 408// return readStringExtension(define, EXT_OID); 409// } 410// 411// public static String getOID(ValueSet vs) { 412// return readStringExtension(vs, EXT_OID); 413// } 414// 415// public static void setOID(CodeSystem define, String oid) throws FHIRFormatError, URISyntaxException { 416// if (!oid.startsWith("urn:oid:")) 417// throw new FHIRFormatError("Error in OID format"); 418// if (oid.startsWith("urn:oid:urn:oid:")) 419// throw new FHIRFormatError("Error in OID format"); 420// if (!hasExtension(define, EXT_OID)) 421// define.getExtension().add(Factory.newExtension(EXT_OID, Factory.newUri(oid), false)); 422// else if (!oid.equals(readStringExtension(define, EXT_OID))) 423// throw new Error("Attempt to assign multiple OIDs to a code system"); 424// } 425// public static void setOID(ValueSet vs, String oid) throws FHIRFormatError, URISyntaxException { 426// if (!oid.startsWith("urn:oid:")) 427// throw new FHIRFormatError("Error in OID format"); 428// if (oid.startsWith("urn:oid:urn:oid:")) 429// throw new FHIRFormatError("Error in OID format"); 430// if (!hasExtension(vs, EXT_OID)) 431// vs.getExtension().add(Factory.newExtension(EXT_OID, Factory.newUri(oid), false)); 432// else if (!oid.equals(readStringExtension(vs, EXT_OID))) 433// throw new Error("Attempt to assign multiple OIDs to value set "+vs.getName()+" ("+vs.getUrl()+"). Has "+readStringExtension(vs, EXT_OID)+", trying to add "+oid); 434// } 435 436 public static boolean hasLanguageTranslation(Element element, String lang) { 437 for (Extension e : element.getExtension()) { 438 if (e.getUrl().equals(EXT_TRANSLATION)) { 439 Extension e1 = ExtensionHelper.getExtension(e, "lang"); 440 441 if (e1 != null && e1.getValue() instanceof CodeType && ((CodeType) e.getValue()).getValue().equals(lang)) 442 return true; 443 } 444 } 445 return false; 446 } 447 448 public static String getLanguageTranslation(Element element, String lang) { 449 for (Extension e : element.getExtension()) { 450 if (e.getUrl().equals(EXT_TRANSLATION)) { 451 Extension e1 = ExtensionHelper.getExtension(e, "lang"); 452 453 if (e1 != null && e1.getValue() instanceof CodeType && ((CodeType) e.getValue()).getValue().equals(lang)) { 454 e1 = ExtensionHelper.getExtension(e, "content"); 455 return ((StringType) e.getValue()).getValue(); 456 } 457 } 458 } 459 return null; 460 } 461 462 public static void addLanguageTranslation(Element element, String lang, String value) { 463 Extension extension = new Extension().setUrl(EXT_TRANSLATION); 464 extension.addExtension().setUrl("lang").setValue(new StringType(lang)); 465 extension.addExtension().setUrl("content").setValue(new StringType(value)); 466 element.getExtension().add(extension); 467 } 468 469 public static Type getAllowedUnits(ElementDefinition eld) { 470 for (Extension e : eld.getExtension()) 471 if (e.getUrl().equals(EXT_ALLOWABLE_UNITS)) 472 return e.getValue(); 473 return null; 474 } 475 476 public static void setAllowableUnits(ElementDefinition eld, CodeableConcept cc) { 477 for (Extension e : eld.getExtension()) 478 if (e.getUrl().equals(EXT_ALLOWABLE_UNITS)) { 479 e.setValue(cc); 480 return; 481 } 482 eld.getExtension().add(new Extension().setUrl(EXT_ALLOWABLE_UNITS).setValue(cc)); 483 } 484 485 public static List<Extension> getExtensions(Element element, String url) { 486 List<Extension> results = new ArrayList<Extension>(); 487 for (Extension ex : element.getExtension()) 488 if (ex.getUrl().equals(url)) 489 results.add(ex); 490 return results; 491 } 492 493 public static List<Extension> getExtensions(DomainResource resource, String url) { 494 List<Extension> results = new ArrayList<Extension>(); 495 for (Extension ex : resource.getExtension()) 496 if (ex.getUrl().equals(url)) 497 results.add(ex); 498 return results; 499 } 500 501 public static void addDEReference(DataElement de, String value) { 502 for (Extension e : de.getExtension()) 503 if (e.getUrl().equals(EXT_CIMI_REFERENCE)) { 504 e.setValue(new UriType(value)); 505 return; 506 } 507 de.getExtension().add(new Extension().setUrl(EXT_CIMI_REFERENCE).setValue(new UriType(value))); 508 } 509 510// public static void setDeprecated(Element nc) { 511// for (Extension e : nc.getExtension()) 512// if (e.getUrl().equals(EXT_DEPRECATED)) { 513// e.setValue(new BooleanType(true)); 514// return; 515// } 516// nc.getExtension().add(new Extension().setUrl(EXT_DEPRECATED).setValue(new BooleanType(true))); 517// } 518 519 public static void setExtension(Element focus, String url, Coding c) { 520 for (Extension e : focus.getExtension()) 521 if (e.getUrl().equals(url)) { 522 e.setValue(c); 523 return; 524 } 525 focus.getExtension().add(new Extension().setUrl(url).setValue(c)); 526 } 527 528 public static void removeExtension(DomainResource focus, String url) { 529 Iterator<Extension> i = focus.getExtension().iterator(); 530 while (i.hasNext()) { 531 Extension e = i.next(); // must be called before you can call i.remove() 532 if (e.getUrl().equals(url)) { 533 i.remove(); 534 } 535 } 536 } 537 538 public static void removeExtension(Element focus, String url) { 539 Iterator<Extension> i = focus.getExtension().iterator(); 540 while (i.hasNext()) { 541 Extension e = i.next(); // must be called before you can call i.remove() 542 if (e.getUrl().equals(url)) { 543 i.remove(); 544 } 545 } 546 } 547 548 549// public static boolean hasOID(ValueSet vs) { 550// return hasExtension(vs, EXT_OID); 551// } 552// 553// public static boolean hasOID(CodeSystem cs) { 554// return hasExtension(cs, EXT_OID); 555// } 556// 557 558}