]> git.argeo.org Git - gpl/argeo-slc.git/blob - MavenWrapper.java
35668373a36d0e1a8b6dcb90a05312eed7c61f18
[gpl/argeo-slc.git] / MavenWrapper.java
1 package org.argeo.slc.repo.osgi;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.InputStream;
5
6 import javax.jcr.Node;
7 import javax.jcr.Property;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Session;
10
11 import org.apache.commons.io.IOUtils;
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14 import org.argeo.jcr.JcrUtils;
15 import org.argeo.slc.DefaultNameVersion;
16 import org.argeo.slc.NameVersion;
17 import org.argeo.slc.SlcException;
18 import org.argeo.slc.repo.OsgiFactory;
19 import org.argeo.slc.repo.RepoUtils;
20 import org.sonatype.aether.util.artifact.DefaultArtifact;
21
22 public class MavenWrapper extends BndWrapper implements Runnable {
23 private final static Log log = LogFactory.getLog(MavenWrapper.class);
24
25 private String sourceCoords;
26
27 private OsgiFactory osgiFactory;
28
29 public MavenWrapper() {
30 setFactory(this);
31 }
32
33 public void run() {
34 Session distSession = null;
35 Session javaSession = null;
36 InputStream in;
37 ByteArrayOutputStream out;
38 try {
39 distSession = osgiFactory.openDistSession();
40 javaSession = osgiFactory.openJavaSession();
41 Node origArtifact = osgiFactory.getMaven(distSession, sourceCoords);
42
43 in = origArtifact.getNode(Node.JCR_CONTENT)
44 .getProperty(Property.JCR_DATA).getBinary().getStream();
45 out = new ByteArrayOutputStream();
46 wrapJar(in, out);
47 Node newJarNode = RepoUtils
48 .copyBytesAsArtifact(javaSession.getRootNode(),
49 getArtifact(), out.toByteArray());
50 osgiFactory.indexNode(newJarNode);
51 newJarNode.getSession().save();
52
53 // sources
54 try {
55 Node sourcesArtifact = osgiFactory.getMaven(distSession,
56 sourceCoords + ":sources");
57 IOUtils.closeQuietly(in);
58 in = origArtifact.getNode(Node.JCR_CONTENT)
59 .getProperty(Property.JCR_DATA).getBinary().getStream();
60 byte[] pdeSource = RepoUtils.packageAsPdeSource(in,
61 new DefaultNameVersion(getName(), getVersion()));
62 Node pdeSourceNode = RepoUtils.copyBytesAsArtifact(javaSession
63 .getRootNode(), new DefaultArtifact(getCategory(),
64 getName() + ".source", "jar", getVersion()), pdeSource);
65 osgiFactory.indexNode(pdeSourceNode);
66 pdeSourceNode.getSession().save();
67 } catch (SlcException e) {
68 // no sources available
69 }
70
71 if (log.isDebugEnabled())
72 log.debug("Wrapped Maven " + sourceCoords + " to "
73 + newJarNode.getPath());
74 } catch (RepositoryException e) {
75 throw new SlcException("Cannot wrap Maven " + sourceCoords, e);
76 } finally {
77 JcrUtils.logoutQuietly(distSession);
78 JcrUtils.logoutQuietly(javaSession);
79 }
80 }
81
82 public void setSourceCoords(String sourceCoords) {
83 this.sourceCoords = sourceCoords;
84 }
85
86 public void setOsgiFactory(OsgiFactory osgiFactory) {
87 this.osgiFactory = osgiFactory;
88 }
89
90 }