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