X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2Fosgi%2FMavenWrapper.java;h=085e1ddfd73e944f6b4e94c8994a99ae53ee7135;hb=3ee2fdf1cb2047b3c4eda153ce1e9ac2b24f6f9c;hp=2942e212bf1282a6271cd9ecf60475f69080bccf;hpb=46f89b95f9bfeb224c2a803d91dbd52f5281c0f9;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java index 2942e212b..085e1ddfd 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java @@ -8,13 +8,22 @@ 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 org.sonatype.aether.util.artifact.SubArtifact; +/** + * BND wrapper based on a Maven artifact available from one of the configured + * repositories. + */ public class MavenWrapper extends BndWrapper implements Runnable { private final static Log log = LogFactory.getLog(MavenWrapper.class); @@ -26,6 +35,14 @@ public class MavenWrapper extends BndWrapper implements Runnable { setFactory(this); } + @Override + public String getVersion() { + String version = super.getVersion(); + if (version != null) + return version; + return new DefaultArtifact(sourceCoords).getVersion(); + } + public void run() { Session distSession = null; Session javaSession = null; @@ -34,10 +51,15 @@ public class MavenWrapper extends BndWrapper implements Runnable { try { distSession = osgiFactory.openDistSession(); javaSession = osgiFactory.openJavaSession(); - Node sourceArtifact = osgiFactory.getMaven(distSession, - sourceCoords); + Node origArtifact; + try { + origArtifact = osgiFactory.getMaven(distSession, sourceCoords); + } catch (Exception e1) { + origArtifact = osgiFactory.getMaven(distSession, sourceCoords + + ":" + getVersion()); + } - in = sourceArtifact.getNode(Node.JCR_CONTENT) + in = origArtifact.getNode(Node.JCR_CONTENT) .getProperty(Property.JCR_DATA).getBinary().getStream(); out = new ByteArrayOutputStream(); wrapJar(in, out); @@ -46,9 +68,38 @@ public class MavenWrapper extends BndWrapper implements Runnable { getArtifact(), out.toByteArray()); osgiFactory.indexNode(newJarNode); newJarNode.getSession().save(); + if (log.isDebugEnabled()) log.debug("Wrapped Maven " + sourceCoords + " to " + newJarNode.getPath()); + + // sources + Artifact sourcesArtifact = new SubArtifact(new DefaultArtifact( + sourceCoords), "sources", null); + Node sourcesArtifactNode; + try { + + sourcesArtifactNode = osgiFactory.getMaven(distSession, + sourcesArtifact.toString()); + } catch (SlcException e) { + // no sources available + return; + } + + IOUtils.closeQuietly(in); + in = sourcesArtifactNode.getNode(Node.JCR_CONTENT) + .getProperty(Property.JCR_DATA).getBinary().getStream(); + byte[] pdeSource = RepoUtils.packageAsPdeSource(in, + new DefaultNameVersion(getName(), getVersion())); + Node pdeSourceNode = RepoUtils.copyBytesAsArtifact(javaSession + .getRootNode(), new DefaultArtifact(getCategory(), + getName() + ".source", "jar", getVersion()), pdeSource); + osgiFactory.indexNode(pdeSourceNode); + pdeSourceNode.getSession().save(); + + if (log.isDebugEnabled()) + log.debug("Wrapped Maven " + sourcesArtifact + + " to PDE sources " + pdeSourceNode.getPath()); } catch (RepositoryException e) { throw new SlcException("Cannot wrap Maven " + sourceCoords, e); } finally {