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