Author: adrianc
Date: Thu Apr  4 20:57:46 2013
New Revision: 1464750

URL: http://svn.apache.org/r1464750
Log:
Small optimization for location resolvers - don't go to the file system while 
building URLs. This will benefit single box (app server + DB server) 
installations.

Modified:
    
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java
    
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/OFBizHomeLocationResolver.java

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java?rev=1464750&r1=1464749&r2=1464750&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java
 Thu Apr  4 20:57:46 2013
@@ -18,13 +18,15 @@
  
*******************************************************************************/
 package org.ofbiz.base.location;
 
+import java.io.File;
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.ofbiz.base.component.ComponentConfig;
 import org.ofbiz.base.component.ComponentException;
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilURL;
 
 /**
  * A special location resolver that uses Strings like URLs, but with more 
options
@@ -36,46 +38,44 @@ public class ComponentLocationResolver i
     public static final String module = 
ComponentLocationResolver.class.getName();
 
     public URL resolveLocation(String location) throws MalformedURLException {
-        StringBuffer baseLocation = 
ComponentLocationResolver.getBaseLocation(location);
-        URL fileUrl = UtilURL.fromFilename(baseLocation.toString());
-
-        if (fileUrl == null) {
-            Debug.logWarning("Unable to get file URL for component location; 
expanded location was [" + baseLocation + "], original location was [" + 
location + "]", module);
+        String baseLocation = getBaseLocation(location).toString();
+        if (File.separatorChar != '/') {
+            baseLocation = baseLocation.replace(File.separatorChar, '/');
+        }
+        if (!baseLocation.startsWith("/")) {
+            baseLocation = "/".concat(baseLocation);
+        }
+        try {
+            return new URI("file", null, baseLocation, null).toURL();
+        } catch (URISyntaxException e) {
+            throw new MalformedURLException(e.getMessage());
         }
-        return fileUrl;
     }
 
-    public static StringBuffer getBaseLocation(String location) throws 
MalformedURLException {
-        StringBuffer baseLocation = new 
StringBuffer(FlexibleLocation.stripLocationType(location));
-
+    public static StringBuilder getBaseLocation(String location) throws 
MalformedURLException {
+        StringBuilder baseLocation = new 
StringBuilder(FlexibleLocation.stripLocationType(location));
         // componentName is between the first slash and the second
         int firstSlash = baseLocation.indexOf("/");
         int secondSlash = baseLocation.indexOf("/", firstSlash + 1);
         if (firstSlash != 0 || secondSlash == -1) {
-            throw new MalformedURLException("Bad component location [" + 
location + "]: base location missing slashes [" + baseLocation + "], first=" + 
firstSlash + ", second=" + secondSlash + "; should be like: 
component://{component-name}/relative/path");
+            throw new MalformedURLException("Bad component location [" + 
location + "]: base location missing slashes [" + baseLocation + "], first = " 
+ firstSlash + ", second = " + secondSlash + "; should be like: 
component://{component-name}/relative/path");
         }
         String componentName = baseLocation.substring(firstSlash + 1, 
secondSlash);
-
         // got the componentName, now remove it from the baseLocation, 
removing the second slash too (just in case the rootLocation has one)
         baseLocation.delete(0, secondSlash + 1);
-
-        String rootLocation;
         try {
-            rootLocation = ComponentConfig.getRootLocation(componentName);
+            String rootLocation = 
ComponentConfig.getRootLocation(componentName);
+            // if there is not a forward slash between the two, add it
+            if (baseLocation.charAt(0) != '/' && 
rootLocation.charAt(rootLocation.length() - 1) != '/') {
+                baseLocation.insert(0, '/');
+            }
+            // insert the root location and we're done
+            baseLocation.insert(0, rootLocation);
+            return baseLocation;
         } catch (ComponentException e) {
             String errMsg = "Could not get root location for component with 
name [" + componentName + "], error was: " + e.toString();
             Debug.logError(e, errMsg, module);
             throw new MalformedURLException(errMsg);
         }
-
-        // if there is not a forward slash between the two, add it
-        if (baseLocation.charAt(0) != '/' && 
rootLocation.charAt(rootLocation.length() - 1) != '/') {
-            baseLocation.insert(0, '/');
-        }
-
-        // insert the root location and we're done
-        baseLocation.insert(0, rootLocation);
-
-        return baseLocation;
     }
 }

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/OFBizHomeLocationResolver.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/location/OFBizHomeLocationResolver.java?rev=1464750&r1=1464749&r2=1464750&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/OFBizHomeLocationResolver.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/location/OFBizHomeLocationResolver.java
 Thu Apr  4 20:57:46 2013
@@ -18,11 +18,12 @@
  
*******************************************************************************/
 package org.ofbiz.base.location;
 
+import java.io.File;
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
-import org.ofbiz.base.util.UtilURL;
-
 /**
  * A special location resolver that uses Strings like URLs, but with more 
options
  *
@@ -38,16 +39,23 @@ public class OFBizHomeLocationResolver i
             String errMsg = "The Java environment (-Dxxx=yyy) variable with 
name " + envName + " is not set, cannot resolve location.";
             throw new MalformedURLException(errMsg);
         }
-
         StringBuilder baseLocation = new 
StringBuilder(FlexibleLocation.stripLocationType(location));
-
         // if there is not a forward slash between the two, add it
         if (baseLocation.charAt(0) != '/' && 
propValue.charAt(propValue.length() - 1) != '/') {
             baseLocation.insert(0, '/');
         }
-
         baseLocation.insert(0, propValue);
-
-        return UtilURL.fromFilename(baseLocation.toString());
+        String fileLocation = baseLocation.toString();
+        if (File.separatorChar != '/') {
+            fileLocation = fileLocation.replace(File.separatorChar, '/');
+        }
+        if (!fileLocation.startsWith("/")) {
+            fileLocation = "/".concat(fileLocation);
+        }
+        try {
+            return new URI("file", null, fileLocation, null).toURL();
+        } catch (URISyntaxException e) {
+            throw new MalformedURLException(e.getMessage());
+        }
     }
 }


Reply via email to