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; 009 010public class PEDefinitionSlice extends PEDefinition { 011 012 protected ElementDefinition sliceDefinition; 013 014 public PEDefinitionSlice(PEBuilder builder, String name, StructureDefinition profile, ElementDefinition profileDefinition, ElementDefinition sliceDefinition, String ppath) { 015 super(builder, name, profile, profileDefinition, ppath); 016 this.sliceDefinition = sliceDefinition; 017 } 018 019 @Override 020 public void listTypes(List<PEType> types) { 021 for (TypeRefComponent t : definition.getType()) { 022 if (t.hasProfile()) { 023 for (CanonicalType u : t.getProfile()) { 024 types.add(builder.makeType(t, u)); 025 } 026 } else if (!t.getCode().startsWith("http://hl7.org/fhirpath/")) { 027 types.add(new PEType(t.getWorkingCode(), t.getWorkingCode(), "http://hl7.org/fhir/StructureDefinition/"+t.getWorkingCode())); 028 } 029 } 030 } 031 032 @Override 033 protected void makeChildren(String typeUrl, List<PEDefinition> children, boolean allFixed) { 034 children.addAll(builder.listChildren(allFixed, this, profile, definition, typeUrl)); 035 } 036 037 @Override 038 public String fhirpath() { 039 String base = schemaName().replace("[x]", ""); 040 String filter = builder.makeSliceExpression(profile, sliceDefinition.getSlicing(), definition); 041 return base+".where("+filter+")"; 042 } 043 044}