Fix a few issues while testing and building distributions.
authorBruno Sinou <bsinou@argeo.org>
Thu, 20 Mar 2014 23:26:12 +0000 (23:26 +0000)
committerBruno Sinou <bsinou@argeo.org>
Thu, 20 Mar 2014 23:26:12 +0000 (23:26 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@6904 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

plugins/org.argeo.slc.client.ui.dist/META-INF/spring/commands.xml
plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyLocalJavaWorkspace.java
plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyWorkspace.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoUtils.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/GenerateBinaries.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/NormalizeGroup.java

index d5e75b8a9af7a1aeebe9eb53d2f03eeb503d0720..c8ec38b376af7718428478d69ecc3ce79b00e39e 100644 (file)
@@ -92,7 +92,7 @@
                <property name="javaRepoManager">
                        <bean factory-bean="slcRepoManager" factory-method="getJavaRepoManager" />
                </property>
-               <property name="nodeRepository" ref="nodeRepository" />
+               <property name="javaRepository" ref="javaRepository" />
        </bean>
 
        <bean id="createLocalJavaWorkspace"
index fa5ec4a005175005d72ace40fba9013e89847d52..441afb74df23edad60bc1137fad9d158afb7551d 100644 (file)
@@ -63,7 +63,7 @@ public class CopyLocalJavaWorkspace extends AbstractHandler {
        public final static String PARAM_SOURCE_WORKSPACE_NAME = "srcWkspName";
 
        // DEPENDENCY INJECTION
-       private Repository nodeRepository;
+       private Repository javaRepository;
        private JavaRepoManager javaRepoManager;
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
@@ -87,7 +87,7 @@ public class CopyLocalJavaWorkspace extends AbstractHandler {
                                                                                "Error", null));
                                return null;
                        }
-                       Job copyWkspJob = new CopyWkspJob(javaRepoManager, nodeRepository,
+                       Job copyWkspJob = new CopyWkspJob(javaRepoManager, javaRepository,
                                        wkspName, newWorkspaceName, HandlerUtil
                                                        .getActiveWorkbenchWindow(event).getShell()
                                                        .getDisplay());
@@ -100,17 +100,17 @@ public class CopyLocalJavaWorkspace extends AbstractHandler {
        private static class CopyWkspJob extends PrivilegedJob {
 
                private JavaRepoManager javaRepoManager;
-               private Repository localRepository;
+               private Repository javaRepository;
                private String srcWkspName;
                private String targetWkspName;
                private Display display;
 
                public CopyWkspJob(JavaRepoManager javaRepoManager,
-                               Repository localRepository, String srcWkspName,
+                               Repository javaRepository, String srcWkspName,
                                String targetWkspName, Display display) {
                        super("Duplicate workspace");
                        this.javaRepoManager = javaRepoManager;
-                       this.localRepository = localRepository;
+                       this.javaRepository = javaRepository;
                        this.srcWkspName = srcWkspName;
                        this.targetWkspName = targetWkspName;
                        this.display = display;
@@ -128,16 +128,16 @@ public class CopyLocalJavaWorkspace extends AbstractHandler {
                        Session targetSession = null;
                        try {
                                // Initialize source
-                               srcSession = localRepository.login(srcWkspName);
+                               srcSession = javaRepository.login(srcWkspName);
                                Node srcRootNode = srcSession.getRootNode();
 
                                // Create the workspace -
                                // FIXME will throw an error if workspace already exists
                                javaRepoManager.createWorkspace(targetWkspName);
-                               targetSession = localRepository.login(targetWkspName);
+                               targetSession = javaRepository.login(targetWkspName);
                                Node newRootNode = targetSession.getRootNode();
 
-                               RepoUtils.copy(srcRootNode, newRootNode);
+                               RepoUtils.copy(srcRootNode, newRootNode, monitor);
                                targetSession.save();
                                JcrUtils.addPrivilege(targetSession, "/",
                                                SlcConstants.ROLE_SLC, Privilege.JCR_ALL);
@@ -170,8 +170,8 @@ public class CopyLocalJavaWorkspace extends AbstractHandler {
        }
 
        /* DEPENDENCY INJECTION */
-       public void setNodeRepository(Repository nodeRepository) {
-               this.nodeRepository = nodeRepository;
+       public void setJavaRepository(Repository javaRepository) {
+               this.javaRepository = javaRepository;
        }
 
        public void setJavaRepoManager(JavaRepoManager javaRepoManager) {
index f547068a237f8ab19df34de9c878d9093cf492a7..7e4175a8d073a8093927f9860b39bf57b1a23ce7 100644 (file)
@@ -152,7 +152,7 @@ public class CopyWorkspace extends AbstractHandler {
                                // log in the newly created workspace
                                newSession = repository.login(credentials, targetWkspName);
                                Node newRootNode = newSession.getRootNode();
-                               RepoUtils.copy(srcRootNode, newRootNode);
+                               RepoUtils.copy(srcRootNode, newRootNode, monitor);
                                newSession.save();
                                JcrUtils.addPrivilege(newSession, "/", SlcConstants.ROLE_SLC,
                                                Privilege.JCR_ALL);
index 591da8e47a0b92b009c7c5a4134583f52755eb41..fa4fa0c70cfb03a0424a0c0565c7c541c7339533 100644 (file)
@@ -50,6 +50,7 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoMonitor;
 import org.argeo.jcr.ArgeoJcrUtils;
 import org.argeo.jcr.ArgeoNames;
 import org.argeo.jcr.ArgeoTypes;
@@ -512,9 +513,16 @@ public class RepoUtils implements ArgeoNames, SlcNames {
         * a workspace completely.
         */
        public static void copy(Node fromNode, Node toNode) {
+               copy(fromNode, toNode, null);
+       }
+
+       public static void copy(Node fromNode, Node toNode, ArgeoMonitor monitor) {
                try {
+                       String fromPath = fromNode.getPath();
+                       if (monitor != null)
+                               monitor.subTask("copying node :" + fromPath);
                        if (log.isDebugEnabled())
-                               log.debug("copy node :" + fromNode.getPath());
+                               log.debug("copy node :" + fromPath);
 
                        // FIXME : small hack to enable specific workspace copy
                        if (fromNode.isNodeType("rep:ACL")
@@ -595,6 +603,9 @@ public class RepoUtils implements ArgeoNames, SlcNames {
                        if (toNode.isNodeType(SlcTypes.SLC_ARTIFACT))
                                toNode.getSession().save();
 
+                       if (monitor != null)
+                               monitor.worked(1);
+
                } catch (RepositoryException e) {
                        throw new SlcException("Cannot copy " + fromNode + " to " + toNode,
                                        e);
index ed22006ad18178ac7d5efc72778ff0521d1d77b0..cd5283db4e1b568ff61d4bd1cff6a753df814cf4 100644 (file)
@@ -69,7 +69,7 @@ public class GenerateBinaries implements Runnable, SlcNames {
                        new ArtifactIdComparator());
        private Set<Artifact> sources = new TreeSet<Artifact>(
                        new ArtifactIdComparator());
-       
+
        // local cache
        private ArtifactIndexer artifactIndexer = new ArtifactIndexer();
        private Node allArtifactsHighestVersion;
@@ -94,13 +94,14 @@ public class GenerateBinaries implements Runnable, SlcNames {
         * Generates binaries-, sources- and sdk-version.pom artifacts for the given
         * version (or the highest of all children version if none is precised).
         * 
-        * By default, it includes each latest version of all artifact of this group. 
+        * By default, it includes each latest version of all artifact of this
+        * group.
         * 
-        * The 3 generated artifacts are then marked as modular distributions and indexed.
+        * The 3 generated artifacts are then marked as modular distributions and
+        * indexed.
         */
        public static void processGroupNode(Node groupNode, String version,
-                       ArgeoMonitor monitor)
-                       throws RepositoryException {
+                       ArgeoMonitor monitor) throws RepositoryException {
                // TODO set artifactsBase based on group node
                GenerateBinaries gb = new GenerateBinaries();
                String groupId = groupNode.getProperty(SlcNames.SLC_GROUP_BASE_ID)
@@ -178,11 +179,11 @@ public class GenerateBinaries implements Runnable, SlcNames {
                                }
                        }
                }
-//             if (log.isDebugEnabled()) {
-//                     int bundleCount = symbolicNamesToNodes.size();
-//                     log.debug("" + bundleCount + " bundles have been indexed for "
-//                                     + groupId);
-//             }
+               // if (log.isDebugEnabled()) {
+               // int bundleCount = symbolicNamesToNodes.size();
+               // log.debug("" + bundleCount + " bundles have been indexed for "
+               // + groupId);
+               // }
        }
 
        /** Does the real job : writes JCR META-DATA and generates binaries */
@@ -205,18 +206,17 @@ public class GenerateBinaries implements Runnable, SlcNames {
                                throw new SlcException("Group version " + version
                                                + " is empty.");
 
-//             int bundleCount = symbolicNamesToNodes.size();
-//
-//             int count = 1;
-//             for (Node bundleNode : symbolicNamesToNodes.values()) {
-//                     if (log.isDebugEnabled())
-//                             log.debug("Processing " + bundleNode.getName() + " ( " + count
-//                                             + "/" + bundleCount + " )");
-//
-//                     // processBundleArtifact(bundleNode);
-//                     // bundleNode.getSession().save();
-//                     count++;
-//             }
+               // int bundleCount = symbolicNamesToNodes.size();
+               // int count = 1;
+               // for (Node bundleNode : symbolicNamesToNodes.values()) {
+               // if (log.isDebugEnabled())
+               // log.debug("Processing " + bundleNode.getName() + " ( " + count
+               // + "/" + bundleCount + " )");
+               //
+               // // processBundleArtifact(bundleNode);
+               // // bundleNode.getSession().save();
+               // count++;
+               // }
 
                // indexes
                Set<Artifact> indexes = new TreeSet<Artifact>(
index 716bf345c4f83caaacb92365d4c23cd2534eefd2..99f31bb0414ae047c913ed7c6641ae1e09f60bee 100644 (file)
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringTokenizer;
 import java.util.TreeSet;
 
 import javax.jcr.Node;
@@ -38,7 +39,6 @@ import org.argeo.slc.aether.ArtifactIdComparator;
 import org.argeo.slc.jcr.SlcNames;
 import org.argeo.slc.jcr.SlcTypes;
 import org.argeo.slc.repo.ArtifactIndexer;
-import org.argeo.slc.repo.NodeIndexer;
 import org.argeo.slc.repo.RepoConstants;
 import org.argeo.slc.repo.RepoUtils;
 import org.argeo.slc.repo.maven.MavenConventionsUtils;
@@ -51,8 +51,8 @@ import org.sonatype.aether.util.artifact.DefaultArtifact;
  * Make sure that all JCR metadata and Maven metadata are consistent for this
  * group of OSGi bundles.
  * 
- * The job is now done via the various {@code NodeIndexer} of the WorkspaceManager.
- * TODO import dependencies in the workspace.
+ * The job is now done via the various {@code NodeIndexer} of the
+ * WorkspaceManager. TODO import dependencies in the workspace.
  */
 @Deprecated
 public class NormalizeGroup implements Runnable, SlcNames {
@@ -184,8 +184,8 @@ public class NormalizeGroup implements Runnable, SlcNames {
                                                SLC_ARTIFACT_VERSION).getString();
                        else
                                version = "0.0";
-//                             throw new SlcException("Group version " + version
-//                                             + " is empty.");
+               // throw new SlcException("Group version " + version
+               // + " is empty.");
 
                int bundleCount = symbolicNamesToNodes.size();
                if (log.isDebugEnabled())
@@ -221,7 +221,46 @@ public class NormalizeGroup implements Runnable, SlcNames {
                String rawVersion = artifactVersion.getProperty(SLC_ARTIFACT_VERSION)
                                .getString();
                String cleanVersion = rawVersion.replace("-SNAPSHOT", ".SNAPSHOT");
-               return new Version(cleanVersion);
+               Version osgiVersion = null;
+               // log invalid version value to enable tracking them
+               try {
+                       osgiVersion = new Version(cleanVersion);
+               } catch (IllegalArgumentException e) {
+                       log.error("Version string " + cleanVersion + " is invalid ");
+                       String twickedVersion = twickInvalidVersion(cleanVersion);
+                       osgiVersion = new Version(twickedVersion);
+                       log.error("Using " + twickedVersion + " instead");
+                       // throw e;
+               }
+               return osgiVersion;
+       }
+
+       private String twickInvalidVersion(String tmpVersion) {
+               String[] tokens = tmpVersion.split("\\.");
+               if (tokens.length == 3 && tokens[2].lastIndexOf("-") > 0) {
+                       String newSuffix = tokens[2].replaceFirst("-", ".");
+                       tmpVersion = tmpVersion.replaceFirst(tokens[2], newSuffix);
+               } else if (tokens.length > 4) {
+                       // FIXME manually remove other "."
+                       StringTokenizer st = new StringTokenizer(tmpVersion, ".", true);
+                       StringBuilder builder = new StringBuilder();
+                       // Major
+                       builder.append(st.nextToken()).append(st.nextToken());
+                       // Minor
+                       builder.append(st.nextToken()).append(st.nextToken());
+                       // Micro
+                       builder.append(st.nextToken()).append(st.nextToken());
+                       // Qualifier
+                       builder.append(st.nextToken());
+                       while (st.hasMoreTokens()) {
+                               // consume delimiter
+                               st.nextToken();
+                               if (st.hasMoreTokens())
+                                       builder.append("-").append(st.nextToken());
+                       }
+                       tmpVersion = builder.toString();
+               }
+               return tmpVersion;
        }
 
        private Artifact writeIndex(Session session, String artifactId,
@@ -363,8 +402,6 @@ public class NormalizeGroup implements Runnable, SlcNames {
 
                // TODO require bundles
 
-               
-               
                List<Node> dependencyNodes = new ArrayList<Node>();
                for (String depSymbName : dependenciesSymbolicNames) {
                        if (depSymbName.equals(ownSymbolicName))
@@ -431,6 +468,7 @@ public class NormalizeGroup implements Runnable, SlcNames {
                return p.toString();
        }
 
+       /* DEPENDENCY INJECTION */
        public void setRepository(Repository repository) {
                this.repository = repository;
        }