X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2Fosgi%2FUriWrapper.java;h=cf0422e4309e66dcaed5a124498e3e0bd5d6e247;hb=399702cec859f48ec171c30d268c55eb632d472a;hp=7cb9de6e28646b49e29d12f9b5c9e6949afc71a1;hpb=46f89b95f9bfeb224c2a803d91dbd52f5281c0f9;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java index 7cb9de6e2..cf0422e43 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java @@ -1,19 +1,27 @@ package org.argeo.slc.repo.osgi; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; +import java.util.List; +import java.util.zip.ZipOutputStream; import javax.jcr.Node; import javax.jcr.Property; -import javax.jcr.RepositoryException; import javax.jcr.Session; +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.SlcException; import org.argeo.slc.repo.OsgiFactory; import org.argeo.slc.repo.RepoUtils; +import org.sonatype.aether.artifact.Artifact; +import org.sonatype.aether.util.artifact.DefaultArtifact; + +import aQute.lib.osgi.Jar; public class UriWrapper extends BndWrapper implements Runnable { private final static Log log = LogFactory.getLog(UriWrapper.class); @@ -25,6 +33,8 @@ public class UriWrapper extends BndWrapper implements Runnable { private OsgiFactory osgiFactory; + private SourcesProvider sourcesProvider; + public UriWrapper() { setFactory(this); } @@ -32,8 +42,9 @@ public class UriWrapper extends BndWrapper implements Runnable { public void run() { Session distSession = null; Session javaSession = null; - InputStream in; - ByteArrayOutputStream out; + InputStream in = null; + ByteArrayOutputStream out = null; + Jar jar = null; try { distSession = osgiFactory.openDistSession(); javaSession = osgiFactory.openJavaSession(); @@ -55,11 +66,43 @@ public class UriWrapper extends BndWrapper implements Runnable { newJarNode.getSession().save(); if (log.isDebugEnabled()) log.debug("Wrapped " + uri + " to " + newJarNode.getPath()); - } catch (RepositoryException e) { - throw new SlcException("Cannot wrap Maven " + uri, e); + + // sources + if (sourcesProvider != null) { + IOUtils.closeQuietly(in); + in = new ByteArrayInputStream(out.toByteArray()); + jar = new Jar(null, in); + List packages = jar.getPackages(); + + IOUtils.closeQuietly(out); + out = new ByteArrayOutputStream(); + sourcesProvider + .writeSources(packages, new ZipOutputStream(out)); + + IOUtils.closeQuietly(in); + in = new ByteArrayInputStream(out.toByteArray()); + byte[] sourcesJar = RepoUtils.packageAsPdeSource(in, + new DefaultNameVersion(this)); + Artifact sourcesArtifact = new DefaultArtifact(getArtifact() + .getGroupId(), getArtifact().getArtifactId() + + ".source", "jar", getArtifact().getVersion()); + Node sourcesJarNode = RepoUtils.copyBytesAsArtifact( + javaSession.getRootNode(), sourcesArtifact, sourcesJar); + sourcesJarNode.getSession().save(); + + if (log.isDebugEnabled()) + log.debug("Added sources " + sourcesArtifact + + " for bundle " + getArtifact()); + } + } catch (Exception e) { + throw new SlcException("Cannot wrap URI " + uri, e); } finally { + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(out); JcrUtils.logoutQuietly(distSession); JcrUtils.logoutQuietly(javaSession); + if (jar != null) + jar.close(); } } @@ -78,4 +121,8 @@ public class UriWrapper extends BndWrapper implements Runnable { public void setVersionSeparator(String versionSeparator) { this.versionSeparator = versionSeparator; } + + public void setSourcesProvider(SourcesProvider sourcesProvider) { + this.sourcesProvider = sourcesProvider; + } }