]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java
Add BSD License.
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / osgi / MavenWrapper.java
index 5330e67e2fcb7a4ffaf9e2fd9216a44cdcb8c89d..ab7daeb111b311c78fb6e4d04c8768f7919a65d1 100644 (file)
@@ -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;
+       }
+
 }