001package org.hl7.fhir.r4.utils;
002
003import java.util.ArrayList;
004import java.util.HashSet;
005import java.util.List;
006import java.util.Set;
007
008import org.hl7.fhir.r4.model.StructureDefinition;
009
010public class ValidationProfileSet {
011
012  public static class ProfileRegistration {
013    private String profile; 
014    private boolean error;  
015    
016    public ProfileRegistration(String profile, boolean error) {
017      super();
018      this.profile = profile;
019      this.error = error;
020    }
021    public String getProfile() {
022      return profile;
023    }
024    public boolean isError() {
025      return error;
026    }
027    
028    
029  }
030  private List<ProfileRegistration> canonical = new ArrayList<ProfileRegistration>();
031  private List<StructureDefinition> definitions = new ArrayList<StructureDefinition>();
032  
033  public ValidationProfileSet(String profile, boolean isError) {
034    super();
035    canonical.add(new ProfileRegistration(profile, isError));
036  }
037
038  public ValidationProfileSet() {
039    super();
040  }
041
042  public ValidationProfileSet(StructureDefinition profile) {
043    super();
044    definitions.add(profile);
045    canonical.add(new ProfileRegistration(profile.getUrl(), true));
046  }
047
048  public ValidationProfileSet(List<String> profiles, boolean isError) {
049    super();
050    if (profiles != null)
051      for (String p : profiles)
052        canonical.add(new ProfileRegistration(p, isError));
053  }
054
055  public List<String> getCanonicalUrls() {
056    List<String> res = new ArrayList<String>();
057    for (ProfileRegistration c : canonical) {
058      res.add(c.getProfile());
059    }
060    return res;
061  }
062
063  public List<StructureDefinition> getDefinitions() {
064    return definitions;
065  }
066
067  public boolean empty() {
068    return canonical.isEmpty() && definitions.isEmpty();
069  }
070
071  public List<String> getCanonicalAll() {
072    Set<String> res = new HashSet<String>();
073    res.addAll(getCanonicalUrls());
074    for (StructureDefinition sd : definitions)
075      res.add(sd.getUrl());
076    return new ArrayList<String>(res);
077  }
078
079  public List<ProfileRegistration> getCanonical() {
080    return canonical;
081  }
082
083  public StructureDefinition fetch(String effectiveProfile) {
084    for (StructureDefinition sd : definitions) 
085      if (effectiveProfile.equals(sd.getUrl()))
086        return sd;
087    return null;
088  }
089
090}