]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.factory/src/org/argeo/slc/factory/A2Factory.java
Add libraries for various formats
[gpl/argeo-slc.git] / org.argeo.slc.factory / src / org / argeo / slc / factory / A2Factory.java
index 5e1e85bcca01245d6de5c8eb5af82d58aafa093d..a3072872e971cecf8fa8ec5b33febc478a3e44eb 100644 (file)
@@ -126,6 +126,10 @@ public class A2Factory {
                        }
 
                        String m2Version = commonProps.getProperty(SLC_ORIGIN_M2.toString());
+                       if (m2Version == null) {
+                               logger.log(Level.WARNING, "Ignoring " + duDir + " as it is not an M2-based distribution unit");
+                               return;// ignore, this is probably an Eclipse archive
+                       }
                        if (!m2Version.startsWith(":")) {
                                throw new IllegalStateException("Only the M2 version can be specified: " + m2Version);
                        }
@@ -314,6 +318,11 @@ public class A2Factory {
                        String category = duDir.getParent().getFileName().toString();
                        Path targetCategoryBase = a2Base.resolve(category);
                        Files.createDirectories(targetCategoryBase);
+                       // first delete all directories from previous builds
+                       for (Path dir : Files.newDirectoryStream(targetCategoryBase, (p) -> Files.isDirectory(p))) {
+                               deleteDirectory(dir);
+                       }
+
                        Files.createDirectories(originBase);
 
                        Path commonBnd = duDir.resolve(COMMON_BND);
@@ -341,15 +350,7 @@ public class A2Factory {
                                @Override
                                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                                        pathMatchers: for (PathMatcher pathMatcher : pathMatchers) {
-                                               if (pathMatcher.matches(file)) {
-//                                                     Path target = targetBase.resolve(file.getFileName().toString());
-//                                                     if (!Files.exists(target)) {
-//                                                             Files.copy(file, target);
-//                                                             logger.log(Level.DEBUG, () -> "Copied " + target + " from " + downloaded);
-//                                                     } else {
-//                                                             logger.log(Level.DEBUG, () -> target + " already exists.");
-//
-//                                                     }
+                                               if (pathMatcher.matches(file)) {                                                        
                                                        if (file.getFileName().toString().contains(".source_")) {
                                                                processEclipseSourceJar(file, targetCategoryBase);
                                                                logger.log(Level.DEBUG, () -> "Processed source " + file);
@@ -358,10 +359,10 @@ public class A2Factory {
                                                                processBundleJar(file, targetCategoryBase, new HashMap<>());
                                                                logger.log(Level.DEBUG, () -> "Processed " + file);
                                                        }
-                                                       continue pathMatchers;
+                                                       break pathMatchers;
                                                }
                                        }
-                                       return super.visitFile(file, attrs);
+                                       return FileVisitResult.CONTINUE;
                                }
                        });
 
@@ -419,9 +420,9 @@ public class A2Factory {
                        targetBundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch());
 
                        // TODO make it less dangerous?
-                       if (Files.exists(targetBundleDir)) {
-                               deleteDirectory(targetBundleDir);
-                       }
+//                     if (Files.exists(targetBundleDir)) {
+//                             deleteDirectory(targetBundleDir);
+//                     }
 
                        // copy entries
                        JarEntry entry;
@@ -460,46 +461,48 @@ public class A2Factory {
        }
 
        protected void processEclipseSourceJar(Path file, Path targetBase) throws IOException {
-               // NameVersion nameVersion;
-               Path targetBundleDir;
-               try (JarInputStream jarIn = new JarInputStream(Files.newInputStream(file), false)) {
-                       Manifest manifest = jarIn.getManifest();
-                       // nameVersion = nameVersionFromManifest(manifest);
-
-                       String[] relatedBundle = manifest.getMainAttributes().getValue("Eclipse-SourceBundle").split(";");
-                       String version = relatedBundle[1].substring("version=\"".length());
-                       version = version.substring(0, version.length() - 1);
-                       NameVersion nameVersion = new DefaultNameVersion(relatedBundle[0], version);
-                       targetBundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch());
-
-                       Path targetSourceDir = targetBundleDir.resolve("OSGI-OPT/src");
-
-                       // TODO make it less dangerous?
-                       if (Files.exists(targetSourceDir)) {
-                               deleteDirectory(targetSourceDir);
-                       } else {
-                               Files.createDirectories(targetSourceDir);
-                       }
+               try {
+                       Path targetBundleDir;
+                       try (JarInputStream jarIn = new JarInputStream(Files.newInputStream(file), false)) {
+                               Manifest manifest = jarIn.getManifest();
+
+                               String[] relatedBundle = manifest.getMainAttributes().getValue("Eclipse-SourceBundle").split(";");
+                               String version = relatedBundle[1].substring("version=\"".length());
+                               version = version.substring(0, version.length() - 1);
+                               NameVersion nameVersion = new DefaultNameVersion(relatedBundle[0], version);
+                               targetBundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch());
+
+                               Path targetSourceDir = targetBundleDir.resolve("OSGI-OPT/src");
+
+                               // TODO make it less dangerous?
+                               if (Files.exists(targetSourceDir)) {
+//                             deleteDirectory(targetSourceDir);
+                               } else {
+                                       Files.createDirectories(targetSourceDir);
+                               }
 
-                       // copy entries
-                       JarEntry entry;
-                       entries: while ((entry = jarIn.getNextJarEntry()) != null) {
-                               if (entry.isDirectory())
-                                       continue entries;
-                               if (entry.getName().startsWith("META-INF"))// skip META-INF entries
-                                       continue entries;
-                               Path target = targetSourceDir.resolve(entry.getName());
-                               Files.createDirectories(target.getParent());
-                               Files.copy(jarIn, target);
-                               logger.log(Level.TRACE, () -> "Copied source " + target);
-                       }
+                               // copy entries
+                               JarEntry entry;
+                               entries: while ((entry = jarIn.getNextJarEntry()) != null) {
+                                       if (entry.isDirectory())
+                                               continue entries;
+                                       if (entry.getName().startsWith("META-INF"))// skip META-INF entries
+                                               continue entries;
+                                       Path target = targetSourceDir.resolve(entry.getName());
+                                       Files.createDirectories(target.getParent());
+                                       Files.copy(jarIn, target);
+                                       logger.log(Level.TRACE, () -> "Copied source " + target);
+                               }
 
-                       // copy MANIFEST
+                               // copy MANIFEST
 //                     Path manifestPath = targetBundleDir.resolve("META-INF/MANIFEST.MF");
 //                     Files.createDirectories(manifestPath.getParent());
 //                     try (OutputStream out = Files.newOutputStream(manifestPath)) {
 //                             manifest.write(out);
 //                     }
+                       }
+               } catch (IOException e) {
+                       throw new IllegalStateException("Cannot process " + file, e);
                }
 
        }
@@ -622,15 +625,20 @@ public class A2Factory {
        }
 
        public static void main(String[] args) {
-               Path factoryBase = Paths.get("../output/a2").toAbsolutePath().normalize();
+               Path factoryBase = Paths.get("../../output/a2").toAbsolutePath().normalize();
                A2Factory factory = new A2Factory(factoryBase);
 
                Path descriptorsBase = Paths.get("../tp").toAbsolutePath().normalize();
 
 //             factory.processSingleM2ArtifactDistributionUnit(descriptorsBase.resolve("org.argeo.tp.apache").resolve("org.apache.xml.resolver.bnd"));
 //             factory.processM2BasedDistributionUnit(descriptorsBase.resolve("org.argeo.tp.apache/apache-sshd"));
-               factory.processM2BasedDistributionUnit(descriptorsBase.resolve("org.argeo.tp.jetty/jetty"));
-               factory.processM2BasedDistributionUnit(descriptorsBase.resolve("org.argeo.tp.jetty/jetty-websocket"));
+//             factory.processM2BasedDistributionUnit(descriptorsBase.resolve("org.argeo.tp.jetty/jetty"));
+//             factory.processM2BasedDistributionUnit(descriptorsBase.resolve("org.argeo.tp.jetty/jetty-websocket"));
+//             factory.processCategory(descriptorsBase.resolve("org.argeo.tp.eclipse.rcp"));
+//             factory.processCategory(descriptorsBase.resolve("org.argeo.tp"));
+//             factory.processCategory(descriptorsBase.resolve("org.argeo.tp.apache"));
+               factory.processCategory(descriptorsBase.resolve("org.argeo.tp.formats"));
+               factory.processCategory(descriptorsBase.resolve("org.argeo.tp.poi"));
                System.exit(0);
 
                // Eclipse