import locate.v1_0.MgmtEndpoints;
public class RemoteRegistrant<ENV extends BasicEnv> implements Registrant<ENV> {
- private final MgmtEndpoint mep;
- private final MgmtEndpoints meps;
- private final AAFCon<HttpURLConnection> aafcon;
- private final RosettaDF<MgmtEndpoints> mgmtEndpointsDF;
- private final Locator<URI> locator;
- private final Access access;
- private final int timeout;
+ private final MgmtEndpoint mep;
+ private final MgmtEndpoints meps;
+ private final AAFCon<HttpURLConnection> aafcon;
+ private final RosettaDF<MgmtEndpoints> mgmtEndpointsDF;
+ private final Locator<URI> locator;
+ private final Access access;
+ private final int timeout;
- @SafeVarargs
- public RemoteRegistrant(AAFCon<HttpURLConnection> aafcon, String name, String version, int port, RemoteRegistrant<ENV> ... others) throws CadiException, LocatorException {
- this.aafcon = aafcon;
- access = aafcon.access;
- try {
- mgmtEndpointsDF = aafcon.env.newDataFactory(MgmtEndpoints.class);
- } catch (APIException e1) {
- throw new CadiException(e1);
- }
- timeout = Integer.parseInt(access.getProperty(Config.AAF_CONN_TIMEOUT, Config.AAF_CONN_TIMEOUT_DEF));
- String aaf_locate = access.getProperty(Config.AAF_LOCATE_URL,null);
- if(aaf_locate==null) {
- throw new CadiException(Config.AAF_LOCATE_URL + " is required.");
- } else {
- // Note: want Property Locator or Single, not AAFLocator, because we want the core service, not what it can find
- try {
- if(aaf_locate.indexOf(',')>=0) {
- locator = new PropertyLocator(aaf_locate);
- } else {
- locator = new SingleEndpointLocator(aaf_locate);
- }
- } catch (URISyntaxException e) {
- throw new CadiException(e);
- }
- }
-
- mep = new MgmtEndpoint();
- mep.setName(name);
- mep.setPort(port);
+ @SafeVarargs
+ public RemoteRegistrant(AAFCon<HttpURLConnection> aafcon, String name, String version, int port, RemoteRegistrant<ENV> ... others) throws CadiException, LocatorException {
+ this.aafcon = aafcon;
+ access = aafcon.access;
+ try {
+ mgmtEndpointsDF = aafcon.env.newDataFactory(MgmtEndpoints.class);
+ } catch (APIException e1) {
+ throw new CadiException(e1);
+ }
+ timeout = Integer.parseInt(access.getProperty(Config.AAF_CONN_TIMEOUT, Config.AAF_CONN_TIMEOUT_DEF));
+ String aaf_locate = access.getProperty(Config.AAF_LOCATE_URL,null);
+ if (aaf_locate==null) {
+ throw new CadiException(Config.AAF_LOCATE_URL + " is required.");
+ } else {
+ // Note: want Property Locator or Single, not AAFLocator, because we want the core service, not what it can find
+ try {
+ if (aaf_locate.indexOf(',')>=0) {
+ locator = new PropertyLocator(aaf_locate);
+ } else {
+ locator = new SingleEndpointLocator(aaf_locate);
+ }
+ } catch (URISyntaxException e) {
+ throw new CadiException(e);
+ }
+ }
+
+ mep = new MgmtEndpoint();
+ mep.setName(name);
+ mep.setPort(port);
- try {
- String hostnameToRegister = access.getProperty(Config.CADI_REGISTRATION_HOSTNAME, null);
- if(hostnameToRegister==null) {
- hostnameToRegister = access.getProperty(Config.HOSTNAME, null);
- }
- if(hostnameToRegister==null) {
- hostnameToRegister = Inet4Address.getLocalHost().getHostName();
- }
- mep.setHostname(hostnameToRegister);
-
- String latitude = access.getProperty(Config.CADI_LATITUDE, null);
- if(latitude==null) {
- latitude = access.getProperty("AFT_LATITUDE", null);
- }
- String longitude = access.getProperty(Config.CADI_LONGITUDE, null);
- if(longitude==null) {
- longitude = access.getProperty("AFT_LONGITUDE", null);
- }
- if(latitude==null || longitude==null) {
- throw new CadiException(Config.CADI_LATITUDE + " and " + Config.CADI_LONGITUDE + " is required");
- } else {
- mep.setLatitude(Float.parseFloat(latitude));
- mep.setLongitude(Float.parseFloat(longitude));
- }
- String split[] = Split.split('.', version);
- mep.setPkg(split.length>3?Integer.parseInt(split[3]):0);
- mep.setPatch(split.length>2?Integer.parseInt(split[2]):0);
- mep.setMinor(split.length>1?Integer.parseInt(split[1]):0);
- mep.setMajor(split.length>0?Integer.parseInt(split[0]):0);
-
- String subprotocols = access.getProperty(Config.CADI_PROTOCOLS, null);
- if(subprotocols==null) {
- mep.setProtocol("http");
- } else {
- mep.setProtocol("https");
- for(String s : Split.split(',', subprotocols)) {
- mep.getSubprotocol().add(s);
- }
- }
- } catch (NumberFormatException | UnknownHostException e) {
- throw new CadiException("Error extracting Data from Properties for Registrar",e);
- }
- meps = new MgmtEndpoints();
- meps.getMgmtEndpoint().add(mep);
- for(RemoteRegistrant<ENV> rr : others) {
- meps.getMgmtEndpoint().add(rr.mep);
- }
- }
-
- @Override
- public Result<Void> update(ENV env) {
- try {
- Rcli<?> client = aafcon.client(locator);
- try {
- Future<MgmtEndpoints> fup = client.update("/registration",mgmtEndpointsDF,meps);
- if(fup.get(timeout)) {
- access.log(Level.INFO, "Registration complete to",client.getURI());
- return Result.ok(fup.code(),null);
- } else {
- access.log(Level.ERROR,"Error registering to AAF Locator on ", client.getURI());
- return Result.err(fup.code(),fup.body());
- }
- } catch (APIException e) {
- access.log(e, "Error registering service to AAF Locator");
- return Result.err(503,e.getMessage());
- }
-
- } catch (CadiException e) {
- return Result.err(503,e.getMessage());
- }
- }
+ try {
+ String hostnameToRegister = access.getProperty(Config.AAF_REGISTER_AS, null);
+ if (hostnameToRegister==null) {
+ hostnameToRegister = access.getProperty(Config.HOSTNAME, null);
+ }
+ if (hostnameToRegister==null) {
+ hostnameToRegister = Inet4Address.getLocalHost().getHostName();
+ }
+ mep.setHostname(hostnameToRegister);
+
+ String latitude = access.getProperty(Config.CADI_LATITUDE, null);
+ if (latitude==null) {
+ latitude = access.getProperty("AFT_LATITUDE", null);
+ }
+ String longitude = access.getProperty(Config.CADI_LONGITUDE, null);
+ if (longitude==null) {
+ longitude = access.getProperty("AFT_LONGITUDE", null);
+ }
+ if (latitude==null || longitude==null) {
+ throw new CadiException(Config.CADI_LATITUDE + " and " + Config.CADI_LONGITUDE + " is required");
+ } else {
+ mep.setLatitude(Float.parseFloat(latitude));
+ mep.setLongitude(Float.parseFloat(longitude));
+ }
+ String split[] = Split.split('.', version);
+ mep.setPkg(split.length>3?Integer.parseInt(split[3]):0);
+ mep.setPatch(split.length>2?Integer.parseInt(split[2]):0);
+ mep.setMinor(split.length>1?Integer.parseInt(split[1]):0);
+ mep.setMajor(split.length>0?Integer.parseInt(split[0]):0);
+
+ String subprotocols = access.getProperty(Config.CADI_PROTOCOLS, null);
+ if (subprotocols==null) {
+ mep.setProtocol("http");
+ } else {
+ mep.setProtocol("https");
+ for (String s : Split.split(',', subprotocols)) {
+ mep.getSubprotocol().add(s);
+ }
+ }
+ } catch (NumberFormatException | UnknownHostException e) {
+ throw new CadiException("Error extracting Data from Properties for Registrar",e);
+ }
+ meps = new MgmtEndpoints();
+ meps.getMgmtEndpoint().add(mep);
+ for (RemoteRegistrant<ENV> rr : others) {
+ meps.getMgmtEndpoint().add(rr.mep);
+ }
+ }
+
+ @Override
+ public Result<Void> update(ENV env) {
+ try {
+ Rcli<?> client = aafcon.client(locator);
+ try {
+ Future<MgmtEndpoints> fup = client.update("/registration",mgmtEndpointsDF,meps);
+ if (fup.get(timeout)) {
+ access.log(Level.INFO, "Registration complete to",client.getURI());
+ return Result.ok(fup.code(),null);
+ } else {
+ access.log(Level.ERROR,"Error registering to AAF Locator on ", client.getURI());
+ return Result.err(fup.code(),fup.body());
+ }
+ } catch (APIException e) {
+ access.log(e, "Error registering service to AAF Locator");
+ return Result.err(503,e.getMessage());
+ }
+
+ } catch (CadiException e) {
+ return Result.err(503,e.getMessage());
+ }
+ }
- @Override
- public Result<Void> cancel(ENV env) {
- try {
- Rcli<?> client = aafcon.client(locator);
- try {
- Future<MgmtEndpoints> fup = client.delete("/registration",mgmtEndpointsDF,meps);
- if(fup.get(timeout)) {
- access.log(Level.INFO, "Deregistration complete on",client.getURI());
- return Result.ok(fup.code(),null);
- } else {
- return Result.err(fup.code(),fup.body());
- }
- } catch (APIException e) {
- access.log(e, "Error deregistering service on AAF Locator");
- return Result.err(503,e.getMessage());
- }
-
- } catch (CadiException e) {
- return Result.err(503,e.getMessage());
- }
- }
+ @Override
+ public Result<Void> cancel(ENV env) {
+ try {
+ Rcli<?> client = aafcon.client(locator);
+ try {
+ Future<MgmtEndpoints> fup = client.delete("/registration",mgmtEndpointsDF,meps);
+ if (fup.get(timeout)) {
+ access.log(Level.INFO, "Deregistration complete on",client.getURI());
+ return Result.ok(fup.code(),null);
+ } else {
+ return Result.err(fup.code(),fup.body());
+ }
+ } catch (APIException e) {
+ access.log(e, "Error deregistering service on AAF Locator");
+ return Result.err(503,e.getMessage());
+ }
+
+ } catch (CadiException e) {
+ return Result.err(503,e.getMessage());
+ }
+ }
}