]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java
Incremental improvements.
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / osgi / 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;
42 try {
43 origArtifact = osgiFactory.getMaven(distSession, sourceCoords);
44 } catch (Exception e1) {
45 origArtifact = osgiFactory.getMaven(distSession, sourceCoords
46 + ":" + getVersion());
47 }
48
49 in = origArtifact.getNode(Node.JCR_CONTENT)
50 .getProperty(Property.JCR_DATA).getBinary().getStream();
51 out = new ByteArrayOutputStream();
52 wrapJar(in, out);
53 Node newJarNode = RepoUtils
54 .copyBytesAsArtifact(javaSession.getRootNode(),
55 getArtifact(), out.toByteArray());
56 osgiFactory.indexNode(newJarNode);
57 newJarNode.getSession().save();
58
59 // sources
60 try {
61 Node sourcesArtifact = osgiFactory.getMaven(distSession,
62 sourceCoords + ":sources");
63 IOUtils.closeQuietly(in);
64 in = origArtifact.getNode(Node.JCR_CONTENT)
65 .getProperty(Property.JCR_DATA).getBinary().getStream();
66 byte[] pdeSource = RepoUtils.packageAsPdeSource(in,
67 new DefaultNameVersion(getName(), getVersion()));
68 Node pdeSourceNode = RepoUtils.copyBytesAsArtifact(javaSession
69 .getRootNode(), new DefaultArtifact(getCategory(),
70 getName() + ".source", "jar", getVersion()), pdeSource);
71 osgiFactory.indexNode(pdeSourceNode);
72 pdeSourceNode.getSession().save();
73 } catch (SlcException e) {
74 // no sources available
75 }
76
77 if (log.isDebugEnabled())
78 log.debug("Wrapped Maven " + sourceCoords + " to "
79 + newJarNode.getPath());
80 } catch (RepositoryException e) {
81 throw new SlcException("Cannot wrap Maven " + sourceCoords, e);
82 } finally {
83 JcrUtils.logoutQuietly(distSession);
84 JcrUtils.logoutQuietly(javaSession);
85 }
86 }
87
88 public void setSourceCoords(String sourceCoords) {
89 this.sourceCoords = sourceCoords;
90 }
91
92 public void setOsgiFactory(OsgiFactory osgiFactory) {
93 this.osgiFactory = osgiFactory;
94 }
95
96 }