001package org.hl7.fhir.r5.profilemodel; 002 003import java.util.List; 004 005import org.hl7.fhir.r5.model.CanonicalType; 006import org.hl7.fhir.r5.model.ElementDefinition; 007import org.hl7.fhir.r5.model.StructureDefinition; 008import org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent; 009import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; 010 011public class PEDefinitionTypeSlice extends PEDefinition { 012 013 protected ElementDefinition sliceDefinition; 014 015 public PEDefinitionTypeSlice(PEBuilder builder, String name, StructureDefinition profile, ElementDefinition definition, ElementDefinition sliceDefinition, String ppath) { 016 super(builder, name, profile, definition, ppath); 017 this.sliceDefinition = sliceDefinition; 018 } 019 020 @Override 021 public void listTypes(List<PEType> types) { 022 for (TypeRefComponent t : definition.getType()) { 023 if (t.hasProfile()) { 024 for (CanonicalType u : t.getProfile()) { 025 types.add(builder.makeType(t, u)); 026 } 027 } else if (!t.getCode().startsWith("http://hl7.org/fhirpath/")) { 028 types.add(new PEType(t.getWorkingCode(), t.getWorkingCode(), "http://hl7.org/fhir/StructureDefinition/"+t.getWorkingCode())); 029 } 030 } 031 } 032 033 @Override 034 protected void makeChildren(String typeUrl, List<PEDefinition> children, boolean allFixed) { 035 children.addAll(builder.listChildren(allFixed, this, profile, definition, typeUrl)); 036 } 037 038 @Override 039 public String fhirpath() { 040 String base = definition.getName().replace("[x]", ""); 041 CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(" | "); 042 for (TypeRefComponent t : definition.getType()) { 043 b.append(base+".ofType("+t.getWorkingCode()+")"); 044 } 045 return b.toString(); 046 } 047 048}