Manage automatically *-sources.jar sources
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Jun 2014 10:59:07 +0000 (10:59 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Jun 2014 10:59:07 +0000 (10:59 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@7064 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java

index 1aee15835ba9551a7fe5b91bdcad2190ea526ad3..da4c35a99eb562a871812d8c009a5d2ccebe8296 100644 (file)
@@ -32,6 +32,7 @@ import java.util.jar.JarFile;
 import java.util.jar.JarInputStream;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
+import java.util.zip.ZipInputStream;
 
 import javax.jcr.Credentials;
 import javax.jcr.GuestCredentials;
@@ -208,7 +209,8 @@ public class RepoUtils implements ArgeoNames, SlcNames {
                        throw new SlcException("Could not copy jar with MANIFEST "
                                        + manifest.getMainAttributes(), e);
                } finally {
-                       IOUtils.closeQuietly(jarIn);
+                       if (!(in instanceof ZipInputStream))
+                               IOUtils.closeQuietly(jarIn);
                        IOUtils.closeQuietly(jarOut);
                }
        }
index 3b0c8a0384ccafe16c4bf4dae5bf914b65852e11..a34b64fb39802ad1a7f9f4aff967aef2379ef304 100644 (file)
@@ -17,10 +17,12 @@ import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.DefaultNameVersion;
 import org.argeo.slc.ModuleSet;
 import org.argeo.slc.NameVersion;
 import org.argeo.slc.SlcException;
@@ -46,7 +48,7 @@ public class ArchiveWrapper implements Runnable, ModuleSet, Distribution {
 
        private String uri;
 
-       // jars to wrap as OSGi bundles
+       /** Jars to wrap as OSGi bundles */
        private Map<String, BndWrapper> wrappers = new HashMap<String, BndWrapper>();
 
        // pattern of OSGi bundles to import
@@ -102,6 +104,33 @@ public class ArchiveWrapper implements Runnable, ModuleSet, Distribution {
                        ZipEntry zentry = null;
                        entries: while ((zentry = zin.getNextEntry()) != null) {
                                String name = zentry.getName();
+
+                               // sources autodetect
+                               String baseName = FilenameUtils.getBaseName(name);
+                               if (baseName.endsWith("-sources")) {
+                                       String bundle = baseName.substring(0, baseName.length()
+                                                       - "-sources".length());
+                                       log.debug(name + "," + baseName + ", " + bundle);
+                                       String bundlePath = FilenameUtils.getPath(name) + bundle
+                                                       + ".jar";
+                                       if (wrappers.containsKey(bundlePath)) {
+                                               BndWrapper wrapper = wrappers.get(bundlePath);
+                                               NameVersion bundleNv = new DefaultNameVersion(
+                                                               wrapper.getName(), wrapper.getVersion());
+                                               byte[] pdeSource = RepoUtils.packageAsPdeSource(zin,
+                                                               bundleNv);
+                                               Node pdeSourceNode = RepoUtils.copyBytesAsArtifact(
+                                                               javaSession.getRootNode(),
+                                                               new DefaultArtifact(wrapper.getCategory(),
+                                                                               wrapper.getName() + ".source", "jar",
+                                                                               wrapper.getVersion()), pdeSource);
+                                               osgiFactory.indexNode(pdeSourceNode);
+                                       }
+                               } else if (baseName.endsWith(".source")) {
+                                       // TODO Eclipse source already available
+                               }
+
+                               // binaries
                                if (wrappers.containsKey(name)) {
                                        BndWrapper wrapper = (BndWrapper) wrappers.get(name);
                                        // we must copy since the stream is closed by BND