private static ExecutionPlanBuilder buildExecutionPlan()

in src/main/java/org/apache/sling/feature/extension/content/ContentHandler.java [57:93]


    private static ExecutionPlanBuilder buildExecutionPlan(Collection<Artifact> artifacts, Set<PackageId> satisfiedPackages, LauncherPrepareContext prepareContext, File registryHome) throws Exception {

        List<File> packageReferences = new ArrayList<>();

        for (final Artifact a : artifacts) {
            final URL file = prepareContext.getArtifactFile(a.getId());
            File tmp = IOUtils.getFileFromURL(file, true, null);
            if (tmp != null) {
                packageReferences.add(tmp);
            }
        }

        if (!registryHome.exists()) {
            registryHome.mkdirs();
        }

        FSPackageRegistry registry = new FSPackageRegistry(registryHome, InstallationScope.UNSCOPED, new SecurityConfig(null, null), true);

        ExecutionPlanBuilder builder = registry.createExecutionPlan();
        builder.with(satisfiedPackages);

        for (File pkgFile : packageReferences) {
            try {
                PackageId pid = registry.registerExternal(pkgFile, false);
                ImportOptions importOptions = new ImportOptions();
                importOptions.setStrict(true);
                PackageTaskOptions options = new ImportOptionsPackageTaskOption(importOptions);
                builder.addTask().with(pid).withOptions(options).with(Type.EXTRACT);
            } catch (PackageExistsException ex) {
                // Expected - the package is already present
            }
        }
        builder.validate();
        satisfiedPackages.addAll(builder.preview());
        return builder;

    }