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}