Author: davidb
Date: Sat Mar 20 16:27:53 2010
New Revision: 925633

URL: http://svn.apache.org/viewvc?rev=925633&view=rev
Log:
Applying patch on behalf or Mark Schaaf and Holger Hoffstätte
This patch updates the Remote Service Admin interfaces and fixes issues around 
case insensitivity of service properties.

Modified:
    
cxf/dosgi/trunk/discovery/local/src/test/java/org/apache/cxf/dosgi/discovery/local/LocalDiscoveryUtilsTest.java
    
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
    
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/Utils.java
    
cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/service/UtilsTest.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java
    
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java

Modified: 
cxf/dosgi/trunk/discovery/local/src/test/java/org/apache/cxf/dosgi/discovery/local/LocalDiscoveryUtilsTest.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/local/src/test/java/org/apache/cxf/dosgi/discovery/local/LocalDiscoveryUtilsTest.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/discovery/local/src/test/java/org/apache/cxf/dosgi/discovery/local/LocalDiscoveryUtilsTest.java
 (original)
+++ 
cxf/dosgi/trunk/discovery/local/src/test/java/org/apache/cxf/dosgi/discovery/local/LocalDiscoveryUtilsTest.java
 Sat Mar 20 16:27:53 2010
@@ -118,9 +118,9 @@ public class LocalDiscoveryUtilsTest ext
         EndpointDescription ed1 = eds.get(1);
         Map<String, Object> props = ed1.getProperties();
         assertEquals(Arrays.asList("com.acme.HelloService", 
"some.other.Service"), ed1.getInterfaces());
-        assertFalse("Should not be exactly the same. The value should contain 
a bunch of newlines", 
-            "org.apache.cxf.ws".equals(props.get("service.exported.configs")));
-        assertEquals("org.apache.cxf.ws", 
props.get("service.exported.configs").toString().trim());
+        assertEquals("org.apache.cxf.ws", 
props.get("service.imported.configs"));
+        // exports should have been removed
+        assertNull(props.get("service.exported.configs"));
         
         assertEquals(normXML("<other:t1 
xmlns:other='http://www.acme.org/xmlns/other/v1.0.0' 
xmlns='http://www.acme.org/xmlns/other/v1.0.0'><foo 
type='bar'>haha</foo></other:t1>"), 
             normXML((String) props.get("someXML")));

Modified: 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
 Sat Mar 20 16:27:53 2010
@@ -22,8 +22,11 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -125,23 +128,7 @@ public class RemoteServiceAdminCore impl
 
 
             if (additionalProperties != null) {// overlay properties with the 
additionalProperies
-                Set<Map.Entry> adProps = additionalProperties.entrySet();
-                for (Map.Entry e : adProps) {
-                    // objectClass and service.id must not be overwritten
-                    Object keyO = e.getKey();
-                    if (keyO instanceof String && keyO != null) {
-                        String key = ((String)keyO).toLowerCase();
-                        if 
(org.osgi.framework.Constants.SERVICE_ID.toLowerCase().equals(key)
-                            || 
org.osgi.framework.Constants.OBJECTCLASS.toLowerCase().equals(key)) {
-                            LOG
-                                .info("exportService called with additional 
properties map that contained illegal key: "
-                                      + key + "   The key is ignored");
-                            continue;
-                        }
-                    }
-                    serviceProperties.put(e.getKey(), e.getValue());
-                    LOG.fine("Overwriting property [" + e.getKey() + "]  with 
value [" + e.getValue() + "]");
-                }
+                
Utils.overlayProperties(serviceProperties,additionalProperties);
             }
 
             // Get the intents that need to be supported by the RSA
@@ -282,6 +269,7 @@ public class RemoteServiceAdminCore impl
         }
     }
 
+
     protected List<String> determineConfigurationTypes(Properties 
serviceProperties) {
 
         List<String> configurationTypes = new ArrayList<String>();

Modified: 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/Utils.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/Utils.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/Utils.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/Utils.java
 Sat Mar 20 16:27:53 2010
@@ -20,9 +20,12 @@ package org.apache.cxf.dosgi.dsw.service
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 import java.util.logging.Logger;
 
 import org.apache.commons.lang.ArrayUtils;
@@ -63,6 +66,8 @@ public class Utils {
     }
     
     
+    
+    
     public static String remoteServiceAdminEventTypeToString(int type){
         switch (type) {
         case RemoteServiceAdminEvent.EXPORT_ERROR:
@@ -130,4 +135,44 @@ public class Utils {
         
         return list.toArray(new String[list.size()]);
     }
+    
+    
+    public static void overlayProperties(Properties serviceProperties, Map 
additionalProperties) {
+        Enumeration<Object> keys = serviceProperties.keys();
+        // Maps lower case key to original key
+        HashMap<String,String> keysLowerCase = new HashMap<String, String>();
+        while(keys.hasMoreElements()){
+            Object o = keys.nextElement(); 
+            if (o instanceof String) {
+                String ks = (String)o;
+                keysLowerCase.put(ks.toLowerCase(), ks);
+            }
+        }
+        
+        Set<Map.Entry> adProps = additionalProperties.entrySet();
+        for (Map.Entry e : adProps) {
+            // objectClass and service.id must not be overwritten
+            Object keyObj = e.getKey();
+            if (keyObj instanceof String && keyObj != null) {
+                String key = ((String)keyObj).toLowerCase();
+                if 
(org.osgi.framework.Constants.SERVICE_ID.toLowerCase().equals(key)
+                    || 
org.osgi.framework.Constants.OBJECTCLASS.toLowerCase().equals(key)) {
+                    LOG.info("exportService called with additional properties 
map that contained illegal key: "
+                              + key + "   The key is ignored");
+                    continue;
+                }else if(keysLowerCase.containsKey(key)){
+                    String origKey = keysLowerCase.get(key);
+                    serviceProperties.put(origKey, e.getValue());
+                    LOG.fine("Overwriting property [" + origKey + "]  with 
value [" + e.getValue() + "]");
+                }else{
+                    serviceProperties.put(e.getKey(), e.getValue());
+                    keysLowerCase.put(e.getKey().toString().toLowerCase(), 
e.getKey().toString());
+                }
+            }
+            
+            
+        }
+    }
+
+    
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/service/UtilsTest.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/service/UtilsTest.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/service/UtilsTest.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/service/UtilsTest.java
 Sat Mar 20 16:27:53 2010
@@ -1,55 +1,169 @@
 /** 
-  * Licensed to the Apache Software Foundation (ASF) under one 
-  * or more contributor license agreements. See the NOTICE file 
-  * distributed with this work for additional information 
-  * regarding copyright ownership. The ASF licenses this file 
-  * to you under the Apache License, Version 2.0 (the 
-  * "License"); you may not use this file except in compliance 
-  * with the License. You may obtain a copy of the License at 
-  * 
-  * http://www.apache.org/licenses/LICENSE-2.0 
-  * 
-  * Unless required by applicable law or agreed to in writing, 
-  * software distributed under the License is distributed on an 
-  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
-  * KIND, either express or implied. See the License for the 
-  * specific language governing permissions and limitations 
-  * under the License. 
-  */
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements. See the NOTICE file 
+ * distributed with this work for additional information 
+ * regarding copyright ownership. The ASF licenses this file 
+ * to you under the Apache License, Version 2.0 (the 
+ * "License"); you may not use this file except in compliance 
+ * with the License. You may obtain a copy of the License at 
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, 
+ * software distributed under the License is distributed on an 
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied. See the License for the 
+ * specific language governing permissions and limitations 
+ * under the License. 
+ */
 package org.apache.cxf.dosgi.dsw.service;
 
-
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
 
-import org.junit.Test;
+import org.osgi.framework.Constants;
+import org.osgi.service.remoteserviceadmin.RemoteConstants;
 
+import org.junit.Test;
 
 public class UtilsTest {
 
     @Test
-    public void testNormalizeStringPlus(){
-        
+    public void testNormalizeStringPlus() {
+
         String s1 = "s1";
         String s2 = "s2";
         String s3 = "s3";
-        
-        String[] sa = new String[] {s1,s2,s3};
-        
+
+        String[] sa = new String[] {
+            s1, s2, s3
+        };
+
         Collection<Object> sl = new ArrayList<Object>(4);
         sl.add(s1);
         sl.add(s2);
         sl.add(s3);
         sl.add(new Object()); // must be skipped
+
+        assertEquals(null, Utils.normalizeStringPlus(new Object()));
+        assertEquals(new String[] {
+            s1
+        }, Utils.normalizeStringPlus(s1));
+        assertEquals(sa, Utils.normalizeStringPlus(sa));
+        assertEquals(sa, Utils.normalizeStringPlus(sl));
+
+    }
+
+    @Test
+    public void testOverlayProperties() {
+
+        Properties original = new Properties();
+
+        original.put("MyProp", "my value");
+        original.put(Constants.OBJECTCLASS, "myClass");
+
+        Properties copy = new Properties();
+        copy.putAll(original);
+
+        { // nothing should change here
+            Properties overload = new Properties();
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size(), copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                assertEquals(original.get(key), copy.get(key));
+            }
+        }
+        
+        copy.clear();
+        copy.putAll(original);
+        
+        { // a property should be added
+            Properties overload = new Properties();
+            overload.put("new", "prop");
+            
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size()+1, copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                assertEquals(original.get(key), copy.get(key));
+            }
+            assertNotNull(overload.get("new"));
+            assertEquals("prop",overload.get("new"));
+        }
+        
+        copy.clear();
+        copy.putAll(original);
         
-        assertEquals(null,Utils.normalizeStringPlus(new Object()));
-        assertEquals(new String[] {s1},Utils.normalizeStringPlus(s1));
-        assertEquals(sa,Utils.normalizeStringPlus(sa));
-        assertEquals(sa,Utils.normalizeStringPlus(sl));
+        { // only one property should be added
+            Properties overload = new Properties();
+            overload.put("new", "prop");
+            overload.put("NEW", "prop");
+            
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size()+1, copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                assertEquals(original.get(key), copy.get(key));
+            }
+            assertNotNull(overload.get("new"));
+            assertEquals("prop",overload.get("new"));
+        }
         
+        copy.clear();
+        copy.putAll(original);
+        
+        { // nothing should change here
+            Properties overload = new Properties();
+            overload.put(Constants.OBJECTCLASS, "assd");
+            overload.put(Constants.SERVICE_ID, "asasdasd");
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size(), copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                assertEquals(original.get(key), copy.get(key));
+            }
+        }
+        
+        copy.clear();
+        copy.putAll(original);
+        
+        { // overwrite own prop
+            Properties overload = new Properties();
+            overload.put("MyProp", "newValue");
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size(), copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                if(!"MyProp".equals(key))
+                    assertEquals(original.get(key), copy.get(key));
+            }
+            assertEquals("newValue",copy.get("MyProp"));
+        }
+        
+        copy.clear();
+        copy.putAll(original);
+        
+        { // overwrite own prop in different case
+            Properties overload = new Properties();
+            overload.put("MYPROP", "newValue");
+            Utils.overlayProperties(copy,overload);
+
+            assertEquals(original.size(), copy.size());
+            for (Object key : Collections.list(original.keys())) {
+                if(!"MyProp".equals(key))
+                    assertEquals(original.get(key), copy.get(key));
+            }
+            assertEquals("newValue",copy.get("MyProp"));
+        }
+
     }
-    
-    
+
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointDescription.java
 Sat Mar 20 16:27:53 2010
@@ -104,15 +104,13 @@ public class EndpointDescription {
                                                                        
.removeAll(properties.keySet()));
                }
 
-               if (!props.containsKey(SERVICE_IMPORTED)) {
-                       props.put(SERVICE_IMPORTED, Boolean.toString(true));
-               }
+               conditionProperties(props);
                this.properties = Collections.unmodifiableMap(props);
                /* properties must be initialized before calling the following 
methods */
                interfaces = verifyObjectClassProperty();
                serviceId = verifyLongProperty(ENDPOINT_SERVICE_ID);
                frameworkUUID = verifyStringProperty(ENDPOINT_FRAMEWORK_UUID);
-               id = verifyStringProperty(ENDPOINT_ID);
+               id = verifyStringProperty(ENDPOINT_ID).trim();
                if (id == null) {
                        throw new IllegalArgumentException(ENDPOINT_ID
                                        + " property must be set");
@@ -198,15 +196,13 @@ public class EndpointDescription {
                                props.put(ENDPOINT_FRAMEWORK_UUID, uuid);
                        }
                }
-               if (!props.containsKey(SERVICE_IMPORTED)) {
-                       props.put(SERVICE_IMPORTED, Boolean.toString(true));
-               }
+               conditionProperties(props);
                this.properties = Collections.unmodifiableMap(props);
                /* properties must be initialized before calling the following 
methods */
                interfaces = verifyObjectClassProperty();
                serviceId = verifyLongProperty(ENDPOINT_SERVICE_ID);
                frameworkUUID = verifyStringProperty(ENDPOINT_FRAMEWORK_UUID);
-               id = verifyStringProperty(ENDPOINT_ID);
+               id = verifyStringProperty(ENDPOINT_ID).trim();
                if (id == null) {
                        throw new IllegalArgumentException(ENDPOINT_ID
                                        + " property must be set");
@@ -217,6 +213,31 @@ public class EndpointDescription {
                }
        }
 
+       private static final String     SERVICE_EXPORTED_       = 
"service.exported.";
+       private static final int        SERVICE_EXPORTED_length = 
SERVICE_EXPORTED_
+                                                                               
                                                .length();
+
+       /**
+        * Condition the properties.
+        * 
+        * @param props Property map to condition.
+        */
+       private void conditionProperties(Map<String, Object> props) {
+               // ensure service.imported is set
+               if (!props.containsKey(SERVICE_IMPORTED)) {
+                       props.put(SERVICE_IMPORTED, Boolean.toString(true));
+               }
+
+               // remove service.exported.* properties
+               for (Iterator<String> iter = props.keySet().iterator(); 
iter.hasNext();) {
+                       String key = iter.next();
+                       if (SERVICE_EXPORTED_.regionMatches(true, 0, key, 0,
+                                       SERVICE_EXPORTED_length)) {
+                               iter.remove();
+                       }
+               }
+       }
+
        /**
         * Verify and obtain the interface list from the properties.
         * 
@@ -259,7 +280,8 @@ public class EndpointDescription {
         * Verify and obtain a required String property.
         * 
         * @param propName The name of the property
-        * @return The value of the property or null if the property is not set.
+        * @return The value of the property or <code>null</code> if the 
property is
+        *         not set.
         * @throws IllegalArgumentException when the property doesn't have the
         *         correct data type.
         */
@@ -307,10 +329,11 @@ public class EndpointDescription {
         * have the same id. Two Endpoint Descriptions with the same id must
         * represent the same endpoint.
         * 
-        * The value of the id is stored in the
-        * {...@link RemoteConstants#ENDPOINT_ID} property.
+        * The value of the id is stored in the {...@link 
RemoteConstants#ENDPOINT_ID}
+        * property.
         * 
-        * @return The id of the endpoint, never <code>null</code>.
+        * @return The id of the endpoint, never <code>null</code>. The returned
+        *         value has leading and trailing whitespace removed.
         */
        public String getId() {
                return id;
@@ -426,8 +449,8 @@ public class EndpointDescription {
 
        /**
         * Reads a 'String+' property from the properties map, which may be of 
type
-        * String, String[] or Collection<String> and returns it as an 
unmodifiable
-        * List.
+        * String, String[] or Collection&lt;String&gt; and returns it as an
+        * unmodifiable List.
         * 
         * @param key The property
         * @return An unmodifiable list
@@ -474,8 +497,8 @@ public class EndpointDescription {
         * The value of the remote framework uuid is stored in the
         * {...@link RemoteConstants#ENDPOINT_FRAMEWORK_UUID} endpoint property.
         * 
-        * @return Remote Framework UUID, or null if this endpoint is not 
associated
-        *         with an OSGi framework having a framework uuid.
+        * @return Remote Framework UUID, or <code>null</code> if this endpoint 
is
+        *         not associated with an OSGi framework having a framework 
uuid.
         */
        public String getFrameworkUUID() {
                return frameworkUUID;
@@ -580,6 +603,63 @@ public class EndpointDescription {
        }
 
        /**
+        * Returns the string representation of this EndpointDescription.
+        * 
+        * @return String form of this EndpointDescription.
+        */
+       public String toString() {
+               StringBuffer sb = new StringBuffer();
+               sb.append('{');
+               Iterator<Map.Entry<String, Object>> iter = properties.entrySet()
+                               .iterator();
+               boolean comma = false;
+               while (iter.hasNext()) {
+                       Map.Entry<String, Object> entry = iter.next();
+                       if (comma) {
+                               sb.append(", ");
+                       }
+                       else {
+                               comma = true;
+                       }
+                       sb.append(entry.getKey());
+                       sb.append('=');
+                       Object value = entry.getValue();
+                       if (value != null) {
+                               Class< ? > valueType = value.getClass();
+                               if (Object[].class.isAssignableFrom(valueType)) 
{
+                                       append(sb, (Object[]) value);
+                                       continue;
+                               }
+                       }
+                       sb.append(value);
+               }
+               sb.append('}');
+               return sb.toString();
+       }
+
+       /**
+        * Append the specified Object array to the specified StringBuffer.
+        * 
+        * @param sb Receiving StringBuffer.
+        * @param value Object array to append to the specified StringBuffer.
+        */
+       private static void append(StringBuffer sb, Object[] value) {
+               sb.append('[');
+               boolean comma = false;
+               final int length = value.length;
+               for (int i = 0; i < length; i++) {
+                       if (comma) {
+                               sb.append(", ");
+                       }
+                       else {
+                               comma = true;
+                       }
+                       sb.append(String.valueOf(value[i]));
+               }
+               sb.append(']');
+       }
+
+       /**
         * Unmodifiable Dictionary wrapper for a Map. This class is also used by
         * EndpointPermission.
         */

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointListener.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,25 +23,25 @@ package org.osgi.service.remoteservicead
  * is interested in Endpoint Descriptions.
  * 
  * This white board service can be used in many different scenarios. However,
- * the primary use case is to allow a remote manager to be informed of End 
Point
+ * the primary use case is to allow a remote manager to be informed of Endpoint
  * Descriptions available in the network and inform the network about available
- * End Point Descriptions.
+ * Endpoint Descriptions.
  * 
  * Both the network bundle and the manager bundle register an Endpoint Listener
- * service. The manager informs the network bundle about End Points that it
+ * service. The manager informs the network bundle about Endpoints that it
  * creates. The network bundles then uses a protocol like SLP to announce these
  * local end-points to the network.
  * 
  * If the network bundle discovers a new Endpoint through its discovery
- * protocol, then it sends an End Point Description to all the End Point
- * Listener services that are registered (except its own) that have specified 
an
- * interest in that endpoint.
+ * protocol, then it sends an Endpoint Description to all the Endpoint Listener
+ * services that are registered (except its own) that have specified an 
interest
+ * in that endpoint.
  * 
  * Endpoint Listener services can express their <i>scope</i> with the service
  * property {...@link #ENDPOINT_LISTENER_SCOPE}. This service property is a 
list of
  * filters. An Endpoint Description should only be given to a Endpoint Listener
  * when there is at least one filter that matches the Endpoint Description
- * properties. given to it.
+ * properties.
  * 
  * This filter model is quite flexible. For example, a discovery bundle is only
  * interested in locally originating Endpoint Descriptions. The following 
filter
@@ -78,7 +78,6 @@ package org.osgi.service.remoteservicead
  * implementers should realize that many endpoints come through unreliable
  * discovery processes.
  * 
- * 
  * @ThreadSafe
  * @version $Revision$
  */

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/EndpointPermission.java
 Sat Mar 20 16:27:53 2010
@@ -97,8 +97,8 @@ public final class EndpointPermission ex
        private volatile String                         actions                 
        = null;
 
        /**
-        * The endpoint used by this EndpointPermission. Must be null if not
-        * constructed with a endpoint.
+        * The endpoint used by this EndpointPermission. Must be 
<code>null</code>
+        * if not constructed with a endpoint.
         */
        transient final EndpointDescription                                     
endpoint;
        
@@ -111,7 +111,7 @@ public final class EndpointPermission ex
        /**
         * If this EndpointPermission was not constructed with an
         * EndpointDescription, this holds a Filter matching object used to 
evaluate
-        * the filter in implies or null for wildcard.
+        * the filter in implies or <code>null</code> for wildcard.
         */
        transient Filter                                        filter;
 
@@ -454,7 +454,7 @@ public final class EndpointPermission ex
         * this <code>EndpointPermission</code>.
         * 
         * @param obj The object to test for equality.
-        * @return true if obj is a <code>EndpointPermission</code>, and has the
+        * @return true If obj is a <code>EndpointPermission</code>, and has the
         *         same name, actions and endpoint as this
         *         <code>EndpointPermission</code> object; <code>false</code>
         *         otherwise.

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportReference.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ import org.osgi.framework.ServiceReferen
  * An Export Reference associates a service with a local endpoint.
  * 
  * The Export Reference can be used to reference an exported service. When the
- * service is no longer exported, all methods must return <code>null</code>;
+ * service is no longer exported, all methods must return <code>null</code>.
  * 
  * @ThreadSafe
  * @version $Revision$
@@ -31,15 +31,16 @@ public interface ExportReference {
        /**
         * Return the service being exported.
         * 
-        * @return The service being exported, must be <code>null</code> when 
this
-        *         registration is unregistered.
+        * @return The service being exported. Must be <code>null</code> when 
the
+        *         service is no longer exported.
         */
        ServiceReference getExportedService();
 
        /**
-        * Return the Endpoint Description that is created for this 
registration.
+        * Return the Endpoint Description for the local endpoint.
         * 
-        * @return the local Endpoint Description
+        * @return The Endpoint Description for the local endpoint. Must be
+        *         <code>null</code> when the service is no longer exported.
         */
        EndpointDescription getExportedEndpoint();
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ExportRegistration.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,8 @@
 
 package org.osgi.service.remoteserviceadmin;
 
+import java.util.Map;
+
 import org.osgi.framework.ServiceReference;
 
 /**
@@ -23,11 +25,10 @@ import org.osgi.framework.ServiceReferen
  * 
  * The Export Registration can be used to delete the endpoint associated with 
an
  * this registration. It is created with the
- * {...@link RemoteServiceAdmin#exportService(ServiceReference,java.util.Map)}
- * method.
+ * {...@link RemoteServiceAdmin#exportService(ServiceReference,Map)} method.
  * 
- * When this Export Registration has been unregistered, the methods must all
- * return <code>null</code>.
+ * When this Export Registration has been closed, all methods must return
+ * <code>null</code>.
  * 
  * @ThreadSafe
  * @version $Revision$
@@ -36,35 +37,33 @@ public interface ExportRegistration {
        /**
         * Return the Export Reference for the exported service.
         * 
-        * @return An Export Reference for this registration
-        * @throws IllegalStateException Thrown when this object was not 
properly
-        *         initialized, see {...@link #getException()}
+        * @return The Export Reference for this registration.
+        * @throws IllegalStateException When this registration was not properly
+        *         initialized. See {...@link #getException()}.
         */
        ExportReference getExportReference();
 
        /**
         * Delete the local endpoint and disconnect any remote distribution
-        * providers. After this method returns, all the methods must return
+        * providers. After this method returns, all methods must return
         * <code>null</code>.
         * 
-        * This method has no effect when the endpoint is already destroyed or 
being
-        * destroyed.
+        * This method has no effect when this registration has already been 
closed
+        * or is being closed.
         */
        void close();
 
        /**
-        * Exception for any error during the import process.
+        * Return the exception for any error during the export process.
         * 
-        * If the Remote Admin for some reasons is unable to create a 
registration,
-        * then it must return a <code>Throwable</code> from this method. In 
this
-        * case, all other methods must return on this interface must throw an
-        * Illegal State Exception. If no error occurred, this method must 
return
-        * <code>null</code>.
+        * If the Remote Service Admin for some reasons is unable to properly
+        * initialize this registration, then it must return an exception from 
this
+        * method. If no error occurred, this method must return 
<code>null</code>.
         * 
-        * The error must be set before this Import Registration is returned.
+        * The error must be set before this Export Registration is returned.
         * Asynchronously occurring errors must be reported to the log.
         * 
-        * @return The exception that occurred during the creation of the
+        * @return The exception that occurred during the initialization of this
         *         registration or <code>null</code> if no exception occurred.
         */
        Throwable getException();

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportReference.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,23 +22,25 @@ import org.osgi.framework.ServiceReferen
  * An Import Reference associates an active proxy service to a remote endpoint.
  * 
  * The Import Reference can be used to reference an imported service. When the
- * service is no longer imported, all methods must return <code>null</code>;
+ * service is no longer imported, all methods must return <code>null</code>.
  * 
  * @ThreadSafe
  * @version $Revision$
  */
 public interface ImportReference {
        /**
-        * Answer the associated Service Reference for the proxy to the 
endpoint.
+        * Return the Service Reference for the proxy for the endpoint.
         * 
-        * @return A Service Reference to the proxy for the endpoint.
+        * @return The Service Reference to the proxy for the endpoint. Must be
+        *         <code>null</code> when the service is no longer imported.
         */
        ServiceReference getImportedService();
 
        /**
-        * Answer the associated remote Endpoint Description.
+        * Return the Endpoint Description for the remote endpoint.
         * 
-        * @return A Endpoint Description for the remote endpoint.
+        * @return The Endpoint Description for the remote endpoint. Must be
+        *         <code>null</code> when the service is no longer imported.
         */
        EndpointDescription getImportedEndpoint();
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/ImportRegistration.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,47 +21,47 @@ package org.osgi.service.remoteservicead
  * endpoint.
  * 
  * The Import Registration can be used to delete the proxy associated with an
- * endpoint. It is created with t...@link RemoteServiceAdmin#importService}
- * method.
+ * endpoint. It is created with the
+ * {...@link RemoteServiceAdmin#importService(EndpointDescription)} method.
+ * 
+ * When this Import Registration has been closed, all methods must return
+ * <code>null</code>.
  * 
  * @ThreadSafe
  * @version $Revision$
  */
 public interface ImportRegistration {
        /**
-        * Answer the associated Export Reference.
+        * Return the Import Reference for the imported service.
         * 
-        * @return An Import Reference for this registration
-        * @throws IllegalStateException Thrown when this object was not 
properly
-        *         initialized, see {...@link #getException()}
+        * @return The Import Reference for this registration.
+        * @throws IllegalStateException When this registration was not properly
+        *         initialized. See {...@link #getException()}.
         */
        ImportReference getImportReference();
 
        /**
-        * Unregister this Import Registration. This must close the connection 
to
-        * the end endpoint unregister the proxy. After this method returns, all
-        * other methods must return null.
+        * Close this Import Registration. This must close the connection to the
+        * endpoint and unregister the proxy. After this method returns, all 
other
+        * methods must return <code>null</code>.
         * 
-        * This method has no effect when the service is already unregistered 
or in
-        * the process off.
+        * This method has no effect when this registration has already been 
closed
+        * or is being closed.
         */
        void close();
 
        /**
-        * Exception for any error during the import process.
+        * Return the exception for any error during the import process.
         * 
-        * If the Remote Admin for some reasons is unable to create a 
registration,
-        * then it must return a <code>Throwable</code> from this method. In 
this
-        * case, all other methods must return on this interface must thrown an
-        * Illegal State Exception. If no error occurred, this method must 
return
-        * <code>null</code>.
+        * If the Remote Service Admin for some reasons is unable to properly
+        * initialize this registration, then it must return an exception from 
this
+        * method. If no error occurred, this method must return 
<code>null</code>.
         * 
         * The error must be set before this Import Registration is returned.
         * Asynchronously occurring errors must be reported to the log.
         * 
-        * @return The exception that occurred during the creation of the
+        * @return The exception that occurred during the initialization of this
         *         registration or <code>null</code> if no exception occurred.
         */
        Throwable getException();
-
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteConstants.java
 Sat Mar 20 16:27:53 2010
@@ -17,13 +17,15 @@
 package org.osgi.service.remoteserviceadmin;
 
 /**
- * Provide the definition of the constants used in the Remote Services API.
+ * Provide the definition of the constants used in the Remote Service Admin
+ * specification.
  * 
  * @Immutable
  * @version $Revision$
  */
 public class RemoteConstants {
        private RemoteConstants() {
+               // non-instantiable
        }
 
        /**
@@ -166,7 +168,7 @@ public class RemoteConstants {
         */
        public static final String      SERVICE_INTENTS                         
        = "service.intents";
 
-       /* above are from Ch 13 Remote Service spec. */
+       /* The above are from Ch. 13 Remote Services specification. */
 
        /**
         * Endpoint property identifying the id for this endpoint. This service
@@ -199,18 +201,18 @@ public class RemoteConstants {
        /**
         * Prefix for an endpoint property identifying the interface Java 
package
         * version for an interface. For example, the property
-        * endpoint.package.version.com.acme=1.3 describes the version of the
-        * package for the com.acme.Foo interface. This endpoint property for an
-        * interface package does not have to be set. If not set, the value 
must be
-        * assumed to be 0.
+        * <code>endpoint.package.version.com.acme=1.3</code> describes the 
version
+        * of the package for the <code>com.acme.Foo</code> interface. This 
endpoint
+        * property for an interface package does not have to be set. If not 
set,
+        * the value must be assumed to be 0.
         * 
         * <p>
         * Since endpoint properties are stored in a case insensitive map, case
         * variants of a package name are folded together.
         * 
         * <p>
-        * The value of this property must be of type <code>String</code>.
+        * The value of properties having this prefix must be of type
+        * <code>String</code>.
         */
        public final static String      ENDPOINT_PACKAGE_VERSION_               
= "endpoint.package.version.";
-
 }

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdmin.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,10 +25,10 @@ import org.osgi.framework.ServiceReferen
  * A Remote Service Admin manages the import and export of services.
  * 
  * A Distribution Provider can expose a control interface. This interface 
allows
- * the a remote manager to control the export and import of services.
+ * a Topology Manager to control the export and import of services.
  * 
- * The API allows a remote manager to export a service, to import a service, 
and
- * find out about the current imports and exports.
+ * The API allows a Topology Manager to export a service, to import a service,
+ * and find out about the current imports and exports.
  * 
  * @ThreadSafe
  * @version $Revision$
@@ -36,37 +36,43 @@ import org.osgi.framework.ServiceReferen
 public interface RemoteServiceAdmin {
 
        /**
-        * Export a service to a given endpoint. The Remote Service Admin must
-        * create an endpoint from the given description that can be used by 
other
-        * Distrbution Providers to connect to this Remote Service Admin and 
use the
-        * exported service. This method can return null if the service could 
not be
-        * exported because the endpoint could not be implemented by this Remote
-        * Service Admin.
-        * 
-        * The properties on a Service Reference are case insensitive while the
-        * properties on a <code>properties</code> are case sensitive. A value 
in
-        * the <code>properties</code> must therefore override any case variant 
in
-        * the properties of the Service Reference.
+        * Export a service to a given Endpoint. The Remote Service Admin must
+        * create an Endpoint from the given description that can be used by 
other
+        * Distribution Providers to connect to this Remote Service Admin and 
use
+        * the exported service.
+        * 
+        * The property keys of a Service Reference are case insensitive while 
the
+        * property keys of the specified <code>properties</code> map are case
+        * sensitive. A property key in the specified <code>properties</code> 
map
+        * must therefore override any case variant property key in the 
properties
+        * of the specified Service Reference.
         * 
         * <p>
         * If the caller does not have the appropriate
-        * <code>EndpointPermission[endpoint,EXPORT]</code> for an endpoint, 
and the
+        * <code>EndpointPermission[endpoint,EXPORT]</code> for an Endpoint, 
and the
         * Java Runtime Environment supports permissions, then the
         * {...@link ExportRegistration#getException() getException} method on 
the
         * corresponding returned {...@link ExportRegistration} will return a
         * <code>SecurityException</code>.
         * 
         * @param reference The Service Reference to export.
-        * @param properties The properties to create a local endpoint that can 
be
-        *        implemented by this Remote Service Admin. If this is null, the
-        *        endpoint will be determined by the properties on the service. 
The
-        *        properties are the same as given for an exported service. 
They are
-        *        overlaid over any properties the service defines (case
-        *        insensitive). This parameter can be <code>null</code>, this 
should
-        *        be treated as an empty map.
-        * 
-        * @return An Export Registration that combines the Endpoint 
Description and
-        *         the Service Reference.
+        * @param properties The properties to create a local Endpoint that can 
be
+        *        implemented by this Remote Service Admin. If this is
+        *        <code>null</code>, the Endpoint will be determined by the
+        *        properties on the service. The properties are the same as 
given
+        *        for an exported service. They override any properties in the
+        *        specified Service Reference (case insensitive). The properties
+        *        <code>objectClass</code> and <code>service.id</code>, in any 
case
+        *        variant, are ignored. Those properties in the Service 
Reference
+        *        cannot be overridden. This parameter can be <code>null</code>,
+        *        this should be treated as an empty map.
+        * @return A <code>Collection</code> of {...@link ExportRegistration}s 
for the
+        *         specified Service Reference and properties. Multiple Export
+        *         Registrations may be returned because a single service can be
+        *         exported to multiple Endpoints depending on the available
+        *         configuration type properties. The result is never
+        *         <code>null</code> but may be empty if this Remove Service 
Admin
+        *         does not recognize any of the configuration types.
         * @throws IllegalArgumentException If any of the properties has a value
         *         that is not syntactically correct or if the service 
properties
         *         and the overlaid properties do not contain a
@@ -79,17 +85,17 @@ public interface RemoteServiceAdmin {
                        Map<String, Object> properties);
 
        /**
-        * Import a service from an endpoint. The Remote Service Admin must use 
the
-        * given endpoint to create a proxy. This method can return null if the
-        * service could not be imported.
+        * Import a service from an Endpoint. The Remote Service Admin must use 
the
+        * given Endpoint to create a proxy. This method can return
+        * <code>null</code> if the service could not be imported.
         * 
         * @param endpoint The Endpoint Description to be used for import.
         * @return An Import Registration that combines the Endpoint 
Description and
-        *         the Service Reference or <code>null</code> if the endpoint 
could
+        *         the Service Reference or <code>null</code> if the Endpoint 
could
         *         not be imported.
         * @throws SecurityException If the caller does not have the appropriate
         *         <code>EndpointPermission[endpoint,IMPORT]</code> for the
-        *         endpoint, and the Java Runtime Environment supports 
permissions.
+        *         Endpoint, and the Java Runtime Environment supports 
permissions.
         */
        ImportRegistration importService(EndpointDescription endpoint);
 
@@ -98,9 +104,9 @@ public interface RemoteServiceAdmin {
         * 
         * <p>
         * If the caller does not have the appropriate
-        * <code>EndpointPermission[endpoint,READ]</code> for an endpoint, and 
the
+        * <code>EndpointPermission[endpoint,READ]</code> for an Endpoint, and 
the
         * Java Runtime Environment supports permissions, then returned 
collection
-        * will not contain a reference to the exported endpoint.
+        * will not contain a reference to the exported Endpoint.
         * 
         * @return A <code>Collection</code> of {...@link ExportReference}s 
that are
         *         currently active.
@@ -112,9 +118,9 @@ public interface RemoteServiceAdmin {
         * 
         * <p>
         * If the caller does not have the appropriate
-        * <code>EndpointPermission[endpoint,READ]</code> for an endpoint, and 
the
+        * <code>EndpointPermission[endpoint,READ]</code> for an Endpoint, and 
the
         * Java Runtime Environment supports permissions, then returned 
collection
-        * will not contain a reference to the imported endpoint.
+        * will not contain a reference to the imported Endpoint.
         * 
         * @return A <code>Collection</code> of {...@link ImportReference}s 
that are
         *         currently active.

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminEvent.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,14 +19,14 @@ package org.osgi.service.remoteservicead
 import org.osgi.framework.Bundle;
 
 /**
- * Provides the event information for a Remote Admin event.
+ * Provides the event information for a Remote Service Admin event.
  * 
  * @Immutable
  * @version $Revision$
  */
 public class RemoteServiceAdminEvent {
        /**
-        * Add an import registration. The Remote Services Admin will call this
+        * Add an import registration. The Remote Service Admin will call this
         * method when it imports a service. When this service is registered, 
the
         * Remote Service Admin must notify the listener of all existing Import
         * Registrations.
@@ -35,7 +35,7 @@ public class RemoteServiceAdminEvent {
        public static final int                 IMPORT_REGISTRATION             
= 1;
 
        /**
-        * Add an export registration. The Remote Services Admin will call this
+        * Add an export registration. The Remote Service Admin will call this
         * method when it exports a service. When this service is registered, 
the
         * Remote Service Admin must notify the listener of all existing Export
         * Registrations.
@@ -43,14 +43,14 @@ public class RemoteServiceAdminEvent {
        public static final int                 EXPORT_REGISTRATION             
= 2;
 
        /**
-        * Remove an export registration. The Remote Services Admin will call 
this
+        * Remove an export registration. The Remote Service Admin will call 
this
         * method when it removes the export of a service.
         * 
         */
        public static final int                 EXPORT_UNREGISTRATION   = 3;
 
        /**
-        * Remove an import registration. The Remote Services Admin will call 
this
+        * Remove an import registration. The Remote Service Admin will call 
this
         * method when it removes the import of a service.
         * 
         */

Modified: 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java?rev=925633&r1=925632&r2=925633&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java
 (original)
+++ 
cxf/dosgi/trunk/dsw/cxf-osgi-remote-service-admin-interfaces/src/main/java/org/osgi/service/remoteserviceadmin/RemoteServiceAdminListener.java
 Sat Mar 20 16:27:53 2010
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ package org.osgi.service.remoteservicead
 public interface RemoteServiceAdminListener {
        /**
         * Receive notification of any export or import registrations and
-        * unregistrations.
+        * unregistrations as well as errors and warnings.
         * 
         * @param event The {...@link RemoteServiceAdminEvent} object.
         */


Reply via email to