This is an automated email from the ASF dual-hosted git repository. simonetripodi pushed a commit to branch r2f in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-inventoryprinter.git
commit e007c2638fc1f7d35f073c1fb64400f3a3fc239d Author: Simo Tripodi <[email protected]> AuthorDate: Tue Jun 18 16:31:35 2019 +0200 stuff moved from the experiemntal org.apache.sling.feature.r2f module --- pom.xml | 18 +++++ ...ractRuntimeEnvironment2FeatureModelPrinter.java | 93 ++++++++++++++++++++++ .../impl/BaseFeature2CurrentRuntimePrinter.java | 54 +++++++++++++ .../RuntimeEnvironment2FeatureModelPrinter.java | 40 ++++++++++ 4 files changed, 205 insertions(+) diff --git a/pom.xml b/pom.xml index dbcb125..d6b3223 100644 --- a/pom.xml +++ b/pom.xml @@ -76,5 +76,23 @@ <version>1.0.6</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.feature.r2f</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.feature</artifactId> + <version>1.0.4</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.feature.io</artifactId> + <version>1.0.4</version> + <scope>provided</scope> + </dependency> </dependencies> </project> diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java new file mode 100644 index 0000000..bb3e322 --- /dev/null +++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java @@ -0,0 +1,93 @@ +/* + * 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.inventoryservice.impl; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.nio.file.Files.newBufferedReader; +import static org.apache.sling.feature.io.json.FeatureJSONReader.read; +import static org.apache.sling.feature.io.json.FeatureJSONWriter.write; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.net.URI; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.felix.inventory.Format; +import org.apache.felix.inventory.InventoryPrinter; +import org.apache.sling.feature.ArtifactId; +import org.apache.sling.feature.Feature; +import org.apache.sling.feature.r2f.ConversionRequest; +import org.apache.sling.feature.r2f.DefaultConversionRequest; +import org.apache.sling.feature.r2f.RuntimeEnvironment2FeatureModel; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Reference; + +abstract class AbstractRuntimeEnvironment2FeatureModelPrinter implements InventoryPrinter { + + private static final String SLING_FEATURE_PROPERTY_NAME = "sling.feature"; + + @Reference + RuntimeEnvironment2FeatureModel generator; + + @Activate + BundleContext bundleContext; + + @Override + public final void print(PrintWriter printWriter, Format format, boolean isZip) { + String previousFeatureLocation = bundleContext.getProperty(SLING_FEATURE_PROPERTY_NAME); + URI previousFeatureURI = URI.create(previousFeatureLocation); + Path previousFeaturePath = Paths.get(previousFeatureURI); + Feature previousFeature = null; + + try (Reader reader = newBufferedReader(previousFeaturePath, UTF_8)) { + previousFeature = read(reader, previousFeatureLocation); + } catch (IOException e) { + throw new RuntimeException("An error occurred while reading 'sling.feature' framework-property " + + previousFeatureLocation + + ", see causing error(s):", + e); + } + + String groupId = previousFeature.getId().getGroupId(); + String artifactId = previousFeature.getId().getArtifactId(); + String version = previousFeature.getId().getArtifactId(); + String classifier = previousFeature.getId().getArtifactId() + "-RUNTIME"; + + ConversionRequest request = new DefaultConversionRequest() + .setBundleContext(bundleContext) + .setResultId(new ArtifactId(groupId, artifactId, version, classifier, null)); + Feature currentFeature = generator.scanAndAssemble(request); + + Feature computedFeature = compute(previousFeature, currentFeature); + + try { + write(printWriter, computedFeature); + } catch (IOException e) { + printWriter.append("An error occured while searlizing ") + .append(computedFeature.toString()) + .append(":\n"); + + e.printStackTrace(printWriter); + } + } + + protected abstract Feature compute(Feature previousFeature, Feature currentFeature); + +} diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java new file mode 100644 index 0000000..90a40f4 --- /dev/null +++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java @@ -0,0 +1,54 @@ +/* + * 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.inventoryservice.impl; + +import static org.apache.felix.inventory.InventoryPrinter.FORMAT; +import static org.apache.felix.inventory.InventoryPrinter.NAME; +import static org.apache.felix.inventory.InventoryPrinter.TITLE; +import static org.apache.sling.feature.diff.FeatureDiff.compareFeatures; + +import org.apache.sling.feature.ArtifactId; +import org.apache.sling.feature.Feature; +import org.apache.sling.feature.diff.DefaultDiffRequest; +import org.osgi.service.component.annotations.Component; + +@Component( + property = { + NAME + "=r2f_base2runtime", + TITLE + "=Apache Sling Runtime Environment to Feature Model converter - Base 2 Runtime diff Generator", + FORMAT + "=JSON" + } +) +public class BaseFeature2CurrentRuntimePrinter extends AbstractRuntimeEnvironment2FeatureModelPrinter { + + @Override + protected Feature compute(Feature previousFeature, Feature currentFeature) { + Feature featureDiff = compareFeatures(new DefaultDiffRequest() + .setPrevious(previousFeature) + .setCurrent(currentFeature) + .addIncludeComparator("artifacts") + .addIncludeComparator("configurations") + .setResultId(new ArtifactId(currentFeature.getId().getGroupId(), + currentFeature.getId().getArtifactId(), + currentFeature.getId().getVersion(), + currentFeature.getId().getClassifier() + "_updater", + currentFeature.getId().getType()))); + + return featureDiff; + } + +} diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java new file mode 100644 index 0000000..b86134b --- /dev/null +++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java @@ -0,0 +1,40 @@ +/* + * 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.inventoryservice.impl; + +import static org.apache.felix.inventory.InventoryPrinter.FORMAT; +import static org.apache.felix.inventory.InventoryPrinter.NAME; +import static org.apache.felix.inventory.InventoryPrinter.TITLE; + +import org.apache.sling.feature.Feature; +import org.osgi.service.component.annotations.Component; + +@Component( + property = { + NAME + "=r2f_runtime", + TITLE + "=Apache Sling Runtime Environment to Feature Model converter - Runtime Generator", + FORMAT + "=JSON" + } +) +public final class RuntimeEnvironment2FeatureModelPrinter extends AbstractRuntimeEnvironment2FeatureModelPrinter { + + @Override + protected Feature compute(Feature previousFeature, Feature currentFeature) { + return currentFeature; + } + +}
