X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2FRepoUtils.java;h=6d22cbe687632ebcff13c7f4df87412ab4e653fd;hb=aeaa45c7cfbb4f2376a4ec02e6dd71d711a52c5b;hp=80569b159cc495b14164942d37bd3f0c8be622ff;hpb=418a82cb85b477af9f2b8d850ca14c8512546643;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java index 80569b159..6d22cbe68 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java @@ -23,11 +23,14 @@ import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.jcr.JcrUtils; import org.argeo.slc.BasicNameVersion; import org.argeo.slc.NameVersion; import org.argeo.slc.SlcException; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; +import org.argeo.slc.repo.maven.MavenConventionsUtils; +import org.osgi.framework.Constants; import org.sonatype.aether.artifact.Artifact; import org.sonatype.aether.util.artifact.DefaultArtifact; @@ -61,6 +64,24 @@ public class RepoUtils implements SlcNames { } } + public static byte[] packageAsPdeSource(InputStream sourceJar, + NameVersion nameVersion) { + String sourceSymbolicName = nameVersion.getName() + ".source"; + + Manifest sourceManifest = null; + sourceManifest = new Manifest(); + sourceManifest.getMainAttributes().put( + Attributes.Name.MANIFEST_VERSION, "1.0"); + sourceManifest.getMainAttributes().putValue("Bundle-SymbolicName", + sourceSymbolicName); + sourceManifest.getMainAttributes().putValue("Bundle-Version", + nameVersion.getVersion()); + sourceManifest.getMainAttributes().putValue("Eclipse-SourceBundle", + nameVersion.getName() + ";version=" + nameVersion.getVersion()); + + return modifyManifest(sourceJar, sourceManifest); + } + /** * Check whether the file as already been packaged as PDE source, in order * not to mess with Jar signing @@ -189,25 +210,10 @@ public class RepoUtils implements SlcNames { /** Read the OSGi {@link NameVersion} */ public static NameVersion readNameVersion(File artifactFile) { JarInputStream jarInputStream = null; - try { - BasicNameVersion nameVersion = new BasicNameVersion(); jarInputStream = new JarInputStream(new FileInputStream( artifactFile)); - nameVersion.setName(jarInputStream.getManifest() - .getMainAttributes().getValue("Bundle-SymbolicName")); - - // Skip additional specs such as - // ; singleton:=true - if (nameVersion.getName().indexOf(';') > -1) { - nameVersion.setName(new StringTokenizer(nameVersion.getName(), - " ;").nextToken()); - } - - nameVersion.setVersion(jarInputStream.getManifest() - .getMainAttributes().getValue("Bundle-Version")); - - return nameVersion; + return readNameVersion(jarInputStream.getManifest()); } catch (Exception e) { // probably not a jar, skipping if (log.isDebugEnabled()) { @@ -220,6 +226,26 @@ public class RepoUtils implements SlcNames { return null; } + /** Read the OSGi {@link NameVersion} */ + public static NameVersion readNameVersion(Manifest manifest) { + BasicNameVersion nameVersion = new BasicNameVersion(); + nameVersion.setName(manifest.getMainAttributes().getValue( + Constants.BUNDLE_SYMBOLICNAME)); + + // Skip additional specs such as + // ; singleton:=true + if (nameVersion.getName().indexOf(';') > -1) { + nameVersion + .setName(new StringTokenizer(nameVersion.getName(), " ;") + .nextToken()); + } + + nameVersion.setVersion(manifest.getMainAttributes().getValue( + Constants.BUNDLE_VERSION)); + + return nameVersion; + } + /* * DATA MODEL */ @@ -244,6 +270,29 @@ public class RepoUtils implements SlcNames { } } + /** + * Copy this bytes array as an artifact, relative to the root of the + * repository (typically the workspace root node) + */ + public static Node copyBytesAsArtifact(Node artifactsBase, + Artifact artifact, byte[] bytes) throws RepositoryException { + String parentPath = MavenConventionsUtils.artifactParentPath( + artifactsBase.getPath(), artifact); + Node folderNode = JcrUtils.mkfolders(artifactsBase.getSession(), + parentPath); + return JcrUtils.copyBytesAsFile(folderNode, + MavenConventionsUtils.artifactFileName(artifact), bytes); + } + private RepoUtils() { } + + /** If a source return the base bundle name, does not change otherwise */ + public static String extractBundleNameFromSourceName(String sourceBundleName) { + if (sourceBundleName.endsWith(".source")) + return sourceBundleName.substring(0, sourceBundleName.length() + - ".source".length()); + else + return sourceBundleName; + } }