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}