]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java
Work on the modular distribution - generate binaries, work on layout.
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / ArtifactIndexer.java
index fe8c00d2517d937af7e470a8ef8e917ba1ae20fa..f62142254bb6a27e7d9cc429804d03fe6ba2ad44 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@ import org.sonatype.aether.artifact.Artifact;
  */
 public class ArtifactIndexer implements NodeIndexer {
        private Log log = LogFactory.getLog(ArtifactIndexer.class);
+       private Boolean force = false;
 
        public Boolean support(String path) {
                String relativePath = getRelativePath(path);
@@ -52,6 +53,13 @@ public class ArtifactIndexer implements NodeIndexer {
        public void index(Node fileNode) {
                Artifact artifact = null;
                try {
+                       if (!support(fileNode.getPath()))
+                               return;
+
+                       // Already indexed
+                       if (!force && fileNode.isNodeType(SlcTypes.SLC_ARTIFACT))
+                               return;
+
                        if (!fileNode.isNodeType(NodeType.NT_FILE))
                                return;
 
@@ -73,6 +81,20 @@ public class ArtifactIndexer implements NodeIndexer {
                                        artifact.getClassifier());
                        JcrUtils.updateLastModified(fileNode);
 
+                       // make sure there are checksums
+                       String shaNodeName = fileNode.getName() + ".sha1";
+                       if (!fileNode.getParent().hasNode(shaNodeName)) {
+                               String sha = JcrUtils.checksumFile(fileNode, "SHA-1");
+                               JcrUtils.copyBytesAsFile(fileNode.getParent(), shaNodeName,
+                                               sha.getBytes());
+                       }
+                       String md5NodeName = fileNode.getName() + ".md5";
+                       if (!fileNode.getParent().hasNode(md5NodeName)) {
+                               String md5 = JcrUtils.checksumFile(fileNode, "MD5");
+                               JcrUtils.copyBytesAsFile(fileNode.getParent(), md5NodeName,
+                                               md5.getBytes());
+                       }
+
                        // set higher levels
                        Node artifactVersionBase = fileNode.getParent();
                        if (!artifactVersionBase
@@ -114,7 +136,7 @@ public class ArtifactIndexer implements NodeIndexer {
                                                artifact.getGroupId());
                        }
                        JcrUtils.updateLastModifiedAndParents(groupBase,
-                                       RepoConstants.ARTIFACTS_BASE_PATH);
+                                       RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH);
 
                        if (log.isTraceEnabled())
                                log.trace("Indexed artifact " + artifact + " on " + fileNode);
@@ -125,10 +147,15 @@ public class ArtifactIndexer implements NodeIndexer {
        }
 
        private String getRelativePath(String nodePath) {
-               String basePath = RepoConstants.ARTIFACTS_BASE_PATH;
+               String basePath = RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH;
                if (!nodePath.startsWith(basePath))
                        return null;
                String relativePath = nodePath.substring(basePath.length());
                return relativePath;
        }
+
+       public void setForce(Boolean force) {
+               this.force = force;
+       }
+
 }