Repository: incubator-unomi
Updated Branches:
  refs/heads/master 92542e5b1 -> 23d9044ef


Fix bug when changing a node's public or secure address

Signed-off-by: Serge Huber <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/23d9044e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/23d9044e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/23d9044e

Branch: refs/heads/master
Commit: 23d9044ef2ae4e144933cf2bd1e51c8d19023120
Parents: 92542e5
Author: Serge Huber <[email protected]>
Authored: Tue Jan 24 12:41:05 2017 +0100
Committer: Serge Huber <[email protected]>
Committed: Tue Jan 24 12:41:05 2017 +0100

----------------------------------------------------------------------
 .../services/services/ClusterServiceImpl.java   | 70 ++++++++++++--------
 1 file changed, 41 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/23d9044e/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
index 7c77e8d..eabe48b 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
@@ -17,7 +17,6 @@
 
 package org.apache.unomi.services.services;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.karaf.cellar.config.ClusterConfigurationEvent;
 import org.apache.karaf.cellar.config.Constants;
 import org.apache.karaf.cellar.core.*;
@@ -49,10 +48,6 @@ public class ClusterServiceImpl implements ClusterService {
 
     private static final Logger logger = 
LoggerFactory.getLogger(ClusterServiceImpl.class.getName());
 
-    public static final String CONTEXTSERVER_ADDRESS = "contextserver.address";
-    public static final String CONTEXTSERVER_PORT = "contextserver.port";
-    public static final String CONTEXTSERVER_SECURE_ADDRESS = 
"contextserver.secureAddress";
-    public static final String CONTEXTSERVER_SECURE_PORT = 
"contextserver.securePort";
     public static final String KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION = 
"org.apache.unomi.nodes";
     public static final String KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS = 
"publicEndpoints";
     public static final String KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS = 
"secureEndpoints";
@@ -160,16 +155,12 @@ public class ClusterServiceImpl implements ClusterService 
{
                 if (karafCellarClusterNodeConfiguration == null) {
                     karafCellarClusterNodeConfiguration = new Properties();
                 }
-                String publicEndpointsPropValue = 
karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS,
 thisKarafNode.getId() + "=" + address + ":" + port);
-                String secureEndpointsPropValue = 
karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS,
 thisKarafNode.getId() + "=" + secureAddress + ":" + securePort);
-                String[] publicEndpointsArray = 
publicEndpointsPropValue.split(",");
-                Set<String> publicEndpoints = new 
TreeSet<String>(Arrays.asList(publicEndpointsArray));
-                String[] secureEndpointsArray = 
secureEndpointsPropValue.split(",");
-                Set<String> secureEndpoints = new 
TreeSet<String>(Arrays.asList(secureEndpointsArray));
-                publicEndpoints.add(thisKarafNode.getId() + "=" + address + 
":" + port);
-                secureEndpoints.add(thisKarafNode.getId() + "=" + 
secureAddress + ":" + securePort);
-                
karafCellarClusterNodeConfiguration.setProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS,
 StringUtils.join(publicEndpoints, ","));
-                
karafCellarClusterNodeConfiguration.setProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS,
 StringUtils.join(secureEndpoints, ","));
+                Map<String,String> publicEndpoints = 
getMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + 
address + ":" + port);
+                Map<String,String> secureEndpoints = 
getMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + 
secureAddress + ":" + securePort);
+                publicEndpoints.put(thisKarafNode.getId(), address + ":" + 
port);
+                secureEndpoints.put(thisKarafNode.getId(), secureAddress + ":" 
+ securePort);
+                setMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, publicEndpoints);
+                setMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, secureEndpoints);
                 configurations.put(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION, 
karafCellarClusterNodeConfiguration);
                 ClusterConfigurationEvent clusterConfigurationEvent = new 
ClusterConfigurationEvent(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION);
                 clusterConfigurationEvent.setSourceGroup(group);
@@ -203,20 +194,8 @@ public class ClusterServiceImpl implements ClusterService {
         Map<String, String> publicNodeEndpoints = new TreeMap<>();
         Map<String, String> secureNodeEndpoints = new TreeMap<>();
         if (karafCellarClusterNodeConfiguration != null) {
-            String publicEndpointsPropValue = 
karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS,
 thisKarafNode.getId() + "=" + address + ":" + port);
-            String secureEndpointsPropValue = 
karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS,
 thisKarafNode.getId() + "=" + secureAddress + ":" + securePort);
-            String[] publicEndpointsArray = 
publicEndpointsPropValue.split(",");
-            Set<String> publicEndpoints = new 
TreeSet<String>(Arrays.asList(publicEndpointsArray));
-            for (String endpoint : publicEndpoints) {
-                String[] endpointParts = endpoint.split("=");
-                publicNodeEndpoints.put(endpointParts[0], endpointParts[1]);
-            }
-            String[] secureEndpointsArray = 
secureEndpointsPropValue.split(",");
-            Set<String> secureEndpoints = new 
TreeSet<String>(Arrays.asList(secureEndpointsArray));
-            for (String endpoint : secureEndpoints) {
-                String[] endpointParts = endpoint.split("=");
-                secureNodeEndpoints.put(endpointParts[0], endpointParts[1]);
-            }
+            publicNodeEndpoints = 
getMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + 
address + ":" + port);
+            secureNodeEndpoints = 
getMapProperty(karafCellarClusterNodeConfiguration, 
KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + 
secureAddress + ":" + securePort);
         }
         for (org.apache.karaf.cellar.core.Node karafCellarNode : 
karafCellarNodes) {
             ClusterNode clusterNode = new ClusterNode();
@@ -332,4 +311,37 @@ public class ClusterServiceImpl implements ClusterService {
         return jmxConnector;
     }
 
+    private Map<String,String> getMapProperty(Properties properties, String 
propertyName, String defaultValue) {
+        String propertyValue = properties.getProperty(propertyName, 
defaultValue);
+        return getMapProperty(propertyValue);
+    }
+
+    private Map<String, String> getMapProperty(String propertyValue) {
+        String[] propertyValueArray = propertyValue.split(",");
+        Map<String,String> propertyMapValue = new LinkedHashMap<>();
+        for (String propertyValueElement : propertyValueArray) {
+            String[] propertyValueElementPrats = 
propertyValueElement.split("=");
+            propertyMapValue.put(propertyValueElementPrats[0], 
propertyValueElementPrats[1]);
+        }
+        return propertyMapValue;
+    }
+
+    private Map<String,String> setMapProperty(Properties properties, String 
propertyName, Map<String,String> propertyMapValue) {
+        StringBuilder propertyValueBuilder = new StringBuilder();
+        int entryCount = 0;
+        for (Map.Entry<String,String> propertyMapValueEntry : 
propertyMapValue.entrySet()) {
+            propertyValueBuilder.append(propertyMapValueEntry.getKey());
+            propertyValueBuilder.append("=");
+            propertyValueBuilder.append(propertyMapValueEntry.getValue());
+            if (entryCount < propertyMapValue.size() - 1) {
+                propertyValueBuilder.append(",");
+            }
+        }
+        String oldPropertyValue = (String) 
properties.setProperty(propertyName, propertyValueBuilder.toString());
+        if (oldPropertyValue == null) {
+            return null;
+        }
+        return getMapProperty(oldPropertyValue);
+    }
+
 }

Reply via email to