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