1 package org
.argeo
.slc
.repo
.osgi
;
3 import java
.io
.ByteArrayInputStream
;
4 import java
.io
.ByteArrayOutputStream
;
5 import java
.io
.InputStream
;
7 import java
.util
.zip
.ZipOutputStream
;
10 import javax
.jcr
.Property
;
11 import javax
.jcr
.Session
;
13 import org
.apache
.commons
.io
.IOUtils
;
14 import org
.argeo
.api
.cms
.CmsLog
;
15 import org
.argeo
.jcr
.JcrUtils
;
16 import org
.argeo
.slc
.DefaultNameVersion
;
17 import org
.argeo
.slc
.SlcException
;
18 import org
.argeo
.slc
.repo
.OsgiFactory
;
19 import org
.argeo
.slc
.repo
.RepoUtils
;
20 import org
.eclipse
.aether
.artifact
.Artifact
;
21 import org
.eclipse
.aether
.artifact
.DefaultArtifact
;
23 import aQute
.bnd
.osgi
.Jar
;
25 public class UriWrapper
extends BndWrapper
implements Runnable
{
26 private final static CmsLog log
= CmsLog
.getLog(UriWrapper
.class);
29 private String baseUri
;
30 private String versionSeparator
= "-";
31 private String extension
= "jar";
33 private OsgiFactory osgiFactory
;
35 private SourcesProvider sourcesProvider
;
42 Session distSession
= null;
43 Session javaSession
= null;
44 InputStream in
= null;
45 ByteArrayOutputStream out
= null;
48 distSession
= osgiFactory
.openDistSession();
49 javaSession
= osgiFactory
.openJavaSession();
50 String uri
= getEffectiveUri();
52 // uri = baseUri + '/' + getName() + versionSeparator + getVersion() + "." + extension;
54 Node sourceArtifact
= osgiFactory
.getDist(distSession
, uri
);
56 // TODO factorize with Maven
57 in
= sourceArtifact
.getNode(Node
.JCR_CONTENT
).getProperty(Property
.JCR_DATA
).getBinary().getStream();
58 out
= new ByteArrayOutputStream();
60 Node newJarNode
= RepoUtils
.copyBytesAsArtifact(javaSession
.getRootNode(), getArtifact(),
62 osgiFactory
.indexNode(newJarNode
);
63 newJarNode
.getSession().save();
64 if (log
.isDebugEnabled())
65 log
.debug("Wrapped " + uri
+ " to " + newJarNode
.getPath());
68 if (sourcesProvider
!= null) {
69 IOUtils
.closeQuietly(in
);
70 in
= new ByteArrayInputStream(out
.toByteArray());
71 jar
= new Jar(null, in
);
72 List
<String
> packages
= jar
.getPackages();
74 IOUtils
.closeQuietly(out
);
75 out
= new ByteArrayOutputStream();
76 sourcesProvider
.writeSources(packages
, new ZipOutputStream(out
));
78 IOUtils
.closeQuietly(in
);
79 in
= new ByteArrayInputStream(out
.toByteArray());
80 byte[] sourcesJar
= RepoUtils
.packageAsPdeSource(in
, new DefaultNameVersion(this));
81 Artifact sourcesArtifact
= new DefaultArtifact(getArtifact().getGroupId(),
82 getArtifact().getArtifactId() + ".source", "jar", getArtifact().getVersion());
83 Node sourcesJarNode
= RepoUtils
.copyBytesAsArtifact(javaSession
.getRootNode(), sourcesArtifact
,
85 sourcesJarNode
.getSession().save();
87 if (log
.isDebugEnabled())
88 log
.debug("Added sources " + sourcesArtifact
+ " for bundle " + getArtifact());
90 } catch (Exception e
) {
91 throw new SlcException("Cannot wrap URI " + uri
, e
);
93 IOUtils
.closeQuietly(in
);
94 IOUtils
.closeQuietly(out
);
95 JcrUtils
.logoutQuietly(distSession
);
96 JcrUtils
.logoutQuietly(javaSession
);
102 public void setUri(String sourceCoords
) {
103 this.uri
= sourceCoords
;
106 public String
getEffectiveUri() {
108 return baseUri
+ '/' + getName() + versionSeparator
+ getVersion() + "." + extension
;
113 public void setOsgiFactory(OsgiFactory osgiFactory
) {
114 this.osgiFactory
= osgiFactory
;
117 public void setBaseUri(String baseUri
) {
118 this.baseUri
= baseUri
;
121 public void setVersionSeparator(String versionSeparator
) {
122 this.versionSeparator
= versionSeparator
;
125 public void setSourcesProvider(SourcesProvider sourcesProvider
) {
126 this.sourcesProvider
= sourcesProvider
;
129 public String
getUri() {
133 public String
getBaseUri() {
137 public String
getVersionSeparator() {
138 return versionSeparator
;