]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java
7cb9de6e28646b49e29d12f9b5c9e6949afc71a1
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / osgi / UriWrapper.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.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.argeo.jcr.JcrUtils;
14 import org.argeo.slc.SlcException;
15 import org.argeo.slc.repo.OsgiFactory;
16 import org.argeo.slc.repo.RepoUtils;
17
18 public class UriWrapper extends BndWrapper implements Runnable {
19 private final static Log log = LogFactory.getLog(UriWrapper.class);
20
21 private String uri;
22 private String baseUri;
23 private String versionSeparator = "-";
24 private String extension = "jar";
25
26 private OsgiFactory osgiFactory;
27
28 public UriWrapper() {
29 setFactory(this);
30 }
31
32 public void run() {
33 Session distSession = null;
34 Session javaSession = null;
35 InputStream in;
36 ByteArrayOutputStream out;
37 try {
38 distSession = osgiFactory.openDistSession();
39 javaSession = osgiFactory.openJavaSession();
40 if (uri == null) {
41 uri = baseUri + '/' + getName() + versionSeparator
42 + getVersion() + "." + extension;
43 }
44 Node sourceArtifact = osgiFactory.getDist(distSession, uri);
45
46 // TODO factorize with Maven
47 in = sourceArtifact.getNode(Node.JCR_CONTENT)
48 .getProperty(Property.JCR_DATA).getBinary().getStream();
49 out = new ByteArrayOutputStream();
50 wrapJar(in, out);
51 Node newJarNode = RepoUtils
52 .copyBytesAsArtifact(javaSession.getRootNode(),
53 getArtifact(), out.toByteArray());
54 osgiFactory.indexNode(newJarNode);
55 newJarNode.getSession().save();
56 if (log.isDebugEnabled())
57 log.debug("Wrapped " + uri + " to " + newJarNode.getPath());
58 } catch (RepositoryException e) {
59 throw new SlcException("Cannot wrap Maven " + uri, e);
60 } finally {
61 JcrUtils.logoutQuietly(distSession);
62 JcrUtils.logoutQuietly(javaSession);
63 }
64 }
65
66 public void setUri(String sourceCoords) {
67 this.uri = sourceCoords;
68 }
69
70 public void setOsgiFactory(OsgiFactory osgiFactory) {
71 this.osgiFactory = osgiFactory;
72 }
73
74 public void setBaseUri(String baseUri) {
75 this.baseUri = baseUri;
76 }
77
78 public void setVersionSeparator(String versionSeparator) {
79 this.versionSeparator = versionSeparator;
80 }
81 }