]> git.argeo.org Git - gpl/argeo-slc.git/blob - repo/osgi/MavenWrapper.java
Prepare next development cycle
[gpl/argeo-slc.git] / 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.Session;
9
10 import org.apache.commons.io.IOUtils;
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.argeo.jcr.JcrUtils;
14 import org.argeo.slc.DefaultNameVersion;
15 import org.argeo.slc.SlcException;
16 import org.argeo.slc.repo.OsgiFactory;
17 import org.argeo.slc.repo.RepoUtils;
18 import org.eclipse.aether.artifact.Artifact;
19 import org.eclipse.aether.artifact.DefaultArtifact;
20
21 /**
22 * BND wrapper based on a Maven artifact available from one of the configured
23 * repositories.
24 */
25 public class MavenWrapper extends BndWrapper implements Runnable {
26 private final static Log log = LogFactory.getLog(MavenWrapper.class);
27
28 private String sourceCoords;
29
30 private OsgiFactory osgiFactory;
31
32 private Boolean doNotModifySources = false;
33
34 public MavenWrapper() {
35 setFactory(this);
36 }
37
38 @Override
39 public String getVersion() {
40 String version = super.getVersion();
41 if (version != null)
42 return version;
43 return new DefaultArtifact(sourceCoords).getVersion();
44 }
45
46 public void run() {
47 Session distSession = null;
48 Session javaSession = null;
49 InputStream in = null;
50 ByteArrayOutputStream out = null;
51 try {
52 distSession = osgiFactory.openDistSession();
53 javaSession = osgiFactory.openJavaSession();
54 Node origArtifact;
55 try {
56 origArtifact = osgiFactory.getMaven(distSession, sourceCoords);
57 } catch (Exception e1) {
58 origArtifact = osgiFactory.getMaven(distSession, sourceCoords + ":" + getVersion());
59 }
60
61 in = origArtifact.getNode(Node.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary().getStream();
62 out = new ByteArrayOutputStream();
63 wrapJar(in, out);
64 Node newJarNode = RepoUtils.copyBytesAsArtifact(javaSession.getRootNode(), getArtifact(),
65 out.toByteArray());
66 osgiFactory.indexNode(newJarNode);
67 newJarNode.getSession().save();
68
69 if (log.isDebugEnabled())
70 log.debug("Wrapped Maven " + sourceCoords + " to " + newJarNode.getPath());
71
72 // sources
73 Artifact sourcesArtifact = new SubArtifact(new DefaultArtifact(sourceCoords), "sources", null);
74 Node sourcesArtifactNode;
75 try {
76
77 sourcesArtifactNode = osgiFactory.getMaven(distSession, sourcesArtifact.toString());
78 } catch (SlcException e) {
79 // no sources available
80 return;
81 }
82
83 IOUtils.closeQuietly(in);
84 in = sourcesArtifactNode.getNode(Node.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary().getStream();
85 byte[] pdeSource;
86 if (doNotModifySources)
87 pdeSource = IOUtils.toByteArray(in);
88 else
89 pdeSource = RepoUtils.packageAsPdeSource(in, new DefaultNameVersion(getName(), getVersion()));
90 Node pdeSourceNode = RepoUtils.copyBytesAsArtifact(javaSession.getRootNode(),
91 new DefaultArtifact(getCategory(), getName() + ".source", "jar", getVersion()), pdeSource);
92 osgiFactory.indexNode(pdeSourceNode);
93 pdeSourceNode.getSession().save();
94
95 if (log.isDebugEnabled())
96 log.debug("Wrapped Maven " + sourcesArtifact + " to PDE sources " + pdeSourceNode.getPath());
97 } catch (Exception e) {
98 throw new SlcException("Cannot wrap Maven " + sourceCoords, e);
99 } finally {
100 JcrUtils.logoutQuietly(distSession);
101 JcrUtils.logoutQuietly(javaSession);
102 IOUtils.closeQuietly(in);
103 IOUtils.closeQuietly(out);
104 }
105 }
106
107 public void setSourceCoords(String sourceCoords) {
108 this.sourceCoords = sourceCoords;
109 }
110
111 public String getSourceCoords() {
112 return sourceCoords;
113 }
114
115 public void setOsgiFactory(OsgiFactory osgiFactory) {
116 this.osgiFactory = osgiFactory;
117 }
118
119 public void setDoNotModifySources(Boolean doNotModifySources) {
120 this.doNotModifySources = doNotModifySources;
121 }
122
123 }