From 59887ef2a2238f5d75a33b3193e10b856c0b8a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20H=C3=A4ssig?= Date: Thu, 23 Nov 2023 10:35:13 +0100 Subject: [PATCH] add Windows compatibility to BundlesParser --- .../flexible/model/bundle/BundlesParser.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/merkle/oss/magnolia/imaging/flexible/model/bundle/BundlesParser.java b/src/main/java/com/merkle/oss/magnolia/imaging/flexible/model/bundle/BundlesParser.java index bd5ccd1..bd805d0 100644 --- a/src/main/java/com/merkle/oss/magnolia/imaging/flexible/model/bundle/BundlesParser.java +++ b/src/main/java/com/merkle/oss/magnolia/imaging/flexible/model/bundle/BundlesParser.java @@ -3,6 +3,8 @@ import com.google.gson.Gson; import com.google.gson.JsonIOException; import com.google.gson.JsonSyntaxException; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,12 +52,13 @@ private Stream create(final BundlesConfig bundlesConfig) { private Stream create(final String bundlesDirName, final String path) { try { - final String filePattern = path + "/**/" + bundlesDirName + "/*.json"; + final URI uri = getClass().getClassLoader().getResource(path).toURI(); + final FileSystem fileSystem = getFileSystem(uri); + final String filePattern = getFilePattern(bundlesDirName, path); LOG.info("Load image bundle definitions which match pattern '{}'", filePattern); - final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + filePattern); + final PathMatcher matcher = fileSystem.getPathMatcher("glob:" + filePattern); final Stream.Builder> bundles = Stream.builder(); - final URI uri = getClass().getClassLoader().getResource(path).toURI(); processResource(uri, p -> Files.walkFileTree(p, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) { @@ -72,6 +75,29 @@ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attr } } + private FileSystem getFileSystem(final URI uri) { + try { + return FileSystems.getFileSystem(uri); + } catch (Exception e) { + return FileSystems.getDefault(); + } + } + + private String getFilePattern(final String bundlesDirName, final String path) { + StringBuilder pattern = new StringBuilder(); + if (SystemUtils.IS_OS_WINDOWS) { + pattern.append("?:/"); + } + pattern.append(path); + if (StringUtils.isNotEmpty(path) && StringUtils.endsWith(path, "/")) { + pattern.append('/'); + } + pattern.append("**/") + .append(bundlesDirName) + .append("/*.json"); + return pattern.toString(); + } + private void processResource(final URI uri, final IOConsumer consumer) throws IOException { try { consumer.accept(Paths.get(uri));