git-svn-id: https://svn.argeo.org/slc/trunk@6893 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc
authorBruno Sinou <bsinou@argeo.org>
Wed, 12 Mar 2014 13:12:42 +0000 (13:12 +0000)
committerBruno Sinou <bsinou@argeo.org>
Wed, 12 Mar 2014 13:12:42 +0000 (13:12 +0000)
modules/org.argeo.slc.server.repo/META-INF/spring/services.xml
plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/OpenGenerateBinariesWizard.java
plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/model/WorkspaceElem.java
runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/GenerateBinaries.java

index 42f077ae380f49e3b48a99ed6e160424a9d0e9bb..93fb545b146d7e1700c65b09e86ee63436109047 100644 (file)
@@ -27,6 +27,7 @@
                        <list>
                                <bean class="org.argeo.slc.repo.ArtifactIndexer" />
                                <bean class="org.argeo.slc.repo.JarFileIndexer" />
+                               <bean class="org.argeo.slc.repo.DistributionBundleIndexer" />
                        </list>
                </property>
                <property name="jcrRepository" ref="javaRepository" />
index d9f72d16bee93a71e2029dda9c37bc9e9a504e3d..288475f23e8c9170a8352aab4f31fe3f5270e3ab 100644 (file)
@@ -17,8 +17,14 @@ package org.argeo.slc.client.ui.dist.commands;
 
 import java.util.Iterator;
 
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.slc.SlcException;
 import org.argeo.slc.client.ui.dist.DistPlugin;
 import org.argeo.slc.client.ui.dist.model.ModularDistBaseElem;
+import org.argeo.slc.client.ui.dist.model.WorkspaceElem;
 import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
 import org.argeo.slc.client.ui.dist.wizards.GenerateBinariesWizard;
 import org.eclipse.core.commands.AbstractHandler;
@@ -56,14 +62,27 @@ public class OpenGenerateBinariesWizard extends AbstractHandler {
                                Object element = it.next();
                                if (element instanceof ModularDistBaseElem) {
                                        ModularDistBaseElem elem = (ModularDistBaseElem) element;
+                                       Session newSession = null;
+                                       try {
+                                               Node cBase = elem.getCategoryBase();
+                                               String path = cBase.getPath();
+                                               newSession = ((WorkspaceElem) elem.getParent())
+                                                               .getNewSession();
+                                               GenerateBinariesWizard wizard = new GenerateBinariesWizard(
+                                                               newSession.getNode(path));
+
+                                               WizardDialog dialog = new WizardDialog(
+                                                               HandlerUtil.getActiveShell(event), wizard);
+                                               int result = dialog.open();
 
-                                       GenerateBinariesWizard wizard = new GenerateBinariesWizard(
-                                                       elem.getCategoryBase());
-                                       WizardDialog dialog = new WizardDialog(
-                                                       HandlerUtil.getActiveShell(event), wizard);
-                                       int result = dialog.open();
-                                       if (result == Dialog.OK)
-                                               CommandHelpers.callCommand(RefreshDistributionsView.ID);
+                                               if (result == Dialog.OK)
+                                                       CommandHelpers
+                                                                       .callCommand(RefreshDistributionsView.ID);
+                                       } catch (RepositoryException re) {
+                                               throw new SlcException(
+                                                               "Unable to duplicate session for node " + elem,
+                                                               re);
+                                       }
                                }
 
                        }
index a163974072607d43659a534c250c200e7479c6d2..0567b31939fd53410ec3481532497d7275e2fc81 100644 (file)
@@ -44,6 +44,11 @@ public class WorkspaceElem extends DistParentElem {
                currSession = repoElem.repositoryLogin(getName());
        }
 
+       /** Utility to create a new Session with correct credential in this context */
+       public Session getNewSession() {
+               return repoElem.repositoryLogin(getName());
+       }
+
        public boolean hasChildren() {
                try {
                        if (isConnected())
index a1e2a071d263d941781ce67b8bf8e26ffc109e3b..6bcf01a25f45cfcd5ee47f817dffa6fe08da5ade 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.Credentials;
@@ -160,9 +161,9 @@ public class GenerateBinaries implements Runnable, SlcNames {
                                                        .hasNext();) {
                                                Node file = files.nextNode();
                                                if (file.isNodeType(SlcTypes.SLC_BUNDLE_ARTIFACT)) {
-                                                       preProcessBundleArtifact(file);
                                                        if (log.isDebugEnabled())
-                                                               log.debug("Pre-processed " + file.getName());
+                                                               log.debug("Pre-Processing " + file.getName());
+                                                       preProcessBundleArtifact(file);
                                                }
                                        }
                                }
@@ -199,11 +200,12 @@ public class GenerateBinaries implements Runnable, SlcNames {
 
                int count = 1;
                for (Node bundleNode : symbolicNamesToNodes.values()) {
+                       if (log.isDebugEnabled())
+                               log.debug("Processing " + bundleNode.getName() + " ( " + count
+                                               + "/" + bundleCount + " )");
+
                        processBundleArtifact(bundleNode);
                        bundleNode.getSession().save();
-                       if (log.isDebugEnabled())
-                               log.debug(count + "/" + bundleCount + " Processed "
-                                               + bundleNode.getName());
                        count++;
                }
 
@@ -268,7 +270,46 @@ public class GenerateBinaries 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;
        }
 
        protected void preProcessBundleArtifact(Node bundleNode)