From: Mathieu Baudier Date: Tue, 17 Jun 2014 10:59:07 +0000 (+0000) Subject: Manage automatically *-sources.jar sources X-Git-Tag: argeo-slc-2.1.7~169 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=5686259eb6e4da5006034087c71f349b3097be8d;p=gpl%2Fargeo-slc.git Manage automatically *-sources.jar sources git-svn-id: https://svn.argeo.org/slc/trunk@7064 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java index 1aee15835..da4c35a99 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java @@ -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); } } diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java index 3b0c8a038..a34b64fb3 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java @@ -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 wrappers = new HashMap(); // 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