Author: jsdelfino
Date: Sat May 17 09:47:58 2008
New Revision: 657395

URL: http://svn.apache.org/viewvc?rev=657395&view=rev
Log:
Enable a binding URI to be correctly combined with a node's base URI in the 
following cases: it starts with a /, but the base URI still needs to be 
prepended to it, the base URI contains or ends with a URI fragment delimiter 
(as it's the case with EJB corbaname URIs), or the URI uses an opaque scheme.

Modified:
    
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseConfigurationBuilderImpl.java

Modified: 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseConfigurationBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseConfigurationBuilderImpl.java?rev=657395&r1=657394&r2=657395&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseConfigurationBuilderImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseConfigurationBuilderImpl.java
 Sat May 17 09:47:58 2008
@@ -1169,7 +1169,7 @@
       * @param defaultBindings the list of default binding configurations
       */
     private void constructBindingURI(Component component, Service service, 
Binding binding, List<Binding> defaultBindings)
-    throws CompositeBuilderException{
+        throws CompositeBuilderException{
         boolean includeBindingName = component.getServices().size() != 1;
         constructBindingURI(component.getURI(), service, binding, 
includeBindingName, defaultBindings);
     }
@@ -1185,7 +1185,7 @@
      * @throws CompositeBuilderException
      */
     private void constructBindingURI(String componentURIString, Service 
service, Binding binding, boolean includeBindingName, List<Binding> 
defaultBindings) 
-      throws CompositeBuilderException{
+        throws CompositeBuilderException{
         
         try {
             // calculate the service binding URI
@@ -1277,8 +1277,8 @@
      * @param path the path string to which the "/" is to be added
      * @return the resulting path with a "/" added if it not already there
      */
-    private String addSlashToPath(String path){
-        if (path.endsWith("/")){
+    private static String addSlashToPath(String path){
+        if (path.endsWith("/") || path.endsWith("#")){
             return path;
         } else {
             return path + "/";
@@ -1295,7 +1295,7 @@
      * @param bindingName the binding name
      * @return the resulting URI as a string
      */
-    private String constructBindingURI(URI baseURI, URI componentURI, URI 
bindingURI, boolean includeBindingName, URI bindingName){        
+    private static String constructBindingURI(URI baseURI, URI componentURI, 
URI bindingURI, boolean includeBindingName, URI bindingName){        
         String uriString;
         
         if (baseURI == null) {
@@ -1317,24 +1317,24 @@
                 }
             }
         } else {
-            if (componentURI == null){
+            if (componentURI == null) {
                 if (bindingURI != null ) {
-                    uriString = baseURI.resolve(bindingURI).toString();
+                    uriString = basedURI(baseURI, bindingURI).toString();
                 } else {
                     if (includeBindingName) {
-                        uriString = baseURI.resolve(bindingName).toString();
+                        uriString = basedURI(baseURI, bindingName).toString();
                     } else {
                         uriString = baseURI.toString();
                     }
                 }
             } else {
                 if (bindingURI != null ) {
-                    uriString = 
baseURI.resolve(componentURI).resolve(bindingURI).toString();
+                    uriString = basedURI(baseURI, 
componentURI.resolve(bindingURI)).toString();
                 } else {
                     if (includeBindingName) {
-                        uriString = 
baseURI.resolve(componentURI).resolve(bindingName).toString();
+                        uriString = basedURI(baseURI, 
componentURI.resolve(bindingName)).toString();
                     } else {
-                        uriString = baseURI.resolve(componentURI).toString();
+                        uriString = basedURI(baseURI, componentURI).toString();
                     }
                 }
             }
@@ -1352,4 +1352,22 @@
         return uri.toString();
     }
 
+    /**
+     * Combine a URI with a base URI.
+     * 
+     * @param baseURI
+     * @param uri
+     * @return
+     */
+    private static URI basedURI(URI baseURI, URI uri) {
+        if (uri.getScheme() != null) {
+            return uri;
+        }
+        String str = uri.toString();
+        if (str.startsWith("/")) {
+            str = str.substring(1);
+        }
+        return URI.create(baseURI.toString() + str).normalize();
+    }
+
 }


Reply via email to