This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch extensions
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git

commit 8c2c612f997e2d9ccae6342f9848de4d5223a4c2
Merge: fdc440b e253419
Author: Karl Pauls <[email protected]>
AuthorDate: Tue Aug 28 22:58:34 2018 +0200

    Merge master

 .../feature/launcher/impl/FeatureProcessor.java    |  96 ++++++++------
 .../feature/launcher/impl/LauncherConfig.java      |  26 +---
 .../apache/sling/feature/launcher/impl/Main.java   | 147 +++++++++++++--------
 .../extensions/handlers/ContentPackageHandler.java |   4 +-
 4 files changed, 155 insertions(+), 118 deletions(-)

diff --cc 
src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 03dd923,8fe6874..bdacc49
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@@ -18,31 -18,37 +18,32 @@@ package org.apache.sling.feature.launch
  
  import java.io.File;
  import java.io.FileReader;
- import java.io.FileWriter;
  import java.io.IOException;
--import java.io.StringReader;
+ import java.util.ArrayList;
 -import java.util.Arrays;
+ import java.util.Collections;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  import java.util.ServiceLoader;
- 
- import javax.json.Json;
- import javax.json.JsonArray;
- import javax.json.JsonReader;
+ import java.util.Spliterator;
+ import java.util.Spliterators;
+ import java.util.stream.StreamSupport;
 -import javax.json.Json;
 -import javax.json.JsonArray;
 -import javax.json.JsonReader;
  
  import org.apache.sling.feature.Artifact;
+ import org.apache.sling.feature.ArtifactId;
  import org.apache.sling.feature.Configuration;
  import org.apache.sling.feature.Extension;
  import org.apache.sling.feature.ExtensionType;
  import org.apache.sling.feature.Feature;
- import org.apache.sling.feature.KeyValueMap;
 -import org.apache.sling.feature.FeatureConstants;
+ import org.apache.sling.feature.builder.BuilderContext;
  import org.apache.sling.feature.builder.FeatureBuilder;
+ import org.apache.sling.feature.builder.FeatureExtensionHandler;
  import org.apache.sling.feature.io.ArtifactHandler;
  import org.apache.sling.feature.io.ArtifactManager;
+ import org.apache.sling.feature.io.IOUtils;
  import org.apache.sling.feature.io.json.FeatureJSONReader;
- import org.apache.sling.feature.io.json.FeatureJSONWriter;
 -import org.apache.sling.feature.launcher.impl.LauncherConfig.StartupMode;
 +import org.apache.sling.feature.launcher.spi.LauncherPrepareContext;
 +import org.apache.sling.feature.launcher.spi.extensions.ExtensionHandler;
  
  public class FeatureProcessor {
  
@@@ -112,20 -132,50 +125,19 @@@
                  config.getInstallation().addBundle(entry.getKey(), 
artifactFile);
              }
          }
- 
 -        int index = 1;
 -        for(final Extension ext : app.getExtensions()) {
 -            if ( ext.getType() == ExtensionType.ARTIFACTS && 
!ext.getName().equals(FeatureConstants.EXTENSION_NAME_ASSEMBLED_FEATURES)) {
 -                for(final Artifact a : ext.getArtifacts() ) {
 -                    if ( config.getStartupMode() == StartupMode.PURE ) {
 -                        throw new Exception("Artifacts other than bundle are 
not supported by framework launcher.");
 -                    }
 -                    final ArtifactHandler handler = 
artifactManager.getArtifactHandler(":" + a.getId().toMvnPath());
 -                    
config.getInstallation().addInstallableArtifact(handler.getFile());
 -                }
 -            } else if ( 
ext.getName().equals(FeatureConstants.EXTENSION_NAME_REPOINIT) ) {
 -                    String text;
 -                    if ( ext.getType() == ExtensionType.TEXT ) {
 -                        text = ext.getText();
 -                    }
 -                    else if (ext.getType() == ExtensionType.JSON) {
 -                        try (JsonReader reader = Json.createReader(new 
StringReader(ext.getJSON()))){
 -                            JsonArray array = reader.readArray();
 -                            if (array.size() > 0) {
 -                                text = array.getString(0);
 -                                for (int i = 1; i < array.size(); i++) {
 -                                    text += "\n" + array.getString(i);
 -                                }
 -                            }
 -                            else {
 -                                text = "";
 -                            }
 -                        }
 -                    }
 -                    else {
 -                        throw new 
Exception(FeatureConstants.EXTENSION_NAME_REPOINIT + " extension must be of 
type text or json");
 -                    }
 -                    final Configuration cfg = new 
Configuration("org.apache.sling.jcr.repoinit.RepositoryInitializer", "repoinit" 
+ String.valueOf(index));
 -                    index++;
 -                    cfg.getProperties().put("scripts", text);
 -                    config.getInstallation().addConfiguration(cfg.getName(), 
cfg.getFactoryPid(), cfg.getProperties());
 -            } else {
 -                if ( ext.isRequired() ) {
 -                    throw new Exception("Unknown required extension " + 
ext.getName());
 +        extensions: for(final Extension ext : app.getExtensions()) {
 +            for (ExtensionHandler handler : 
ServiceLoader.load(ExtensionHandler.class,  
FeatureProcessor.class.getClassLoader()))
 +            {
 +                if (handler.handle(ext, ctx, config.getInstallation())) {
 +                    continue extensions;
                  }
              }
 +            if ( ext.isRequired() ) {
 +                throw new Exception("Unknown required extension " + 
ext.getName());
 +            }
          }
  
--        for(final Configuration cfg : app.getConfigurations()) {
++        for (final Configuration cfg : app.getConfigurations()) {
              if ( cfg.isFactoryConfiguration() ) {
                  config.getInstallation().addConfiguration(cfg.getName(), 
cfg.getFactoryPid(), cfg.getProperties());
              } else {
@@@ -133,7 -183,7 +145,7 @@@
              }
          }
  
--        for(final Map.Entry<String, String> prop : 
app.getFrameworkProperties()) {
++        for (final Map.Entry<String, String> prop : 
app.getFrameworkProperties()) {
              if ( 
!config.getInstallation().getFrameworkProperties().containsKey(prop.getKey()) ) 
{
                  
config.getInstallation().getFrameworkProperties().put(prop.getKey(), 
prop.getValue());
              }
diff --cc 
src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
index 7b9ca76,a6272a2..53b3c4b
--- a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
@@@ -35,11 -42,10 +37,8 @@@ public class LauncherConfi
      private static final String CACHE_DIR = "cache";
  
      /** The feature files or directories. */
-     private volatile String[] featureFiles;
- 
-     /** The application file. */
-     private volatile String appFile;
+     private final LinkedHashSet<String> featureFiles = new LinkedHashSet<>();
  
 -    private volatile StartupMode startupMode = StartupMode.PURE;
 -
      private final Installation installation = new Installation();
  
      private volatile File home = new File(HOME);
diff --cc src/main/java/org/apache/sling/feature/launcher/impl/Main.java
index 5f93435,5a2f335..2d36ca4
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
@@@ -17,7 -17,9 +17,8 @@@
  package org.apache.sling.feature.launcher.impl;
  
  import java.io.File;
+ import java.io.FileWriter;
  import java.io.IOException;
 -import java.net.MalformedURLException;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.nio.file.Files;
@@@ -129,8 -135,13 +131,11 @@@ public class Main 
              if ( cl.hasOption(debugOption.getOpt()) ) {
                  System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", 
"debug");
              }
-             if ( cl.hasOption(appOption.getOpt()) ) {
-                 
config.setApplicationFile(cl.getOptionValue(appOption.getOpt()));
 -            if ( cl.hasOption(installerOption.getOpt()) ) {
 -                config.setUseInstaller();
 -            }
++
+             if ( cl.hasOption(featureOption.getOpt()) ) {
+                 for(final String optVal : 
cl.getOptionValues(featureOption.getOpt())) {
+                     config.addFeatureFiles(optVal.split(","));
+                 }
              }
              if (cl.hasOption(cacheOption.getOpt())) {
                  config.setCacheDirectory(new 
File(cl.getOptionValue(cacheOption.getOpt())));
@@@ -225,10 -228,9 +222,9 @@@
                      }
                  };
  
-                 // use hard coded Apache Felix
                  launcher.prepare(ctx, 
IOUtils.getFelixFrameworkId(m_frameworkVersion), app);
  
 -                FeatureProcessor.prepareLauncher(launcherConfig, 
artifactManager, app);
 +                FeatureProcessor.prepareLauncher(ctx, launcherConfig, app);
  
                  Main.LOG().info("Using {} local artifacts, {} cached 
artifacts, and {} downloaded artifacts",
                      launcherConfig.getLocalArtifacts(), 
launcherConfig.getCachedArtifacts(), launcherConfig.getDownloadedArtifacts());
diff --cc 
src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
index 2f58d6b,0000000..bfcd083
mode 100644,000000..100644
--- 
a/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
+++ 
b/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
@@@ -1,43 -1,0 +1,45 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements. See the NOTICE file distributed with this
 + * work for additional information regarding copyright ownership. The ASF
 + * licenses this file to You under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance with the 
License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 + * License for the specific language governing permissions and limitations 
under
 + * the License.
 + */
 +package org.apache.sling.feature.launcher.impl.extensions.handlers;
 +
 +import java.io.IOException;
 +
 +import org.apache.sling.feature.Artifact;
 +import org.apache.sling.feature.Extension;
 +import org.apache.sling.feature.ExtensionType;
++import org.apache.sling.feature.FeatureConstants;
++import org.apache.sling.feature.launcher.impl.FeatureProcessor;
 +import org.apache.sling.feature.launcher.spi.LauncherPrepareContext;
 +import org.apache.sling.feature.launcher.spi.extensions.ExtensionHandler;
 +import 
org.apache.sling.feature.launcher.spi.extensions.ExtensionInstallationContext;
 +
 +public class ContentPackageHandler implements ExtensionHandler
 +{
 +    @Override
 +    public boolean handle(Extension extension, LauncherPrepareContext 
prepareContext, ExtensionInstallationContext installationContext) throws 
IOException
 +    {
-         if ( extension.getType() == ExtensionType.ARTIFACTS ) {
++        if ( extension.getType() == ExtensionType.ARTIFACTS && 
extension.getName().equals(FeatureConstants.EXTENSION_NAME_CONTENT_PACKAGES) ) {
 +            for(final Artifact a : extension.getArtifacts() ) {
 +                
installationContext.addInstallableArtifact(prepareContext.getArtifactFile(a.getId()));
 +            }
 +            return true;
 +        }
 +        else {
 +            return false;
 +        }
 +    }
 +}

Reply via email to