]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/ArtifactIndexer.java
Improve repo sync
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / ArtifactIndexer.java
index 841f22d38b8e9713340494cc989bd1c25c791fb8..acb05b48395206f615efe3bb1308524faee1df95 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.argeo.slc.repo;
 
 import javax.jcr.Node;
@@ -58,6 +73,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
@@ -70,8 +99,14 @@ public class ArtifactIndexer implements NodeIndexer {
                                                artifact.getArtifactId());
                                artifactVersionBase.setProperty(SlcNames.SLC_GROUP_ID,
                                                artifact.getGroupId());
-                               JcrUtils.updateLastModified(artifactVersionBase);
                        }
+                       JcrUtils.updateLastModified(artifactVersionBase);
+
+                       // pom
+                       if (artifact.getExtension().equals("pom")) {
+                               // TODO read to make it a distribution
+                       }
+
                        Node artifactBase = artifactVersionBase.getParent();
                        if (!artifactBase.isNodeType(SlcTypes.SLC_ARTIFACT_BASE)) {
                                artifactBase.addMixin(SlcTypes.SLC_ARTIFACT_BASE);
@@ -79,10 +114,9 @@ public class ArtifactIndexer implements NodeIndexer {
                                                artifact.getArtifactId());
                                artifactBase.setProperty(SlcNames.SLC_GROUP_ID,
                                                artifact.getGroupId());
-                               JcrUtils.updateLastModified(artifactBase);
                        }
-                       
-                       // TODO do we really need group base?
+                       JcrUtils.updateLastModified(artifactBase);
+
                        Node groupBase = artifactBase.getParent();
                        if (!groupBase.isNodeType(SlcTypes.SLC_GROUP_BASE)) {
                                // if (groupBase.isNodeType(SlcTypes.SLC_ARTIFACT_BASE)) {
@@ -92,8 +126,9 @@ public class ArtifactIndexer implements NodeIndexer {
                                groupBase.addMixin(SlcTypes.SLC_GROUP_BASE);
                                groupBase.setProperty(SlcNames.SLC_GROUP_BASE_ID,
                                                artifact.getGroupId());
-                               JcrUtils.updateLastModified(groupBase);
                        }
+                       JcrUtils.updateLastModifiedAndParents(groupBase,
+                                       RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH);
 
                        if (log.isTraceEnabled())
                                log.trace("Indexed artifact " + artifact + " on " + fileNode);
@@ -104,7 +139,7 @@ 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());