You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by cs...@apache.org on 2012/11/21 17:24:59 UTC

svn commit: r1412176 - /cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java

Author: cschneider
Date: Wed Nov 21 16:24:58 2012
New Revision: 1412176

URL: http://svn.apache.org/viewvc?rev=1412176&view=rev
Log:
Small refactoring of RemoteServiceAdminCore

Modified:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java

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=1412176&r1=1412175&r2=1412176&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 Wed Nov 21 16:24:58 2012
@@ -99,29 +99,7 @@ public class RemoteServiceAdminCore impl
         synchronized (exportedServices) {
             // check if it is already exported ....
             if (exportedServices.containsKey(serviceReference)) {
-                LOG.debug("already exported ...  {} ", ifaceName);
-                Collection<ExportRegistration> regs = exportedServices.get(serviceReference);
-
-                List<EndpointDescription> copiedEndpoints = new ArrayList<EndpointDescription>();
-
-                // / create a new list with copies of the exportRegistrations
-                List<ExportRegistration> copy = new ArrayList<ExportRegistration>(regs.size());
-                for (ExportRegistration exportRegistration : regs) {
-                	if (exportRegistration instanceof ExportRegistrationImpl) {
-                		ExportRegistrationImpl exportRegistrationImpl = (ExportRegistrationImpl) exportRegistration;
-                		EndpointDescription epd = exportRegistration.getExportReference().getExportedEndpoint();
-                		// create one copy for each distinct endpoint description
-                		if (!copiedEndpoints.contains(epd)) {
-                			copiedEndpoints.add(epd);
-                			copy.add(new ExportRegistrationImpl(exportRegistrationImpl));
-                		}
-                	}
-                }
-
-                regs.addAll(copy);
-
-                eventProducer.publishNotifcation(copy);
-                return copy;
+                return copyExportRegistration(serviceReference, ifaceName);
             }
 
             if (isCreatedByThisRSA(serviceReference)) {
@@ -130,24 +108,12 @@ public class RemoteServiceAdminCore impl
                 return Collections.emptyList();
             }
 
-
-
-            Properties serviceProperties = new Properties();
-
-            {// gather properties from sRef
-                String[] keys = serviceReference.getPropertyKeys();
-                for (String k : keys) {
-                    serviceProperties.put(k, serviceReference.getProperty(k));
-                }
-            }
-
-
-            if (additionalProperties != null) {// overlay properties with the additionalProperies
-                OsgiUtils.overlayProperties(serviceProperties,additionalProperties);
+            Properties serviceProperties = getProperties(serviceReference);
+            if (additionalProperties != null) {
+                OsgiUtils.overlayProperties(serviceProperties, additionalProperties);
             }
 
             List<String> unsupportedIntents = intentManager.getUnsupportedIntents(serviceProperties);
-            
             if (unsupportedIntents.size() > 0) {
                 LOG.error("service cannot be exported because the following intents are not supported by this RSA: "
                             + unsupportedIntents);
@@ -155,85 +121,36 @@ public class RemoteServiceAdminCore impl
                 return Collections.emptyList();
             }
 
-            List<String> interfaces = new ArrayList<String>(1);
-
-            {// determine which interfaces should be exported ? based on props and sRef
-                String[] providedInterfaces = (String[])serviceProperties
-                    .get(org.osgi.framework.Constants.OBJECTCLASS);
-                String[] allowedInterfaces = Utils.normalizeStringPlus(serviceProperties
-                    .get(RemoteConstants.SERVICE_EXPORTED_INTERFACES));
-                if (providedInterfaces == null || allowedInterfaces == null) {
-                    LOG.error("export failed: no provided service interfaces found or service_exported_interfaces is null !!");
-                    // TODO: publish error event ? not sure
-                    return Collections.emptyList();
-                }
-
-                if (allowedInterfaces.length == 1 && "*".equals(allowedInterfaces[0])) {
-                    for (String i : providedInterfaces) {
-                        interfaces.add(i);
-                    }
-                } else {
-                    for (String x : allowedInterfaces) {
-                        for (String i : providedInterfaces) {
-                            if (x.equals(i)) {
-                                interfaces.add(i);
-                            }
-                        }
-                    }
-                }
-            }
-
-            LOG.info("interfaces selected for export: " + interfaces);
-
-            // if no interface is to be exported return null
+            List<String> interfaces = getInterfaces(serviceProperties);
             if (interfaces.size() == 0) {
-                LOG.warn("no interfaces to be exported");
+                LOG.error("export failed: no provided service interfaces found or service_exported_interfaces is null !!");
                 // TODO: publish error event ? not sure
                 return Collections.emptyList();
             }
+            LOG.info("interfaces selected for export: " + interfaces);
 
             List<String> configurationTypes = determineConfigurationTypes(serviceProperties);
-
             LOG.info("configuration types selected for export: " + configurationTypes);
-
-            // if no configuration type is supported ? return null
             if (configurationTypes.size() == 0) {
                 LOG.info("the requested configuration types are not supported");
                 // TODO: publish error event ? not sure
                 return Collections.emptyList();
             }
 
-            LinkedHashMap<String, ExportRegistrationImpl> exportRegs = new LinkedHashMap<String, ExportRegistrationImpl>(
-                                                                                                                         1);
-
-            for (String iface : interfaces) {
-                LOG.info("creating initial ExportDescription for interface " + iface
-                         + "  with configuration types " + configurationTypes);
-
-                // create initial ExportRegistartion
-
+            LinkedHashMap<String, ExportRegistrationImpl> exportRegs = new LinkedHashMap<String, ExportRegistrationImpl>(1);
+            Object serviceObject = bctx.getService(serviceReference);
+            BundleContext callingContext = serviceReference.getBundle().getBundleContext();
+            ConfigurationTypeHandler handler = getHandler(configurationTypes, serviceProperties, getHandlerProperties());
+            if (handler == null) {
+                // TODO: publish error event ? not sure
+                return Collections.emptyList();
             }
 
             // FIXME: move out of synchronized ... -> blocks until publication is finished
             for (String iface : interfaces) {
-                LOG.info("creating server for interface " + iface);
-
-                ConfigurationTypeHandler handler = getHandler(configurationTypes, serviceProperties,
-                                                              getHandlerProperties());
-                Object serviceObject = bctx.getService(serviceReference);
-                BundleContext callingContext = serviceReference.getBundle().getBundleContext();
-
-                if (handler == null) {
-                    // TODO: publish error event ? not sure
-                    return Collections.emptyList();
-                }
-
-                LOG.info("found handler for " + iface + "  -> " + handler);
-
-                String interfaceName = iface;
+                LOG.info("creating server for interface " + iface + " with configurationTypes " + configurationTypes);
                 // this is an extra sanity check, but do we really need it now ?
-                Class<?> interfaceClass = ClassUtils.getInterfaceClass(serviceObject, interfaceName);
-
+                Class<?> interfaceClass = ClassUtils.getInterfaceClass(serviceObject, iface);
                 if (interfaceClass != null) {
                     ExportResult exportResult = handler.createServer(serviceReference, bctx, callingContext,
                             serviceProperties, interfaceClass, serviceObject);
@@ -257,6 +174,71 @@ public class RemoteServiceAdminCore impl
         }
     }
 
+    /**
+     * Determine which interfaces should be exported
+     * 
+     * @param serviceProperties 
+     * @return interfaces to be exported
+     */
+    private List<String> getInterfaces(Properties serviceProperties) {
+        List<String> interfaces = new ArrayList<String>(1);
+        
+        String[] providedInterfaces = (String[]) serviceProperties.get(org.osgi.framework.Constants.OBJECTCLASS);
+        String[] allowedInterfaces = Utils.normalizeStringPlus(serviceProperties.get(RemoteConstants.SERVICE_EXPORTED_INTERFACES));
+        if (providedInterfaces == null || allowedInterfaces == null) {
+            return Collections.emptyList();
+        }
+
+        if (allowedInterfaces.length == 1 && "*".equals(allowedInterfaces[0])) {
+            for (String i : providedInterfaces) {
+                interfaces.add(i);
+            }
+        } else {
+            for (String x : allowedInterfaces) {
+                for (String i : providedInterfaces) {
+                    if (x.equals(i)) {
+                        interfaces.add(i);
+                    }
+                }
+            }
+        }
+        return interfaces;
+    }
+
+    private Properties getProperties(ServiceReference serviceReference) {
+        Properties serviceProperties = new Properties();
+        for (String key : serviceReference.getPropertyKeys()) {
+            serviceProperties.put(key, serviceReference.getProperty(key));
+        }
+        return serviceProperties;
+    }
+
+    private List<ExportRegistration> copyExportRegistration(ServiceReference serviceReference, String ifaceName) {
+        LOG.debug("already exported ...  {} ", ifaceName);
+        Collection<ExportRegistration> regs = exportedServices.get(serviceReference);
+
+        List<EndpointDescription> copiedEndpoints = new ArrayList<EndpointDescription>();
+
+        // / create a new list with copies of the exportRegistrations
+        List<ExportRegistration> copy = new ArrayList<ExportRegistration>(regs.size());
+        for (ExportRegistration exportRegistration : regs) {
+        	if (exportRegistration instanceof ExportRegistrationImpl) {
+        		ExportRegistrationImpl exportRegistrationImpl = (ExportRegistrationImpl) exportRegistration;
+        		EndpointDescription epd = exportRegistration.getExportReference().getExportedEndpoint();
+        		// create one copy for each distinct endpoint description
+        		if (!copiedEndpoints.contains(epd)) {
+        			copiedEndpoints.add(epd);
+        			copy.add(new ExportRegistrationImpl(exportRegistrationImpl));
+        		}
+        	}
+        }
+
+        regs.addAll(copy);
+
+        eventProducer.publishNotifcation(copy);
+        return copy;
+    }
+
 
     protected List<String> determineConfigurationTypes(Properties serviceProperties) {