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=ab7daeb111b311c78fb6e4d04c8768f7919a65d1;hb=399702cec859f48ec171c30d268c55eb632d472a;hp=5330e67e2fcb7a4ffaf9e2fd9216a44cdcb8c89d;hpb=af67496c90f9e0347b3b6c39805f9ce673695baf;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 5330e67e2..ab7daeb11 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 @@ -13,12 +13,17 @@ 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.NameVersion; 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,15 +31,25 @@ public class MavenWrapper extends BndWrapper implements Runnable { private OsgiFactory osgiFactory; + private Boolean doNotModifySources = false; + public MavenWrapper() { 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; - InputStream in; - ByteArrayOutputStream out; + InputStream in = null; + ByteArrayOutputStream out = null; try { distSession = osgiFactory.openDistSession(); javaSession = osgiFactory.openJavaSession(); @@ -56,32 +71,48 @@ public class MavenWrapper extends BndWrapper implements Runnable { 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 { - Node sourcesArtifact = osgiFactory.getMaven(distSession, - sourceCoords + ":sources"); - IOUtils.closeQuietly(in); - in = origArtifact.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(); + + 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; + if (doNotModifySources) + pdeSource = IOUtils.toByteArray(in); + else + 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 " + sourceCoords + " to " - + newJarNode.getPath()); - } catch (RepositoryException e) { + log.debug("Wrapped Maven " + sourcesArtifact + + " to PDE sources " + pdeSourceNode.getPath()); + } catch (Exception e) { throw new SlcException("Cannot wrap Maven " + sourceCoords, e); } finally { JcrUtils.logoutQuietly(distSession); JcrUtils.logoutQuietly(javaSession); + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(out); } } @@ -93,4 +124,8 @@ public class MavenWrapper extends BndWrapper implements Runnable { this.osgiFactory = osgiFactory; } + public void setDoNotModifySources(Boolean doNotModifySources) { + this.doNotModifySources = doNotModifySources; + } + }