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}