UNOMI-124 : Introduction of private (internal address)
diff --git a/api/src/main/java/org/apache/unomi/api/ClusterNode.java b/api/src/main/java/org/apache/unomi/api/ClusterNode.java
index 6aee44e..6c40ca2 100644
--- a/api/src/main/java/org/apache/unomi/api/ClusterNode.java
+++ b/api/src/main/java/org/apache/unomi/api/ClusterNode.java
@@ -28,12 +28,8 @@
 
     private double cpuLoad;
     private double[] loadAverage;
-    private String hostAddress;
-    private int publicPort;
-    private String secureHostAddress;
-    private int securePort;
+    private String publicHostAddress;
     private String internalHostAddress;
-    private int internalPort;
     private long uptime;
     private boolean master;
     private boolean data;
@@ -63,81 +59,27 @@
     }
 
     /**
-     * Retrieves the host address.
+     * Retrieves the public host address.
      *
-     * @return the host address
+     * @return the public host address
      */
-    public String getHostAddress() {
-        return hostAddress;
+    public String getPublicHostAddress() {
+        return publicHostAddress;
     }
 
     /**
-     * Sets the host address.
+     * Sets the public host address.
      *
-     * @param hostAddress the host address
+     * @param publicHostAddress the public host address
      */
-    public void setHostAddress(String hostAddress) {
-        this.hostAddress = hostAddress;
+    public void setPublicHostAddress(String publicHostAddress) {
+        this.publicHostAddress = publicHostAddress;
     }
 
     /**
-     * Retrieves the public port.
+     * Retrieves the internal host address which uses the HTTP/HTTPS protocol for communications between clients and the context server.
      *
-     * @return the public port
-     */
-    public int getPublicPort() {
-        return publicPort;
-    }
-
-    /**
-     * Sets the public port.
-     *
-     * @param publicPort the public port
-     */
-    public void setPublicPort(int publicPort) {
-        this.publicPort = publicPort;
-    }
-
-    /**
-     * Retrieves the secure host address which uses the HTTPS protocol for communications between clients and the context server.
-     *
-     * @return the secure host address
-     */
-    public String getSecureHostAddress() {
-        return secureHostAddress;
-    }
-
-    /**
-     * Sets the secure host address which uses the HTTPS protocol for communications between clients and the context server.
-     *
-     * @param secureHostAddress the secure host address
-     */
-    public void setSecureHostAddress(String secureHostAddress) {
-        this.secureHostAddress = secureHostAddress;
-    }
-
-    /**
-     * Retrieves the secure port.
-     *
-     * @return the secure port
-     */
-    public int getSecurePort() {
-        return securePort;
-    }
-
-    /**
-     * Sets the secure port.
-     *
-     * @param securePort the secure port
-     */
-    public void setSecurePort(int securePort) {
-        this.securePort = securePort;
-    }
-
-    /**
-     * Retrieves the secure host address which uses the HTTP/HTTPS protocol for communications between clients and the context server.
-     *
-     * @return the secure host address
+     * @return the internal host address
      */
     public String getInternalHostAddress() {
         return internalHostAddress;
@@ -153,24 +95,6 @@
     }
 
     /**
-     * Retrieves the internal port.
-     *
-     * @return the internal port
-     */
-    public int getInternalPort() {
-        return internalPort;
-    }
-
-    /**
-     * Sets the internal port.
-     *
-     * @param internalPort the internal port
-     */
-    public void setInternalPort(int internalPort) {
-        this.internalPort = internalPort;
-    }
-
-    /**
      * Retrieves the load average for the last minute, five minutes and fifteen minutes.
      *
      * @return an array of {@code double} containing, in order and starting from index {@code 0}, the load average for the last minute, last five minutes and last fifteen minutes
diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
index d480c1f..2087e53 100644
--- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
+++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
@@ -82,8 +82,8 @@
             HttpResponse response = httpClient.execute(httpPut);
 
             if (response.getStatusLine().getStatusCode() != 200) {
-                logger.error("Failed to update the running config: Please check the acceccibilty to the URI: \n{}",
-                        "http://localhost234:" + configSharingService.getProperty("internalServerPort") + "/configUpdate/importConfigAdmin");
+                logger.error("Failed to update the running config: Please check the accessibility to the URI: \n{}",
+                        "http://localhost:" + configSharingService.getProperty("internalServerPort") + "/configUpdate/importConfigAdmin");
                 logger.error("HTTP Status code returned {}", response.getStatusLine().getStatusCode());
                 throw new PartialContentException("RUNNING_CONFIG_UPDATE_FAILED");
             }
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 095e2d4..57d8d3e 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
@@ -47,13 +47,11 @@
  */
 public class ClusterServiceImpl implements ClusterService {
 
-    private static final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class.getName());
-
     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";
     public static final String KARAF_CLUSTER_CONFIGURATION_INTERNAL_ENDPOINTS = "internalEndpoints";
-
+    private static final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class.getName());
+    PersistenceService persistenceService;
     private ClusterManager karafCellarClusterManager;
     private EventProducer karafCellarEventProducer;
     private GroupManager karafCellarGroupManager;
@@ -62,16 +60,9 @@
     private String karafJMXUsername = "karaf";
     private String karafJMXPassword = "karaf";
     private int karafJMXPort = 1099;
-    private String address;
-    private String port;
-    private String secureAddress;
-    private String securePort;
+    private String publicAddress;
     private String internalAddress;
-    private String internalPort;
-
-    private Map<String,JMXConnector> jmxConnectors = new LinkedHashMap<>();
-
-    PersistenceService persistenceService;
+    private Map<String, JMXConnector> jmxConnectors = new LinkedHashMap<>();
 
     public void setPersistenceService(PersistenceService persistenceService) {
         this.persistenceService = persistenceService;
@@ -109,30 +100,14 @@
         this.karafJMXPort = karafJMXPort;
     }
 
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public void setPort(String port) {
-        this.port = port;
-    }
-
-    public void setSecureAddress(String secureAddress) {
-        this.secureAddress = secureAddress;
-    }
-
-    public void setSecurePort(String securePort) {
-        this.securePort = securePort;
+    public void setPublicAddress(String publicAddress) {
+        this.publicAddress = publicAddress;
     }
 
     public void setInternalAddress(String internalAddress) {
         this.internalAddress = internalAddress;
     }
 
-    public void setInternalPort(String internalPort) {
-        this.internalPort = internalPort;
-    }
-
     public void init() {
         if (karafCellarEventProducer != null && karafCellarClusterManager != null) {
 
@@ -167,12 +142,14 @@
                 if (karafCellarClusterNodeConfiguration == null) {
                     karafCellarClusterNodeConfiguration = new Properties();
                 }
-                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);
+                Map<String, String> publicEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + publicAddress);
+                publicEndpoints.put(thisKarafNode.getId(), publicAddress);
                 setMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, publicEndpoints);
-                setMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, secureEndpoints);
+
+                Map<String, String> internalEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_INTERNAL_ENDPOINTS, thisKarafNode.getId() + "=" + internalAddress);
+                internalEndpoints.put(thisKarafNode.getId(), internalAddress);
+                setMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_INTERNAL_ENDPOINTS, internalEndpoints);
+
                 configurations.put(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION, karafCellarClusterNodeConfiguration);
                 ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION);
                 clusterConfigurationEvent.setSourceGroup(group);
@@ -183,7 +160,7 @@
     }
 
     public void destroy() {
-        for (Map.Entry<String,JMXConnector> jmxConnectorEntry : jmxConnectors.entrySet()) {
+        for (Map.Entry<String, JMXConnector> jmxConnectorEntry : jmxConnectors.entrySet()) {
             String url = jmxConnectorEntry.getKey();
             JMXConnector jmxConnector = jmxConnectorEntry.getValue();
             try {
@@ -204,36 +181,22 @@
         Map<String, Properties> clusterConfigurations = karafCellarClusterManager.getMap(Constants.CONFIGURATION_MAP + Configurations.SEPARATOR + karafCellarGroupName);
         Properties karafCellarClusterNodeConfiguration = clusterConfigurations.get(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION);
         Map<String, String> publicNodeEndpoints = new TreeMap<>();
-        Map<String, String> secureNodeEndpoints = new TreeMap<>();
         Map<String, String> internalNodeEndpoints = new TreeMap<>();
         if (karafCellarClusterNodeConfiguration != null) {
-            publicNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + address + ":" + port);
-            secureNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + secureAddress + ":" + securePort);
-            internalNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_INTERNAL_ENDPOINTS, thisKarafNode.getId() + "=" + internalAddress + ":" + internalPort);
+            publicNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + publicAddress);
+            internalNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_INTERNAL_ENDPOINTS, thisKarafNode.getId() + "=" + internalAddress);
         }
         for (org.apache.karaf.cellar.core.Node karafCellarNode : karafCellarNodes) {
             ClusterNode clusterNode = new ClusterNode();
             String publicEndpoint = publicNodeEndpoints.get(karafCellarNode.getId());
             if (publicEndpoint != null) {
-                String[] publicEndpointParts = publicEndpoint.split(":");
-                clusterNode.setHostAddress(publicEndpointParts[0]);
-                clusterNode.setPublicPort(Integer.parseInt(publicEndpointParts[1]));
-            }
-            String secureEndpoint = secureNodeEndpoints.get(karafCellarNode.getId());
-            if (secureEndpoint != null) {
-                String[] secureEndpointParts = secureEndpoint.split(":");
-                clusterNode.setSecureHostAddress(secureEndpointParts[0]);
-                clusterNode.setSecurePort(Integer.parseInt(secureEndpointParts[1]));
-                clusterNode.setMaster(false);
-                clusterNode.setData(false);
+                clusterNode.setPublicHostAddress(publicEndpoint);
             }
             String internalEndpoint = internalNodeEndpoints.get(karafCellarNode.getId());
             if (internalEndpoint != null) {
-                String[] internalEndpointParts = internalEndpoint.split(":");
-                clusterNode.setInternalHostAddress(internalEndpointParts[0]);
-                clusterNode.setInternalPort(Integer.parseInt(internalEndpointParts[1]));
+                clusterNode.setInternalHostAddress(internalEndpoint);
             }
-            String serviceUrl = "service:jmx:rmi:///jndi/rmi://"+karafCellarNode.getHost() + ":"+karafJMXPort+"/karaf-root";
+            String serviceUrl = "service:jmx:rmi:///jndi/rmi://" + karafCellarNode.getHost() + ":" + karafJMXPort + "/karaf-root";
             try {
                 JMXConnector jmxConnector = getJMXConnector(serviceUrl);
                 MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();
@@ -249,7 +212,7 @@
                     logger.error("Error retrieving system CPU load", e);
                 }
                 final OperatingSystemMXBean remoteOperatingSystemMXBean = ManagementFactory.newPlatformMXBeanProxy(mbsc, ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME, OperatingSystemMXBean.class);
-                clusterNode.setLoadAverage(new double[] { remoteOperatingSystemMXBean.getSystemLoadAverage()});
+                clusterNode.setLoadAverage(new double[]{remoteOperatingSystemMXBean.getSystemLoadAverage()});
                 if (systemCpuLoad != null) {
                     clusterNode.setCpuLoad(systemCpuLoad);
                 }
@@ -260,8 +223,8 @@
                 handleTimeouts(serviceUrl, ce);
             } catch (java.rmi.ConnectException ce) {
                 handleTimeouts(serviceUrl, ce);
-            } catch (java.rmi.ConnectIOException coie) {
-                handleTimeouts(serviceUrl, coie);
+            } catch (java.rmi.ConnectIOException cioe) {
+                handleTimeouts(serviceUrl, cioe);
             } catch (IOException e) {
                 logger.error("Error retrieving remote JMX data", e);
             } catch (MalformedObjectNameException e) {
@@ -307,10 +270,10 @@
     /**
      * Check if a configuration is allowed.
      *
-     * @param group the cluster group.
+     * @param group    the cluster group.
      * @param category the configuration category constant.
-     * @param pid the configuration PID.
-     * @param type the cluster event type.
+     * @param pid      the configuration PID.
+     * @param type     the cluster event type.
      * @return true if the cluster event type is allowed, false else.
      */
     public boolean isClusterConfigPIDAllowed(Group group, String category, String pid, EventType type) {
@@ -345,23 +308,23 @@
         // if we reach this point either we didn't have a connector or it didn't validate
         // now let's connect to remote JMX service to retrieve information from the runtime and operating system MX beans
         JMXServiceURL jmxServiceURL = new JMXServiceURL(url);
-        Map<String,Object> environment=new HashMap<String,Object>();
+        Map<String, Object> environment = new HashMap<String, Object>();
         if (karafJMXUsername != null && karafJMXPassword != null) {
-            environment.put(JMXConnector.CREDENTIALS,new String[]{karafJMXUsername,karafJMXPassword});
+            environment.put(JMXConnector.CREDENTIALS, new String[]{karafJMXUsername, karafJMXPassword});
         }
         JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxServiceURL, environment);
         jmxConnectors.put(url, jmxConnector);
         return jmxConnector;
     }
 
-    private Map<String,String> getMapProperty(Properties properties, String propertyName, String defaultValue) {
+    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<>();
+        Map<String, String> propertyMapValue = new LinkedHashMap<>();
         for (String propertyValueElement : propertyValueArray) {
             String[] propertyValueElementPrats = propertyValueElement.split("=");
             propertyMapValue.put(propertyValueElementPrats[0], propertyValueElementPrats[1]);
@@ -369,10 +332,10 @@
         return propertyMapValue;
     }
 
-    private Map<String,String> setMapProperty(Properties properties, String propertyName, Map<String,String> 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()) {
+        for (Map.Entry<String, String> propertyMapValueEntry : propertyMapValue.entrySet()) {
             propertyValueBuilder.append(propertyMapValueEntry.getKey());
             propertyValueBuilder.append("=");
             propertyValueBuilder.append(propertyMapValueEntry.getValue());
diff --git a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 8bbdcc6..fafb5fd 100644
--- a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -40,12 +40,8 @@
             <cm:property name="jmxUsername" value="karaf" />
             <cm:property name="jmxPassword" value="karaf" />
             <cm:property name="jmxPort" value="1099" />
-            <cm:property name="contextserver.address" value="localhost"/>
-            <cm:property name="contextserver.port" value="8181"/>
-            <cm:property name="contextserver.secureAddress" value="localhost"/>
-            <cm:property name="contextserver.securePort" value="9443"/>
-            <cm:property name="contextserver.internalAddress" value="127.0.0.1"/>
-            <cm:property name="contextserver.internalPort" value="8181"/>
+            <cm:property name="contextserver.publicAddress" value="https://localhost:9443"/>
+            <cm:property name="contextserver.internalAddress" value="http://127.0.0.1:8181"/>
         </cm:default-properties>
     </cm:property-placeholder>
 
@@ -160,12 +156,8 @@
 
     <bean id="clusterServiceImpl" class="org.apache.unomi.services.services.ClusterServiceImpl"
           init-method="init" destroy-method="destroy">
-        <property name="address" value="${cluster.contextserver.address}"/>
-        <property name="port" value="${cluster.contextserver.port}"/>
-        <property name="secureAddress" value="${cluster.contextserver.secureAddress}"/>
-        <property name="securePort" value="${cluster.contextserver.securePort}"/>
+        <property name="publicAddress" value="${cluster.contextserver.publicAddress}"/>
         <property name="internalAddress" value="${cluster.contextserver.internalAddress}"/>
-        <property name="internalPort" value="${cluster.contextserver.internalPort}"/>
         <property name="persistenceService" ref="persistenceService"/>
         <property name="karafCellarClusterManager" ref="karafCellarClusterManager" />
         <property name="karafCellarEventProducer" ref="karafCellarEventProducer" />
diff --git a/services/src/main/resources/org.apache.unomi.cluster.cfg b/services/src/main/resources/org.apache.unomi.cluster.cfg
index f4beddf..9bdc7af 100644
--- a/services/src/main/resources/org.apache.unomi.cluster.cfg
+++ b/services/src/main/resources/org.apache.unomi.cluster.cfg
@@ -18,9 +18,5 @@
 jmxUsername=karaf
 jmxPassword=karaf
 jmxPort=1099
-contextserver.address=localhost
-contextserver.port=8181
-contextserver.secureAddress=localhost
-contextserver.securePort=9443
-contextserver.internalAddress=127.0.0.1
-contextserver.internalPort=8181
+contextserver.publicAddress=https://localhost:9443
+contextserver.internalAddress=http://127.0.0.1:8181
diff --git a/src/site/markdown/versions/master/configuration.md b/src/site/markdown/versions/master/configuration.md
index 5d776e2..7cc4c11 100644
--- a/src/site/markdown/versions/master/configuration.md
+++ b/src/site/markdown/versions/master/configuration.md
@@ -24,12 +24,10 @@
 If you want to change the default configuration, you can perform any modification you want in the $MY_KARAF_HOME/etc directory.
 
 The context server configuration is kept in the $MY_KARAF_HOME/etc/org.apache.unomi.cluster.cfg . It defines the
-addresses and port where it can be found :
+addresses where it can be found :
 
-    contextserver.address=localhost
-    contextserver.port=8181
-    contextserver.secureAddress=localhost
-    contextserver.securePort=9443
+    contextserver.publicAddress=https://localhost:9443
+    contextserver.internalAddress=http://127.0.0.1:8181
 
 If you need to specify an Elasticsearch cluster name, or a host and port that are different than the default, 
 it is recommended to do this BEFORE you start the server for the first time, or you will loose all the data 
@@ -203,10 +201,8 @@
 
 In your Unomi package directory, in /etc/org.apache.unomi.cluster.cfg for unomi.apache.org
    
-   contextserver.address=unomi.apache.org
-   contextserver.port=80
-   contextserver.secureAddress=unomi.apache.org
-   contextserver.securePort=443
+   contextserver.publicAddress=https://unomi.apache.org/
+   contextserver.internalAddress=http://192.168.1.1:8181
    
 and you will also need to change the contextserver.domain in the /etc/org.apache.unomi.web.cfg file