private void checkExtensions(StructureDefinition profile, List<ValidationMessage> errors, String kind, ElementDefinition ec) { if (!ec.getType().isEmpty() && "Extension".equals(ec.getType().get(0).getCode()) && ec.getType().get(0).hasProfile()) { String url = ec.getType().get(0).getProfile(); StructureDefinition defn = context.fetchResource(StructureDefinition.class, url); rule(errors, IssueType.BUSINESSRULE, profile.getId(), defn != null, "Unable to find Extension '"+url+"' referenced at "+profile.getUrl()+" "+kind+" "+ec.getPath()+" ("+ec.getSliceName()+")"); } }
private Set<String> listExtensionTypes(StructureDefinition ex) { ElementDefinition vd = null; for (ElementDefinition ed : ex.getSnapshot().getElement()) { if (ed.getPath().startsWith("Extension.value")) { vd = ed; break; } } Set<String> res = new HashSet<String>(); if (vd != null && !"0".equals(vd.getMax())) { for (TypeRefComponent tr : vd.getType()) { res.add(tr.getCode()); } } return res; }
if (ed.getType().size() == 0) throw new DefinitionException("Error in profile for " + path + " no children, no type"); if (ed.getType().size() > 1) throw new DefinitionException("Error in profile for " + path + " multiple types defined in slice discriminator"); if (ed.hasSlicing()) { List<ElementDefinition> childNodes = ProfileUtilities.getChildList(profile, t); if (childNodes.isEmpty()) { if (t.getType().size()==1 && t.getType().get(0).hasProfile() && t.getType().get(0).getProfile().equals(qualifier)) { found = true; break; if (ed.getType().get(0).hasProfile() && ed.getType().get(0).getCode().equals("Reference") && node.equals("reference")) { long t1 = System.nanoTime(); sd = context.fetchResource(StructureDefinition.class, ed.getType().get(0).getTargetProfile()); sdTime = sdTime + (System.nanoTime() - t1); } else if (ed.getType().get(0).hasProfile()) { long t2 = System.nanoTime(); sd = context.fetchResource(StructureDefinition.class, ed.getType().get(0).getProfile()); sdTime = sdTime + (System.nanoTime() - t2); } else { long t2 = System.nanoTime(); sd = context.fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + ed.getType().get(0).getCode()); sdTime = sdTime + (System.nanoTime() - t2); List<ElementDefinition> childNodes = ProfileUtilities.getChildList(profile, t); if (childNodes.isEmpty()) { if (t.getType().size()==1 && t.getType().get(0).hasProfile() && t.getType().get(0).getProfile().equals(qualifier)) {
type = tail(criteriaElement.getPath()).substring(lastNode.length()); type = type.substring(0,1).toLowerCase() + type.substring(1); } else if (!criteriaElement.hasType() || criteriaElement.getType().size()==1) { if (discriminator.contains("[")) discriminator = discriminator.substring(0, discriminator.indexOf('[')); type = criteriaElement.getType().get(0).getCode();
String type = null; ElementDefinition typeDefn = null; if (ei.definition.getType().size() == 1 && !ei.definition.getType().get(0).getCode().equals("*") && !ei.definition.getType().get(0).getCode().equals("Element") && !ei.definition.getType().get(0).getCode().equals("BackboneElement")) { type = ei.definition.getType().get(0).getCode(); if (ei.definition.getType().get(0).hasProfile() && !type.equals("Reference")) profiles.add(ei.definition.getType().get(0).getProfile()); } else if (ei.definition.getType().size() == 1 && ei.definition.getType().get(0).getCode().equals("*")) { String prefix = tail(ei.definition.getPath()); assert prefix.endsWith("[x]"); if (ei.definition.getType().get(0).hasProfile() && !type.equals("Reference")) profiles.add(ei.definition.getType().get(0).getProfile()); } else if (ei.definition.getType().size() > 1) { assert typesAreAllReference(ei.definition.getType()) || prefix.endsWith("[x]") : prefix; for (TypeRefComponent t : ei.definition.getType()) if ((prefix + Utilities.capitalize(t.getCode())).equals(ei.name)) { type = t.getCode(); TypeRefComponent trc = ei.definition.getType().get(0); if (trc.getCode().equals("Reference")) type = "Reference"; else rule(errors, IssueType.STRUCTURE, ei.line(), ei.col(), stack.getLiteralPath(), false, "The element " + ei.name + " is illegal. Valid types at this point are " + describeTypes(ei.definition.getType()));
public String getType() { if (definition.getType().size() == 0) return null; else if (definition.getType().size() > 1) { String tn = definition.getType().get(0).getCode(); for (int i = 1; i < definition.getType().size(); i++) { if (!tn.equals(definition.getType().get(i).getCode())) throw new Error("logic error, gettype when types > 1"); } return tn; } else return definition.getType().get(0).getCode(); }
public boolean isResource() { if (definition.getType().size() > 0) return definition.getType().size() == 1 && ("Resource".equals(definition.getType().get(0).getCode()) || "DomainResource".equals(definition.getType().get(0).getCode())); else return !definition.getPath().contains(".") && structure.getKind() == StructureDefinitionKind.RESOURCE; }
boolean ok = false; CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); for (TypeRefComponent type : container.getType()) { if (!ok && type.getCode().equals("Reference")) {
private boolean isElementWithOnlyExtension(final ElementDefinition ed, final List<ElementDefinition> children) { boolean result = false; if (!ed.getType().isEmpty()) { result = true; for (final ElementDefinition ele : children) { if (!ele.getPath().contains("extension")) { result = false; break; } } } return result; }
tgt.setDifferential(convertStructureDefinitionDifferentialComponent(src.getDifferential())); if (tgt.hasSnapshot()) tgt.getSnapshot().getElementFirstRep().getType().clear(); if (tgt.hasDifferential()) tgt.getDifferential().getElementFirstRep().getType().clear(); if (tgt.getKind() == StructureDefinitionKind.PRIMITIVETYPE && !tgt.getType().equals(tgt.getId())) { tgt.setDerivation(TypeDerivationRule.SPECIALIZATION);
private void checkExtensions(StructureDefinition profile, List<ValidationMessage> errors, String kind, ElementDefinition ec) { if (!ec.getType().isEmpty() && "Extension".equals(ec.getType().get(0).getCode()) && ec.getType().get(0).hasProfile()) { String url = ec.getType().get(0).getProfile(); StructureDefinition defn = context.fetchResource(StructureDefinition.class, url); rule(errors, IssueType.BUSINESSRULE, profile.getId(), defn != null, "Unable to find Extension '"+url+"' referenced at "+profile.getUrl()+" "+kind+" "+ec.getPath()+" ("+ec.getSliceName()+")"); } }
private boolean hasBindableType(ElementDefinition ed) { for (TypeRefComponent tr : ed.getType()) { if (Utilities.existsInList(tr.getCode(), "Coding", "CodeableConcept", "Quantity", "url", "string", "code")) return true; } return false; }
private String pathTail(List<ElementDefinition> diffMatches, int i) { ElementDefinition d = diffMatches.get(i); String s = d.getPath().contains(".") ? d.getPath().substring(d.getPath().lastIndexOf(".")+1) : d.getPath(); return "."+s + (d.hasType() && d.getType().get(0).hasProfile() ? "["+d.getType().get(0).getProfile()+"]" : ""); }
private List<String> listReferenceProfiles(ElementDefinition ed) { List<String> res = new ArrayList<String>(); for (TypeRefComponent tr : ed.getType()) { // code is null if we're dealing with "value" and profile is null if we just have Reference() if (tr.getCode()!= null && "Reference".equals(tr.getCode()) && tr.getTargetProfile() != null) res.add(tr.getTargetProfile()); } return res ; }
private String checkType(String t, Property pvb, List<String> profiles) throws FHIRException { if (pvb.getDefinition().getType().size() == 1 && isCompatibleType(t, pvb.getDefinition().getType().get(0).getCode()) && profilesMatch(profiles, pvb.getDefinition().getType().get(0).getProfile())) return null; for (TypeRefComponent tr : pvb.getDefinition().getType()) { if (isCompatibleType(t, tr.getCode())) return tr.getCode(); // note what is returned - the base type, not the inferred mapping type } throw new FHIRException("The type "+t+" is not compatible with the allowed types for "+pvb.getDefinition().getPath()+" ("+pvb.getDefinition().typeSummary()+")"); }
if (src.hasContentReference()) tgt.setNameReference(src.getContentReference().substring(1)); for (org.hl7.fhir.dstu3.model.ElementDefinition.TypeRefComponent t : src.getType()) tgt.addType(convertElementDefinitionTypeComponent(t)); tgt.setDefaultValue(convertType(src.getDefaultValue()));
if (src.hasContentReference()) tgt.setContentReference(src.getContentReference()); for (org.hl7.fhir.dstu3.model.ElementDefinition.TypeRefComponent t : src.getType()) tgt.addType(convertTypeRefComponent(t)); tgt.setDefaultValue(convertType(src.getDefaultValue()));