Updates for DirectLocator
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / config / RegistrationPropHolder.java
index aa78231..2a8760f 100644 (file)
@@ -24,15 +24,17 @@ import java.net.Inet4Address;
 import java.net.UnknownHostException;
 
 import org.onap.aaf.cadi.Access;
+import org.onap.aaf.cadi.Access.Level;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.util.Split;
 
 public class RegistrationPropHolder {
        private final String PUBLIC_NAME="%NS.%N";
+       private final String REGI="RegistrationProperty: %s='%s'";
        private final Access access;
        public String hostname;
        private int port;
-       public String public_hostname;
+       public String public_fqdn;
        private Integer public_port;
        public Float latitude;
        public Float longitude;
@@ -41,6 +43,8 @@ public class RegistrationPropHolder {
        public final String default_name;
        public final String lentries;
        public final String lcontainer;
+       public final String default_container;
+       private static boolean firstlog = true;
 
        public RegistrationPropHolder(final Access access, final int port) throws UnknownHostException, CadiException {
                this.access = access;
@@ -49,22 +53,27 @@ public class RegistrationPropHolder {
                this.port = port;
 
                lentries=access.getProperty(Config.AAF_LOCATOR_ENTRIES,"");
-               
-               str = access.getProperty(Config.AAF_LOCATOR_CONTAINER, "");
-               if(!str.isEmpty()) {
-                       lcontainer=',' + str; // "" makes a blank default Public Entry
-                       str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_PORT+'.'+str, null);
+               default_container = access.getProperty(Config.AAF_LOCATOR_CONTAINER, "");
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"default_container",default_container);
+               }
+               if(!default_container.isEmpty()) {
+                       lcontainer=',' + default_container; // "" makes a blank default Public Entry
+                       str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_PORT+'.'+default_container, null);
                        if(str==null) {
                                str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_PORT, null);
                        }
                } else {
-                       lcontainer=str;
+                       lcontainer=default_container;
                        str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_PORT, null);
                }
                if(str!=null) {
                        public_port=Integer.decode(str);
                }
-               
+               if(firstlog) {
+                       access.printf(Level.INIT, "RegistrationProperty: public_port='%d'",public_port);
+               }
+
                hostname = access.getProperty(Config.HOSTNAME, null);
                if (hostname==null) {
                        hostname = Inet4Address.getLocalHost().getHostName();
@@ -72,10 +81,28 @@ public class RegistrationPropHolder {
                if (hostname==null) {
                        mustBeDefined(errs,Config.HOSTNAME);
                }
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"hostname",hostname);
+               }
+
+               public_fqdn = access.getProperty(Config.AAF_LOCATOR_PUBLIC_FQDN, hostname);
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"public_fqdn",public_fqdn);
+               }
 
-               public_hostname = access.getProperty(Config.AAF_LOCATOR_PUBLIC_HOSTNAME, hostname);
-                               
-               default_name = access.getProperty(Config.AAF_LOCATOR_NAME, "%CNS.%NS.%N");
+               // Allow Container to reset the standard name for public
+               String container_public_name = access.getProperty(Config.AAF_LOCATOR_PUBLIC_NAME+'.'+default_container, null);
+               if(container_public_name==null) {
+                       container_public_name = access.getProperty(Config.AAF_LOCATOR_PUBLIC_NAME, null);
+                       if(container_public_name==null) {
+                               container_public_name = access.getProperty(Config.AAF_LOCATOR_NAME, PUBLIC_NAME);
+                       }
+               }
+               default_name = container_public_name;
+               
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"default_name",default_name);
+               }
                
                latitude=null;
                String slatitude = access.getProperty(Config.CADI_LATITUDE, null);
@@ -84,6 +111,9 @@ public class RegistrationPropHolder {
                } else {
                        latitude = Float.parseFloat(slatitude);
                }
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"latitude",slatitude);
+               }
 
                longitude=null;
                String slongitude = access.getProperty(Config.CADI_LONGITUDE, null);
@@ -92,23 +122,35 @@ public class RegistrationPropHolder {
                } else {
                        longitude = Float.parseFloat(slongitude);
                }
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"longitude",slongitude);
+               }
 
                String dot_le;
                // Note: only one of the ports can be public...  Therefore, only the last
                for(String le : Split.splitTrim(',', lcontainer)) {
-                       dot_le = le.isEmpty()?"":"."+le;
-                       str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_HOSTNAME+dot_le,null);
-                       if( str != null) {
-                               public_hostname=str;
+                       dot_le = le.isEmpty()?le :"."+le;
+                       str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_FQDN+dot_le,null);
+                       if( str != null && !str.isEmpty()) {
+                               public_fqdn=str;
+                               if(firstlog) {
+                                       access.printf(Level.INIT, "RegistrationProperty: public_hostname(overloaded by %s)='%s'",dot_le,public_fqdn);
+                               }
                        }
                }
                
                default_fqdn = access.getProperty(Config.AAF_LOCATOR_FQDN, hostname);
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"default_fqdn",default_fqdn);
+               }
                default_container_ns = access.getProperty(Config.AAF_LOCATOR_CONTAINER_NS,"");
-               
+               if(firstlog) {
+                       access.printf(Level.INIT, REGI,"default_container_ns",default_container_ns);
+               }
                if(errs.length()>0) {
                        throw new CadiException(errs.toString());
                }
+               firstlog = false;
        }
 
        private void mustBeDefined(StringBuilder errs, String propname) {
@@ -120,105 +162,142 @@ public class RegistrationPropHolder {
 
        public String getEntryFQDN(final String entry, final String dot_le) {
                String str;
-               if(public_hostname!=null && dot_le.isEmpty()) {
-                       str = public_hostname;
+               if(public_fqdn!=null && dot_le.isEmpty()) {
+                       str = public_fqdn;
                } else {
                        str = access.getProperty(Config.AAF_LOCATOR_FQDN+dot_le, default_fqdn);
                }
-               return replacements(str,entry,dot_le);
+               return replacements("RegistrationPropHolder.getEntryFQDN",str,entry,dot_le);
        }
        
        public String getEntryName(final String entry, final String dot_le) {
                String str;
                if(dot_le.isEmpty()) {
-                       str = PUBLIC_NAME;
+                       str = default_name;
                } else {
                        str = access.getProperty(Config.AAF_LOCATOR_NAME+dot_le, default_name);
                }
-               return replacements(str,entry,dot_le);
+               return replacements("RegistrationPropHolder.getEntryName",str,entry,dot_le);
+       }
+       
+       public String getPublicEntryName(final String entry, final String dot_le) {
+               String str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_NAME+dot_le, null);
+               if(str==null) {
+                       str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_NAME,null);
+               }
+               if(str==null) {
+                       str = default_name;
+               }
+               return replacements("RegistrationPropHolder.getEntryName",str,entry,dot_le);
        }
        
        
        private String getNS(String dot_le) {
                String ns;
-               ns = access.getProperty(Config.AAF_LOCATOR_NS+dot_le,null);
+               ns = access.getProperty(Config.AAF_LOCATOR_APP_NS+dot_le,null);
                if(ns==null) {
-                       ns = access.getProperty(Config.AAF_ROOT_NS, "");
+                       ns = access.getProperty(Config.AAF_LOCATOR_APP_NS, "AAF_NS");
                }
                return ns;
        }
 
        
-       public String replacements(String source, final String name, final String dot_le) {
+       public String replacements(final String fromCode, final String source, final String name, final String _dot_le) {
                if(source == null) {
                        return "";
                } else if(source.isEmpty()) {
                        return source;
                }
-               String str;
-               // aaf_locate_url
-               if(source.indexOf(Config.AAF_LOCATE_URL_TAG)>=0) {
-                       str = access.getProperty(Config.AAF_LOCATE_URL, null);
-                       if(str!=null) {
-                               if(!str.endsWith("/")) {
-                                       str+='/';
-                               }
-                               if(!str.endsWith("/locate/")) {
-                                       str+="locate/";
+               String value = source;
+               String dot_le;
+               if(_dot_le==null) {
+                       dot_le = default_container.isEmpty()?"":'.'+default_container;
+               } else {
+                       dot_le = _dot_le;
+               }
+
+        String aaf_locator_host = access.getProperty(Config.AAF_LOCATE_URL+dot_le,null);
+        if(aaf_locator_host==null) {
+               aaf_locator_host = access.getProperty(Config.AAF_LOCATE_URL,null);
+        }
+
+        String str;
+        if(aaf_locator_host!=null) {
+                       if("https://AAF_LOCATE_URL".equals(value)) {
+                               value = aaf_locator_host;
+                       } else {
+                       str = aaf_locator_host;
+                               if(value.indexOf(Config.AAF_LOCATE_URL_TAG)>=0) {
+                                       if(!str.endsWith("/")) {
+                                               str+='/';
+                                       }
+                                       if(!str.endsWith("/locate/")) {
+                                               str+="locate/";
+                                       }
+                                       if(value.startsWith("http:")) {
+                                               value = value.replace("http://AAF_LOCATE_URL/", str);
+                                       } else {
+                                               value = value.replace("https://AAF_LOCATE_URL/", str);
+                                               
+                                       }
                                }
-                               source = source.replace("https://AAF_LOCATE_URL/", str);
                        }
-               }
+        }
 
-               int atC = source.indexOf("%C"); 
+               int atC = value.indexOf("%C"); 
                if(atC>=0) {
                        // aaf_locator_container_ns
                        str = access.getProperty(Config.AAF_LOCATOR_CONTAINER_NS+dot_le, default_container_ns);
                        if(str.isEmpty()) {
-                               source = source.replace("%CNS"+'.', str);
+                               value = value.replace("%CNS"+'.', str);
                        }
-                       source = source.replace("%CNS", str);
+                       value = value.replace("%CNS", str);
                        
-                       str = access.getProperty(Config.AAF_LOCATOR_CONTAINER+dot_le, "");
+                       str = access.getProperty(Config.AAF_LOCATOR_CONTAINER+dot_le,default_container);
                        if(str.isEmpty()) {
-                               source = source.replace("%C"+'.', str);
+                               value = value.replace("%C"+'.', str);
                        }
-                       source = source.replace("%C", str);
+                       value = value.replace("%C", str);
                }
                
-               if(source.indexOf("%NS")>=0) {
+               if(value.indexOf("%NS")>=0) {
                        str = getNS(dot_le);
                        if(str==null || str.isEmpty()) {
-                               source = source.replace("%NS"+'.', str);
+                               value = value.replace("%NS"+'.', "");
+                       } else {
+                               value = value.replace("%NS", str);
                        }
-                       source = source.replace("%NS", str);
                }
 
                // aaf_root_ns
-               if(source.indexOf("AAF_NS")>=0) {
-                       str = access.getProperty(Config.AAF_ROOT_NS, Config.AAF_ROOT_NS_DEF);
-                       String temp = source.replace("%AAF_NS", str);
-                       if(temp.equals(source)) { // intended
-                               source = source.replace("AAF_NS", str); // Backward Compatibility
+               if(value.indexOf("AAF_NS")>=0) {
+                       str = access.getProperty(Config.AAF_ROOT_NS, Config.AAF_ROOT_NS_DEF) + '.';
+                       String temp = value.replace("%AAF_NS.", str);
+                       if(temp.equals(value)) { // intended
+                               value = value.replace("AAF_NS.", str); // Backward Compatibility
                        } else {
-                               source = temp;
+                               value = temp;
                        }
                }
 
                
-               if(source.indexOf('%')>=0) {
+               if(value.indexOf('%')>=0) {
             // These shouldn't be expected to have dot elements
             if(name!=null) {
-              source = source.replace("%N", name);
+              value = value.replace("%N", name);
             }
             if(default_fqdn!=null) {
-              source = source.replace("%DF", default_fqdn);
+              value = value.replace("%DF", default_fqdn);
             }
-            if(public_hostname!=null) {
-              source = source.replace("%PH", public_hostname);
+            if(public_fqdn!=null) {
+              value = value.replace("%PH", public_fqdn);
             }
                }
-               return source;
+               access.printf(Level.DEBUG, 
+                               "RegistrationReplacement from %s, source: %s, dot_le: %s, value: %s",
+                               fromCode,source,dot_le,value);
+
+               return value;
        }
        
        public int getEntryPort(final String dot_le) {
@@ -226,4 +305,8 @@ public class RegistrationPropHolder {
                                public_port:
                                port;
        }
+
+       public Access access() {
+               return access;
+       }
 }
\ No newline at end of file