import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.Attributes.Name;
* Indexes jar file, currently supports standard J2SE and OSGi metadata (both
* from MANIFEST)
*/
-public class JarFileIndexer implements NodeIndexer {
+public class JarFileIndexer implements NodeIndexer, SlcNames {
private final static Log log = LogFactory.getLog(JarFileIndexer.class);
public Boolean support(String path) {
log.error(fileNode + " has no MANIFEST");
return;
}
+
bo = new ByteArrayOutputStream();
manifest.write(bo);
- bi = new ByteArrayInputStream(bo.toByteArray());
+ byte[] newManifest = bo.toByteArray();
+ if (fileNode.hasProperty(SLC_MANIFEST)) {
+ byte[] storedManifest = JcrUtils.getBinaryAsBytes(fileNode
+ .getProperty(SLC_MANIFEST));
+ if (Arrays.equals(newManifest, storedManifest)) {
+ if (log.isTraceEnabled())
+ log.trace("Manifest not changed, doing nothing "
+ + fileNode);
+ return;
+ }
+ }
+
+ bi = new ByteArrayInputStream(newManifest);
manifestBinary = jcrSession.getValueFactory().createBinary(bi);
// standard jar file
fileNode.addMixin(SlcTypes.SLC_JAR_FILE);
+
fileNode.setProperty(SlcNames.SLC_MANIFEST, manifestBinary);
Attributes attrs = manifest.getMainAttributes();
if (log.isTraceEnabled())
if (log.isTraceEnabled())
log.trace("Indexed JAR file " + fileNode);
}
+
} catch (Exception e) {
throw new SlcException("Cannot index jar " + fileNode, e);
} finally {
private AetherTemplate aetherTemplate;
private String rootCoordinates = "org.argeo.dep:versions-all:pom:1.2.0";
private String distCoordinates = "org.argeo.tp:dist:pom:1.3.0";
+ private String parentPomCoordinates = "org.argeo:parent:1.2.0";
private Set<String> excludedArtifacts = new HashSet<String>();
private Repository repository;
node.remove();
}
session.save();
-
+
// sync
syncDistribution(session, artifacts);
} catch (Exception e) {
registeredArtifacts, pomArtifact);
Artifact sdkArtifact = new DefaultArtifact(distCoordinates);
String sdkPom = MavenConventionsUtils.artifactsAsDependencyPom(
- sdkArtifact, registeredArtifacts);
+ sdkArtifact, registeredArtifacts, new DefaultArtifact(
+ parentPomCoordinates));
if (log.isDebugEnabled())
log.debug("Gathered " + registeredArtifacts.size()
+ " artifacts:\n" + sdkPom);
}
public static String artifactsAsDependencyPom(Artifact pomArtifact,
- Set<Artifact> artifacts) {
+ Set<Artifact> artifacts, Artifact parent) {
StringBuffer p = new StringBuffer();
// XML header
p.append("<modelVersion>4.0.0</modelVersion>");
// Artifact
- p.append("<parent><groupId>org.argeo</groupId><artifactId>parent</artifactId><version>1.2.0</version></parent>\n");
+ if (parent != null) {
+ p.append("<parent>\n");
+ p.append("<groupId>").append(parent.getGroupId())
+ .append("</groupId>\n");
+ p.append("<artifactId>").append(parent.getArtifactId())
+ .append("</artifactId>\n");
+ p.append("<version>").append(parent.getVersion())
+ .append("</version>\n");
+ p.append("</parent>\n");
+ }
p.append("<groupId>").append(pomArtifact.getGroupId())
.append("</groupId>\n");
p.append("<artifactId>").append(pomArtifact.getArtifactId())
private String groupId;
private String artifactBasePath = "/";
private String version = "1.3.0";
+ private String parentPomCoordinates = "org.argeo:parent:1.3.0";
private ArtifactIndexer artifactIndexer = new ArtifactIndexer();
private JarFileIndexer jarFileIndexer = new JarFileIndexer();
Artifact artifact = new DefaultArtifact(groupId, artifactId, "pom",
version);
String pom = MavenConventionsUtils.artifactsAsDependencyPom(artifact,
- artifacts);
+ artifacts, new DefaultArtifact(parentPomCoordinates));
Node node = RepoUtils.copyBytesAsArtifact(
session.getNode(artifactBasePath), artifact, pom.getBytes());
artifactIndexer.index(node);
+
+ // FIXME factorize
+ String pomSha = JcrUtils.checksumFile(node, "SHA-1");
+ JcrUtils.copyBytesAsFile(node.getParent(), node.getName() + ".sha1",
+ pomSha.getBytes());
session.save();
return artifact;
}
String bundleSha = JcrUtils.checksumFile(bundleNode, "SHA-1");
JcrUtils.copyBytesAsFile(artifactFolder,
bundleNode.getName() + ".sha1", bundleSha.getBytes());
- String pomSha = JcrUtils.checksumFile(bundleNode, "SHA-1");
+ String pomSha = JcrUtils.checksumFile(pomNode, "SHA-1");
JcrUtils.copyBytesAsFile(artifactFolder, pomNode.getName() + ".sha1",
pomSha.getBytes());
}
dependenciesSymbolicNames.add(dependencySymbolicName);
} else {
if (!JcrUtils.check(importPackage, SLC_OPTIONAL)
- && !systemPackages.contains(importPackage))
+ && !systemPackages.contains(pkg))
log.warn("No bundle found for pkg " + pkg);
}
}
// Dependency management
p.append("<dependencyManagement>\n");
p.append("<dependencies>\n");
- // TODO import SDK
+ p.append("<dependency>\n");
+ p.append("\t<groupId>").append(groupId).append("</groupId>\n");
+ p.append("\t<artifactId>")
+ .append(ownSymbolicName.endsWith(".source") ? SOURCES_ARTIFACT_ID
+ : BINARIES_ARTIFACT_ID).append("</artifactId>\n");
+ p.append("\t<version>").append(version).append("</version>\n");
+ p.append("\t<type>pom</type>\n");
+ p.append("\t<scope>import</scope>\n");
+ p.append("</dependency>\n");
p.append("</dependencies>\n");
p.append("</dependencyManagement>\n");
this.groupId = groupId;
}
+ public void setParentPomCoordinates(String parentPomCoordinates) {
+ this.parentPomCoordinates = parentPomCoordinates;
+ }
+
}