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;
}
}
+ 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
/** 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()) {
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
*/
}
}
+ /**
+ * 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;
+ }
}