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);
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();
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);
}
}
this.osgiFactory = osgiFactory;
}
+ public void setDoNotModifySources(Boolean doNotModifySources) {
+ this.doNotModifySources = doNotModifySources;
+ }
+
}