* 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.
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.UnknownHostException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Iterator;
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;
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;
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;
+ 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);
}
-
}
/**
* @param preload
*/
public static void setCreator(LocatorCreator lc) {
- locatorCreator = lc;
+ locatorCreator = lc;
}
-
- public static Locator<URI> 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<URI> create(final String name, final String version) throws LocatorException {
+ if(locatorCreator==null) {
+ throw new LocatorException("LocatorCreator is not set");
+ }
return locatorCreator.create(name, version);
}
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;
protected final synchronized void replace(List<EP> 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() {
public void invalidate(Item item) throws LocatorException {
if (item!=null) {
if (item instanceof AAFLItem) {
- AAFLItem ali =(AAFLItem)item;
+ AAFLItem ali =(AAFLItem)item;
EP ep = ali.ep;
synchronized(epList) {
epList.remove(ep);
@Override
public Item best() throws LocatorException {
if (!hasItems()) {
- throw new LocatorException("No Entries found for '" + aaf_locator_uri.toString() + "/locate/" + name + ':' + version + '\'');
+ throw new LocatorException(String.format("No Entries found for '%s/%s:%s'",
+ (aaf_locator_uri==null?aaf_locator_host:aaf_locator_uri.toString()),
+ name,
+ version));
}
List<EP> lep = new ArrayList<>();
EP first = null;
} else {
return new AAFLItem(iter,lep.get(i));
}
-
+
}
}
private final Object[] epa;
private final List<EP> epList;
private int idx;
-
+
public EPIterator(Object[] epa, List<EP> epList) {
this.epa = epa;
this.epList = epList;
}
}
}
-
+
@Override
public Item first() {
Iterator<EP> iter = getIterator();
private Iterator<EP> iter;
private URI uri;
private EP ep;
-
+
public AAFLItem(Iterator<EP> iter, EP ep) {
this.iter = iter;
this.ep = ep;
uri = ep.uri;
}
-
+
private static EP next(Iterator<EP> iter) {
EP ep=null;
while (iter.hasNext() && (ep==null || !ep.valid)) {
}
return ep;
}
-
+
public String toString() {
return ep==null?"Locator Item Invalid":ep.toString();
}
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());
return 0;
}
}
-
+
@Override
public String toString() {
return distance + ": " + uri + (valid?" valid":" invalidate");
}
}
-
+
/* (non-Javadoc)
* @see org.onap.aaf.cadi.Locator#destroy()
*/
public void destroy() {
// Nothing to do
}
-
+
@Override
public String toString() {
return "AAFLocator for " + name + " on " + getURI();
return rv;
}
+ protected void clear() {
+ epList.clear();
+ earliest=0L;
+ }
+
}