Author: rmannibucau
Date: Thu Mar 14 20:58:59 2013
New Revision: 1456680

URL: http://svn.apache.org/r1456680
Log:
TOMEE-796 quick maven url generation

Modified:
    
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
    
tomee/tomee/trunk/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java

Modified: 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java?rev=1456680&r1=1456679&r2=1456680&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
 Thu Mar 14 20:58:59 2013
@@ -20,6 +20,7 @@ import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
 import java.net.Proxy;
 import java.net.ProxySelector;
 import java.net.URI;
@@ -30,13 +31,16 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
+import java.util.logging.Logger;
 
 public class ProvisioningUtil {
     public static final String OPENEJB_DEPLOYER_CACHE_FOLDER = 
"openejb.deployer.cache.folder";
     public static final String HTTP_PREFIX = "http";
+    public static final String MVN_PREFIX = "mvn:";
     private static final int CONNECT_TIMEOUT = 10000;
 
     private static final String ADDITIONAL_LIB_CONFIG = 
"provisioning.properties";
+    private static final String REPO1 = "http://repo1.maven.org/maven2/";;
     private static final String ZIP_KEY = "zip";
     private static final String DESTINATION_KEY = "destination";
     private static final String JAR_KEY = "jar";
@@ -112,10 +116,76 @@ public class ProvisioningUtil {
             final LocationResolver instance = (LocationResolver) 
clazz.newInstance();
             return instance.resolve(rawLocation);
         } catch (Exception e) {
+            if (rawLocation.startsWith(MVN_PREFIX)) {
+                try {
+                    final String repo1Url = 
quickMvnUrl(rawLocation.substring(MVN_PREFIX.length()).replace(":", "/"));
+                    return realLocation(repo1Url);
+                } catch (MalformedURLException e1) {
+                    
Logger.getLogger(ProvisioningUtil.class.getName()).severe("Can't find " + 
rawLocation);
+                }
+            }
             return rawLocation;
         }
     }
 
+    private static String quickMvnUrl(final String raw) throws 
MalformedURLException {
+        final StringBuilder builder = new StringBuilder();
+        final String toParse;
+        if (!raw.contains("!")) {
+            builder.append(REPO1);
+            toParse = raw;
+        } else {
+            final int repoIdx = raw.lastIndexOf("!");
+            toParse = raw.substring(repoIdx + 1);
+            final String repo = raw.substring(0, repoIdx);
+            builder.append(repo);
+            if (!repo.endsWith("/")) {
+                builder.append("/");
+            }
+        }
+
+        final String[] segments = toParse.split("/");
+        if (segments.length < 3) {
+            throw new MalformedURLException("Invalid path. " + raw);
+        }
+
+        final String group = segments[0];
+        if (group.trim().isEmpty()) {
+            throw new MalformedURLException("Invalid groupId. " + raw);
+        }
+        builder.append(group.replace('.', '/')).append("/");
+
+        final String artifact = segments[1];
+        if (artifact.trim().isEmpty()) {
+            throw new MalformedURLException("Invalid artifactId. " + raw);
+        }
+        builder.append(artifact).append("/");
+
+        final String version = segments[2];
+        if (version.trim().isEmpty()) {
+            throw new MalformedURLException("Invalid artifactId. " + raw);
+        }
+        builder.append(version).append("/");
+
+        String type = "jar";
+        if (segments.length >= 4 && segments[3].trim().length() > 0) {
+            type = segments[3];
+        }
+
+        String fullClassifier = null;
+        if (segments.length >= 5 && segments[4].trim().length() > 0) {
+            fullClassifier = "-" + segments[4];
+        }
+
+        builder.append(artifact).append("-").append(version);
+        if (fullClassifier != null) {
+            builder.append(fullClassifier);
+        }
+        builder.append(".").append(type);
+
+        return builder.toString();
+    }
+
     public static void addAdditionalLibraries() throws IOException {
         final File conf = SystemInstance.get().getConf(ADDITIONAL_LIB_CONFIG);
         if (conf == null || !conf.exists()) {

Modified: 
tomee/tomee/trunk/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java?rev=1456680&r1=1456679&r2=1456680&view=diff
==============================================================================
--- 
tomee/tomee/trunk/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
 (original)
+++ 
tomee/tomee/trunk/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
 Thu Mar 14 20:58:59 2013
@@ -18,6 +18,7 @@ package org.apache.openejb.resolver;
 
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.LocationResolver;
+import org.apache.openejb.loader.ProvisioningUtil;
 import org.apache.openejb.resolver.maven.Handler;
 import org.apache.openejb.resolver.maven.Parser;
 
@@ -27,18 +28,16 @@ import java.net.URL;
 import static org.apache.openejb.loader.ProvisioningUtil.cacheFile;
 
 public class Resolver implements LocationResolver {
-    public static final String MVN_PREFIX = "mvn:";
-
     @Override
     public String resolve(final String rawLocation) throws Exception {
-        if (rawLocation.startsWith(MVN_PREFIX) && rawLocation.length() > 
MVN_PREFIX.length()) {
+        if (rawLocation.startsWith(ProvisioningUtil.MVN_PREFIX) && 
rawLocation.length() > ProvisioningUtil.MVN_PREFIX.length()) {
 
-            final String info = rawLocation.substring(MVN_PREFIX.length());
+            final String info = 
rawLocation.substring(ProvisioningUtil.MVN_PREFIX.length());
             final Parser parser = new Parser(info);
             final File file = cacheFile(parser.getArtifactPath());
             if (!file.exists() || !file.canRead()) {
                 try {
-                    final URL url = new 
URL(MVN_PREFIX.substring(MVN_PREFIX.length() - 1), "localhost", -1, info, new 
Handler());
+                    final URL url = new 
URL(ProvisioningUtil.MVN_PREFIX.substring(ProvisioningUtil.MVN_PREFIX.length() 
- 1), "localhost", -1, info, new Handler());
                     final File parentFile = file.getParentFile();
                     if (!parentFile.exists()) {
                         if (!parentFile.mkdirs()) {


Reply via email to