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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9dc3cc9  Remove resolver for now - we might need to revisit this at a 
later point
9dc3cc9 is described below

commit 9dc3cc96dfbd34ea6a7533a497dfb48e9e6ad06b
Author: Karl Pauls <[email protected]>
AuthorDate: Thu Jun 28 15:12:49 2018 +0200

    Remove resolver for now - we might need to revisit this at a later point
---
 pom.xml                                            |  20 +--
 .../feature/applicationbuilder/impl/Main.java      |  85 +++++++---
 .../impl/ApplicationBuilderTest.java               | 180 ---------------------
 3 files changed, 66 insertions(+), 219 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8aea192..2bd5cd6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
                         
<outputDirectory>${project.build.directory}/classes</outputDirectory>
                         <overWriteReleases>false</overWriteReleases>
                         <overWriteSnapshots>true</overWriteSnapshots>
-                        
<includeArtifactIds>org.apache.felix.framework,org.apache.felix.utils,commons-cli,org.apache.sling.feature,org.apache.sling.feature.io,org.apache.sling.feature.analyser,org.apache.sling.commons.johnzon,slf4j-api,slf4j-simple,org.apache.felix.converter,org.osgi.service.resolver,org.apache.sling.feature.resolver,osgi.core</includeArtifactIds>
+                        
<includeArtifactIds>org.apache.felix.utils,commons-cli,org.apache.sling.feature,org.apache.sling.feature.io,org.apache.sling.commons.johnzon,slf4j-api,slf4j-simple,org.apache.felix.converter,org.apache.felix.configurator,osgi.core</includeArtifactIds>
                     </configuration>
                 </execution>
             </executions>
@@ -115,24 +115,12 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.feature.analyser</artifactId>
-            <version>0.1.3-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.io</artifactId>
             <version>0.1.3-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.feature.resolver</artifactId>
-            <version>0.1.0-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.johnzon</artifactId>
             <version>1.0.0</version>
             <scope>provided</scope>
@@ -155,12 +143,6 @@
             <version>1.11.0</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.service.resolver</artifactId>
-            <version>1.0.1</version>
-            <scope>provided</scope>
-        </dependency>
                 
         <!-- Testing -->
         <dependency>
diff --git 
a/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java 
b/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
index f17bbce..a340868 100644
--- a/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
@@ -24,20 +24,26 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.sling.feature.Application;
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.builder.ApplicationBuilder;
+import org.apache.sling.feature.builder.BuilderContext;
+import org.apache.sling.feature.builder.FeatureProvider;
+import org.apache.sling.feature.io.ArtifactHandler;
 import org.apache.sling.feature.io.ArtifactManager;
 import org.apache.sling.feature.io.ArtifactManagerConfig;
 import org.apache.sling.feature.io.IOUtils;
 import org.apache.sling.feature.io.json.ApplicationJSONWriter;
-import org.apache.sling.feature.resolver.ApplicationResolverAssembler;
-import org.apache.sling.feature.resolver.FeatureResolver;
-import org.apache.sling.feature.resolver.FrameworkResolver;
+import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 import java.util.stream.Stream;
 
 public class Main {
@@ -54,8 +60,6 @@ public class Main {
 
     private static String propsFile;
 
-    private static Boolean useResolver = false;
-
     private static String frameworkVersion;
 
     /**
@@ -69,7 +73,6 @@ public class Main {
         final Option filesOption =  new Option("f", true, "Set feature files 
(comma separated)");
         final Option dirsOption = new Option("d", true, "Set feature file dirs 
(comma separated)");
         final Option propsOption =  new Option("p", true, "sling.properties 
file");
-        final Option useResolverOption = new Option("r", false, "If enabled 
uses the resolver");
         final Option frameworkOption = new Option("fv", true, "Set felix 
framework version");
         final Option outputOption = Option.builder("o").hasArg().argName("Set 
output file")
                 .desc("output file").build();
@@ -80,7 +83,6 @@ public class Main {
         options.addOption(dirsOption);
         options.addOption(outputOption);
         options.addOption(propsOption);
-        options.addOption(useResolverOption);
         options.addOption(frameworkOption);
 
         final CommandLineParser parser = new DefaultParser();
@@ -102,9 +104,6 @@ public class Main {
             if ( cl.hasOption(propsOption.getOpt()) ) {
                 propsFile = cl.getOptionValue(propsOption.getOpt());
             }
-            if ( cl.hasOption(useResolverOption.getOpt()) ) {
-                useResolver = true;
-            }
             if (cl.hasOption(frameworkOption.getOpt())) {
                 frameworkVersion = cl.getOptionValue(frameworkOption.getOpt());
             }
@@ -133,14 +132,6 @@ public class Main {
         return null;
     }
 
-    private static FeatureResolver getFeatureResolver(ArtifactManager am) {
-        if (useResolver) {
-            return new FrameworkResolver(am, Collections.emptyMap());
-        } else {
-            return null;
-        }
-    }
-
     public static void main(final String[] args) {
         // setup logging
         System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "info");
@@ -178,8 +169,9 @@ public class Main {
             System.exit(1);
         }
 
-        try (FeatureResolver fr = getFeatureResolver(am)) {
-            
writeApplication(buildApplication(ApplicationResolverAssembler.assembleApplication(null,
 am, fr, files)), output == null ? "application.json" : output);
+        try {
+
+            writeApplication(buildApplication(assembleApplication(null, am, 
files)), output == null ? "application.json" : output);
 
         } catch ( final IOException ioe) {
             LOGGER.error("Unable to read feature/application files " + 
ioe.getMessage(), ioe);
@@ -190,6 +182,59 @@ public class Main {
         }
     }
 
+    private static Application assembleApplication(
+        Application app,
+        final ArtifactManager artifactManager,
+        final String... featureFiles)
+        throws IOException {
+        if ( featureFiles == null || featureFiles.length == 0 ) {
+            throw new IOException("No features found.");
+        }
+
+        List<Feature> features = new ArrayList<>();
+
+        for (final String initFile : featureFiles)
+        {
+            try
+            {
+                final Feature f = IOUtils.getFeature(initFile, 
artifactManager, FeatureJSONReader.SubstituteVariables.RESOLVE);
+                features.add(f);
+            }
+            catch (Exception ex)
+            {
+                throw new IOException("Error reading feature: " + initFile, 
ex);
+            }
+        }
+
+        Collections.sort(features);
+
+        app = ApplicationBuilder.assemble(app, new BuilderContext(new 
FeatureProvider() {
+
+            @Override
+            public Feature provide(final ArtifactId id) {
+                try {
+                    final ArtifactHandler handler = 
artifactManager.getArtifactHandler("mvn:" + id.toMvnPath());
+                    try (final FileReader r = new 
FileReader(handler.getFile())) {
+                        final Feature f = FeatureJSONReader.read(r, 
handler.getUrl(), FeatureJSONReader.SubstituteVariables.RESOLVE);
+                        return f;
+                    }
+
+                } catch (final IOException e) {
+                    // ignore
+                }
+                return null;
+            }
+        }), features.toArray(new Feature[0]));
+
+        // check framework
+        if ( app.getFramework() == null ) {
+            // use hard coded Apache Felix
+            app.setFramework(IOUtils.getFelixFrameworkId(null));
+        }
+
+        return app;
+    }
+
     private static Application buildApplication(final Application app) {
         final org.apache.sling.feature.Artifact a = new 
org.apache.sling.feature.Artifact(ArtifactId.parse("org.apache.sling/org.apache.sling.launchpad.api/1.2.0"));
         a.getMetadata().put(org.apache.sling.feature.Artifact.KEY_START_ORDER, 
"1");
diff --git 
a/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
 
b/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
deleted file mode 100644
index 0d37e16..0000000
--- 
a/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * 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.applicationbuilder.impl;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Map;
-
-import javax.json.Json;
-import javax.json.JsonStructure;
-import javax.json.JsonWriter;
-import javax.json.JsonWriterFactory;
-import javax.json.stream.JsonGenerator;
-
-import org.apache.sling.feature.Application;
-import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.Feature;
-import org.apache.sling.feature.builder.ApplicationBuilder;
-import org.apache.sling.feature.builder.BuilderContext;
-import org.apache.sling.feature.builder.FeatureProvider;
-import org.apache.sling.feature.io.ArtifactHandler;
-import org.apache.sling.feature.io.ArtifactManager;
-import org.apache.sling.feature.io.ArtifactManagerConfig;
-import org.apache.sling.feature.io.json.ApplicationJSONWriter;
-import org.apache.sling.feature.io.json.FeatureJSONReader;
-import org.apache.sling.feature.io.json.FeatureJSONReader.SubstituteVariables;
-import org.apache.sling.feature.resolver.ApplicationResolverAssembler;
-import org.apache.sling.feature.resolver.FeatureResolver;
-import org.apache.sling.feature.resolver.FrameworkResolver;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.osgi.framework.Constants;
-
-public class ApplicationBuilderTest {
-    private Path tempDir;
-
-    @Before
-    public void setup() throws Exception {
-        tempDir = Files.createTempDirectory(getClass().getSimpleName());
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        // Delete the temp dir again
-        Files.walk(tempDir)
-            .sorted(Comparator.reverseOrder())
-            .map(Path::toFile)
-            .forEach(File::delete);
-    }
-
-    private Map<String, String> getFrameworkProps() {
-        return Collections.singletonMap(Constants.FRAMEWORK_STORAGE, 
tempDir.toFile().getAbsolutePath());
-    }
-
-    @Test
-    @Ignore
-    public void testBundleOrdering() throws Exception {
-        FeatureProvider fp = new TestFeatureProvider();
-        BuilderContext bc = new BuilderContext(fp);
-        ArtifactManager am = ArtifactManager.getArtifactManager(new 
ArtifactManagerConfig());
-
-        Feature fa = readFeature("/featureA.json", am);
-        Feature fb = readFeature("/featureB.json", am);
-        Feature[] features = {fa, fb};
-
-        try (FeatureResolver fr = new FrameworkResolver(am, 
getFrameworkProps())) {
-            Application app = ApplicationBuilder.assemble(null, bc, 
ApplicationResolverAssembler.sortFeatures(fr, features));
-            String actualJSON = writeApplication(app);
-
-            String expectedJSON = "{\"features\":["
-                    + "\"org.apache.sling.test.features:featureB:1.0.0\","
-                    + "\"org.apache.sling.test.features:featureA:1.0.0\"],"
-                + "\"bundles\":["
-                    + 
"{\"id\":\"commons-io:commons-io:2.6\",\"start-level\":\"10\",\"start-order\":\"10\"},"
-                    + 
"{\"id\":\"org.apache.felix:org.apache.felix.http.servlet-api:1.1.2\",\"start-level\":\"15\",\"start-order\":\"15\"},"
-                    + 
"{\"id\":\"commons-fileupload:commons-fileupload:1.3.3\",\"start-level\":\"16\",\"start-order\":\"16\"}]}";
-
-            StringWriter expectedWriter = new StringWriter();
-            StringWriter actualWriter = new StringWriter();
-
-            canonicalize(expectedJSON, expectedWriter, actualJSON, 
actualWriter);
-            assertEquals(expectedWriter.toString(), actualWriter.toString());
-        }
-    }
-
-    @Test
-    @Ignore
-    public void testFeatureDependency() throws Exception {
-        FeatureProvider fp = new TestFeatureProvider();
-        BuilderContext bc = new BuilderContext(fp);
-        ArtifactManager am = ArtifactManager.getArtifactManager(new 
ArtifactManagerConfig());
-
-        // Feature D has a bundle (slf4j-api) with a dependency on feature C,
-        // which provides a package for slf4j
-        Feature fc = readFeature("/featureC.json", am);
-        Feature fd = readFeature("/featureD.json", am);
-        Feature[] features = {fd, fc};
-
-        try (FeatureResolver fr = new FrameworkResolver(am, 
getFrameworkProps())) {
-            Application app = ApplicationBuilder.assemble(null, bc, 
ApplicationResolverAssembler.sortFeatures(fr, features));
-            String genApp = writeApplication(app);
-
-            String expected = "{\"features\":["
-                    + "\"org.apache.sling.test.features:featureC:1.0.0\","
-                    + "\"org.apache.sling.test.features:featureD:1.0.0\"],"
-                    + 
"\"bundles\":[{\"id\":\"org.slf4j:slf4j-api:1.7.25\",\"start-level\":\"6\",\"start-order\":\"6\"}]}";
-
-            StringWriter expectedWriter = new StringWriter();
-            StringWriter actualWriter = new StringWriter();
-            canonicalize(expected, expectedWriter, genApp, actualWriter);
-
-            assertEquals(expectedWriter.toString(), actualWriter.toString());
-        }
-    }
-
-    // Turn JSON into pretty-formatted canoncical JSON that should be 
comparable using String compare
-    private void canonicalize(String expected, StringWriter expectedWriter, 
String actual, StringWriter actualWriter) {
-        JsonStructure es = Json.createReader(new 
StringReader(expected)).read();
-        JsonStructure ea = Json.createReader(new StringReader(actual)).read();
-
-        JsonWriterFactory writerFactory = Json.createWriterFactory(
-                Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true));
-        JsonWriter w = writerFactory.createWriter(expectedWriter);
-        w.write(es);
-
-        JsonWriter w2 = writerFactory.createWriter(actualWriter);
-        w2.write(ea);
-    }
-
-    private Feature readFeature(final String res,
-            final ArtifactManager artifactManager) throws Exception {
-        URL url = getClass().getResource(res);
-        String file = new File(url.toURI()).getAbsolutePath();
-        final ArtifactHandler featureArtifact = 
artifactManager.getArtifactHandler(file);
-
-        try (final FileReader r = new FileReader(featureArtifact.getFile())) {
-            final Feature f = FeatureJSONReader.read(r, 
featureArtifact.getUrl(), SubstituteVariables.RESOLVE);
-            return f;
-        }
-    }
-
-    private static String writeApplication(Application app) throws Exception {
-        Writer writer = new StringWriter();
-        ApplicationJSONWriter.write(writer, app);
-        return writer.toString();
-    }
-
-    private static class TestFeatureProvider implements FeatureProvider {
-        @Override
-        public Feature provide(ArtifactId id) {
-            return null;
-        }
-    }
-}

Reply via email to