Alpha version of SLC Repo: can serve as backend for building Argeo Commons Basic
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 22 May 2012 13:46:47 +0000 (13:46 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 22 May 2012 13:46:47 +0000 (13:46 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@5313 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/JarFileIndexer.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/MavenConventionsUtils.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/NormalizeGroup.java

index 55019c4d47caa64acee8bd749b871c6347c863e8..80c750407a70c23343390db139aad1066fcc4941 100644 (file)
@@ -18,6 +18,7 @@ package org.argeo.slc.repo;
 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;
@@ -47,7 +48,7 @@ import org.osgi.framework.Version;
  * 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) {
@@ -78,13 +79,27 @@ public class JarFileIndexer implements NodeIndexer {
                                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())
@@ -116,6 +131,7 @@ public class JarFileIndexer implements NodeIndexer {
                                if (log.isTraceEnabled())
                                        log.trace("Indexed JAR file " + fileNode);
                        }
+
                } catch (Exception e) {
                        throw new SlcException("Cannot index jar " + fileNode, e);
                } finally {
index 684e75cdaed2761f152987e7f9df11c514cfc791..e6e51741b4670bd22235b64d03e020805ded12ea 100644 (file)
@@ -56,6 +56,7 @@ public class ImportMavenDependencies implements Runnable {
        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;
@@ -88,7 +89,7 @@ public class ImportMavenDependencies implements Runnable {
                                        node.remove();
                        }
                        session.save();
-                       
+
                        // sync
                        syncDistribution(session, artifacts);
                } catch (Exception e) {
@@ -112,7 +113,8 @@ public class ImportMavenDependencies implements Runnable {
                                        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);
index a19e0725a6fafa08bf55daba74f5c61f3dba3f68..2bf08c5b39d31ecaca75455085d82c0d2184260a 100644 (file)
@@ -89,7 +89,7 @@ public class MavenConventionsUtils {
        }
 
        public static String artifactsAsDependencyPom(Artifact pomArtifact,
-                       Set<Artifact> artifacts) {
+                       Set<Artifact> artifacts, Artifact parent) {
                StringBuffer p = new StringBuffer();
 
                // XML header
@@ -98,7 +98,16 @@ public class MavenConventionsUtils {
                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())
index 4c9a3d592e08001efdcac6acb932a970972da62c..57cc1145c9f2e909b6c4f5c8d47f5dee19bce35d 100644 (file)
@@ -60,6 +60,7 @@ public class NormalizeGroup implements Runnable, SlcNames {
        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();
@@ -155,10 +156,15 @@ public class NormalizeGroup implements Runnable, SlcNames {
                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;
        }
@@ -203,7 +209,7 @@ public class NormalizeGroup implements Runnable, SlcNames {
                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());
        }
@@ -254,7 +260,7 @@ public class NormalizeGroup implements Runnable, SlcNames {
                                        dependenciesSymbolicNames.add(dependencySymbolicName);
                        } else {
                                if (!JcrUtils.check(importPackage, SLC_OPTIONAL)
-                                               && !systemPackages.contains(importPackage))
+                                               && !systemPackages.contains(pkg))
                                        log.warn("No bundle found for pkg " + pkg);
                        }
                }
@@ -317,7 +323,15 @@ public class NormalizeGroup implements Runnable, SlcNames {
                // 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");
 
@@ -337,4 +351,8 @@ public class NormalizeGroup implements Runnable, SlcNames {
                this.groupId = groupId;
        }
 
+       public void setParentPomCoordinates(String parentPomCoordinates) {
+               this.parentPomCoordinates = parentPomCoordinates;
+       }
+
 }