[KARAF-3404] Change profilesDirectory to profilesUri and make sure we can support wrapper file system such as zip or custom ones.
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/4694e73c Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/4694e73c Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/4694e73c Branch: refs/heads/master Commit: 4694e73c3259d5e0eb881bff58561de0ae9ae826 Parents: e5ea0d7 Author: Guillaume Nodet <gno...@gmail.com> Authored: Fri Jan 9 11:08:18 2015 +0100 Committer: Guillaume Nodet <gno...@gmail.com> Committed: Mon Jan 12 09:33:45 2015 +0100 ---------------------------------------------------------------------- demos/profiles/dynamic/pom.xml | 6 +++--- demos/profiles/static/pom.xml | 6 +++--- .../org/apache/karaf/profile/impl/Profiles.java | 6 +++++- .../karaf/tooling/features/InstallKarsMojo.java | 21 ++++++++++++++++---- 4 files changed, 28 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/4694e73c/demos/profiles/dynamic/pom.xml ---------------------------------------------------------------------- diff --git a/demos/profiles/dynamic/pom.xml b/demos/profiles/dynamic/pom.xml index b3a1cd1..87990c7 100644 --- a/demos/profiles/dynamic/pom.xml +++ b/demos/profiles/dynamic/pom.xml @@ -111,9 +111,9 @@ org.apache.karaf.demo.profiles:org.apache.karaf.demo.profiles.registry </profilesArtifact> --> - <profilesDirectory> - ${basedir}/../registry/src/main/resources - </profilesDirectory> + <profilesUri> + file://${basedir}/../registry/src/main/resources + </profilesUri> <bootFeatures> <feature>deployer</feature> </bootFeatures> http://git-wip-us.apache.org/repos/asf/karaf/blob/4694e73c/demos/profiles/static/pom.xml ---------------------------------------------------------------------- diff --git a/demos/profiles/static/pom.xml b/demos/profiles/static/pom.xml index 098359a..c758eb2 100644 --- a/demos/profiles/static/pom.xml +++ b/demos/profiles/static/pom.xml @@ -126,9 +126,9 @@ org.apache.karaf.demo.profiles:org.apache.karaf.demo.profiles.registry </profilesArtifact> --> - <profilesDirectory> - ${basedir}/../registry/src/main/resources - </profilesDirectory> + <profilesUri> + file://${basedir}/../registry/src/main/resources + </profilesUri> <startupRepositories> <repository>${project.build.outputDirectory}/features.xml</repository> </startupRepositories> http://git-wip-us.apache.org/repos/asf/karaf/blob/4694e73c/profile/src/main/java/org/apache/karaf/profile/impl/Profiles.java ---------------------------------------------------------------------- diff --git a/profile/src/main/java/org/apache/karaf/profile/impl/Profiles.java b/profile/src/main/java/org/apache/karaf/profile/impl/Profiles.java index 7f8d483..32232da 100644 --- a/profile/src/main/java/org/apache/karaf/profile/impl/Profiles.java +++ b/profile/src/main/java/org/apache/karaf/profile/impl/Profiles.java @@ -53,8 +53,12 @@ public final class Profiles { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { Path fileName = dir.getFileName(); - if (fileName != null && fileName.toString().endsWith(PROFILE_FOLDER_SUFFIX)) { + if (fileName != null && (fileName.toString().endsWith(PROFILE_FOLDER_SUFFIX) + || fileName.toString().endsWith(PROFILE_FOLDER_SUFFIX + "/"))) { String profileId = root.relativize(dir).toString(); + if (profileId.endsWith("/")) { + profileId = profileId.substring(0, profileId.length() - 1); + } profileId = profileId.replaceAll(root.getFileSystem().getSeparator(), "-"); profileId = profileId.substring(0, profileId.length() - PROFILE_FOLDER_SUFFIX.length()); builder = ProfileBuilder.Factory.create(profileId); http://git-wip-us.apache.org/repos/asf/karaf/blob/4694e73c/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java ---------------------------------------------------------------------- diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java index 363539d..332ff2a 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java @@ -23,8 +23,12 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.net.URI; import java.net.URL; +import java.nio.file.FileSystem; +import java.nio.file.FileSystemNotFoundException; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; @@ -138,7 +142,7 @@ public class InstallKarsMojo extends MojoSupport { private List<String> installedBundles; @Parameter - private File profilesDirectory; + private String profilesUri; @Parameter private List<String> bootProfiles; @@ -220,7 +224,7 @@ public class InstallKarsMojo extends MojoSupport { installedProfiles = nonNullList(installedProfiles); if (!startupProfiles.isEmpty() || !bootProfiles.isEmpty() || !installedProfiles.isEmpty()) { - if (profilesDirectory == null) { + if (profilesUri == null) { throw new IllegalArgumentException("profilesDirectory must be specified"); } } @@ -296,8 +300,17 @@ public class InstallKarsMojo extends MojoSupport { // Load profiles Map<String, Profile> allProfiles; - if (profilesDirectory != null) { - allProfiles = Profiles.loadProfiles(profilesDirectory.toPath()); + if (profilesUri != null) { + URI profileURI = URI.create(profilesUri); + Path profilePath; + try { + profilePath = Paths.get(profileURI); + } catch (FileSystemNotFoundException e) { + // file system does not exist, try to create it + FileSystem fs = FileSystems.newFileSystem(profileURI, new HashMap<String, Object>(), InstallKarsMojo.class.getClassLoader()); + profilePath = fs.provider().getPath(profileURI); + } + allProfiles = Profiles.loadProfiles(profilePath); } else { allProfiles = new HashMap<>(); }