Configuration and Auto-Certificates
[aaf/authz.git] / cadi / aaf / src / main / java / org / onap / aaf / cadi / aaf / v2_0 / AbsAAFLocator.java
index 19beef6..7de8536 100644 (file)
@@ -28,9 +28,11 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.NoSuchElementException;
 
 import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.Access.Level;
+import org.onap.aaf.cadi.aaf.Defaults;
 import org.onap.aaf.cadi.Locator;
 import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.cadi.config.Config;
@@ -57,14 +59,24 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
        protected String myhostname;
        protected int myport;
        protected final String aaf_locator_host;
+       protected final URI aaf_locator_uri;
        private long earliest;
        private final long refreshWait;
 
 
        public AbsAAFLocator(Access access, String name, final long refreshMin) throws LocatorException {
                aaf_locator_host = access.getProperty(Config.AAF_LOCATE_URL, null);
+               if(aaf_locator_host==null) {
+                       aaf_locator_uri = null;
+               } else {
+                       try {
+                               aaf_locator_uri = new URI(aaf_locator_host);
+                       } catch (URISyntaxException e) {
+                               throw new LocatorException(e);
+                       }
+               }
 
-               epList = new LinkedList<EP>();
+               epList = new LinkedList<>();
                refreshWait = refreshMin;
 
                this.access = access;
@@ -76,26 +88,19 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                        latitude = Double.parseDouble(lat);
                        longitude = Double.parseDouble(lng);
                }
+               if(name.startsWith(Defaults.AAF_NS)) {
+                       String root_ns = access.getProperty(Config.AAF_ROOT_NS, null);
+                       if(root_ns!=null) {
+                               name=name.replace(Defaults.AAF_NS, root_ns);
+                       }
+               }
                if(name.startsWith("http")) { // simple URL
                        this.name = name;
                        this.version = Config.AAF_DEFAULT_VERSION;
                } else {
                        String[] split = Split.split(':', name);
-                       
-                       switch(split.length) {
-                               case 1:
-                                       this.name = split[0];
-                                       this.version = Config.AAF_DEFAULT_VERSION;
-                                       break;
-                               case 0:
-                                       this.name = name;
-                                       this.version = Config.AAF_DEFAULT_VERSION;
-                                       break;
-                               default:
-                                       this.version = split[1];
-                                       this.name = split[0];
-                                       
-                       }
+                       this.name = split[0];
+                       this.version = (split.length > 1) ? split[1] : Config.AAF_DEFAULT_VERSION;
                }
                
        }
@@ -137,13 +142,11 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                if(key.startsWith("http")) {
                        if(name!=null) {
                                if(locatorCreator != null) {
-                                       if(name!=null) {
-                                               AbsAAFLocator<?> aal = locatorCreator.create(name, version);
-                                               if(pathInfo!=null) {
-                                                       aal.setPathInfo(pathInfo);
-                                               }
-                                               return aal;
+                                       AbsAAFLocator<?> aal = locatorCreator.create(name, version);
+                                       if(pathInfo!=null) {
+                                               aal.setPathInfo(pathInfo);
                                        }
+                                       return aal;
                                }
                        } else {
                                return new PropertyLocator(key);
@@ -263,9 +266,9 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
        @Override
        public Item best() throws LocatorException {
                if(!hasItems()) {
-                       throw new LocatorException("No Entries found" + (pathInfo==null?"":(" for " + pathInfo)));
+                       throw new LocatorException("No Entries found for '" + aaf_locator_uri.toString() + "/locate/" + name + ':' + version + '\'');
                }
-               List<EP> lep = new ArrayList<EP>();
+               List<EP> lep = new ArrayList<>();
                EP first = null;
                // Note: Deque is sorted on the way by closest distance
                Iterator<EP> iter = getIterator();
@@ -291,7 +294,8 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                        case 1:
                                return new AAFLItem(iter,first);
                        default:
-                               int i = Math.abs(sr.nextInt())%lep.size();
+                               int rand = sr.nextInt(); // Sonar chokes without.
+                               int i = Math.abs(rand)%lep.size();
                                if(i<0) {
                                        return null;
                                } else {
@@ -340,6 +344,9 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
 
                @Override
                public EP next() {
+                       if(!hasNext() ) {
+                               throw new NoSuchElementException();
+                       }
                        return (EP)epa[idx++];
                }
 
@@ -434,10 +441,10 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                public int compareTo(EP o) {
                        if(distance<o.distance) {
                                return -1;
-                       } else if(distance==o.distance) {
-                               return 0;
-                       } else {
+                       } else if(distance>o.distance) {
                                return 1;
+                       } else {
+                               return 0;
                        }
                }
                
@@ -486,7 +493,7 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                        try {
                                return new URI(rv.getScheme(),rv.getUserInfo(),rv.getHost(),rv.getPort(),pathInfo,query,fragment);
                        } catch (URISyntaxException e) {
-                               throw new LocatorException("Error coping URL");
+                               throw new LocatorException("Error copying URL");
                        }
                }
                return rv;