X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Faaf%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Faaf%2Fv2_0%2FAbsAAFLocator.java;h=a6b7da805402bce34d0e5a371198f7db360d4d81;hb=be1edcb6830745015f5de72e820f40f36dd571ad;hp=3f6d7475d6b0b12a860b2214641a1077008077cb;hpb=4b5a7d721d994a49057e9bfb403c7bff1b376660;p=aaf%2Fauthz.git diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java index 3f6d7475..a6b7da80 100644 --- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java +++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,6 +23,7 @@ package org.onap.aaf.cadi.aaf.v2_0; import java.net.URI; import java.net.URISyntaxException; +import java.net.UnknownHostException; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Iterator; @@ -32,11 +33,11 @@ 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.CadiException; import org.onap.aaf.cadi.Locator; import org.onap.aaf.cadi.LocatorException; import org.onap.aaf.cadi.config.Config; -import org.onap.aaf.cadi.locator.PropertyLocator; +import org.onap.aaf.cadi.config.RegistrationPropHolder; import org.onap.aaf.cadi.routing.GreatCircle; import org.onap.aaf.misc.env.Trans; import org.onap.aaf.misc.env.util.Split; @@ -59,50 +60,56 @@ public abstract class AbsAAFLocator implements Locator protected String myhostname; protected int myport; protected final String aaf_locator_host; - protected final URI aaf_locator_uri; + protected 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 { + RegistrationPropHolder rph; + try { + rph = new RegistrationPropHolder(access, 0); + } catch (UnknownHostException | CadiException e1) { + throw new LocatorException(e1); + } + URI aaf_locator_uri; + try { + aaf_locator_host = rph.replacements(getClass().getSimpleName(),"https://"+Config.AAF_LOCATE_URL_TAG,null,null); + if(aaf_locator_host.endsWith("/locate")) { aaf_locator_uri = new URI(aaf_locator_host); - } catch (URISyntaxException e) { - throw new LocatorException(e); + } else { + aaf_locator_uri = new URI(aaf_locator_host+"/locate"); } + access.printf(Level.INFO, "AbsAAFLocator AAF URI is %s",aaf_locator_uri); + } catch (URISyntaxException e) { + throw new LocatorException(e); } + name = rph.replacements(getClass().getSimpleName(),name, null,null); + access.printf(Level.INFO, "AbsAAFLocator name is %s",aaf_locator_uri); + epList = new LinkedList<>(); refreshWait = refreshMin; this.access = access; String lat = access.getProperty(Config.CADI_LATITUDE,null); String lng = access.getProperty(Config.CADI_LONGITUDE,null); - if(lat==null || lng==null) { + if (lat==null || lng==null) { throw new LocatorException(Config.CADI_LATITUDE + " and " + Config.CADI_LONGITUDE + " properties are required."); } else { 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 + + + if (name.startsWith("http")) { // simple URL this.name = name; - this.version = Config.AAF_DEFAULT_VERSION; + this.version = access.getProperty(Config.AAF_API_VERSION,Config.AAF_DEFAULT_API_VERSION); } else { String[] split = Split.split(':', name); this.name = split[0]; - this.version = (split.length > 1) ? split[1] : Config.AAF_DEFAULT_VERSION; + this.version = (split.length > 1) ? split[1] : access.getProperty(Config.AAF_API_VERSION,Config.AAF_DEFAULT_API_VERSION); } - } /** @@ -110,54 +117,13 @@ public abstract class AbsAAFLocator implements Locator * @param preload */ public static void setCreator(LocatorCreator lc) { - locatorCreator = lc; + locatorCreator = lc; } - - public static Locator create(String key) throws LocatorException { - String name = null; - String version = Config.AAF_DEFAULT_VERSION; - String pathInfo = null; - int prev = key.indexOf("/locate"); - if(prev>0) { - prev = key.indexOf('/',prev+6); - if(prev>0) { - int next = key.indexOf('/',++prev); - if(next>0) { - name = key.substring(prev, next); - pathInfo=key.substring(next); - } else { - name = key.substring(prev); - } - String[] split = Split.split(':', name); - switch(split.length) { - case 3: - case 2: - version = split[1]; - name = split[0]; - break; - default: - break; - } - } - } - if(key.startsWith("http")) { - if(name!=null) { - if(locatorCreator != null) { - AbsAAFLocator aal = locatorCreator.create(name, version); - if(pathInfo!=null) { - aal.setPathInfo(pathInfo); - } - return aal; - } - } else { - return new PropertyLocator(key); - } - } - return null; - } - public static Locator create(final String name, final String version) throws LocatorException { + if(locatorCreator==null) { + throw new LocatorException("LocatorCreator is not set"); + } return locatorCreator.create(name, version); } @@ -168,15 +134,17 @@ public abstract class AbsAAFLocator implements Locator protected static String nameFromLocatorURI(URI locatorURI) { String[] path = Split.split('/', locatorURI.getPath()); - if(path.length>2 && "locate".equals(path[1])) { - return path[2]; + if (path.length>1 && "locate".equals(path[1])) { + return path[2]; + } else if(path.length>1) { + return path[1]; } else { return locatorURI.toString(); } } - + /** - * Setting "self" excludes this service from the list. Critical for contacting peers. + * Setting "self" excludes this service from the list. Critical for contacting peers. */ public void setSelf(final String hostname, final int port) { myhostname=hostname; @@ -185,7 +153,7 @@ public abstract class AbsAAFLocator implements Locator public static void setCreatorSelf(final String hostname, final int port) { - if(locatorCreator!=null) { + if (locatorCreator!=null) { locatorCreator.setSelf(hostname,port); } } @@ -193,17 +161,17 @@ public abstract class AbsAAFLocator implements Locator protected final synchronized void replace(List list) { epList = list; } - + /** * Call _refresh as needed during calls, but actual refresh will not occur if there - * are existing entities or if it has been called in the last 10 (settable) seconds. + * are existing entities or if it has been called in the last 10 (settable) seconds. * Timed Refreshes happen by Scheduled Thread */ private final boolean _refresh() { boolean rv = false; long now=System.currentTimeMillis(); - if(noEntries()) { - if(earliest implements Locator @Override public URI get(Item item) throws LocatorException { - if(item==null) { + if (item==null) { return null; - } else if(item instanceof AAFLItem) { + } else if (item instanceof AAFLItem) { return getURI(((AAFLItem)item).uri); } else { throw new LocatorException(item.getClass().getName() + " does not belong to AAFLocator"); @@ -233,16 +201,16 @@ public abstract class AbsAAFLocator implements Locator @Override public boolean hasItems() { boolean isEmpty = epList.isEmpty(); - if(!isEmpty) { - for(Iterator iter = epList.iterator(); iter.hasNext(); ) { + if (!isEmpty) { + for (Iterator iter = epList.iterator(); iter.hasNext(); ) { EP ep = iter.next(); - if(ep.valid) { + if (ep.valid) { return true; } } isEmpty = true; } - if(_refresh()) { // is refreshed... check again + if (_refresh()) { // is refreshed... check again isEmpty = epList.isEmpty(); } return !isEmpty; @@ -250,9 +218,9 @@ public abstract class AbsAAFLocator implements Locator @Override public void invalidate(Item item) throws LocatorException { - if(item!=null) { - if(item instanceof AAFLItem) { - AAFLItem ali =(AAFLItem)item; + if (item!=null) { + if (item instanceof AAFLItem) { + AAFLItem ali =(AAFLItem)item; EP ep = ali.ep; synchronized(epList) { epList.remove(ep); @@ -267,22 +235,25 @@ public abstract class AbsAAFLocator implements Locator @Override public Item best() throws LocatorException { - if(!hasItems()) { - throw new LocatorException("No Entries found for '" + aaf_locator_uri.toString() + "/locate/" + name + ':' + version + '\''); + if (!hasItems()) { + throw new LocatorException(String.format("No Entries found for '%s/%s:%s'", + (aaf_locator_uri==null?(aaf_locator_host+"/locate"):aaf_locator_uri.toString()), + name, + version)); } List lep = new ArrayList<>(); EP first = null; // Note: Deque is sorted on the way by closest distance Iterator iter = getIterator(); EP ep; - while(iter.hasNext()) { + while (iter.hasNext()) { ep = iter.next(); - if(ep.valid) { - if(first==null) { + if (ep.valid) { + if (first==null) { first = ep; lep.add(first); } else { - if(Math.abs(ep.distance-first.distance)<.1) { // allow for nearby/precision issues. + if (Math.abs(ep.distance-first.distance)<.1) { // allow for nearby/precision issues. lep.add(ep); } else { break; @@ -298,18 +269,18 @@ public abstract class AbsAAFLocator implements Locator default: int rand = sr.nextInt(); // Sonar chokes without. int i = Math.abs(rand)%lep.size(); - if(i<0) { + if (i<0) { return null; } else { return new AAFLItem(iter,lep.get(i)); } - + } } private Iterator getIterator() { Object[] epa = epList.toArray(); - if(epa.length==0) { + if (epa.length==0) { _refresh(); epa = epList.toArray(); } @@ -320,7 +291,7 @@ public abstract class AbsAAFLocator implements Locator private final Object[] epa; private final List epList; private int idx; - + public EPIterator(Object[] epa, List epList) { this.epa = epa; this.epList = epList; @@ -329,12 +300,12 @@ public abstract class AbsAAFLocator implements Locator @Override public boolean hasNext() { - if(idx<0) { + if (idx<0) { return false; } else { Object obj; - while(idx implements Locator @Override public EP next() { - if(!hasNext() ) { + if (!hasNext() ) { throw new NoSuchElementException(); } return (EP)epa[idx++]; @@ -354,19 +325,19 @@ public abstract class AbsAAFLocator implements Locator @Override public void remove() { - if(idx>=0 && idx=0 && idx iter = getIterator(); EP ep = AAFLItem.next(iter); - if(ep==null) { + if (ep==null) { return null; } return new AAFLItem(iter,ep); @@ -374,23 +345,23 @@ public abstract class AbsAAFLocator implements Locator @Override public Item next(Item prev) throws LocatorException { - if(prev==null) { + if (prev==null) { StringBuilder sb = new StringBuilder("Locator Item passed in next(item) is null."); int lines = 0; - for(StackTraceElement st : Thread.currentThread().getStackTrace()) { + for (StackTraceElement st : Thread.currentThread().getStackTrace()) { sb.append("\n\t"); sb.append(st.toString()); - if(++lines > 5) { + if (++lines > 5) { sb.append("\n\t..."); break; } } access.log(Level.ERROR, sb); } else { - if(prev instanceof AAFLItem) { + if (prev instanceof AAFLItem) { AAFLItem ali = (AAFLItem)prev; EP ep = AAFLItem.next(ali.iter); - if(ep!=null) { + if (ep!=null) { return new AAFLItem(ali.iter,ep); } } else { @@ -404,21 +375,21 @@ public abstract class AbsAAFLocator implements Locator private Iterator iter; private URI uri; private EP ep; - + public AAFLItem(Iterator iter, EP ep) { this.iter = iter; this.ep = ep; uri = ep.uri; } - + private static EP next(Iterator iter) { EP ep=null; - while(iter.hasNext() && (ep==null || !ep.valid)) { + while (iter.hasNext() && (ep==null || !ep.valid)) { ep = iter.next(); } return ep; } - + public String toString() { return ep==null?"Locator Item Invalid":ep.toString(); } @@ -428,7 +399,7 @@ public abstract class AbsAAFLocator implements Locator private URI uri; private final double distance; private boolean valid; - + public EP(final Endpoint ep, double latitude, double longitude) throws URISyntaxException { uri = new URI(ep.getProtocol(),null,ep.getHostname(),ep.getPort(),null,null,null); distance = GreatCircle.calc(latitude, longitude, ep.getLatitude(), ep.getLongitude()); @@ -441,21 +412,21 @@ public abstract class AbsAAFLocator implements Locator @Override public int compareTo(EP o) { - if(distanceo.distance) { + } else if (distance>o.distance) { return 1; } else { return 0; } } - + @Override public String toString() { return distance + ": " + uri + (valid?" valid":" invalidate"); } } - + /* (non-Javadoc) * @see org.onap.aaf.cadi.Locator#destroy() */ @@ -463,7 +434,7 @@ public abstract class AbsAAFLocator implements Locator public void destroy() { // Nothing to do } - + @Override public String toString() { return "AAFLocator for " + name + " on " + getURI(); @@ -491,7 +462,7 @@ public abstract class AbsAAFLocator implements Locator protected abstract URI getURI(); protected URI getURI(URI rv) throws LocatorException { - if(additional) { + if (additional) { try { return new URI(rv.getScheme(),rv.getUserInfo(),rv.getHost(),rv.getPort(),pathInfo,query,fragment); } catch (URISyntaxException e) { @@ -501,5 +472,10 @@ public abstract class AbsAAFLocator implements Locator return rv; } + protected void clear() { + epList.clear(); + earliest=0L; + } + }