X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2FArtifactIndexer.java;fp=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2FArtifactIndexer.java;h=27c6806a3e98d062c43462e5ffcf67c95f8e6dbb;hb=91379d32885f30ad22147a45998ae270da032c83;hp=6de832b91a6e323e265f2ff713f838439ad08b02;hpb=5686259eb6e4da5006034087c71f349b3097be8d;p=gpl%2Fargeo-slc.git
diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java
index 6de832b91..27c6806a3 100644
--- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java
+++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java
@@ -16,6 +16,7 @@
package org.argeo.slc.repo;
import javax.jcr.Node;
+import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NodeType;
@@ -97,24 +98,25 @@ public class ArtifactIndexer implements NodeIndexer, SlcNames {
md5.getBytes());
}
- // Create a default pom only with artifact coordinates if none
- // already exist
+ // Create a default pom if none already exist
String fileNodeName = fileNode.getName();
- String pomName= null;
+ String pomName = null;
if (fileNodeName.endsWith(".jar"))
- pomName = fileNodeName.substring(0, fileNodeName.length()-".jar".length()) + ".pom";
-
+ pomName = fileNodeName.substring(0, fileNodeName.length()
+ - ".jar".length())
+ + ".pom";
+
if (pomName != null && !fileNode.getParent().hasNode(pomName)) {
String pom = generatePomForBundle(fileNode);
Node pomNode = JcrUtils.copyBytesAsFile(fileNode.getParent(),
pomName, pom.getBytes());
// corresponding check sums
String sha = JcrUtils.checksumFile(pomNode, "SHA-1");
- JcrUtils.copyBytesAsFile(fileNode.getParent(), pomName + ".sha1",
- sha.getBytes());
+ JcrUtils.copyBytesAsFile(fileNode.getParent(), pomName
+ + ".sha1", sha.getBytes());
String md5 = JcrUtils.checksumFile(fileNode, "MD5");
- JcrUtils.copyBytesAsFile(fileNode.getParent(), pomName +".md5",
- md5.getBytes());
+ JcrUtils.copyBytesAsFile(fileNode.getParent(),
+ pomName + ".md5", md5.getBytes());
}
// set higher levels
@@ -182,20 +184,19 @@ public class ArtifactIndexer implements NodeIndexer, SlcNames {
private String generatePomForBundle(Node n) throws RepositoryException {
StringBuffer p = new StringBuffer();
-
- // XML header
p.append("\n");
p.append("\n");
p.append("4.0.0");
- // Artifact
+ // Categorized name version
p.append("").append(JcrUtils.get(n, SLC_GROUP_ID))
.append("\n");
p.append("").append(JcrUtils.get(n, SLC_ARTIFACT_ID))
.append("\n");
p.append("").append(JcrUtils.get(n, SLC_ARTIFACT_VERSION))
.append("\n");
- p.append("pom\n");
+ // TODO make it more generic
+ p.append("jar\n");
if (n.hasProperty(SLC_ + Constants.BUNDLE_NAME))
p.append("")
.append(JcrUtils.get(n, SLC_ + Constants.BUNDLE_NAME))
@@ -205,7 +206,66 @@ public class ArtifactIndexer implements NodeIndexer, SlcNames {
.append(JcrUtils
.get(n, SLC_ + Constants.BUNDLE_DESCRIPTION))
.append("\n");
+
+ // Dependencies in case of a distribution
+ if (n.isNodeType(SlcTypes.SLC_MODULAR_DISTRIBUTION)) {
+ p.append(getDependenciesSnippet(n.getNode(SlcNames.SLC_MODULES)
+ .getNodes()));
+ p.append(getDependencyManagementSnippet(n.getNode(
+ SlcNames.SLC_MODULES).getNodes()));
+ }
p.append("\n");
return p.toString();
}
+
+ private String getDependenciesSnippet(NodeIterator nit)
+ throws RepositoryException {
+ StringBuilder b = new StringBuilder();
+ b.append("\n");
+ while (nit.hasNext()) {
+ Node currModule = nit.nextNode();
+ if (currModule.isNodeType(SlcTypes.SLC_MODULE_COORDINATES)) {
+ b.append(getDependencySnippet(
+ currModule.getProperty(SlcNames.SLC_CATEGORY)
+ .getString(),
+ currModule.getProperty(SlcNames.SLC_NAME).getString(),
+ null));
+ }
+ }
+ b.append("\n");
+ return b.toString();
+ }
+
+ private String getDependencyManagementSnippet(NodeIterator nit)
+ throws RepositoryException {
+ StringBuilder b = new StringBuilder();
+ b.append("\n");
+ b.append("\n");
+ while (nit.hasNext()) {
+ Node currModule = nit.nextNode();
+ if (currModule.isNodeType(SlcTypes.SLC_MODULE_COORDINATES)) {
+ b.append(getDependencySnippet(
+ currModule.getProperty(SlcNames.SLC_CATEGORY)
+ .getString(),
+ currModule.getProperty(SlcNames.SLC_NAME).getString(),
+ currModule.getProperty(SlcNames.SLC_VERSION)
+ .getString()));
+ }
+ }
+ b.append("\n");
+ b.append("\n");
+ return b.toString();
+ }
+
+ private String getDependencySnippet(String category, String name,
+ String version) {
+ StringBuilder b = new StringBuilder();
+ b.append("\n");
+ b.append("\t").append(category).append("\n");
+ b.append("\t").append(name).append("\n");
+ if (version != null)
+ b.append("\t").append(version).append("\n");
+ b.append("\n");
+ return b.toString();
+ }
}
\ No newline at end of file