001package org.hl7.fhir.convertors.misc.xver; 002 003import java.io.FileInputStream; 004import java.io.FileOutputStream; 005import java.io.IOException; 006 007import org.hl7.fhir.convertors.factory.VersionConvertorFactory_10_30; 008import org.hl7.fhir.convertors.factory.VersionConvertorFactory_10_40; 009import org.hl7.fhir.convertors.factory.VersionConvertorFactory_10_50; 010import org.hl7.fhir.convertors.factory.VersionConvertorFactory_14_30; 011import org.hl7.fhir.convertors.factory.VersionConvertorFactory_14_40; 012import org.hl7.fhir.convertors.factory.VersionConvertorFactory_14_50; 013import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_40; 014import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_50; 015import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50; 016import org.hl7.fhir.utilities.Utilities; 017import org.hl7.fhir.utilities.VersionUtilities; 018import org.hl7.fhir.utilities.json.model.JsonArray; 019import org.hl7.fhir.utilities.json.model.JsonObject; 020import org.hl7.fhir.utilities.json.parser.JsonParser; 021import org.hl7.fhir.utilities.npm.NpmPackage; 022import org.hl7.fhir.utilities.npm.NpmPackage.NpmPackageFolder; 023 024 025public class CorePackageVersionConvertor { 026 027 public interface IContentConvertor { 028 byte[] convert(byte[] cnt) throws IOException; 029 } 030 031 public class BaseConvertor { 032 protected String version; 033 034 public BaseConvertor(String version) { 035 super(); 036 this.version = version; 037 } 038 } 039 040 public class ContentConverter3to4 extends BaseConvertor implements IContentConvertor { 041 042 public ContentConverter3to4(String version) { 043 super(version); 044 } 045 046 @Override 047 public byte[] convert(byte[] cnt) throws IOException { 048 org.hl7.fhir.dstu3.model.Resource r3 = new org.hl7.fhir.dstu3.formats.JsonParser().parse(cnt); 049 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 050 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 051 if (!cr.hasVersion()) { 052 cr.setVersion(version); 053 } 054 } 055 org.hl7.fhir.r4.model.Resource r4 = VersionConvertorFactory_30_40.convertResource(r3); 056 return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(r4); 057 } 058 } 059 public class ContentConverter2to4 extends BaseConvertor implements IContentConvertor { 060 061 public ContentConverter2to4(String version) { 062 super(version); 063 } 064 065 @Override 066 public byte[] convert(byte[] cnt) throws IOException { 067 org.hl7.fhir.dstu2.model.Resource r2 = new org.hl7.fhir.dstu2.formats.JsonParser().parse(cnt); 068 org.hl7.fhir.r4.model.Resource r4 = VersionConvertorFactory_10_40.convertResource(r2); 069 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 070 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 071 if (!cr.hasVersion()) { 072 cr.setVersion(version); 073 } 074 } 075 return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(r4); 076 } 077 } 078 public class ContentConverter2Bto4 extends BaseConvertor implements IContentConvertor { 079 080 public ContentConverter2Bto4(String version) { 081 super(version); 082 } 083 084 @Override 085 public byte[] convert(byte[] cnt) throws IOException { 086 org.hl7.fhir.dstu2016may.model.Resource r2 = new org.hl7.fhir.dstu2016may.formats.JsonParser().parse(cnt); 087 org.hl7.fhir.r4.model.Resource r4 = VersionConvertorFactory_14_40.convertResource(r2); 088 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 089 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 090 if (!cr.hasVersion()) { 091 cr.setVersion(version); 092 } 093 } 094 return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(r4); 095 } 096 } 097 public class ContentConverter5to4 extends BaseConvertor implements IContentConvertor { 098 public ContentConverter5to4(String version) { 099 super(version); 100 } 101 102 @Override 103 public byte[] convert(byte[] cnt) throws IOException { 104 org.hl7.fhir.r5.model.Resource r5 = new org.hl7.fhir.r5.formats.JsonParser().parse(cnt); 105 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 106 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 107 if (!cr.hasVersion()) { 108 cr.setVersion(version); 109 } 110 } 111 org.hl7.fhir.r4.model.Resource r4 = VersionConvertorFactory_40_50.convertResource(r5); 112 return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(r4); 113 } 114 } 115 116 public class ContentConverter4to3 extends BaseConvertor implements IContentConvertor { 117 118 public ContentConverter4to3(String version) { 119 super(version); 120 } 121 122 @Override 123 public byte[] convert(byte[] cnt) throws IOException { 124 org.hl7.fhir.r4.model.Resource r4 = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); 125 if (r4 instanceof org.hl7.fhir.r4.model.MessageDefinition) { 126 return null; 127 } 128 if (r4 instanceof org.hl7.fhir.r4.model.GraphDefinition) { 129 return null; 130 } 131 if (r4 instanceof org.hl7.fhir.r4.model.TerminologyCapabilities) { 132 return null; 133 } 134 135 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 136 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 137 if (!cr.hasVersion()) { 138 cr.setVersion(version); 139 } 140 } 141 org.hl7.fhir.dstu3.model.Resource r3 = VersionConvertorFactory_30_40.convertResource(r4); 142 return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(r3); 143 } 144 } 145 public class ContentConverter2to3 extends BaseConvertor implements IContentConvertor { 146 147 public ContentConverter2to3(String version) { 148 super(version); 149 } 150 151 @Override 152 public byte[] convert(byte[] cnt) throws IOException { 153 org.hl7.fhir.dstu2.model.Resource r2 = new org.hl7.fhir.dstu2.formats.JsonParser().parse(cnt); 154 org.hl7.fhir.dstu3.model.Resource r3 = VersionConvertorFactory_10_30.convertResource(r2); 155 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 156 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 157 if (!cr.hasVersion()) { 158 cr.setVersion(version); 159 } 160 } 161 return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(r3); 162 } 163 } 164 public class ContentConverter2Bto3 extends BaseConvertor implements IContentConvertor { 165 166 public ContentConverter2Bto3(String version) { 167 super(version); 168 } 169 170 @Override 171 public byte[] convert(byte[] cnt) throws IOException { 172 org.hl7.fhir.dstu2016may.model.Resource r2 = new org.hl7.fhir.dstu2016may.formats.JsonParser().parse(cnt); 173 if (r2 instanceof org.hl7.fhir.dstu2016may.model.StructureMap) { 174 return null; 175 } 176 org.hl7.fhir.dstu3.model.Resource r3 = VersionConvertorFactory_14_30.convertResource(r2); 177 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 178 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 179 if (!cr.hasVersion()) { 180 cr.setVersion(version); 181 } 182 } 183 return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(r3); 184 } 185 } 186 public class ContentConverter5to3 extends BaseConvertor implements IContentConvertor { 187 public ContentConverter5to3(String version) { 188 super(version); 189 } 190 191 @Override 192 public byte[] convert(byte[] cnt) throws IOException { 193 org.hl7.fhir.r5.model.Resource r5 = new org.hl7.fhir.r5.formats.JsonParser().parse(cnt); 194 if (r5 instanceof org.hl7.fhir.r5.model.TerminologyCapabilities) { 195 return null; 196 } 197 198 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 199 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 200 if (!cr.hasVersion()) { 201 cr.setVersion(version); 202 } 203 } 204 org.hl7.fhir.dstu3.model.Resource r3 = VersionConvertorFactory_30_50.convertResource(r5); 205 return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(r3); 206 } 207 } 208 209 public class ContentConverter3to5 extends BaseConvertor implements IContentConvertor { 210 211 public ContentConverter3to5(String version) { 212 super(version); 213 } 214 215 @Override 216 public byte[] convert(byte[] cnt) throws IOException { 217 org.hl7.fhir.dstu3.model.Resource r3 = new org.hl7.fhir.dstu3.formats.JsonParser().parse(cnt); 218 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 219 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 220 if (!cr.hasVersion()) { 221 cr.setVersion(version); 222 } 223 } 224 org.hl7.fhir.r5.model.Resource r5 = VersionConvertorFactory_30_50.convertResource(r3); 225 return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(r5); 226 } 227 } 228 public class ContentConverter2to5 extends BaseConvertor implements IContentConvertor { 229 230 public ContentConverter2to5(String version) { 231 super(version); 232 } 233 234 @Override 235 public byte[] convert(byte[] cnt) throws IOException { 236 org.hl7.fhir.dstu2.model.Resource r2 = new org.hl7.fhir.dstu2.formats.JsonParser().parse(cnt); 237 org.hl7.fhir.r5.model.Resource r5 = VersionConvertorFactory_10_50.convertResource(r2); 238 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 239 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 240 if (!cr.hasVersion()) { 241 cr.setVersion(version); 242 } 243 } 244 return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(r5); 245 } 246 } 247 public class ContentConverter2Bto5 extends BaseConvertor implements IContentConvertor { 248 249 public ContentConverter2Bto5(String version) { 250 super(version); 251 } 252 253 @Override 254 public byte[] convert(byte[] cnt) throws IOException { 255 org.hl7.fhir.dstu2016may.model.Resource r2 = new org.hl7.fhir.dstu2016may.formats.JsonParser().parse(cnt); 256 org.hl7.fhir.r5.model.Resource r5 = VersionConvertorFactory_14_50.convertResource(r2); 257 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 258 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 259 if (!cr.hasVersion()) { 260 cr.setVersion(version); 261 } 262 } 263 return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(r5); 264 } 265 } 266 public class ContentConverter4to5 extends BaseConvertor implements IContentConvertor { 267 public ContentConverter4to5(String version) { 268 super(version); 269 } 270 271 @Override 272 public byte[] convert(byte[] cnt) throws IOException { 273 org.hl7.fhir.r4.model.Resource r4 = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); 274 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 275 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 276 if (!cr.hasVersion()) { 277 cr.setVersion(version); 278 } 279 } 280 org.hl7.fhir.r5.model.Resource r5 = VersionConvertorFactory_40_50.convertResource(r4); 281 return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(r5); 282 } 283 } 284 285 public class ContentConverter5to2 extends BaseConvertor implements IContentConvertor { 286 287 public ContentConverter5to2(String version) { 288 super(version); 289 } 290 291 @Override 292 public byte[] convert(byte[] cnt) throws IOException { 293 org.hl7.fhir.r5.model.Resource r5 = new org.hl7.fhir.r5.formats.JsonParser().parse(cnt); 294 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 295 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 296 if (!cr.hasVersion()) { 297 cr.setVersion(version); 298 } 299 } 300 org.hl7.fhir.dstu2.model.Resource r2 = VersionConvertorFactory_10_50.convertResource(r5); 301 return new org.hl7.fhir.dstu2.formats.JsonParser().composeBytes(r2); 302 } 303 } 304 305 public class ContentConverter5to2B extends BaseConvertor implements IContentConvertor { 306 307 public ContentConverter5to2B(String version) { 308 super(version); 309 } 310 311 @Override 312 public byte[] convert(byte[] cnt) throws IOException { 313 org.hl7.fhir.r5.model.Resource r5 = new org.hl7.fhir.r5.formats.JsonParser().parse(cnt); 314 if (r5 instanceof org.hl7.fhir.r5.model.MessageDefinition) { 315 return null; 316 } 317 if (r5 instanceof org.hl7.fhir.r5.model.GraphDefinition) { 318 return null; 319 } 320 if (r5 instanceof org.hl7.fhir.r5.model.TerminologyCapabilities) { 321 return null; 322 } 323 324 if (r5 instanceof org.hl7.fhir.r5.model.MetadataResource) { 325 org.hl7.fhir.r5.model.MetadataResource cr = (org.hl7.fhir.r5.model.MetadataResource) r5; 326 if (!cr.hasVersion()) { 327 cr.setVersion(version); 328 } 329 } 330 org.hl7.fhir.dstu2016may.model.Resource r2 = VersionConvertorFactory_14_50.convertResource(r5); 331 return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(r2); 332 } 333 } 334 335 public class ContentConverter4to2 extends BaseConvertor implements IContentConvertor { 336 337 public ContentConverter4to2(String version) { 338 super(version); 339 } 340 341 @Override 342 public byte[] convert(byte[] cnt) throws IOException { 343 org.hl7.fhir.r4.model.Resource r4 = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); 344 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 345 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 346 if (!cr.hasVersion()) { 347 cr.setVersion(version); 348 } 349 } 350 org.hl7.fhir.dstu2.model.Resource r2 = VersionConvertorFactory_10_40.convertResource(r4); 351 return new org.hl7.fhir.dstu2.formats.JsonParser().composeBytes(r2); 352 } 353 } 354 355 public class ContentConverter4to2B extends BaseConvertor implements IContentConvertor { 356 357 public ContentConverter4to2B(String version) { 358 super(version); 359 } 360 361 @Override 362 public byte[] convert(byte[] cnt) throws IOException { 363 org.hl7.fhir.r4.model.Resource r4 = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); 364 if (r4 instanceof org.hl7.fhir.r4.model.MessageDefinition) { 365 return null; 366 } 367 if (r4 instanceof org.hl7.fhir.r4.model.GraphDefinition) { 368 return null; 369 } 370 if (r4 instanceof org.hl7.fhir.r4.model.TerminologyCapabilities) { 371 return null; 372 } 373 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 374 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 375 if (!cr.hasVersion()) { 376 cr.setVersion(version); 377 } 378 } 379 org.hl7.fhir.dstu2016may.model.Resource r2 = VersionConvertorFactory_14_40.convertResource(r4); 380 return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(r2); 381 } 382 } 383 384 public class ContentConverter3to2 extends BaseConvertor implements IContentConvertor { 385 386 public ContentConverter3to2(String version) { 387 super(version); 388 } 389 390 @Override 391 public byte[] convert(byte[] cnt) throws IOException { 392 org.hl7.fhir.dstu3.model.Resource r3 = new org.hl7.fhir.dstu3.formats.JsonParser().parse(cnt); 393 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 394 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 395 if (!cr.hasVersion()) { 396 cr.setVersion(version); 397 } 398 } 399 org.hl7.fhir.dstu2.model.Resource r2 = VersionConvertorFactory_10_30.convertResource(r3); 400 return new org.hl7.fhir.dstu2.formats.JsonParser().composeBytes(r2); 401 } 402 } 403 404 public class ContentConverter3to2B extends BaseConvertor implements IContentConvertor { 405 406 public ContentConverter3to2B(String version) { 407 super(version); 408 } 409 410 @Override 411 public byte[] convert(byte[] cnt) throws IOException { 412 org.hl7.fhir.dstu3.model.Resource r3 = new org.hl7.fhir.dstu3.formats.JsonParser().parse(cnt); 413 if (r3 instanceof org.hl7.fhir.dstu3.model.StructureMap) { 414 return null; 415 } 416 417 if (r3 instanceof org.hl7.fhir.dstu3.model.MetadataResource) { 418 org.hl7.fhir.dstu3.model.MetadataResource cr = (org.hl7.fhir.dstu3.model.MetadataResource) r3; 419 if (!cr.hasVersion()) { 420 cr.setVersion(version); 421 } 422 } 423 org.hl7.fhir.dstu2016may.model.Resource r2 = VersionConvertorFactory_14_30.convertResource(r3); 424 return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(r2); 425 } 426 } 427 428 public class ContentConverter4to4 extends BaseConvertor implements IContentConvertor { 429 430 public ContentConverter4to4(String version) { 431 super(version); 432 } 433 434 @Override 435 public byte[] convert(byte[] cnt) throws IOException { 436 org.hl7.fhir.r4.model.Resource r4 = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); 437 if (r4 instanceof org.hl7.fhir.r4.model.MetadataResource) { 438 org.hl7.fhir.r4.model.MetadataResource cr = (org.hl7.fhir.r4.model.MetadataResource) r4; 439 if (!cr.hasVersion()) { 440 cr.setVersion(version); 441 } 442 } 443 return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(r4); 444 } 445 } 446 447 448 public static void main(String[] args) throws Exception { 449 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r2b.core.tgz"), "3.0.1"); 450 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r2b.core.tgz"), "4.0.1"); 451 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r2b.core.tgz"), "4.3.0"); 452 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r2b.core.tgz"), "5.0.0"); 453 454 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r3.core.tgz"), "1.4.0"); 455 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r3.core.tgz"), "4.0.1"); 456 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r3.core.tgz"), "4.3.0"); 457 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r3.core.tgz"), "5.0.0"); 458 459 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4.core.tgz"), "1.4.0"); 460 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4.core.tgz"), "3.0.1"); 461 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4.core.tgz"), "4.3.0"); 462 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4.core.tgz"), "5.0.0"); 463 464 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4b.core.tgz"), "1.4.0"); 465 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4b.core.tgz"), "3.0.1"); 466 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4b.core.tgz"), "4.0.1"); 467 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r4b.core.tgz"), "5.0.0"); 468 469 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r5.core.tgz"), "1.4.0"); 470 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r5.core.tgz"), "3.0.1"); 471 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r5.core.tgz"), "4.0.1"); 472 new CorePackageVersionConvertor().execute(Utilities.path(args[0], "hl7.fhir.r5.core.tgz"), "4.3.0"); 473 474 } 475 476 public void execute(String packageSource, String versionTarget) throws Exception { 477 // open the existing package 478 // chose the version converter 479 // build a new package 480 System.out.println("Convert "+packageSource+" to "+versionTarget); 481 482 NpmPackage src = NpmPackage.fromPackage(new FileInputStream(packageSource)); 483 IContentConvertor conv = contentConvertorFactory(src.fhirVersion(), versionTarget); 484 485 NpmPackage dst = NpmPackage.empty(); 486 487 for (NpmPackageFolder folder : src.getFolders().values()) { 488 for (String s : folder.getContent().keySet()) { 489 byte[] cnt = folder.getContent().get(s); 490 if (s.endsWith(".json")) { 491 if (s.equals("package.json")) { 492 cnt = convertPackage(cnt, versionTarget); 493 } else { 494 String sJ = new String(cnt); 495 if (sJ.contains("\"resourceType\"") && !s.equals(".index.json") && !s.endsWith(".schema.json")) { 496 try { 497 cnt = conv.convert(cnt); 498 } catch (Exception e) { 499 throw new Exception("Error processing "+folder.getFolderName()+"/"+s+": "+e.getMessage(), e); 500 } 501 } else { 502 // nothing 503 } 504 } 505 if (cnt != null) { 506 dst.addFile(folder.getFolderName(), s, cnt, null); 507 } 508 } else { 509 dst.addFile(folder.getFolderName(), s, cnt, null); 510 } 511 } 512 } 513 dst.save(new FileOutputStream(Utilities.changeFileExt(packageSource, ".as."+VersionUtilities.getNameForVersion(versionTarget).toLowerCase()+".tgz"))); 514 } 515 516 private IContentConvertor contentConvertorFactory(String fhirVersion, String versionTarget) throws Exception { 517 if (VersionUtilities.isR3Ver(fhirVersion)) { 518 if (VersionUtilities.isR4Ver(versionTarget) || VersionUtilities.isR4BVer(versionTarget)) { 519 return new ContentConverter3to4(fhirVersion); 520 } else if (VersionUtilities.isR5Plus(versionTarget)) { 521 return new ContentConverter3to5(fhirVersion); 522 } else if (VersionUtilities.isR2Ver(versionTarget)) { 523 return new ContentConverter3to2(fhirVersion); 524 } else if (VersionUtilities.isR2BVer(versionTarget)) { 525 return new ContentConverter3to2B(fhirVersion); 526 } 527 } else if (VersionUtilities.isR2Ver(fhirVersion)) { 528 if (VersionUtilities.isR4Ver(versionTarget) || VersionUtilities.isR4BVer(versionTarget)) { 529 return new ContentConverter2to4(fhirVersion); 530 } else if (VersionUtilities.isR5Plus(versionTarget)) { 531 return new ContentConverter2to5(fhirVersion); 532 } else if (VersionUtilities.isR3Ver(versionTarget)) { 533 return new ContentConverter2to3(fhirVersion); 534 } 535 } else if (VersionUtilities.isR2BVer(fhirVersion)) { 536 if (VersionUtilities.isR4Ver(versionTarget) || VersionUtilities.isR4BVer(versionTarget)) { 537 return new ContentConverter2Bto4(fhirVersion); 538 } else if (VersionUtilities.isR5Plus(versionTarget)) { 539 return new ContentConverter2Bto5(fhirVersion); 540 } else if (VersionUtilities.isR3Ver(versionTarget)) { 541 return new ContentConverter2Bto3(fhirVersion); 542 } 543 } else if (VersionUtilities.isR4Ver(fhirVersion)) { 544 if (VersionUtilities.isR3Ver(versionTarget)) { 545 return new ContentConverter4to3(fhirVersion); 546 } else if (VersionUtilities.isR5Plus(versionTarget)) { 547 return new ContentConverter4to5(fhirVersion); 548 } else if (VersionUtilities.isR2Ver(versionTarget)) { 549 return new ContentConverter4to2(fhirVersion); 550 } else if (VersionUtilities.isR4BVer(versionTarget)) { 551 return new ContentConverter4to4(fhirVersion); 552 } else if (VersionUtilities.isR2BVer(versionTarget)) { 553 return new ContentConverter4to2B(fhirVersion); 554 } 555 } else if (VersionUtilities.isR4BVer(fhirVersion)) { 556 if (VersionUtilities.isR3Ver(versionTarget)) { 557 return new ContentConverter4to3(fhirVersion); 558 } else if (VersionUtilities.isR5Plus(versionTarget)) { 559 return new ContentConverter4to5(fhirVersion); 560 } else if (VersionUtilities.isR4Ver(versionTarget)) { 561 return new ContentConverter4to4(fhirVersion); 562 } else if (VersionUtilities.isR2Ver(versionTarget)) { 563 return new ContentConverter4to2(fhirVersion); 564 } else if (VersionUtilities.isR2BVer(versionTarget)) { 565 return new ContentConverter4to2B(fhirVersion); 566 } 567 } else if (VersionUtilities.isR5Plus(fhirVersion)) { 568 if (VersionUtilities.isR4Ver(versionTarget) || VersionUtilities.isR4BVer(versionTarget)) { 569 return new ContentConverter5to4(fhirVersion); 570 } else if (VersionUtilities.isR3Ver(versionTarget)) { 571 return new ContentConverter5to3(fhirVersion); 572 } else if (VersionUtilities.isR2Ver(versionTarget)) { 573 return new ContentConverter5to2(fhirVersion); 574 } else if (VersionUtilities.isR2BVer(versionTarget)) { 575 return new ContentConverter5to2B(fhirVersion); 576 } 577 } 578 throw new Exception("Unable to convert from "+fhirVersion+" to "+versionTarget); 579 } 580 581 private byte[] convertPackage(byte[] cnt, String version) throws IOException { 582 JsonObject json = JsonParser.parseObject(cnt); 583 json.remove("fhir-version-list"); 584 JsonArray vl = new JsonArray(); 585 json.add("fhirVersions", vl); 586 vl.add(version); 587 json.add("name", json.asString("name")+".as."+VersionUtilities.getNameForVersion(version).toLowerCase()); 588 json.add("title", json.asString("title")+" (as Version "+VersionUtilities.getNameForVersion(version).toLowerCase()+")"); 589 return JsonParser.composeBytes(json); 590 } 591}