| 1 | |
|
| 2 | |
|
| 3 | |
|
| 4 | |
|
| 5 | |
|
| 6 | |
|
| 7 | |
|
| 8 | |
|
| 9 | |
|
| 10 | |
|
| 11 | |
|
| 12 | |
|
| 13 | |
|
| 14 | |
|
| 15 | |
|
| 16 | |
|
| 17 | |
|
| 18 | |
|
| 19 | |
|
| 20 | |
|
| 21 | |
|
| 22 | |
|
| 23 | |
|
| 24 | |
|
| 25 | |
|
| 26 | |
package ca.uhn.hl7v2; |
| 27 | |
|
| 28 | |
import java.io.InputStream; |
| 29 | |
import java.util.*; |
| 30 | |
|
| 31 | |
import ca.uhn.hl7v2.model.GenericMessage; |
| 32 | |
import ca.uhn.hl7v2.parser.ModelClassFactory; |
| 33 | |
import ca.uhn.hl7v2.parser.Parser; |
| 34 | |
|
| 35 | 118736 | public enum Version { |
| 36 | |
|
| 37 | 5 | V21("2.1"), |
| 38 | 5 | V22("2.2"), |
| 39 | 5 | V23("2.3"), |
| 40 | 5 | V231("2.3.1"), |
| 41 | 5 | V24("2.4"), |
| 42 | 5 | V25("2.5"), |
| 43 | 5 | V251("2.5.1"), |
| 44 | 5 | V26("2.6"), |
| 45 | 5 | V27("2.7"), |
| 46 | 5 | V271("2.7.1"), |
| 47 | 5 | V28("2.8"), |
| 48 | 5 | V281("2.8.1"); |
| 49 | |
|
| 50 | |
private String version; |
| 51 | |
private static ArrayList<Version> ourVersionsOnClasspath; |
| 52 | 5 | private static final Map<Version, Boolean> ourIsOnClasspath = new HashMap<Version, Boolean>(); |
| 53 | |
|
| 54 | 60 | Version(String version) { |
| 55 | 60 | this.version = version; |
| 56 | 60 | } |
| 57 | |
|
| 58 | |
|
| 59 | |
|
| 60 | |
|
| 61 | |
public String getVersion() { |
| 62 | 191413 | return version; |
| 63 | |
} |
| 64 | |
|
| 65 | |
public String getPackageVersion() { |
| 66 | 1045 | return "v" + version.replace(".", ""); |
| 67 | |
} |
| 68 | |
|
| 69 | |
|
| 70 | |
|
| 71 | |
|
| 72 | |
|
| 73 | |
public static boolean supportsVersion(String theVersion) { |
| 74 | 9778 | return versionOf(theVersion) != null; |
| 75 | |
} |
| 76 | |
|
| 77 | |
|
| 78 | |
|
| 79 | |
|
| 80 | |
public static Version versionOf(String version) { |
| 81 | 103660 | for (Version v : Version.values()) { |
| 82 | 103575 | if (v.getVersion().equals(version)) { |
| 83 | 19066 | return v; |
| 84 | |
} |
| 85 | |
} |
| 86 | 85 | return null; |
| 87 | |
} |
| 88 | |
|
| 89 | |
|
| 90 | |
|
| 91 | |
|
| 92 | |
|
| 93 | |
public static boolean allVersions(Set<Version> someVersions) { |
| 94 | 76520 | return someVersions != null && someVersions.size() == values().length; |
| 95 | |
} |
| 96 | |
|
| 97 | |
|
| 98 | |
|
| 99 | |
|
| 100 | |
public boolean isGreaterThan(Version theVersion) { |
| 101 | 4899 | return compareTo(theVersion) > 0; |
| 102 | |
} |
| 103 | |
|
| 104 | |
|
| 105 | |
|
| 106 | |
|
| 107 | |
|
| 108 | |
public static Version latestVersion() { |
| 109 | 10 | Version[] versions = Version.values(); |
| 110 | 10 | if (versions.length > 0) { |
| 111 | 10 | return versions[versions.length - 1]; |
| 112 | |
} else { |
| 113 | 0 | return null; |
| 114 | |
} |
| 115 | |
} |
| 116 | |
|
| 117 | |
public static Version[] asOf(Version v) { |
| 118 | 5430 | List<Version> versions = new ArrayList<Version>(); |
| 119 | 70590 | for (Version version : Version.values()) { |
| 120 | 65160 | if (version.compareTo(v) >= 0) |
| 121 | 38010 | versions.add(version); |
| 122 | |
} |
| 123 | 5430 | return versions.toArray(new Version[versions.size()]); |
| 124 | |
} |
| 125 | |
|
| 126 | |
public static Version[] except(Version... v) { |
| 127 | 40 | Set<Version> versions = new HashSet<Version>(Arrays.asList(Version.values())); |
| 128 | 140 | for (Version version : v) { |
| 129 | 100 | versions.remove(version); |
| 130 | |
} |
| 131 | 40 | return versions.toArray(new Version[versions.size()]); |
| 132 | |
} |
| 133 | |
|
| 134 | |
public static Version[] before(Version v) { |
| 135 | 5445 | List<Version> versions = new ArrayList<Version>(); |
| 136 | 70785 | for (Version version : Version.values()) { |
| 137 | 65340 | if (version.compareTo(v) < 0) |
| 138 | 27225 | versions.add(version); |
| 139 | |
} |
| 140 | 5445 | return versions.toArray(new Version[versions.size()]); |
| 141 | |
} |
| 142 | |
|
| 143 | |
public String modelPackageName() { |
| 144 | 925 | String classname = getClass().getName(); |
| 145 | 925 | String p = classname.substring(0, classname.lastIndexOf(".")); |
| 146 | 1850 | return String |
| 147 | 925 | .format("%s.model.%s.", p, getPackageVersion()); |
| 148 | |
} |
| 149 | |
|
| 150 | |
|
| 151 | |
|
| 152 | |
|
| 153 | |
|
| 154 | |
|
| 155 | |
public synchronized boolean available() { |
| 156 | 863 | Boolean retVal = ourIsOnClasspath.get(this); |
| 157 | 863 | if (retVal == null) { |
| 158 | 60 | String resource = "ca/uhn/hl7v2/parser/eventmap/" + getVersion() + ".properties"; |
| 159 | 60 | InputStream in = Parser.class.getClassLoader().getResourceAsStream(resource); |
| 160 | |
try { |
| 161 | 60 | retVal = in != null; |
| 162 | 60 | ourIsOnClasspath.put(this, retVal); |
| 163 | |
} finally { |
| 164 | 60 | if (in != null) { |
| 165 | |
try { |
| 166 | 55 | in.close(); |
| 167 | 0 | } catch (Exception e) { |
| 168 | |
|
| 169 | 55 | } |
| 170 | |
} |
| 171 | |
} |
| 172 | |
} |
| 173 | 863 | return retVal; |
| 174 | |
} |
| 175 | |
|
| 176 | |
|
| 177 | |
|
| 178 | |
|
| 179 | |
|
| 180 | |
public static synchronized List<Version> availableVersions() { |
| 181 | 30 | if (ourVersionsOnClasspath == null) { |
| 182 | 5 | ourVersionsOnClasspath = new ArrayList<Version>(); |
| 183 | 65 | for (Version next : values()) { |
| 184 | 60 | if (next.available()) { |
| 185 | 55 | ourVersionsOnClasspath.add(next); |
| 186 | |
} |
| 187 | |
} |
| 188 | |
} |
| 189 | 30 | return ourVersionsOnClasspath; |
| 190 | |
} |
| 191 | |
|
| 192 | |
|
| 193 | |
|
| 194 | |
|
| 195 | |
|
| 196 | |
|
| 197 | |
|
| 198 | |
|
| 199 | |
|
| 200 | |
|
| 201 | |
|
| 202 | |
|
| 203 | |
public static Version lowestAvailableVersion() { |
| 204 | 5 | List<Version> availableVersions = availableVersions(); |
| 205 | 5 | if (availableVersions.size() >0) { |
| 206 | 5 | return availableVersions.get(0); |
| 207 | |
} else { |
| 208 | 0 | return null; |
| 209 | |
} |
| 210 | |
} |
| 211 | |
|
| 212 | |
|
| 213 | |
|
| 214 | |
|
| 215 | |
|
| 216 | |
|
| 217 | |
|
| 218 | |
|
| 219 | |
|
| 220 | |
|
| 221 | |
|
| 222 | |
|
| 223 | |
|
| 224 | |
public static Version highestAvailableVersionOrDefault() { |
| 225 | 15 | List<Version> availableVersions = availableVersions(); |
| 226 | 15 | if (availableVersions.size() >0) { |
| 227 | 15 | return availableVersions.get(availableVersions.size() - 1); |
| 228 | |
} else { |
| 229 | 0 | return Version.V25; |
| 230 | |
} |
| 231 | |
} |
| 232 | |
|
| 233 | |
|
| 234 | |
|
| 235 | |
|
| 236 | |
public GenericMessage newGenericMessage(ModelClassFactory mcf) { |
| 237 | 0 | switch (this) { |
| 238 | |
case V21: |
| 239 | 0 | return new GenericMessage.V21(mcf); |
| 240 | |
case V22: |
| 241 | 0 | return new GenericMessage.V22(mcf); |
| 242 | |
case V23: |
| 243 | 0 | return new GenericMessage.V23(mcf); |
| 244 | |
case V231: |
| 245 | 0 | return new GenericMessage.V231(mcf); |
| 246 | |
case V24: |
| 247 | 0 | return new GenericMessage.V24(mcf); |
| 248 | |
case V25: |
| 249 | 0 | return new GenericMessage.V25(mcf); |
| 250 | |
case V251: |
| 251 | 0 | return new GenericMessage.V251(mcf); |
| 252 | |
case V26: |
| 253 | 0 | return new GenericMessage.V26(mcf); |
| 254 | |
case V27: |
| 255 | 0 | return new GenericMessage.V27(mcf); |
| 256 | |
case V271: |
| 257 | 0 | return new GenericMessage.V271(mcf); |
| 258 | |
case V28: |
| 259 | 0 | return new GenericMessage.V28(mcf); |
| 260 | |
case V281: |
| 261 | 0 | return new GenericMessage.V281(mcf); |
| 262 | |
default: |
| 263 | 0 | throw new Error("Unknown version (this is a HAPI bug): " + this.getVersion()); |
| 264 | |
} |
| 265 | |
} |
| 266 | |
|
| 267 | |
} |