001package org.hl7.fhir.utilities;
002
003import org.hl7.fhir.exceptions.FHIRException;
004
005public enum StandardsStatus {
006
007  EXTERNAL, INFORMATIVE, DRAFT, TRIAL_USE, NORMATIVE;
008
009  public String toDisplay() {
010    switch (this) {
011    case DRAFT : 
012      return "Draft";  
013    case NORMATIVE  : 
014      return "Normative";
015    case TRIAL_USE : 
016      return "Trial Use";  
017    case INFORMATIVE:
018      return "Informative";
019    case EXTERNAL:
020      return "External";
021    }
022    return "?";
023  }
024
025  public static StandardsStatus fromCode(String value) throws FHIRException {
026    if (Utilities.noString(value))
027      return null;
028    if (value.equalsIgnoreCase("draft"))
029      return DRAFT;
030    if (value.equalsIgnoreCase("NORMATIVE")) 
031      return NORMATIVE;
032    if (value.equalsIgnoreCase("TRIAL_USE")) 
033      return TRIAL_USE;  
034    if (value.equalsIgnoreCase("TRIAL-USE")) 
035      return TRIAL_USE;  
036    if (value.equalsIgnoreCase("TRIAL USE")) 
037      return TRIAL_USE;  
038    if (value.equalsIgnoreCase("INFORMATIVE"))
039      return INFORMATIVE;
040    if (value.equalsIgnoreCase("EXTERNAL"))
041      return EXTERNAL;
042    throw new FHIRException("Incorrect Standards Status '"+value+"'");
043  }
044
045  public String getAbbrev() {
046    switch (this) {
047    case DRAFT : 
048      return "D";  
049    case NORMATIVE  : 
050      return "N";
051    case TRIAL_USE : 
052      return "TU";  
053    case INFORMATIVE:
054      return "I";
055    case EXTERNAL:
056      return "X";
057    }
058    return "?";
059  }
060
061  public String getColor() {
062    switch (this) {
063    case DRAFT : 
064      return "#efefef";  
065    case NORMATIVE  : 
066      return "#e6ffe6";
067    case TRIAL_USE : 
068      return "#fff5e6";  
069    case INFORMATIVE:
070      return "#ffffe6";
071    case EXTERNAL:
072      return "#e6ffff";
073    }
074    return "?";
075  }
076
077  public String getColorSvg() {
078    switch (this) {
079    case DRAFT : 
080      return "#f6f6f6";  
081    case NORMATIVE  : 
082      return "#ecffec";
083    case TRIAL_USE : 
084      return "#fff9ec";  
085    case INFORMATIVE:
086      return "#ffffec";
087    case EXTERNAL:
088      return "#ecffff";
089    }
090    return "?";
091  }
092
093  public boolean canDependOn(StandardsStatus tgtSS) {
094    if (this == DRAFT || this == INFORMATIVE || this == EXTERNAL)
095      return true;
096    if (this == TRIAL_USE)
097      return (tgtSS != DRAFT);
098    if (this == NORMATIVE)
099      return (tgtSS == NORMATIVE || tgtSS == EXTERNAL );
100    return false;
101  }
102
103  public boolean isLowerThan(StandardsStatus status) {
104    return this.compareTo(status) <0;
105  }
106}