Ray Milkey
Committed by Gerrit Code Review

Improvements for XOS integration app

- Add a default value for the tenant provider service
  id and don't require callers to set it when creating
  a tenant.
- Add javadocs to the volt tenant object.

Change-Id: I1144820eb3e311cffc87ecefaccf689127730dcf
......@@ -56,24 +56,39 @@ import static org.slf4j.LoggerFactory.getLogger;
@Component(immediate = true)
@Service
public class OnosXOSIntegrationManager implements VoltTenantService {
private static final String XOS_SERVER_ADDRESS_PROPERTY_NAME =
"xosServerAddress";
private static final String XOS_SERVER_PORT_PROPERTY_NAME =
"xosServerPort";
private static final String XOS_PROVIDER_SERVICE_PROPERTY_NAME =
"xosProviderService";
private static final String TEST_XOS_SERVER_ADDRESS = "10.254.1.22";
private static final int TEST_XOS_SERVER_PORT = 8000;
private static final String XOS_TENANT_BASE_URI = "/xoslib/volttenant/";
private static final int TEST_XOS_PROVIDER_SERVICE = 1;
private final Logger log = getLogger(getClass());
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ComponentConfigService cfgService;
@Property(name = "XOSServerAddress",
@Property(name = XOS_SERVER_ADDRESS_PROPERTY_NAME,
value = TEST_XOS_SERVER_ADDRESS,
label = "XOS Server address")
protected String xosServerAddress = TEST_XOS_SERVER_ADDRESS;
@Property(name = "XOSServerPort",
@Property(name = XOS_SERVER_PORT_PROPERTY_NAME,
intValue = TEST_XOS_SERVER_PORT,
label = "XOS Server port")
protected int xosServerPort = TEST_XOS_SERVER_PORT;
@Property(name = XOS_PROVIDER_SERVICE_PROPERTY_NAME,
intValue = TEST_XOS_PROVIDER_SERVICE,
label = "XOS Provider Service")
protected int xosProviderService = TEST_XOS_PROVIDER_SERVICE;
private ApplicationId appId;
@Activate
......@@ -244,7 +259,16 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
@Override
public VoltTenant addTenant(VoltTenant newTenant) {
String json = tenantToJson(newTenant);
long providerServiceId = newTenant.providerService();
if (providerServiceId == -1) {
providerServiceId = xosProviderService;
}
VoltTenant tenantToCreate = VoltTenant.builder()
.withProviderService(providerServiceId)
.withServiceSpecificId(newTenant.serviceSpecificId())
.withVlanId(newTenant.vlanId())
.build();
String json = tenantToJson(tenantToCreate);
postRest(json);
return newTenant;
}
......@@ -268,16 +292,23 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
private void readComponentConfiguration(ComponentContext context) {
Dictionary<?, ?> properties = context.getProperties();
String newXosServerAddress = Tools.get(properties, "XOSServerAddress");
String newXosServerAddress =
Tools.get(properties, XOS_SERVER_ADDRESS_PROPERTY_NAME);
if (!isNullOrEmpty(newXosServerAddress)) {
xosServerAddress = newXosServerAddress;
}
String newXosServerPortString = Tools.get(properties, "XOSServerPort");
String newXosServerPortString =
Tools.get(properties, XOS_SERVER_PORT_PROPERTY_NAME);
if (!isNullOrEmpty(newXosServerPortString)) {
xosServerPort = Integer.parseInt(newXosServerPortString);
}
log.info("XOS URL is now http://{}:{}", xosServerAddress, xosServerPort);
String newXosProviderServiceString =
Tools.get(properties, XOS_PROVIDER_SERVICE_PROPERTY_NAME);
if (!isNullOrEmpty(newXosProviderServiceString)) {
xosProviderService = Integer.parseInt(newXosProviderServiceString);
}
}
}
......
......@@ -15,7 +15,6 @@
*/
package org.onosproject.xosintegration;
import com.google.common.base.MoreObjects;
public final class VoltTenant {
......@@ -26,6 +25,15 @@ public final class VoltTenant {
private final String serviceSpecificId;
private final String vlanId;
/**
* Constructs a vOLT tenant object.
*
* @param humanReadableName name string
* @param id identifier for the tenant
* @param providerService provider service ID
* @param serviceSpecificId id for the user
* @param vlanId vlan id for the user
*/
private VoltTenant(String humanReadableName, long id, long providerService,
String serviceSpecificId, String vlanId) {
this.humanReadableName = humanReadableName;
......@@ -35,62 +43,131 @@ public final class VoltTenant {
this.vlanId = vlanId;
}
/**
* Fetches a builder to make a tenant.
*
* @return tenant builder
*/
public static Builder builder() {
return new Builder();
}
/**
* Fetches the name of the tenant.
*
* @return human readable name
*/
public String humanReadableName() {
return humanReadableName;
}
/**
* Fetches the ID of the tenant object.
*
* @return ID of tenant object.
*/
public long id() {
return id;
}
/**
* Fetches the identifier for the provider service.
*
* @return provider service ID
*/
public long providerService() {
return providerService;
}
/**
* Fetches the server specific ID (user id).
*
* @return server specific ID
*/
public String serviceSpecificId() {
return serviceSpecificId;
}
/**
* Fetches the vlan id for this tenant.
*
* @return VLAN ID
*/
public String vlanId() {
return vlanId;
}
/**
* Builder class to allow callers to assemble tenants.
*/
public static final class Builder {
private String humanReadableName = "unknown";
private long id = 0;
private long providerService = 0;
private long providerService = -1;
private String serviceSpecificId = "unknown";
private String vlanId = "unknown";
/**
* Sets the name string for the tenant.
*
* @param humanReadableName name
* @return self
*/
public Builder withHumanReadableName(String humanReadableName) {
this.humanReadableName = humanReadableName;
return this;
}
/**
* Sets the identifier for the tenant.
*
* @param id identifier for the tenant
* @return self
*/
public Builder withId(long id) {
this.id = id;
return this;
}
public Builder withProviderService(long providerService) {
this.providerService = providerService;
return this;
}
/**
* Sets the server specific id (user id) for the tenant.
*
* @param serviceSpecificId server specific (user) id
* @return self
*/
public Builder withServiceSpecificId(String serviceSpecificId) {
this.serviceSpecificId = serviceSpecificId;
return this;
}
/**
* Sets the VLAN ID for the tenant.
*
* @param vlanId VLAN ID
* @return self
*/
public Builder withVlanId(String vlanId) {
this.vlanId = vlanId;
return this;
}
/**
* Sets the provider service ID.
*
* @param providerService provider service ID
* @return self
*/
public Builder withProviderService(long providerService) {
this.providerService = providerService;
return this;
}
/**
* Constructs a VoltTenant from the assembled data.
*
* @return constructed tenant object
*/
public VoltTenant build() {
return new VoltTenant(humanReadableName, id, providerService,
serviceSpecificId, vlanId);
......
......@@ -27,17 +27,13 @@ import org.onosproject.xosintegration.VoltTenantService;
@Command(scope = "onos", name = "add-tenant",
description = "Lists the inventory of VOLT tenants and their contents")
public class VoltTenantsCreateCommand extends AbstractShellCommand {
@Argument(index = 0, name = "provider service",
description = "Tenant ID",
required = true, multiValued = false)
long providerService;
@Argument(index = 1, name = "service specific ID",
@Argument(index = 0, name = "service specific ID",
description = "service specific ID",
required = true, multiValued = false)
String serviceSpecificId;
@Argument(index = 2, name = "vlan ID",
@Argument(index = 1, name = "vlan ID",
description = "vlan ID",
required = true, multiValued = false)
String vlanId;
......@@ -47,7 +43,6 @@ public class VoltTenantsCreateCommand extends AbstractShellCommand {
VoltTenantService service = get(VoltTenantService.class);
VoltTenant newTenant = VoltTenant.builder()
.withProviderService(providerService)
.withServiceSpecificId(serviceSpecificId)
.withVlanId(vlanId)
.build();
......