Support the slinstart maven plugin by providing a model converter API
diff --git a/src/main/java/org/apache/sling/feature/resolver/FrameworkResolver.java b/src/main/java/org/apache/sling/feature/resolver/FrameworkResolver.java
index 249f4f2..77a1a51 100644
--- a/src/main/java/org/apache/sling/feature/resolver/FrameworkResolver.java
+++ b/src/main/java/org/apache/sling/feature/resolver/FrameworkResolver.java
@@ -29,6 +29,7 @@
import org.apache.sling.feature.support.ArtifactManager;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;
@@ -48,16 +49,42 @@
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
+import java.util.Set;
public class FrameworkResolver implements FeatureResolver {
private final ArtifactManager artifactManager;
private final Resolver resolver;
private final FeatureResource frameworkResource;
private final Framework framework;
+ private String tempDirToBeDeleted = null;
+
+ public FrameworkResolver(ArtifactManager am) {
+ this(am, getTempDirProps());
+
+ // Since we create the temp dir, the close() method needs to delete it.
+ tempDirToBeDeleted = framework.getBundleContext().getProperty(Constants.FRAMEWORK_STORAGE);
+ }
+
+ private static Map<String, String> getTempDirProps() {
+ try {
+ String temp = Files.createTempDirectory("frameworkresolver").toFile().getAbsolutePath();
+ return Collections.singletonMap(Constants.FRAMEWORK_STORAGE, temp);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
public FrameworkResolver(ArtifactManager am, Map<String, String> frameworkProperties) {
artifactManager = am;
@@ -101,6 +128,13 @@
@Override
public void close() throws Exception {
framework.stop();
+
+ if (tempDirToBeDeleted != null) {
+ Files.walk(Paths.get(tempDirToBeDeleted))
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+ }
}
@Override