From: Mathieu Baudier Date: Fri, 2 Jan 2015 14:15:51 +0000 (+0000) Subject: Improve 'do not modify' mode X-Git-Tag: argeo-slc-2.1.7~149 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=dd56d33a4c2a98863709f07218c9af99e1e90bbb;p=gpl%2Fargeo-slc.git Improve 'do not modify' mode git-svn-id: https://svn.argeo.org/slc/trunk@7611 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/BndWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/BndWrapper.java index 6601db0b9..7b75b903d 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/BndWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/BndWrapper.java @@ -1,10 +1,12 @@ package org.argeo.slc.repo.osgi; +import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; import java.util.jar.Manifest; +import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.slc.CategorizedNameVersion; @@ -38,9 +40,11 @@ public class BndWrapper implements Constants, CategorizedNameVersion, public void wrapJar(InputStream in, OutputStream out) { Builder b = new Builder(); + Jar jar = null; try { - Jar jar = new Jar(null, in); + byte[] jarBytes = IOUtils.toByteArray(in); + jar = new Jar(null, new ByteArrayInputStream(jarBytes)); Manifest sourceManifest = jar.getManifest(); Version versionToUse; @@ -58,15 +62,15 @@ public class BndWrapper implements Constants, CategorizedNameVersion, // Version String sourceVersion = sourceManifest.getMainAttributes() .getValue(BUNDLE_VERSION); - if (version == null && sourceVersion == null) { + if (getVersion() == null && sourceVersion == null) { throw new SlcException("A bundle version must be defined."); - } else if (version == null && sourceVersion != null) { + } else if (getVersion() == null && sourceVersion != null) { versionToUse = new Version(sourceVersion); version = sourceVersion; // set wrapper version - } else if (version != null && sourceVersion == null) { - versionToUse = new Version(version); + } else if (getVersion() != null && sourceVersion == null) { + versionToUse = new Version(getVersion()); } else {// both set - versionToUse = new Version(version); + versionToUse = new Version(getVersion()); Version sv = new Version(sourceVersion); if (versionToUse.getMajor() != sv.getMajor() || versionToUse.getMinor() != sv.getMinor() @@ -78,11 +82,12 @@ public class BndWrapper implements Constants, CategorizedNameVersion, } } } else { - versionToUse = new Version(version); + versionToUse = new Version(getVersion()); } if (doNotModify) { - jar.write(out); + IOUtils.write(jarBytes, out); + // jar.write(out); } else { Properties properties = new Properties(); @@ -114,11 +119,14 @@ public class BndWrapper implements Constants, CategorizedNameVersion, Jar newJar = b.build(); newJar.write(out); + newJar.close(); } } catch (Exception e) { throw new SlcException("Cannot wrap jar", e); } finally { b.close(); + if (jar != null) + jar.close(); } } @@ -196,7 +204,7 @@ public class BndWrapper implements Constants, CategorizedNameVersion, } public Artifact getArtifact() { - return new DefaultArtifact(groupId, name, "jar", version); + return new DefaultArtifact(groupId, name, "jar", getVersion()); } @Override diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java index 3de52c53c..085e1ddfd 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/MavenWrapper.java @@ -20,6 +20,10 @@ import org.sonatype.aether.artifact.Artifact; import org.sonatype.aether.util.artifact.DefaultArtifact; import org.sonatype.aether.util.artifact.SubArtifact; +/** + * BND wrapper based on a Maven artifact available from one of the configured + * repositories. + */ public class MavenWrapper extends BndWrapper implements Runnable { private final static Log log = LogFactory.getLog(MavenWrapper.class); @@ -31,6 +35,14 @@ public class MavenWrapper extends BndWrapper implements Runnable { setFactory(this); } + @Override + public String getVersion() { + String version = super.getVersion(); + if (version != null) + return version; + return new DefaultArtifact(sourceCoords).getVersion(); + } + public void run() { Session distSession = null; Session javaSession = null; diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java index c07fde99e..cf0422e43 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/UriWrapper.java @@ -42,8 +42,8 @@ public class UriWrapper extends BndWrapper implements Runnable { public void run() { Session distSession = null; Session javaSession = null; - InputStream in; - ByteArrayOutputStream out; + InputStream in = null; + ByteArrayOutputStream out = null; Jar jar = null; try { distSession = osgiFactory.openDistSession(); @@ -57,8 +57,6 @@ public class UriWrapper extends BndWrapper implements Runnable { // TODO factorize with Maven in = sourceArtifact.getNode(Node.JCR_CONTENT) .getProperty(Property.JCR_DATA).getBinary().getStream(); - out=null; - out = new ByteArrayOutputStream(); wrapJar(in, out); Node newJarNode = RepoUtils @@ -99,6 +97,8 @@ public class UriWrapper extends BndWrapper implements Runnable { } catch (Exception e) { throw new SlcException("Cannot wrap URI " + uri, e); } finally { + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(out); JcrUtils.logoutQuietly(distSession); JcrUtils.logoutQuietly(javaSession); if (jar != null)