diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java
index dd8b1a11eb..85fce4fd50 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java
@@ -46,13 +46,13 @@ import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import org.jclouds.vcloud.domain.Catalog;
import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.domain.Network;
import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
@@ -63,8 +63,8 @@ import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
import org.jclouds.vcloud.xml.CatalogHandler;
import org.jclouds.vcloud.xml.CatalogItemHandler;
-import org.jclouds.vcloud.xml.NetworkHandler;
import org.jclouds.vcloud.xml.OrgHandler;
+import org.jclouds.vcloud.xml.OrgNetworkHandler;
import org.jclouds.vcloud.xml.TaskHandler;
import org.jclouds.vcloud.xml.TasksListHandler;
import org.jclouds.vcloud.xml.VAppHandler;
@@ -169,9 +169,9 @@ public interface CommonVCloudAsyncClient {
*/
@GET
@Consumes(NETWORK_XML)
- @XMLResponseParser(NetworkHandler.class)
+ @XMLResponseParser(OrgNetworkHandler.class)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends Network> findNetworkInOrgVDCNamed(
+ ListenableFuture extends OrgNetwork> findNetworkInOrgVDCNamed(
@Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
@Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
@EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
@@ -181,9 +181,9 @@ public interface CommonVCloudAsyncClient {
*/
@GET
@Consumes(NETWORK_XML)
- @XMLResponseParser(NetworkHandler.class)
+ @XMLResponseParser(OrgNetworkHandler.class)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends Network> getNetwork(@EndpointParam URI network);
+ ListenableFuture extends OrgNetwork> getNetwork(@EndpointParam URI network);
/**
* @see VCloudClient#getVDC(URI)
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java
index 752194cfc2..c64eafc70d 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java
@@ -28,21 +28,19 @@ import javax.annotation.Nullable;
import org.jclouds.concurrent.Timeout;
import org.jclouds.vcloud.domain.Catalog;
import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.domain.Network;
import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
/**
* Provides access to VCloud resources via their REST API.
*
*
- * @see
+ * @see
* @author Adrian Cole
*/
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
@@ -51,8 +49,8 @@ public interface CommonVCloudClient {
Org getOrg(URI orgId);
/**
- * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and
- * task lists within the organization.
+ * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and task lists within
+ * the organization.
*
* @param name
* organization name, or null for the default
@@ -64,8 +62,8 @@ public interface CommonVCloudClient {
Catalog getCatalog(URI catalogId);
/**
- * returns the catalog in the organization associated with the specified
- * name. Note that both parameters can be null to choose default.
+ * returns the catalog in the organization associated with the specified name. Note that both
+ * parameters can be null to choose default.
*
* @param orgName
* organization name, or null for the default
@@ -79,9 +77,8 @@ public interface CommonVCloudClient {
CatalogItem getCatalogItem(URI catalogItem);
/**
- * returns the catalog item in the catalog associated with the specified
- * name. Note that the org and catalog parameters can be null to choose
- * default.
+ * returns the catalog item in the catalog associated with the specified name. Note that the org
+ * and catalog parameters can be null to choose default.
*
* @param orgName
* organization name, or null for the default
@@ -91,17 +88,15 @@ public interface CommonVCloudClient {
* item you wish to lookup
*
* @throws NoSuchElementException
- * if you specified an org, catalog, or catalog item name that
- * isn't present
+ * if you specified an org, catalog, or catalog item name that isn't present
*/
CatalogItem findCatalogItemInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName, String itemName);
VAppTemplate getVAppTemplate(URI vAppTemplate);
/**
- * returns the vapp template corresponding to a catalog item in the catalog
- * associated with the specified name. Note that the org and catalog
- * parameters can be null to choose default.
+ * returns the vapp template corresponding to a catalog item in the catalog associated with the
+ * specified name. Note that the org and catalog parameters can be null to choose default.
*
* @param orgName
* organization name, or null for the default
@@ -111,21 +106,20 @@ public interface CommonVCloudClient {
* item you wish to lookup
*
* @throws NoSuchElementException
- * if you specified an org, catalog, or catalog item name that
- * isn't present
+ * if you specified an org, catalog, or catalog item name that isn't present
*/
VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName,
- String itemName);
+ String itemName);
- Network findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String networkName);
+ OrgNetwork findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String networkName);
- Network getNetwork(URI network);
+ OrgNetwork getNetwork(URI network);
VDC getVDC(URI vdc);
/**
- * returns the VDC in the organization associated with the specified name.
- * Note that both parameters can be null to choose default.
+ * returns the VDC in the organization associated with the specified name. Note that both
+ * parameters can be null to choose default.
*
* @param orgName
* organization name, or null for the default
@@ -147,14 +141,12 @@ public interface CommonVCloudClient {
Task undeployVApp(URI vAppId);
/**
- * This call powers on the vApp, as specified in the vApp's ovf:Startup
- * element.
+ * This call powers on the vApp, as specified in the vApp's ovf:Startup element.
*/
Task powerOnVApp(URI vAppId);
/**
- * This call powers off the vApp, as specified in the vApp's ovf:Startup
- * element.
+ * This call powers off the vApp, as specified in the vApp's ovf:Startup element.
*/
Task powerOffVApp(URI vAppId);
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
index 3849c9fca1..68413d4266 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
@@ -19,30 +19,38 @@
package org.jclouds.vcloud;
+import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
import java.net.URI;
+import javax.annotation.Nullable;
import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.jclouds.predicates.validators.DnsNameValidator;
import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.MapBinder;
import org.jclouds.rest.annotations.MapPayloadParam;
import org.jclouds.rest.annotations.ParamValidators;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+import org.jclouds.vcloud.xml.OrgNetworkFromVCloudExpressNetworkHandler;
import org.jclouds.vcloud.xml.TaskHandler;
import org.jclouds.vcloud.xml.VAppHandler;
@@ -57,6 +65,28 @@ import com.google.common.util.concurrent.ListenableFuture;
*/
@RequestFilters(SetVCloudTokenCookie.class)
public interface VCloudExpressAsyncClient extends CommonVCloudAsyncClient {
+ /**
+ * @see VCloudClient#findNetworkInOrgVDCNamed
+ */
+ @Override
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> findNetworkInOrgVDCNamed(
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
+
+ /**
+ * @see VCloudClient#getNetwork
+ */
+ @Override
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> getNetwork(@EndpointParam URI network);
/**
* @see VCloudExpressClient#instantiateVAppTemplateInVDC
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java
index d964e99bb8..81af12ab81 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java
@@ -30,7 +30,7 @@ import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_S
import java.util.Properties;
import org.jclouds.PropertiesBuilder;
-import org.jclouds.vcloud.domain.FenceMode;
+import org.jclouds.vcloud.domain.network.FenceMode;
/**
* Builds properties used in VCloud Clients
@@ -67,7 +67,7 @@ public class VCloudExpressPropertiesBuilder extends PropertiesBuilder {
if (properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA).startsWith("0.8"))
properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, "allowInOut");
else
- properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED);
+ properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED.toString());
}
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
index a357ab9bc8..10e71ee79d 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
@@ -30,7 +30,7 @@ import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_S
import java.util.Properties;
import org.jclouds.PropertiesBuilder;
-import org.jclouds.vcloud.domain.FenceMode;
+import org.jclouds.vcloud.domain.network.FenceMode;
/**
* Builds properties used in VCloud Clients
@@ -44,11 +44,10 @@ public class VCloudPropertiesBuilder extends PropertiesBuilder {
properties.setProperty(PROPERTY_API_VERSION, "1.0");
properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "1.0");
properties.setProperty(PROPERTY_SESSION_INTERVAL, 8 * 60 + "");
- properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA,
- "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
+ properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA, "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
properties.setProperty("jclouds.dns_name_length_min", "1");
properties.setProperty("jclouds.dns_name_length_max", "80");
- properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED);
+ properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED.toString());
properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 180l * 1000l + "");
return properties;
}
@@ -63,7 +62,6 @@ public class VCloudPropertiesBuilder extends PropertiesBuilder {
+ properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA));
}
-
public VCloudPropertiesBuilder withApiVersion(String version) {
properties.setProperty(PROPERTY_API_VERSION, "1.0");
return this;
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
index 73cffaa522..b4309ac4a1 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
@@ -22,6 +22,7 @@ package org.jclouds.vcloud.binders;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_FENCEMODE;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
@@ -63,21 +64,19 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
protected final String ns;
protected final String schema;
private final BindToStringPayload stringBinder;
- protected final Map virtualHardwareToInstanceId = ImmutableMap
- .of(ResourceType.PROCESSOR, "1", ResourceType.MEMORY, "2",
- ResourceType.DISK_DRIVE, "9");
+ protected final Map virtualHardwareToInstanceId = ImmutableMap.of(ResourceType.PROCESSOR, "1",
+ ResourceType.MEMORY, "2", ResourceType.DISK_DRIVE, "9");
private final URI defaultNetwork;
private final String defaultFenceMode;
+ private final String apiVersion;
@Inject
- public BindInstantiateVAppTemplateParamsToXmlPayload(
- BindToStringPayload stringBinder,
- @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
- @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema,
- @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
- @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode
- ) {
+ public BindInstantiateVAppTemplateParamsToXmlPayload(BindToStringPayload stringBinder,
+ @Named(PROPERTY_API_VERSION) String apiVersion, @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
+ @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema, @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
+ @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode) {
this.ns = ns;
+ this.apiVersion = apiVersion;
this.schema = schema;
this.stringBinder = stringBinder;
this.defaultNetwork = URI.create(network);
@@ -86,17 +85,14 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
@SuppressWarnings("unchecked")
public void bindToRequest(HttpRequest request, Map postParams) {
- checkArgument(
- checkNotNull(request, "request") instanceof GeneratedHttpRequest,
- "this binder is only valid for GeneratedHttpRequests!");
+ checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest,
+ "this binder is only valid for GeneratedHttpRequests!");
GeneratedHttpRequest gRequest = (GeneratedHttpRequest) request;
- checkState(gRequest.getArgs() != null,
- "args should be initialized at this point");
+ checkState(gRequest.getArgs() != null, "args should be initialized at this point");
String name = checkNotNull(postParams.remove("name"), "name");
String template = checkNotNull(postParams.remove("template"), "template");
- SortedMap virtualHardwareQuantity = Maps
- .newTreeMap();
+ SortedMap virtualHardwareQuantity = Maps.newTreeMap();
InstantiateVAppTemplateOptions options = findOptionsInArgsOrNull(gRequest);
Map properties = Maps.newTreeMap();
@@ -106,14 +102,15 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
if (options != null) {
network = ifNullDefaultTo(options.getNetwork(), network);
fenceMode = ifNullDefaultTo(options.getFenceMode(), defaultFenceMode);
+ if (apiVersion.indexOf("0.8") != -1 && fenceMode.equals("bridged"))
+ fenceMode = "allowInOut";
networkName = ifNullDefaultTo(options.getNetworkName(), networkName);
addQuantity(options, virtualHardwareQuantity);
properties.putAll(options.getProperties());
}
try {
- stringBinder.bindToRequest(request, generateXml(name, template,
- properties, virtualHardwareQuantity, networkName, fenceMode, URI
- .create(network)));
+ stringBinder.bindToRequest(request, generateXml(name, template, properties, virtualHardwareQuantity,
+ networkName, fenceMode, URI.create(network)));
} catch (ParserConfigurationException e) {
throw new RuntimeException(e);
} catch (FactoryConfigurationError e) {
@@ -124,99 +121,73 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
}
- protected String generateXml(String name, String template,
- Map properties,
- SortedMap virtualHardwareQuantity,
- String networkName, @Nullable String fenceMode, URI network)
- throws ParserConfigurationException, FactoryConfigurationError,
- TransformerException {
+ protected String generateXml(String name, String template, Map properties,
+ SortedMap virtualHardwareQuantity, String networkName, @Nullable String fenceMode,
+ URI network) throws ParserConfigurationException, FactoryConfigurationError, TransformerException {
XMLBuilder rootBuilder = buildRoot(name);
rootBuilder.e("VAppTemplate").a("href", template);
- XMLBuilder instantiationParamsBuilder = rootBuilder
- .e("InstantiationParams");
+ XMLBuilder instantiationParamsBuilder = rootBuilder.e("InstantiationParams");
addPropertiesifPresent(instantiationParamsBuilder, properties);
- addVirtualQuantityIfPresent(instantiationParamsBuilder,
- virtualHardwareQuantity);
- addNetworkConfig(instantiationParamsBuilder, networkName, fenceMode,
- network);
+ addVirtualQuantityIfPresent(instantiationParamsBuilder, virtualHardwareQuantity);
+ addNetworkConfig(instantiationParamsBuilder, networkName, fenceMode, network);
Properties outputProperties = new Properties();
- outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION,
- "yes");
+ outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
return rootBuilder.asString(outputProperties);
}
- protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder,
- Map properties) {
+ protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder, Map properties) {
if (properties.size() > 0) {
- XMLBuilder productSectionBuilder = instantiationParamsBuilder.e(
- "ProductSection").a("xmlns:q1", ns).a("xmlns:ovf",
- "http://schemas.dmtf.org/ovf/envelope/1");
+ XMLBuilder productSectionBuilder = instantiationParamsBuilder.e("ProductSection").a("xmlns:q1", ns).a(
+ "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1");
for (Entry entry : properties.entrySet()) {
- productSectionBuilder.e("Property").a("xmlns",
- "http://schemas.dmtf.org/ovf/envelope/1").a("ovf:key",
- entry.getKey()).a("ovf:value", entry.getValue());
+ productSectionBuilder.e("Property").a("xmlns", "http://schemas.dmtf.org/ovf/envelope/1").a("ovf:key",
+ entry.getKey()).a("ovf:value", entry.getValue());
}
}
}
- protected void addNetworkConfig(XMLBuilder instantiationParamsBuilder,
- String name, @Nullable String fenceMode, URI network) {
- XMLBuilder networkConfigBuilder = instantiationParamsBuilder.e(
- "NetworkConfigSection").e("NetworkConfig").a("name", name);
+ protected void addNetworkConfig(XMLBuilder instantiationParamsBuilder, String name, @Nullable String fenceMode,
+ URI network) {
+ XMLBuilder networkConfigBuilder = instantiationParamsBuilder.e("NetworkConfigSection").e("NetworkConfig").a(
+ "name", name);
if (fenceMode != null) {
XMLBuilder featuresBuilder = networkConfigBuilder.e("Features");
featuresBuilder.e("FenceMode").t(fenceMode);
}
- networkConfigBuilder.e("NetworkAssociation").a("href",
- network.toASCIIString());
+ networkConfigBuilder.e("NetworkAssociation").a("href", network.toASCIIString());
}
- protected void addVirtualQuantityIfPresent(
- XMLBuilder instantiationParamsBuilder,
- SortedMap virtualHardwareQuantity) {
+ protected void addVirtualQuantityIfPresent(XMLBuilder instantiationParamsBuilder,
+ SortedMap virtualHardwareQuantity) {
if (virtualHardwareQuantity.size() > 0) {
- XMLBuilder virtualHardwareSectionBuilder = instantiationParamsBuilder
- .e("VirtualHardwareSection").a("xmlns:q1", ns);
- for (Entry entry : virtualHardwareQuantity
- .entrySet()) {
- XMLBuilder itemBuilder = virtualHardwareSectionBuilder.e("Item").a(
- "xmlns", "http://schemas.dmtf.org/ovf/envelope/1");
- itemBuilder
- .e("InstanceID")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(virtualHardwareToInstanceId.get(entry.getKey()));
- itemBuilder
- .e("ResourceType")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(entry.getKey().value());
- itemBuilder
- .e("VirtualQuantity")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(entry.getValue());
+ XMLBuilder virtualHardwareSectionBuilder = instantiationParamsBuilder.e("VirtualHardwareSection").a(
+ "xmlns:q1", ns);
+ for (Entry entry : virtualHardwareQuantity.entrySet()) {
+ XMLBuilder itemBuilder = virtualHardwareSectionBuilder.e("Item").a("xmlns",
+ "http://schemas.dmtf.org/ovf/envelope/1");
+ itemBuilder.e("InstanceID").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ virtualHardwareToInstanceId.get(entry.getKey()));
+ itemBuilder.e("ResourceType").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ entry.getKey().value());
+ itemBuilder.e("VirtualQuantity").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ entry.getValue());
}
}
}
- protected XMLBuilder buildRoot(String name)
- throws ParserConfigurationException, FactoryConfigurationError {
- XMLBuilder rootBuilder = XMLBuilder.create(
- "InstantiateVAppTemplateParams").a("name", name).a("xmlns", ns).a(
- "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").a(
- "xsi:schemaLocation", ns + " " + schema).a("xmlns:ovf",
- "http://schemas.dmtf.org/ovf/envelope/1");
+ protected XMLBuilder buildRoot(String name) throws ParserConfigurationException, FactoryConfigurationError {
+ XMLBuilder rootBuilder = XMLBuilder.create("InstantiateVAppTemplateParams").a("name", name).a("xmlns", ns).a(
+ "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").a("xsi:schemaLocation", ns + " " + schema).a(
+ "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1");
return rootBuilder;
}
- protected InstantiateVAppTemplateOptions findOptionsInArgsOrNull(
- GeneratedHttpRequest> gRequest) {
+ protected InstantiateVAppTemplateOptions findOptionsInArgsOrNull(GeneratedHttpRequest> gRequest) {
for (Object arg : gRequest.getArgs()) {
if (arg instanceof InstantiateVAppTemplateOptions) {
return (InstantiateVAppTemplateOptions) arg;
@@ -228,28 +199,23 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
return null;
}
- private void addQuantity(InstantiateVAppTemplateOptions options,
- Map virtualHardwareQuantity) {
+ private void addQuantity(InstantiateVAppTemplateOptions options, Map virtualHardwareQuantity) {
if (options.getCpuCount() != null) {
- virtualHardwareQuantity.put(ResourceType.PROCESSOR, options
- .getCpuCount());
+ virtualHardwareQuantity.put(ResourceType.PROCESSOR, options.getCpuCount());
}
if (options.getMemorySizeMegabytes() != null) {
- virtualHardwareQuantity.put(ResourceType.MEMORY, options
- .getMemorySizeMegabytes());
+ virtualHardwareQuantity.put(ResourceType.MEMORY, options.getMemorySizeMegabytes());
}
if (options.getDiskSizeKilobytes() != null) {
- virtualHardwareQuantity.put(ResourceType.DISK_DRIVE, options
- .getDiskSizeKilobytes());
+ virtualHardwareQuantity.put(ResourceType.DISK_DRIVE, options.getDiskSizeKilobytes());
}
}
public void bindToRequest(HttpRequest request, Object input) {
- throw new IllegalStateException(
- "InstantiateVAppTemplateParams is needs parameters");
+ throw new IllegalStateException("InstantiateVAppTemplateParams is needs parameters");
}
- protected String ifNullDefaultTo(String value, String defaultValue) {
- return value != null ? value : checkNotNull(defaultValue, "defaultValue");
+ protected String ifNullDefaultTo(Object value, String defaultValue) {
+ return value != null ? value.toString() : checkNotNull(defaultValue, "defaultValue");
}
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/FirewallRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/FirewallRule.java
deleted file mode 100644
index 714030a6ad..0000000000
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/FirewallRule.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- *
- * Copyright (C) 2010 Cloud Conscious, LLC.
- *
- * ====================================================================
- * 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
-
-package org.jclouds.vcloud.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.base.CaseFormat;
-
-/**
- * @author Adrian Cole
- */
-public class FirewallRule {
- public static enum Policy {
- DENY, ALLOW;
-
- public String value() {
- return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
- }
-
- @Override
- public String toString() {
- return value();
- }
-
- public static Policy fromValue(String policy) {
- return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(policy,
- "policy")));
- }
-
- }
-
- public static enum Protocol {
- TCP, UDP, ICMP;
-
- public String value() {
- return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
- }
-
- @Override
- public String toString() {
- return value();
- }
-
- public static Protocol fromValue(String protocol) {
- return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(
- protocol, "protocol")));
- }
-
- }
-
- private final Policy policy;
- private final Protocol protocol;
- private final String sourceIP;
- private final String sourcePort;
-
- public FirewallRule(Policy policy, Protocol protocol, String sourceIP, String sourcePort) {
- this.policy = policy;
- this.protocol = protocol;
- this.sourceIP = sourceIP;
- this.sourcePort = sourcePort;
- }
-
- /**
- * One of deny, allow
- */
- public Policy getPolicy() {
- return policy;
- }
-
- /**
- * An attribute that specifies the protocol to which the rule applies. One of tcp, udp, icmp
- */
- public Protocol getProtocol() {
- return protocol;
- }
-
- /**
- * An IP address to which this rule applies
- */
- public String getSourceIP() {
- return sourceIP;
- }
-
- /**
- * An IP port or port range to which this rule applies. A value of * specifies all ports.
- */
- public String getSourcePort() {
- return sourcePort;
- }
-}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/MappingMode.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/MappingMode.java
new file mode 100644
index 0000000000..85616e3936
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/MappingMode.java
@@ -0,0 +1,53 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ * The MappingMode element specifies how IP address mapping is implemented by the NAT service.
+ *
+ */
+public enum MappingMode {
+ /**
+ * the external IP address is specified in the ExternalIP element
+ */
+ MANUAL,
+ /**
+ * the external IP address is assigned automatically
+ */
+ AUTOMATIC;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static MappingMode fromValue(String mode) {
+ return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(mode, "mode")));
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/NatRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/NatRule.java
deleted file mode 100644
index ca649ae7d2..0000000000
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/NatRule.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- *
- * Copyright (C) 2010 Cloud Conscious, LLC.
- *
- * ====================================================================
- * 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
-
-package org.jclouds.vcloud.domain;
-
-/**
- * Specifies a set of Network Address Translation rules using a pair of IP addresses and a pair of
- * IP port numbers.
- *
- * @author Adrian Cole
- */
-public class NatRule {
- private final String externalIP;
- private final Integer externalPort;
- private final String internalIP;
- private final Integer internalPort;
-
- public NatRule(String externalIP, Integer externalPort, String IntegerernalIP,
- Integer IntegerernalPort) {
- this.externalIP = externalIP;
- this.externalPort = externalPort;
- this.internalIP = IntegerernalIP;
- this.internalPort = IntegerernalPort;
- }
-
- /**
- * The externally‐visible IP address.
- */
- public String getExternalIP() {
- return externalIP;
- }
-
- /**
- * The externally‐visible IP port.
- */
- public Integer getExternalPort() {
- return externalPort;
- }
-
- /**
- * The Integerernally‐visible (non‐routable) IP address.
- */
- public String getInternalIP() {
- return internalIP;
- }
-
- /**
- * The Integerernally‐visible IP port.
- */
- public Integer getInternalPort() {
- return internalPort;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((externalIP == null) ? 0 : externalIP.hashCode());
- result = prime * result + ((externalPort == null) ? 0 : externalPort.hashCode());
- result = prime * result + ((internalIP == null) ? 0 : internalIP.hashCode());
- result = prime * result + ((internalPort == null) ? 0 : internalPort.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- NatRule other = (NatRule) obj;
- if (externalIP == null) {
- if (other.externalIP != null)
- return false;
- } else if (!externalIP.equals(other.externalIP))
- return false;
- if (externalPort == null) {
- if (other.externalPort != null)
- return false;
- } else if (!externalPort.equals(other.externalPort))
- return false;
- if (internalIP == null) {
- if (other.internalIP != null)
- return false;
- } else if (!internalIP.equals(other.internalIP))
- return false;
- if (internalPort == null) {
- if (other.internalPort != null)
- return false;
- } else if (!internalPort.equals(other.internalPort))
- return false;
- return true;
- }
-
- @Override
- public String toString() {
- return "NatRule [externalIP=" + externalIP + ", externalPort=" + externalPort
- + ", internalIP=" + internalIP + ", internalPort=" + internalPort + "]";
- }
-
-}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VirtualSystem.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VirtualSystem.java
index 7413e4d04b..4a748be3b0 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VirtualSystem.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VirtualSystem.java
@@ -51,50 +51,48 @@ public class VirtualSystem {
}
@Override
-public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + id;
- result = prime * result
- + ((identifier == null) ? 0 : identifier.hashCode());
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((type == null) ? 0 : type.hashCode());
- return result;
-}
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + id;
+ result = prime * result + ((identifier == null) ? 0 : identifier.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
@Override
-public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- VirtualSystem other = (VirtualSystem) obj;
- if (id != other.id)
- return false;
- if (identifier == null) {
- if (other.identifier != null)
- return false;
- } else if (!identifier.equals(other.identifier))
- return false;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
- return false;
- if (type == null) {
- if (other.type != null)
- return false;
- } else if (!type.equals(other.type))
- return false;
- return true;
-}
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ VirtualSystem other = (VirtualSystem) obj;
+ if (id != other.id)
+ return false;
+ if (identifier == null) {
+ if (other.identifier != null)
+ return false;
+ } else if (!identifier.equals(other.identifier))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
@Override
public String toString() {
- return "VirtualSystem [id=" + id + ", identifier=" + identifier + ", name=" + name
- + ", type=" + type + "]";
+ return "VirtualSystem [id=" + id + ", identifier=" + identifier + ", name=" + name + ", type=" + type + "]";
}
}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/DhcpService.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/DhcpService.java
new file mode 100644
index 0000000000..5dab5ac037
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/DhcpService.java
@@ -0,0 +1,128 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import javax.annotation.Nullable;
+
+/**
+ * specifies the properties of the network’s DHCP service
+ */
+public class DhcpService {
+ private final boolean enabled;
+ @Nullable
+ private final Integer defaultLeaseTime;
+ @Nullable
+ private final Integer maxLeaseTime;
+ @Nullable
+ private final IpRange ipRange;
+
+ public DhcpService(boolean enabled, @Nullable Integer defaultLeaseTime, @Nullable Integer maxLeaseTime,
+ @Nullable IpRange ipRange) {
+ this.enabled = enabled;
+ this.defaultLeaseTime = defaultLeaseTime;
+ this.maxLeaseTime = maxLeaseTime;
+ this.ipRange = ipRange;
+ }
+
+ /**
+ * @return true if the service is enabled
+ *
+ * @since vcloud api 0.8
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * default duration of a DCHP address lease
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public Integer getDefaultLeaseTime() {
+ return defaultLeaseTime;
+ }
+
+ /**
+ * maximum duration of a DCHP address lease.
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public Integer getMaxLeaseTime() {
+ return maxLeaseTime;
+ }
+
+ /**
+ * @return range of IP addresses available to DHCP clients
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public IpRange getIpRange() {
+ return ipRange;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((defaultLeaseTime == null) ? 0 : defaultLeaseTime.hashCode());
+ result = prime * result + (enabled ? 1231 : 1237);
+ result = prime * result + ((ipRange == null) ? 0 : ipRange.hashCode());
+ result = prime * result + ((maxLeaseTime == null) ? 0 : maxLeaseTime.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DhcpService other = (DhcpService) obj;
+ if (defaultLeaseTime == null) {
+ if (other.defaultLeaseTime != null)
+ return false;
+ } else if (!defaultLeaseTime.equals(other.defaultLeaseTime))
+ return false;
+ if (enabled != other.enabled)
+ return false;
+ if (ipRange == null) {
+ if (other.ipRange != null)
+ return false;
+ } else if (!ipRange.equals(other.ipRange))
+ return false;
+ if (maxLeaseTime == null) {
+ if (other.maxLeaseTime != null)
+ return false;
+ } else if (!maxLeaseTime.equals(other.maxLeaseTime))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[defaultLeaseTime=" + defaultLeaseTime + ", enabled=" + enabled + ", ipRange=" + ipRange
+ + ", maxLeaseTime=" + maxLeaseTime + "]";
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/Features.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/Features.java
new file mode 100644
index 0000000000..21cf6f754b
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/Features.java
@@ -0,0 +1,115 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import javax.annotation.Nullable;
+
+/**
+ * The Features element defines the DHCP and firewall features of a network.
+ */
+public class Features {
+ @Nullable
+ private final DhcpService dhcpService;
+ @Nullable
+ private final FirewallService firewallService;
+ @Nullable
+ private final NatService natService;
+
+ public Features(@Nullable DhcpService dhcpService, @Nullable FirewallService firewallService,
+ @Nullable NatService natService) {
+ this.dhcpService = dhcpService;
+ this.firewallService = firewallService;
+ this.natService = natService;
+ }
+
+ /**
+ * specifies the properties of the network’s DHCP service
+ *
+ * @since vcloud api 0.9, but emulated for 0.8
+ */
+ @Nullable
+ public DhcpService getDhcpService() {
+ return dhcpService;
+ }
+
+ /**
+ * defines the firewall service capabilities of the network
+ *
+ * @since vcloud api 0.8
+ */
+ @Nullable
+ public FirewallService getFirewallService() {
+ return firewallService;
+ }
+
+ /**
+ * defines the NAT service capabilities of the network
+ *
+ * @since vcloud api 0.8
+ */
+ @Nullable
+ public NatService getNatService() {
+ return natService;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((dhcpService == null) ? 0 : dhcpService.hashCode());
+ result = prime * result + ((firewallService == null) ? 0 : firewallService.hashCode());
+ result = prime * result + ((natService == null) ? 0 : natService.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Features other = (Features) obj;
+ if (dhcpService == null) {
+ if (other.dhcpService != null)
+ return false;
+ } else if (!dhcpService.equals(other.dhcpService))
+ return false;
+ if (firewallService == null) {
+ if (other.firewallService != null)
+ return false;
+ } else if (!firewallService.equals(other.firewallService))
+ return false;
+ if (natService == null) {
+ if (other.natService != null)
+ return false;
+ } else if (!natService.equals(other.natService))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[dhcpService=" + dhcpService + ", firewallService=" + firewallService + ", natService=" + natService
+ + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FenceMode.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FenceMode.java
new file mode 100644
index 0000000000..720ea65452
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FenceMode.java
@@ -0,0 +1,69 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ *
+ * The FenceMode element contains one of the following strings that specify how a network is
+ * connected to its parent network.
+ *
+ * @author Adrian Cole
+ */
+public enum FenceMode {
+ /**
+ * The two networks are bridged.
+ *
+ * Note that in vcloud 0.8 this was called ALLOW_IN_OUT, and so our implementation automatically
+ * converts this for you. Use bridged instead of allowInOut.
+ *
+ * @since vcloud api 0.9
+ */
+ BRIDGED,
+ /**
+ * The two networks are not connected.
+ *
+ * @since vcloud api 0.8
+ */
+ ISOLATED,
+ /**
+ * The two networks are connected as specified in their NatService elements.
+ *
+ * @since vcloud api 0.8
+ */
+ NAT_ROUTED;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static FenceMode fromValue(String fenceMode) {
+ return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(fenceMode, "fenceMode")));
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FirewallService.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FirewallService.java
new file mode 100644
index 0000000000..8ecf8d946d
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/FirewallService.java
@@ -0,0 +1,98 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+/**
+ * The FirewallService element defines the firewall service capabilities of a network.
+ */
+public class FirewallService {
+ private final boolean enabled;
+
+ List firewallRules = Lists.newArrayList();
+
+ public FirewallService(boolean enabled, Iterable extends FirewallRule> firewallRules) {
+ this.enabled = enabled;
+ Iterables.addAll(this.firewallRules, checkNotNull(firewallRules, "firewallRules"));
+ }
+
+ /**
+ * @return Firewall rules for the network
+ *
+ * @since vcloud api 0.8
+ */
+ public List extends FirewallRule> getFirewallRules() {
+ return firewallRules;
+ }
+
+ /**
+ * @return true if the service is enabled
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (enabled ? 1231 : 1237);
+ result = prime * result + ((firewallRules == null) ? 0 : firewallRules.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FirewallService other = (FirewallService) obj;
+ if (enabled != other.enabled)
+ return false;
+ if (firewallRules == null) {
+ if (other.firewallRules != null)
+ return false;
+ } else if (!firewallRules.equals(other.firewallRules))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[enabled=" + enabled + ", firewallRules=" + firewallRules + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpRange.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpRange.java
new file mode 100644
index 0000000000..3c7d853968
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpRange.java
@@ -0,0 +1,90 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * The IpRange element defines a range of IP addresses available on a network.
+ *
+ */
+public class IpRange {
+ private final String startAddress;
+ private final String endAddress;
+
+ public IpRange(String startAddress, String endAddress) {
+ this.startAddress = checkNotNull(startAddress, "startAddress");
+ this.endAddress = checkNotNull(endAddress, "endAddress");
+ }
+
+ /**
+ * @return lowest IP address in the range
+ *
+ * @since vcloud api 0.9
+ */
+ public String getStartAddress() {
+ return startAddress;
+ }
+
+ /**
+ * @return highest IP address in the range
+ *
+ * @since vcloud api 0.9
+ */
+ public String getEndAddress() {
+ return endAddress;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((endAddress == null) ? 0 : endAddress.hashCode());
+ result = prime * result + ((startAddress == null) ? 0 : startAddress.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ IpRange other = (IpRange) obj;
+ if (endAddress == null) {
+ if (other.endAddress != null)
+ return false;
+ } else if (!endAddress.equals(other.endAddress))
+ return false;
+ if (startAddress == null) {
+ if (other.startAddress != null)
+ return false;
+ } else if (!startAddress.equals(other.startAddress))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[startAddress=" + startAddress + ", endAddress=" + endAddress + "]";
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpScope.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpScope.java
new file mode 100644
index 0000000000..7efc2d3848
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/IpScope.java
@@ -0,0 +1,192 @@
+package org.jclouds.vcloud.domain.network;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+
+/**
+ * The IpScope element defines the address range, gateway, netmask, and other properties of the
+ * network.
+ *
+ */
+public class IpScope {
+ private final boolean inherited;
+ @Nullable
+ private final String gateway;
+ @Nullable
+ private final String netmask;
+ @Nullable
+ private final String dns1;
+ @Nullable
+ private final String dns2;
+ @Nullable
+ private final String dnsSuffix;
+ private final Set ipRanges = Sets.newLinkedHashSet();
+ private final Set allocatedIpAddresses = Sets.newLinkedHashSet();
+
+ public IpScope(boolean inherited, @Nullable String gateway, @Nullable String netmask, @Nullable String dns1,
+ @Nullable String dns2, @Nullable String dnsSuffix, Iterable ipRanges,
+ Iterable allocatedIpAddresses) {
+ this.inherited = inherited;
+ this.gateway = gateway;
+ this.netmask = netmask;
+ this.dns1 = dns1;
+ this.dns2 = dns2;
+ this.dnsSuffix = dnsSuffix;
+ Iterables.addAll(this.ipRanges, checkNotNull(ipRanges, "ipRanges"));
+ Iterables.addAll(this.allocatedIpAddresses, checkNotNull(allocatedIpAddresses, "allocatedIpAddresses"));
+ }
+
+ /**
+ * @return true of the values in this IpScope element are inherited from the ParentNetwork of the
+ * containing Configuration
+ * @since vcloud api 0.9
+ */
+ public boolean isInherited() {
+ return inherited;
+ }
+
+ /**
+ * @return IP address of the network gateway
+ *
+ * @since vcloud api 0.8
+ */
+ @Nullable
+ public String getGateway() {
+ return gateway;
+ }
+
+ /**
+ * @return netmask to apply to addresses on the network
+ *
+ * @since vcloud api 0.8
+ */
+ @Nullable
+ public String getNetmask() {
+ return netmask;
+ }
+
+ /**
+ * @return IP address of the primary DNS server for this network
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public String getDns1() {
+ return dns1;
+ }
+
+ /**
+ * @return IP address of the secondary DNS server for this network
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public String getDns2() {
+ return dns2;
+ }
+
+ /**
+ * @return suffix to be applied when resolving hostnames that are not fully‐qualified.
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public String getDnsSuffix() {
+ return dnsSuffix;
+ }
+
+ /**
+ * @return A container for IpRange elements.
+ *
+ * @since vcloud api 0.9
+ */
+ public Set getIpRanges() {
+ return ipRanges;
+ }
+
+ /**
+ * @return A list of addresses allocated from any of the specified IpRanges
+ *
+ * @since vcloud api 0.9
+ */
+ public Set getAllocatedIpAddresses() {
+ return allocatedIpAddresses;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((allocatedIpAddresses == null) ? 0 : allocatedIpAddresses.hashCode());
+ result = prime * result + ((dns1 == null) ? 0 : dns1.hashCode());
+ result = prime * result + ((dns2 == null) ? 0 : dns2.hashCode());
+ result = prime * result + ((dnsSuffix == null) ? 0 : dnsSuffix.hashCode());
+ result = prime * result + ((gateway == null) ? 0 : gateway.hashCode());
+ result = prime * result + (inherited ? 1231 : 1237);
+ result = prime * result + ((ipRanges == null) ? 0 : ipRanges.hashCode());
+ result = prime * result + ((netmask == null) ? 0 : netmask.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ IpScope other = (IpScope) obj;
+ if (allocatedIpAddresses == null) {
+ if (other.allocatedIpAddresses != null)
+ return false;
+ } else if (!allocatedIpAddresses.equals(other.allocatedIpAddresses))
+ return false;
+ if (dns1 == null) {
+ if (other.dns1 != null)
+ return false;
+ } else if (!dns1.equals(other.dns1))
+ return false;
+ if (dns2 == null) {
+ if (other.dns2 != null)
+ return false;
+ } else if (!dns2.equals(other.dns2))
+ return false;
+ if (dnsSuffix == null) {
+ if (other.dnsSuffix != null)
+ return false;
+ } else if (!dnsSuffix.equals(other.dnsSuffix))
+ return false;
+ if (gateway == null) {
+ if (other.gateway != null)
+ return false;
+ } else if (!gateway.equals(other.gateway))
+ return false;
+ if (inherited != other.inherited)
+ return false;
+ if (ipRanges == null) {
+ if (other.ipRanges != null)
+ return false;
+ } else if (!ipRanges.equals(other.ipRanges))
+ return false;
+ if (netmask == null) {
+ if (other.netmask != null)
+ return false;
+ } else if (!netmask.equals(other.netmask))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[allocatedIpAddresses=" + allocatedIpAddresses + ", dns1=" + dns1 + ", dns2=" + dns2 + ", dnsSuffix="
+ + dnsSuffix + ", gateway=" + gateway + ", inherited=" + inherited + ", ipRanges=" + ipRanges
+ + ", netmask=" + netmask + "]";
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/NatService.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/NatService.java
new file mode 100644
index 0000000000..01dc9132c4
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/NatService.java
@@ -0,0 +1,137 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.network.nat.NatPolicy;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+import org.jclouds.vcloud.domain.network.nat.NatType;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+/**
+ * The NatService element defines the network address translation capabilities of a network.
+ */
+public class NatService {
+ private final boolean enabled;
+ @Nullable
+ private final NatType type;
+ @Nullable
+ private final NatPolicy policy;
+ private final List natRules = Lists.newArrayList();
+
+ public NatService(boolean enabled, @Nullable NatType type, @Nullable NatPolicy policy,
+ Iterable extends NatRule> natRules) {
+ this.enabled = enabled;
+ this.type = type;
+ this.policy = policy;
+ Iterables.addAll(this.natRules, checkNotNull(natRules, "natRules"));
+ }
+
+ /**
+ * @return Nat rules for the network
+ *
+ * @since vcloud api 0.8
+ */
+ public List extends NatRule> getNatRules() {
+ return natRules;
+ }
+
+ /**
+ * @return true if the service is enabled
+ *
+ * @since vcloud api 0.9
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * @return specifies how Network Address Translation is implemented by the NAT service
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public NatType getType() {
+ return type;
+ }
+
+ /**
+ * @return specifies how packets are handled by the NAT service.
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ public NatPolicy getPolicy() {
+ return policy;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (enabled ? 1231 : 1237);
+ result = prime * result + ((natRules == null) ? 0 : natRules.hashCode());
+ result = prime * result + ((policy == null) ? 0 : policy.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ NatService other = (NatService) obj;
+ if (enabled != other.enabled)
+ return false;
+ if (natRules == null) {
+ if (other.natRules != null)
+ return false;
+ } else if (!natRules.equals(other.natRules))
+ return false;
+ if (policy == null) {
+ if (other.policy != null)
+ return false;
+ } else if (!policy.equals(other.policy))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[enabled=" + enabled + ", natRules=" + natRules + ", policy=" + policy + ", type=" + type + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/OrgNetwork.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/OrgNetwork.java
new file mode 100644
index 0000000000..0fed5f7fda
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/OrgNetwork.java
@@ -0,0 +1,125 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.NamedResource;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.internal.VDCImpl;
+
+import com.google.inject.ImplementedBy;
+
+/**
+ * A vDC is a deployment environment for vApps. A Vdc element provides a user view of a vDC.
+ *
+ * @author Adrian Cole
+ */
+@org.jclouds.vcloud.endpoints.Network
+@ImplementedBy(VDCImpl.class)
+public interface OrgNetwork extends NamedResource {
+ /**
+ * The org this network belongs to.
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ NamedResource getOrg();
+
+ /**
+ * optional description
+ *
+ * @since vcloud api 0.8
+ */
+ @Nullable
+ String getDescription();
+
+ /**
+ * read‐only container for Task elements. Each element in the container represents a queued,
+ * running, or failed task owned by this object.
+ *
+ * @since vcloud api 0.9
+ */
+ List getTasks();
+
+ /**
+ *
+ * @return properties of the network
+ *
+ * @since vcloud api 0.9, but emulated for 0.8
+ */
+ Configuration getConfiguration();
+
+ /**
+ * A reference the network pool from which this network is provisioned. This element, which is
+ * required when creating a NatRouted or Isolated network, is returned in response to a creation
+ * request but not shown in subsequent GET requests.
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ NamedResource getNetworkPool();
+
+ /**
+ * list of external IP addresses that this network can use for NAT.
+ *
+ * @since vcloud api 0.9
+ */
+ Set getAllowedExternalIpAddresses();
+
+ /**
+ * The Configuration element specifies properties of a network.
+ */
+ interface Configuration {
+ /**
+ * defines the address range, gateway, netmask, and other properties of the network.
+ *
+ * @since vcloud api 0.9, but emulated for 0.8
+ */
+ @Nullable
+ IpScope getIpScope();
+
+ /**
+ * reference to a network to which this network connects
+ *
+ * @since vcloud api 0.9
+ */
+ @Nullable
+ NamedResource getParentNetwork();
+
+ /**
+ * defines how this network is connected to its ParentNetwork
+ *
+ * @since vcloud api 0.8
+ */
+ FenceMode getFenceMode();
+
+ /**
+ * defines a set of network features.
+ *
+ * @since vcloud api 0.9, but emulated for 0.8
+ */
+ @Nullable Features getFeatures();
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/Network.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/VCloudExpressNetwork.java
similarity index 82%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/domain/Network.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/VCloudExpressNetwork.java
index cb26b8c391..830b37f4dd 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/Network.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/VCloudExpressNetwork.java
@@ -17,19 +17,23 @@
* ====================================================================
*/
-package org.jclouds.vcloud.domain;
+package org.jclouds.vcloud.domain.network;
import java.util.Set;
import javax.annotation.Nullable;
+import org.jclouds.vcloud.domain.NamedResource;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
+
/**
*
* A network that is available in a vDC.
*
* @author Adrian Cole
*/
-public interface Network extends NamedResource {
+public interface VCloudExpressNetwork extends NamedResource {
/**
*
* @return Description of the network
@@ -58,7 +62,7 @@ public interface Network extends NamedResource {
/**
* return the network’s fence modes.
*/
- Set getFenceModes();
+ Set getFenceModes();
/**
* return True if the network provides DHCP services
@@ -70,7 +74,7 @@ public interface Network extends NamedResource {
*
* @return Network Address Translation rules for the network
*/
- Set getNatRules();
+ Set getNatRules();
/**
* @return Firewall rules for the network
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallPolicy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallPolicy.java
new file mode 100644
index 0000000000..6686d8f4fa
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallPolicy.java
@@ -0,0 +1,57 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.firewall;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ * specifies how packets are handled by the firewall
+ *
+ */
+public enum FirewallPolicy {
+ /**
+ * drop packets of this type
+ */
+ DROP,
+ /**
+ * allow packets of this type to pass through the firewall
+ */
+ ALLOW;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static FirewallPolicy fromValue(String policy) {
+ try {
+ return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(policy, "policy")));
+ } catch (IllegalArgumentException e) {
+ return DROP;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallProtocols.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallProtocols.java
new file mode 100644
index 0000000000..b1d38dffa9
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallProtocols.java
@@ -0,0 +1,63 @@
+package org.jclouds.vcloud.domain.network.firewall;
+
+/**
+ * The Protocols element specifies the protocols to which firewall rules apply.
+ *
+ * @since vcloud api 0.9 emulated for 0.8
+ *
+ *
+ */
+public class FirewallProtocols {
+ private final boolean tcp;
+ private final boolean udp;
+
+ public FirewallProtocols(boolean tcp, boolean udp) {
+ this.tcp = tcp;
+ this.udp = udp;
+ }
+
+ /**
+ * @return true if the firewall rules apply to the TCP protocol
+ */
+ public boolean isTcp() {
+ return tcp;
+ }
+
+ /**
+ * @return true if the firewall rules apply to the UDP protocol
+ */
+ public boolean isUdp() {
+ return udp;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (tcp ? 1231 : 1237);
+ result = prime * result + (udp ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FirewallProtocols other = (FirewallProtocols) obj;
+ if (tcp != other.tcp)
+ return false;
+ if (udp != other.udp)
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "Protocols [tcp=" + tcp + ", udp=" + udp + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallRule.java
new file mode 100644
index 0000000000..75965301e4
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/firewall/FirewallRule.java
@@ -0,0 +1,156 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.firewall;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.annotation.Nullable;
+
+/**
+ * The FirewallRule element defines a single firewall rule.
+ *
+ * @author Adrian Cole
+ * @since vcloud api 0.8
+ */
+public class FirewallRule {
+
+ private final boolean enabled;
+ @Nullable
+ private final String description;
+ @Nullable
+ private final FirewallPolicy policy;
+ @Nullable
+ private final FirewallProtocols protocols;
+ private final int port;
+ private final String destinationIp;
+
+ public FirewallRule(boolean enabled, @Nullable String description, @Nullable FirewallPolicy policy,
+ @Nullable FirewallProtocols protocols, int port, String destinationIp) {
+ this.enabled = enabled;
+ this.description = description;
+ this.policy = policy;
+ this.protocols = protocols;
+ this.port = port;
+ this.destinationIp = checkNotNull(destinationIp, "destinationIp");
+ }
+
+ /**
+ * @return true if the rule is enabled
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * @return description of the rule
+ */
+ @Nullable
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @return specifies how packets are handled by the firewall
+ */
+ @Nullable
+ public FirewallPolicy getPolicy() {
+ return policy;
+ }
+
+ /**
+ * @return specifies the protocols to which this firewall rule applies
+ */
+ @Nullable
+ public FirewallProtocols getProtocols() {
+ return protocols;
+ }
+
+ /**
+ * @return specifies the network port to which this firewall rule applies. A value of ‐1 matches
+ * any port.
+ */
+ public int getPort() {
+ return port;
+ }
+
+ /**
+ * @return specifies the destination IP address, inside the firewall, to which this firewall rule
+ * applies
+ */
+ public String getDestinationIp() {
+ return destinationIp;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((destinationIp == null) ? 0 : destinationIp.hashCode());
+ result = prime * result + (enabled ? 1231 : 1237);
+ result = prime * result + ((policy == null) ? 0 : policy.hashCode());
+ result = prime * result + port;
+ result = prime * result + ((protocols == null) ? 0 : protocols.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FirewallRule other = (FirewallRule) obj;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (destinationIp == null) {
+ if (other.destinationIp != null)
+ return false;
+ } else if (!destinationIp.equals(other.destinationIp))
+ return false;
+ if (enabled != other.enabled)
+ return false;
+ if (policy == null) {
+ if (other.policy != null)
+ return false;
+ } else if (!policy.equals(other.policy))
+ return false;
+ if (port != other.port)
+ return false;
+ if (protocols == null) {
+ if (other.protocols != null)
+ return false;
+ } else if (!protocols.equals(other.protocols))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[description=" + description + ", destinationIp=" + destinationIp + ", enabled=" + enabled + ", policy="
+ + policy + ", port=" + port + ", protocols=" + protocols + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/OrgNetworkImpl.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/OrgNetworkImpl.java
new file mode 100644
index 0000000000..022d25b900
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/OrgNetworkImpl.java
@@ -0,0 +1,281 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.NamedResource;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
+import org.jclouds.vcloud.domain.network.Features;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ *
+ * @author Adrian Cole
+ */
+public class OrgNetworkImpl extends NamedResourceImpl implements OrgNetwork {
+ @Nullable
+ private final NamedResource org;
+ @Nullable
+ private final String description;
+ private final List tasks = Lists.newArrayList();
+ private final Configuration configuration;
+ @Nullable
+ private final NamedResource networkPool;
+ private final Set allowedExternalIpAddresses = Sets.newLinkedHashSet();
+
+ public OrgNetworkImpl(String name, String type, URI id, @Nullable NamedResource org, @Nullable String description,
+ Iterable tasks, Configuration configuration, @Nullable NamedResource networkPool,
+ Iterable allowedExternalIpAddresses) {
+ super(name, type, id);
+ this.org = org;
+ this.description = description;
+ Iterables.addAll(this.tasks, checkNotNull(tasks, "tasks"));
+ this.configuration = checkNotNull(configuration, "configuration");
+ this.networkPool = networkPool;
+ Iterables.addAll(this.allowedExternalIpAddresses, checkNotNull(allowedExternalIpAddresses,
+ "allowedExternalIpAddresses"));
+ }
+
+ public static class ConfigurationImpl implements Configuration {
+
+ @Nullable
+ private final IpScope ipScope;
+ @Nullable
+ private final NamedResource parentNetwork;
+ private final FenceMode fenceMode;
+ private final Features features;
+
+ public ConfigurationImpl(@Nullable IpScope ipScope, @Nullable NamedResource parentNetwork, FenceMode fenceMode,
+ @Nullable Features features) {
+ this.ipScope = ipScope;
+ this.parentNetwork = parentNetwork;
+ this.fenceMode = checkNotNull(fenceMode, "fenceMode");
+ this.features = features;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public IpScope getIpScope() {
+ return ipScope;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NamedResource getParentNetwork() {
+ return parentNetwork;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public FenceMode getFenceMode() {
+ return fenceMode;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @Nullable
+ public Features getFeatures() {
+ return features;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((features == null) ? 0 : features.hashCode());
+ result = prime * result + ((fenceMode == null) ? 0 : fenceMode.hashCode());
+ result = prime * result + ((ipScope == null) ? 0 : ipScope.hashCode());
+ result = prime * result + ((parentNetwork == null) ? 0 : parentNetwork.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ConfigurationImpl other = (ConfigurationImpl) obj;
+ if (features == null) {
+ if (other.features != null)
+ return false;
+ } else if (!features.equals(other.features))
+ return false;
+ if (fenceMode == null) {
+ if (other.fenceMode != null)
+ return false;
+ } else if (!fenceMode.equals(other.fenceMode))
+ return false;
+ if (ipScope == null) {
+ if (other.ipScope != null)
+ return false;
+ } else if (!ipScope.equals(other.ipScope))
+ return false;
+ if (parentNetwork == null) {
+ if (other.parentNetwork != null)
+ return false;
+ } else if (!parentNetwork.equals(other.parentNetwork))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[features=" + features + ", fenceMode=" + fenceMode + ", ipScope=" + ipScope + ", parentNetwork="
+ + parentNetwork + "]";
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NamedResource getOrg() {
+ return org;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List getTasks() {
+ return tasks;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NamedResource getNetworkPool() {
+ return networkPool;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Set getAllowedExternalIpAddresses() {
+ return allowedExternalIpAddresses;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((allowedExternalIpAddresses == null) ? 0 : allowedExternalIpAddresses.hashCode());
+ result = prime * result + ((configuration == null) ? 0 : configuration.hashCode());
+ result = prime * result + ((description == null) ? 0 : description.hashCode());
+ result = prime * result + ((networkPool == null) ? 0 : networkPool.hashCode());
+ result = prime * result + ((org == null) ? 0 : org.hashCode());
+ result = prime * result + ((tasks == null) ? 0 : tasks.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ OrgNetworkImpl other = (OrgNetworkImpl) obj;
+ if (allowedExternalIpAddresses == null) {
+ if (other.allowedExternalIpAddresses != null)
+ return false;
+ } else if (!allowedExternalIpAddresses.equals(other.allowedExternalIpAddresses))
+ return false;
+ if (configuration == null) {
+ if (other.configuration != null)
+ return false;
+ } else if (!configuration.equals(other.configuration))
+ return false;
+ if (description == null) {
+ if (other.description != null)
+ return false;
+ } else if (!description.equals(other.description))
+ return false;
+ if (networkPool == null) {
+ if (other.networkPool != null)
+ return false;
+ } else if (!networkPool.equals(other.networkPool))
+ return false;
+ if (org == null) {
+ if (other.org != null)
+ return false;
+ } else if (!org.equals(other.org))
+ return false;
+ if (tasks == null) {
+ if (other.tasks != null)
+ return false;
+ } else if (!tasks.equals(other.tasks))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[allowedExternalIpAddresses=" + allowedExternalIpAddresses + ", configuration=" + configuration
+ + ", description=" + description + ", networkPool=" + networkPool + ", org=" + org + ", tasks=" + tasks
+ + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/internal/NetworkImpl.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressNetworkImpl.java
similarity index 79%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/domain/internal/NetworkImpl.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressNetworkImpl.java
index dd98c835f6..bb2724171c 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/internal/NetworkImpl.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressNetworkImpl.java
@@ -17,16 +17,17 @@
* ====================================================================
*/
-package org.jclouds.vcloud.domain.internal;
+package org.jclouds.vcloud.domain.network.internal;
import java.net.URI;
import java.util.Set;
-import org.jclouds.vcloud.VCloudExpressMediaType;
-import org.jclouds.vcloud.domain.FirewallRule;
import org.jclouds.vcloud.domain.NamedResource;
-import org.jclouds.vcloud.domain.NatRule;
-import org.jclouds.vcloud.domain.Network;
+import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
import com.google.common.collect.Sets;
import com.google.inject.internal.Nullable;
@@ -37,7 +38,7 @@ import com.google.inject.internal.Nullable;
* @author Adrian Cole
*
*/
-public class NetworkImpl extends NamedResourceImpl implements Network {
+public class VCloudExpressNetworkImpl extends NamedResourceImpl implements VCloudExpressNetwork {
/** The serialVersionUID */
private static final long serialVersionUID = 8464716396538298809L;
@@ -45,15 +46,16 @@ public class NetworkImpl extends NamedResourceImpl implements Network {
private final Set dnsServers = Sets.newHashSet();
private final String gateway;
private final String netmask;
- private final Set fenceModes = Sets.newHashSet();
+ private final Set fenceModes = Sets.newHashSet();
@Nullable
private final Boolean dhcp;
- private final Set natRules = Sets.newHashSet();
+ private final Set natRules = Sets.newHashSet();
private final Set firewallRules = Sets.newHashSet();
- public NetworkImpl(String name, URI id, String description, Set dnsServers, String gateway,
- String netmask, Set fenceModes, Boolean dhcp, Set natRules, Set firewallRules) {
- super(name, VCloudExpressMediaType.NETWORK_XML, id);
+ public VCloudExpressNetworkImpl(String name, String type, URI id, String description, Set dnsServers,
+ String gateway, String netmask, Set fenceModes, Boolean dhcp, Set natRules,
+ Set firewallRules) {
+ super(name, type, id);
this.description = description;
this.dnsServers.addAll(dnsServers);
this.gateway = gateway;
@@ -95,7 +97,7 @@ public class NetworkImpl extends NamedResourceImpl implements Network {
/**
* {@inheritDoc}
*/
- public Set getFenceModes() {
+ public Set getFenceModes() {
return fenceModes;
}
@@ -109,7 +111,7 @@ public class NetworkImpl extends NamedResourceImpl implements Network {
/**
* {@inheritDoc}
*/
- public Set getNatRules() {
+ public Set getNatRules() {
return natRules;
}
@@ -148,7 +150,7 @@ public class NetworkImpl extends NamedResourceImpl implements Network {
return false;
if (getClass() != obj.getClass())
return false;
- NetworkImpl other = (NetworkImpl) obj;
+ VCloudExpressNetworkImpl other = (VCloudExpressNetworkImpl) obj;
if (description == null) {
if (other.description != null)
return false;
@@ -195,9 +197,9 @@ public class NetworkImpl extends NamedResourceImpl implements Network {
@Override
public String toString() {
return "NetworkImpl [id=" + getId() + ", name=" + getName() + ", type=" + getType() + ", description="
- + description + ", dhcp=" + dhcp + ", dnsServers=" + dnsServers + ", fenceModes=" + fenceModes
- + ", firewallRules=" + firewallRules + ", gateway=" + gateway + ", natRules=" + natRules + ", netmask="
- + netmask + "]";
+ + description + ", dhcp=" + dhcp + ", dnsServers=" + dnsServers + ", fenceModes=" + fenceModes
+ + ", firewallRules=" + firewallRules + ", gateway=" + gateway + ", natRules=" + natRules + ", netmask="
+ + netmask + "]";
}
}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressOrgNetworkAdapter.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressOrgNetworkAdapter.java
new file mode 100644
index 0000000000..ca494c5d33
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/internal/VCloudExpressOrgNetworkAdapter.java
@@ -0,0 +1,66 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.internal;
+
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.network.DhcpService;
+import org.jclouds.vcloud.domain.network.Features;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.FirewallService;
+import org.jclouds.vcloud.domain.network.IpRange;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.NatService;
+import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+/**
+ *
+ * @author Adrian Cole
+ */
+public class VCloudExpressOrgNetworkAdapter extends OrgNetworkImpl {
+
+ public VCloudExpressOrgNetworkAdapter(VCloudExpressNetwork in) {
+ super(in.getName(), in.getType(), in.getId(), null, in.getDescription(), ImmutableSet. of(),
+ parseConfiguration(in), null, ImmutableSet. of());
+ }
+
+ static Configuration parseConfiguration(VCloudExpressNetwork in) {
+
+ String dns1 = (in.getDnsServers().size() > 0) ? Iterables.get(in.getDnsServers(), 0) : null;
+ String dns2 = (in.getDnsServers().size() > 1) ? Iterables.get(in.getDnsServers(), 1) : null;
+
+ String gateway = in.getGateway();
+
+ String netmask = in.getNetmask();
+
+ FenceMode mode = in.getFenceModes().size() > 0 ? Iterables.get(in.getFenceModes(), 0) : FenceMode.BRIDGED;
+
+ DhcpService dhcp = in.isDhcp() != null && in.isDhcp() ? new DhcpService(true, null, null, null) : null;
+
+ NatService nat = in.getNatRules().size() > 0 ? new NatService(true, null, null, in.getNatRules()) : null;
+
+ FirewallService firewall = in.getFirewallRules().size() > 0 ? new FirewallService(true, in.getFirewallRules())
+ : null;
+ return new OrgNetworkImpl.ConfigurationImpl(new IpScope(true, gateway, netmask, dns1, dns2, null, ImmutableSet
+ . of(), ImmutableSet. of()), null, mode, new Features(dhcp, firewall, nat));
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatPolicy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatPolicy.java
new file mode 100644
index 0000000000..aa0e091989
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatPolicy.java
@@ -0,0 +1,57 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ * The Policy element of a NatService element specifies how packets are handled by the NAT service.
+ *
+ */
+public enum NatPolicy {
+ /**
+ * packets of this type pass through the firewall in both directions
+ */
+ ALLOW_TRAFFIC,
+ /**
+ * only inbound packets of this type pass through the firewall
+ */
+ ALLOW_TRAFFIC_IN;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static NatPolicy fromValue(String policy) {
+ try {
+ return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(policy, "policy")));
+ } catch (IllegalArgumentException e) {
+ return ALLOW_TRAFFIC_IN;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/FenceMode.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatProtocol.java
similarity index 62%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/domain/FenceMode.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatProtocol.java
index f925706f32..c721328164 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/FenceMode.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatProtocol.java
@@ -17,26 +17,35 @@
* ====================================================================
*/
-package org.jclouds.vcloud.domain;
+package org.jclouds.vcloud.domain.network.nat;
+
/**
*
- * The FenceMode element contains one of the following strings that specify how
- * a network is connected to its parent network.
+ * The Protocol specifies the network protocol to which this rule applies
+ *
+ * @since vcloud api 0.9
*
* @author Adrian Cole
*/
-public interface FenceMode {
+public enum NatProtocol {
/**
- * The two networks are bridged.
+ * the rule applies to the TCP protocol
+ *
+ * @since vcloud api 0.9
*/
- public static final String BRIDGED = "bridged";
+ TCP,
/**
- * The two networks are not connected.
+ * the rule applies to the UDP protocol
+ *
+ * @since vcloud api 0.9
*/
- public static final String ISOLATED = "isolated";
+ UDP,
/**
- * The two networks are connected as specified in their NatService elements.
+ * the rule applies to the TCP and UDP protocols.
+ *
+ * @since vcloud api 0.9
*/
- public static final String NAT_ROUTED = "natRouted";
+ TCP_UDP;
+
}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatRule.java
new file mode 100644
index 0000000000..3191e0466a
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatRule.java
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat;
+
+import javax.annotation.Nullable;
+
+/**
+ *
+ * Defines a rule associated with Nat
+ *
+ * @since vcloud api 0.9
+ *
+ * @author Adrian Cole
+ */
+public interface NatRule {
+ /**
+ * IP address to which this NAT rule maps the IP address specified in the InternalIp element.
+ */
+ @Nullable
+ String getExternalIP();
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatType.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatType.java
new file mode 100644
index 0000000000..bf7f6b7122
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/NatType.java
@@ -0,0 +1,60 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.CaseFormat;
+
+/**
+ *
+ * The NatType element specifies how network address translation is implemented by the NAT service.
+ *
+ * @since vcloud api 0.9
+ *
+ * @author Adrian Cole
+ */
+public enum NatType {
+ /**
+ * NAT service implemented by IP address translation
+ *
+ * @since vcloud api 0.9
+ */
+ IP_TRANSLATION,
+ /**
+ * NAT service implemented by network port forwarding
+ *
+ * @since vcloud api 0.9
+ */
+ PORT_FORWARDING;
+
+ public String value() {
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
+ }
+
+ @Override
+ public String toString() {
+ return value();
+ }
+
+ public static NatType fromValue(String natType) {
+ return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(natType, "natType")));
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/OneToOneVmRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/OneToOneVmRule.java
new file mode 100644
index 0000000000..7f229bc955
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/OneToOneVmRule.java
@@ -0,0 +1,90 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat.rules;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.MappingMode;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+
+/**
+ * The OneToOneVmRule element describes a NAT rule that specifies network address translation
+ * details for a single virtual machine. The external IP address can be specified manually or
+ * assigned automatically at deployment time. The internal IP address is discovered by looking up
+ * the specified VmReference and NIC ID.
+ *
+ * @since vcloud 0.9
+ * @author Adrian Cole
+ */
+public class OneToOneVmRule implements NatRule {
+ private final MappingMode mappingMode;
+ @Nullable
+ private final String externalIP;
+ @Nullable
+ private final String vAppScopedVmId;
+ private final int vmNicId;
+
+ public OneToOneVmRule(MappingMode mappingMode, @Nullable String externalIp, @Nullable String vAppScopedVmId,
+ int vmNicId) {
+ this.mappingMode = checkNotNull(mappingMode, "mappingMode");
+ this.externalIP = externalIp;
+ this.vAppScopedVmId = vAppScopedVmId;
+ this.vmNicId = vmNicId;
+ }
+
+ /**
+ * @return how IP address mapping is implemented by the NAT service
+ * @since vcloud 0.9
+ */
+ public MappingMode getMappingMode() {
+ return mappingMode;
+ }
+
+ /**
+ * @return if MappingMode is manual, specifies the external IP address of this Vm, otherwise
+ * null.
+ * @since vcloud 0.9
+ */
+ @Nullable
+ @Override
+ public String getExternalIP() {
+ return externalIP;
+ }
+
+ /**
+ * @return read‐only identifier created on import
+ * @since vcloud 0.9
+ */
+ @Nullable
+ public String getVAppScopedVmId() {
+ return vAppScopedVmId;
+ }
+
+ /**
+ * @return device number of the NIC on the referenced virtual machine
+ * @since vcloud 0.9
+ */
+ public int getVmNicId() {
+ return vmNicId;
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/PortForwardingRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/PortForwardingRule.java
new file mode 100644
index 0000000000..08d4e4611d
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/PortForwardingRule.java
@@ -0,0 +1,137 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat.rules;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.vcloud.domain.network.nat.NatProtocol;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+
+/**
+ * The PortForwardingRule element describes a NAT rule that maps an IP address and port in an
+ * organization network to an external IP address and port.
+ *
+ * @since vcloud 0.8
+ * @author Adrian Cole
+ */
+public class PortForwardingRule implements NatRule {
+ private final String externalIP;
+ private final int externalPort;
+ private final String internalIP;
+ private final int internalPort;
+ private final NatProtocol protocol;
+
+ public PortForwardingRule(String externalIP, int externalPort, String internalIP, int internalPort,
+ NatProtocol protocol) {
+ this.externalIP = checkNotNull(externalIP, "externalIP");
+ this.externalPort = externalPort;
+ this.internalIP = checkNotNull(internalIP, "internalIP");
+ this.internalPort = internalPort;
+ this.protocol = checkNotNull(protocol, "protocol");
+
+ }
+
+ /**
+ * IP address to which this NAT rule maps the IP address specified in the InternalIp element.
+ */
+ @Override
+ public String getExternalIP() {
+ return externalIP;
+ }
+
+ /**
+ * network port to which this NAT rule maps the port number specified in the InternalPort element
+ */
+ public int getExternalPort() {
+ return externalPort;
+ }
+
+ /**
+ * IP address to which this NAT rule maps the IP address specified in the ExternalIp element.
+ */
+ public String getInternalIP() {
+ return internalIP;
+ }
+
+ /**
+ * network port to which this NAT rule maps the port number specified in the ExternalPort
+ * element.
+ */
+ public int getInternalPort() {
+ return internalPort;
+ }
+
+ /**
+ * specifies the network protocol to which this rule applies
+ */
+ public NatProtocol getProtocol() {
+ return protocol;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((externalIP == null) ? 0 : externalIP.hashCode());
+ result = prime * result + externalPort;
+ result = prime * result + ((internalIP == null) ? 0 : internalIP.hashCode());
+ result = prime * result + internalPort;
+ result = prime * result + ((protocol == null) ? 0 : protocol.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ PortForwardingRule other = (PortForwardingRule) obj;
+ if (externalIP == null) {
+ if (other.externalIP != null)
+ return false;
+ } else if (!externalIP.equals(other.externalIP))
+ return false;
+ if (externalPort != other.externalPort)
+ return false;
+ if (internalIP == null) {
+ if (other.internalIP != null)
+ return false;
+ } else if (!internalIP.equals(other.internalIP))
+ return false;
+ if (internalPort != other.internalPort)
+ return false;
+ if (protocol == null) {
+ if (other.protocol != null)
+ return false;
+ } else if (!protocol.equals(other.protocol))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[externalIP=" + externalIP + ", externalPort=" + externalPort + ", internalIP=" + internalIP
+ + ", internalPort=" + internalPort + ", protocol=" + protocol + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/VmRule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/VmRule.java
new file mode 100644
index 0000000000..7ea4b00485
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/network/nat/rules/VmRule.java
@@ -0,0 +1,157 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.nat.rules;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.domain.network.nat.NatProtocol;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+
+/**
+ * The VmRule element describes a NAT rule that maps an IP address and port in a vApp network to an
+ * external IP address and port. The external IP address, external port, and internal port are
+ * specified in the element. The internal IP address is discovered by looking up the specified
+ * VmReference and VmNicId.
+ *
+ * @since vcloud 0.9
+ * @author Adrian Cole
+ */
+public class VmRule implements NatRule {
+ @Nullable
+ private final String externalIP;
+ private final int externalPort;
+ @Nullable
+ private final String vAppScopedLocalId;
+ private final int vmNicId;
+ private final int internalPort;
+ private final NatProtocol protocol;
+
+ public VmRule(@Nullable String externalIP, int externalPort, @Nullable String vAppScopedLocalId, int vmNicId,
+ int internalPort, NatProtocol protocol) {
+ this.externalIP = externalIP;
+ this.externalPort = externalPort;
+ this.vAppScopedLocalId = vAppScopedLocalId;
+ this.vmNicId = vmNicId;
+ this.internalPort = internalPort;
+ this.protocol = checkNotNull(protocol, "protocol");
+ }
+
+ /**
+ * IP address to which this NAT rule maps the IP address specified in the InternalIp element.
+ */
+ @Nullable
+ public String getExternalIP() {
+ return externalIP;
+ }
+
+ /**
+ * network port to which this NAT rule maps the port number specified in the InternalPort element
+ */
+ public Integer getExternalPort() {
+ return externalPort;
+ }
+
+ /**
+ * @return read‐only identifier created on import
+ * @since vcloud 0.9
+ */
+ @Nullable
+ public String getVAppScopedLocalId() {
+ return vAppScopedLocalId;
+ }
+
+ /**
+ * @return device number of the NIC on the referenced virtual machine
+ * @since vcloud 0.9
+ */
+ public int getVmNicId() {
+ return vmNicId;
+ }
+
+ /**
+ * network port to which this NAT rule maps the port number specified in the ExternalPort
+ * element.
+ */
+ public Integer getInternalPort() {
+ return internalPort;
+ }
+
+ /**
+ * specifies the network protocol to which this rule applies
+ */
+ public NatProtocol getProtocol() {
+ return protocol;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((externalIP == null) ? 0 : externalIP.hashCode());
+ result = prime * result + externalPort;
+ result = prime * result + internalPort;
+ result = prime * result + ((protocol == null) ? 0 : protocol.hashCode());
+ result = prime * result + ((vAppScopedLocalId == null) ? 0 : vAppScopedLocalId.hashCode());
+ result = prime * result + vmNicId;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ VmRule other = (VmRule) obj;
+ if (externalIP == null) {
+ if (other.externalIP != null)
+ return false;
+ } else if (!externalIP.equals(other.externalIP))
+ return false;
+ if (externalPort != other.externalPort)
+ return false;
+ if (internalPort != other.internalPort)
+ return false;
+ if (protocol == null) {
+ if (other.protocol != null)
+ return false;
+ } else if (!protocol.equals(other.protocol))
+ return false;
+ if (vAppScopedLocalId == null) {
+ if (other.vAppScopedLocalId != null)
+ return false;
+ } else if (!vAppScopedLocalId.equals(other.vAppScopedLocalId))
+ return false;
+ if (vmNicId != other.vmNicId)
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[externalIP=" + externalIP + ", externalPort=" + externalPort + ", internalPort=" + internalPort
+ + ", protocol=" + protocol + ", vAppScopedLocalId=" + vAppScopedLocalId + ", vmNicId=" + vmNicId + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptions.java b/vcloud/core/src/main/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptions.java
index 88797e5f0f..0a79d6a6d9 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptions.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptions.java
@@ -25,7 +25,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.net.URI;
import java.util.Map;
-import org.jclouds.vcloud.domain.FenceMode;
+import org.jclouds.vcloud.domain.network.FenceMode;
import com.google.common.collect.Maps;
@@ -40,7 +40,7 @@ public class InstantiateVAppTemplateOptions {
private String memorySizeMegabytes;
private String diskSizeKilobytes;
private String network;
- private String fenceMode;
+ private FenceMode fenceMode;
private String networkName;
private boolean blockOnDeploy = true;
private Map properties = Maps.newTreeMap();
@@ -75,8 +75,8 @@ public class InstantiateVAppTemplateOptions {
return this;
}
- public InstantiateVAppTemplateOptions fenceMode(String fenceMode) {
- this.fenceMode = checkNotNull(fenceMode, "fenceMode").toString();
+ public InstantiateVAppTemplateOptions fenceMode(FenceMode fenceMode) {
+ this.fenceMode = checkNotNull(fenceMode, "fenceMode");
return this;
}
@@ -117,7 +117,7 @@ public class InstantiateVAppTemplateOptions {
return networkName;
}
- public String getFenceMode() {
+ public FenceMode getFenceMode() {
return fenceMode;
}
@@ -170,7 +170,7 @@ public class InstantiateVAppTemplateOptions {
/**
* @see InstantiateVAppTemplateOptions#fenceMode(FenceMode)
*/
- public static InstantiateVAppTemplateOptions fenceMode(String fenceMode) {
+ public static InstantiateVAppTemplateOptions fenceMode(FenceMode fenceMode) {
InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions();
return options.fenceMode(fenceMode);
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkFromVCloudExpressNetworkHandler.java b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkFromVCloudExpressNetworkHandler.java
new file mode 100644
index 0000000000..8027279f56
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkFromVCloudExpressNetworkHandler.java
@@ -0,0 +1,59 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.xml;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.domain.network.internal.VCloudExpressOrgNetworkAdapter;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Adrian Cole
+ */
+public class OrgNetworkFromVCloudExpressNetworkHandler extends ParseSax.HandlerWithResult {
+
+ protected final VCloudExpressNetworkHandler vcxHandler;
+
+ @Inject
+ public OrgNetworkFromVCloudExpressNetworkHandler(VCloudExpressNetworkHandler vcxHandler) {
+ this.vcxHandler = vcxHandler;
+ }
+
+ public OrgNetwork getResult() {
+ return new VCloudExpressOrgNetworkAdapter(vcxHandler.getResult());
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+ vcxHandler.startElement(uri, localName, qName, attributes);
+ }
+
+ public void endElement(String uri, String name, String qName) {
+ vcxHandler.endElement(uri, name, qName);
+ }
+
+ public void characters(char ch[], int start, int length) {
+ vcxHandler.characters(ch, start, length);
+ }
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java
new file mode 100644
index 0000000000..95c6da7d40
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java
@@ -0,0 +1,325 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.xml;
+
+import static org.jclouds.vcloud.util.Utils.newNamedResource;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.vcloud.domain.MappingMode;
+import org.jclouds.vcloud.domain.NamedResource;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.network.DhcpService;
+import org.jclouds.vcloud.domain.network.Features;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.FirewallService;
+import org.jclouds.vcloud.domain.network.IpRange;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.NatService;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.domain.network.firewall.FirewallPolicy;
+import org.jclouds.vcloud.domain.network.firewall.FirewallProtocols;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.internal.OrgNetworkImpl;
+import org.jclouds.vcloud.domain.network.nat.NatPolicy;
+import org.jclouds.vcloud.domain.network.nat.NatProtocol;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+import org.jclouds.vcloud.domain.network.nat.NatType;
+import org.jclouds.vcloud.domain.network.nat.rules.OneToOneVmRule;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
+import org.jclouds.vcloud.domain.network.nat.rules.VmRule;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Adrian Cole
+ */
+public class OrgNetworkHandler extends ParseSax.HandlerWithResult {
+
+ protected final TaskHandler taskHandler;
+
+ @Inject
+ public OrgNetworkHandler(TaskHandler taskHandler) {
+ this.taskHandler = taskHandler;
+ }
+
+ protected StringBuilder currentText = new StringBuilder();
+
+ protected NamedResource network;
+ protected NamedResource org;
+ protected String orgDescription;
+ protected List tasks = Lists.newArrayList();
+
+ protected String startAddress;
+ protected String endAddress;
+
+ protected boolean inherited;
+ protected String gateway;
+ protected String netmask;
+ protected String dns1;
+ protected String dns2;
+ protected String dnsSuffix;
+ protected Set ipRanges = Sets.newLinkedHashSet();
+ protected Set allocatedIpAddresses = Sets.newLinkedHashSet();
+
+ protected IpScope ipScope;
+ protected NamedResource parentNetwork;
+ protected FenceMode fenceMode;
+
+ protected boolean serviceEnabled;
+ protected Integer defaultLeaseTime;
+ protected Integer maxLeaseTime;
+
+ protected DhcpService dhcpService;
+
+ protected boolean inFirewallRule;
+ protected boolean firewallRuleEnabled;
+ protected String firewallRuleDescription;
+ protected FirewallPolicy firewallPolicy;
+
+ protected boolean tcp;
+ protected boolean udp;
+ protected FirewallProtocols protocols;
+ protected int port;
+ protected String destinationIp;
+
+ protected List firewallRules = Lists.newArrayList();
+ protected FirewallService firewallService;
+
+ protected NatType natType;
+ protected NatPolicy natPolicy;
+
+ protected MappingMode mappingMode;
+ protected String externalIP;
+ protected String vAppScopedVmId;
+ protected int vmNicId;
+
+ protected int externalPort;
+ protected String internalIP;
+ protected int internalPort;
+ protected NatProtocol natProtocol;
+
+ protected String vAppScopedLocalId;
+
+ protected List natRules = Lists.newArrayList();
+ protected NatService natService;
+
+ protected Features features;
+ protected OrgNetwork.Configuration configuration;
+
+ protected NamedResource networkPool;
+ protected Set allowedExternalIpAddresses = Sets.newLinkedHashSet();
+
+ public OrgNetwork getResult() {
+ return new OrgNetworkImpl(network.getName(), network.getType(), network.getId(), org, orgDescription, tasks,
+ configuration, networkPool, allowedExternalIpAddresses);
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+ if (qName.equals("OrgNetwork")) {
+ network = newNamedResource(attributes);
+ } else if (qName.equals("FirewallRule")) {
+ this.inFirewallRule = true;
+ } else if (qName.equals("ParentNetwork")) {
+ parentNetwork = newNamedResource(attributes);
+ } else if (qName.equals("Link") && "up".equals(Utils.attrOrNull(attributes, "rel"))) {
+ org = newNamedResource(attributes);
+ } else {
+ taskHandler.startElement(uri, localName, qName, attributes);
+ }
+ int typeIndex = attributes.getIndex("type");
+ if (typeIndex != -1) {
+ if (attributes.getValue(typeIndex).indexOf("networkPool+xml") != -1) {
+ networkPool = newNamedResource(attributes);
+ }
+ }
+ }
+
+ public void endElement(String uri, String name, String qName) {
+ taskHandler.endElement(uri, name, qName);
+ if (qName.equals("Task")) {
+ this.tasks.add(taskHandler.getResult());
+ } else if (qName.equals("Description")) {
+ if (inFirewallRule)
+ firewallRuleDescription = currentOrNull();
+ else
+ orgDescription = currentOrNull();
+ } else if (qName.equals("FenceMode")) {
+ fenceMode = FenceMode.fromValue(currentOrNull());
+ } else if (qName.equals("StartAddress")) {
+ startAddress = currentOrNull();
+ } else if (qName.equals("EndAddress")) {
+ endAddress = currentOrNull();
+ } else if (qName.equals("AllocatedIpAddress")) {
+ allocatedIpAddresses.add(currentOrNull());
+ } else if (qName.equals("IpRange")) {
+ ipRanges.add(new IpRange(startAddress, endAddress));
+ this.startAddress = null;
+ this.endAddress = null;
+ } else if (qName.equals("IsInherited")) {
+ inherited = Boolean.parseBoolean(currentOrNull());
+ } else if (qName.equals("Gateway")) {
+ gateway = currentOrNull();
+ } else if (qName.equals("Netmask")) {
+ netmask = currentOrNull();
+ } else if (qName.equals("Dns1")) {
+ dns1 = currentOrNull();
+ } else if (qName.equals("Dns2")) {
+ dns2 = currentOrNull();
+ } else if (qName.equals("DnsSuffix")) {
+ dnsSuffix = currentOrNull();
+ } else if (qName.equals("IpScope")) {
+ ipScope = new IpScope(inherited, gateway, netmask, dns1, dns2, dnsSuffix, ipRanges, allocatedIpAddresses);
+ this.inherited = false;
+ this.gateway = null;
+ this.netmask = null;
+ this.dns1 = null;
+ this.dns2 = null;
+ this.dnsSuffix = null;
+ this.ipRanges = Sets.newLinkedHashSet();
+ this.allocatedIpAddresses = Sets.newLinkedHashSet();
+ } else if (qName.equals("IsEnabled")) {
+ if (inFirewallRule)
+ firewallRuleEnabled = Boolean.parseBoolean(currentOrNull());
+ else
+ serviceEnabled = Boolean.parseBoolean(currentOrNull());
+ } else if (qName.equals("DefaultLeaseTime")) {
+ defaultLeaseTime = Integer.parseInt(currentOrNull());
+ } else if (qName.equals("MaxLeaseTime")) {
+ maxLeaseTime = Integer.parseInt(currentOrNull());
+ } else if (qName.equals("DhcpService")) {
+ this.dhcpService = new DhcpService(serviceEnabled, defaultLeaseTime, maxLeaseTime, Iterables
+ .getOnlyElement(ipRanges));
+ this.serviceEnabled = false;
+ this.defaultLeaseTime = null;
+ this.maxLeaseTime = null;
+ this.ipRanges = Sets.newLinkedHashSet();
+ } else if (qName.equals("Policy")) {
+ if (inFirewallRule)
+ firewallPolicy = FirewallPolicy.fromValue(currentOrNull());
+ else
+ natPolicy = NatPolicy.fromValue(currentOrNull());
+ } else if (qName.equals("Tcp")) {
+ tcp = Boolean.parseBoolean(currentOrNull());
+ } else if (qName.equals("Udp")) {
+ udp = Boolean.parseBoolean(currentOrNull());
+ } else if (qName.equals("Protocols")) {
+ this.protocols = new FirewallProtocols(tcp, udp);
+ this.tcp = false;
+ this.udp = false;
+ } else if (qName.equals("DestinationIp")) {
+ this.destinationIp = currentOrNull();
+ } else if (qName.equals("FirewallRule")) {
+ this.inFirewallRule = false;
+ this.firewallRules.add(new FirewallRule(firewallRuleEnabled, firewallRuleDescription, firewallPolicy,
+ protocols, port, destinationIp));
+ this.firewallRuleEnabled = false;
+ this.firewallRuleDescription = null;
+ this.firewallPolicy = null;
+ this.protocols = null;
+ this.port = -1;
+ this.destinationIp = null;
+ } else if (qName.equals("FirewallService")) {
+ firewallService = new FirewallService(serviceEnabled, firewallRules);
+ this.serviceEnabled = false;
+ this.firewallRules = Lists.newArrayList();
+ } else if (qName.equals("NatType")) {
+ natType = NatType.fromValue(currentOrNull());
+ } else if (qName.equals("MappingMode")) {
+ mappingMode = MappingMode.fromValue(currentOrNull());
+ } else if (qName.equalsIgnoreCase("ExternalIP")) {
+ externalIP = currentOrNull();
+ } else if (qName.equalsIgnoreCase("VAppScopedVmId")) {
+ vAppScopedVmId = currentOrNull();
+ } else if (qName.equalsIgnoreCase("VAppScopedLocalId")) {
+ vAppScopedLocalId = currentOrNull();
+ } else if (qName.equalsIgnoreCase("vmNicId")) {
+ vmNicId = Integer.parseInt(currentOrNull());
+ } else if (qName.equals("OneToOneVmRule")) {
+ natRules.add(new OneToOneVmRule(mappingMode, externalIP, vAppScopedVmId, vmNicId));
+ this.mappingMode = null;
+ this.externalIP = null;
+ this.vAppScopedVmId = null;
+ this.vmNicId = -1;
+ } else if (qName.equalsIgnoreCase("ExternalPort")) {
+ externalPort = Integer.parseInt(currentOrNull());
+ } else if (qName.equalsIgnoreCase("IxternalIP")) {
+ internalIP = currentOrNull();
+ } else if (qName.equalsIgnoreCase("InternalPort")) {
+ internalPort = Integer.parseInt(currentOrNull());
+ } else if (qName.equals("NatProtocol")) {
+ natProtocol = NatProtocol.valueOf(currentOrNull());
+ } else if (qName.equals("PortForwardingRule")) {
+ natRules.add(new PortForwardingRule(externalIP, externalPort, internalIP, internalPort, natProtocol));
+ this.externalIP = null;
+ this.externalPort = -1;
+ this.internalIP = null;
+ this.internalPort = -1;
+ this.natProtocol = null;
+ } else if (qName.equals("VmRule")) {
+ natRules.add(new VmRule(externalIP, externalPort, vAppScopedLocalId, vmNicId, internalPort, natProtocol));
+ this.externalIP = null;
+ this.externalPort = -1;
+ this.vAppScopedLocalId = null;
+ this.vmNicId = -1;
+ this.internalPort = -1;
+ this.natProtocol = null;
+ } else if (qName.equals("NatService")) {
+ this.natService = new NatService(serviceEnabled, natType, natPolicy, natRules);
+ this.serviceEnabled = false;
+ this.natType = null;
+ this.natPolicy = null;
+ this.natRules = Lists.newArrayList();
+ } else if (qName.equals("Features")) {
+ this.features = new Features(dhcpService, firewallService, natService);
+ this.dhcpService = null;
+ this.firewallService = null;
+ this.natService = null;
+ } else if (qName.equals("Configuration")) {
+ configuration = new OrgNetworkImpl.ConfigurationImpl(ipScope, parentNetwork, fenceMode, features);
+ this.ipScope = null;
+ this.parentNetwork = null;
+ this.fenceMode = null;
+ this.features = null;
+ } else if (qName.equals("AllowedExternalIpAddress")) {
+ allowedExternalIpAddresses.add(currentOrNull());
+ }
+ currentText = new StringBuilder();
+ }
+
+ public void characters(char ch[], int start, int length) {
+ currentText.append(ch, start, length);
+ }
+
+ protected String currentOrNull() {
+ String returnVal = currentText.toString().trim();
+ return returnVal.equals("") ? null : returnVal;
+ }
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/xml/NetworkHandler.java b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandler.java
similarity index 70%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/xml/NetworkHandler.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandler.java
index cb5c3ae253..74d2f5757f 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/xml/NetworkHandler.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandler.java
@@ -25,13 +25,14 @@ import javax.annotation.Resource;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
-import org.jclouds.vcloud.domain.FirewallRule;
import org.jclouds.vcloud.domain.NamedResource;
-import org.jclouds.vcloud.domain.NatRule;
-import org.jclouds.vcloud.domain.Network;
-import org.jclouds.vcloud.domain.FirewallRule.Policy;
-import org.jclouds.vcloud.domain.FirewallRule.Protocol;
-import org.jclouds.vcloud.domain.internal.NetworkImpl;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
+import org.jclouds.vcloud.domain.network.firewall.FirewallPolicy;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.internal.VCloudExpressNetworkImpl;
+import org.jclouds.vcloud.domain.network.nat.NatProtocol;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
import org.jclouds.vcloud.util.Utils;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -41,7 +42,7 @@ import com.google.common.collect.Sets;
/**
* @author Adrian Cole
*/
-public class NetworkHandler extends ParseSax.HandlerWithResult {
+public class VCloudExpressNetworkHandler extends ParseSax.HandlerWithResult {
@Resource
protected Logger logger = Logger.NULL;
@@ -55,9 +56,9 @@ public class NetworkHandler extends ParseSax.HandlerWithResult {
private Set dnsServers = Sets.newLinkedHashSet();
private String gateway;
private String netmask;
- private Set fenceModes = Sets.newLinkedHashSet();
+ private Set fenceModes = Sets.newLinkedHashSet();
private Boolean dhcp;
- private Set natRules = Sets.newLinkedHashSet();
+ private Set natRules = Sets.newLinkedHashSet();
private Set firewallRules = Sets.newLinkedHashSet();
private String externalIP;
@@ -65,14 +66,13 @@ public class NetworkHandler extends ParseSax.HandlerWithResult {
private String internalIP;
private Integer internalPort;
- private Policy policy;
- private Protocol protocol;
+ private FirewallPolicy policy;
private String sourceIP;
- private String sourcePort;
+ private int sourcePort;
- public Network getResult() {
- return new NetworkImpl(network.getName(), network.getId(), description, dnsServers, gateway, netmask,
- fenceModes, dhcp, natRules, firewallRules);
+ public VCloudExpressNetwork getResult() {
+ return new VCloudExpressNetworkImpl(network.getName(), network.getType(), network.getId(), description,
+ dnsServers, gateway, netmask, fenceModes, dhcp, natRules, firewallRules);
}
@Override
@@ -92,11 +92,15 @@ public class NetworkHandler extends ParseSax.HandlerWithResult {
} else if (qName.equals("Netmask")) {
netmask = currentOrNull();
} else if (qName.equals("FenceMode")) {
- fenceModes.add(currentOrNull());
+ try {
+ fenceModes.add(FenceMode.fromValue(currentOrNull()));
+ } catch (IllegalArgumentException e) {
+ fenceModes.add(FenceMode.BRIDGED);
+ }
} else if (qName.equals("Dhcp")) {
dhcp = new Boolean(currentOrNull());
} else if (qName.equals("NatRule")) {
- natRules.add(new NatRule(externalIP, externalPort, internalIP, internalPort));
+ natRules.add(new PortForwardingRule(externalIP, externalPort, internalIP, internalPort, NatProtocol.TCP_UDP));
externalIP = null;
externalPort = null;
internalIP = null;
@@ -110,19 +114,16 @@ public class NetworkHandler extends ParseSax.HandlerWithResult {
} else if (qName.equals("InternalPort")) {
internalPort = Integer.parseInt(currentOrNull());
} else if (qName.equals("FirewallRule")) {
- firewallRules.add(new FirewallRule(policy, protocol, sourceIP, sourcePort));
+ firewallRules.add(new FirewallRule(true, null, policy, null, sourcePort, sourceIP));
policy = null;
- protocol = null;
sourceIP = null;
- sourcePort = null;
+ sourcePort = -1;
} else if (qName.equals("Policy")) {
- policy = Policy.fromValue(currentOrNull());
- } else if (qName.equals("Policy")) {
- protocol = Protocol.fromValue(currentOrNull());
+ policy = FirewallPolicy.fromValue(currentOrNull());
} else if (qName.equals("SourceIp")) {
sourceIP = currentOrNull();
} else if (qName.equals("SourcePort")) {
- sourcePort = currentOrNull();
+ sourcePort = Integer.parseInt(currentOrNull());
}
currentText = new StringBuilder();
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/CommonVCloudClientLiveTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/CommonVCloudClientLiveTest.java
index 9f8990905a..0ada9efc97 100644
--- a/vcloud/core/src/test/java/org/jclouds/vcloud/CommonVCloudClientLiveTest.java
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/CommonVCloudClientLiveTest.java
@@ -30,11 +30,11 @@ import org.jclouds.rest.RestContext;
import org.jclouds.vcloud.domain.Catalog;
import org.jclouds.vcloud.domain.CatalogItem;
import org.jclouds.vcloud.domain.NamedResource;
-import org.jclouds.vcloud.domain.Network;
import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
@@ -80,7 +80,7 @@ public abstract class CommonVCloudClientLiveTest {
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);
- assertSaxResponseParserClassEquals(method, NetworkHandler.class);
+ assertSaxResponseParserClassEquals(method, OrgNetworkHandler.class);
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
checkFilters(request);
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/VCloudExpressAsyncClientTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/VCloudExpressAsyncClientTest.java
index b49ee08f2c..ef8250f6e8 100644
--- a/vcloud/core/src/test/java/org/jclouds/vcloud/VCloudExpressAsyncClientTest.java
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/VCloudExpressAsyncClientTest.java
@@ -57,13 +57,14 @@ import org.jclouds.vcloud.domain.internal.CatalogItemImpl;
import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
import org.jclouds.vcloud.domain.internal.OrgImpl;
import org.jclouds.vcloud.domain.internal.VDCImpl;
+import org.jclouds.vcloud.domain.network.FenceMode;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
import org.jclouds.vcloud.xml.CatalogHandler;
import org.jclouds.vcloud.xml.CatalogItemHandler;
-import org.jclouds.vcloud.xml.NetworkHandler;
import org.jclouds.vcloud.xml.OrgHandler;
+import org.jclouds.vcloud.xml.OrgNetworkFromVCloudExpressNetworkHandler;
import org.jclouds.vcloud.xml.TaskHandler;
import org.jclouds.vcloud.xml.TasksListHandler;
import org.jclouds.vcloud.xml.VAppHandler;
@@ -116,7 +117,7 @@ public class VCloudExpressAsyncClientTest extends RestClientTest
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.domain.network.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.net.URI;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ParseSax.Factory;
+import org.jclouds.http.functions.config.SaxParserModule;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.IpRange;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
+import org.jclouds.vcloud.xml.VCloudExpressNetworkHandler;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Tests behavior of {@code VCloudExpressOrgNetworkAdapter}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "vcloud.VCloudExpressOrgNetworkAdapterTest")
+public class VCloudExpressOrgNetworkAdapterTest {
+
+ public void testTerremark() {
+ InputStream is = getClass().getResourceAsStream("/express/network-terremark.xml");
+ Injector injector = Guice.createInjector(new SaxParserModule());
+ Factory factory = injector.getInstance(ParseSax.Factory.class);
+ VCloudExpressNetwork in = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
+ OrgNetwork result = new VCloudExpressOrgNetworkAdapter(in);
+ assertEquals(result.getName(), "10.114.34.128/26");
+ assertEquals(result.getId(), URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/network/1708"));
+ assertEquals(result.getType(), "application/vnd.vmware.vcloud.network+xml");
+ assertEquals(result.getOrg(), null);
+ assertEquals(result.getDescription(), null);
+ assertEquals(result.getTasks(), ImmutableList.of());
+ assert result.getConfiguration() != null;
+
+ assertEquals(result.getConfiguration().getIpScope(), new IpScope(true, "10.114.34.129", "255.255.255.192", null,
+ null, null, ImmutableSet. of(), ImmutableSet. of()));
+
+ assertEquals(result.getConfiguration().getParentNetwork(), null);
+ assertEquals(result.getConfiguration().getFenceMode(), FenceMode.ISOLATED);
+ assert result.getConfiguration().getFeatures() != null;
+
+ assertEquals(result.getConfiguration().getFeatures().getDhcpService(), null);
+ assertEquals(result.getConfiguration().getFeatures().getFirewallService(), null);
+ assertEquals(result.getConfiguration().getFeatures().getNatService(), null);
+
+ assertEquals(result.getNetworkPool(), null);
+ assertEquals(result.getAllowedExternalIpAddresses(), ImmutableSet. of());
+
+ }
+
+ public void testBluelock() {
+ InputStream is = getClass().getResourceAsStream("/express/network-bluelock.xml");
+ Injector injector = Guice.createInjector(new SaxParserModule());
+ Factory factory = injector.getInstance(ParseSax.Factory.class);
+ VCloudExpressNetwork in = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
+ OrgNetwork result = new VCloudExpressOrgNetworkAdapter(in);
+ assertEquals(result.getName(), "Pod03_Private");
+ assertEquals(result.getId(), URI.create("https://express3.bluelock.com/api/v0.8/network/1"));
+ assertEquals(result.getType(), null);
+ assertEquals(result.getOrg(), null);
+ assertEquals(result.getDescription(), "Pod 03 Private Network");
+ assertEquals(result.getTasks(), ImmutableList.of());
+ assert result.getConfiguration() != null;
+
+ assertEquals(result.getConfiguration().getIpScope(), new IpScope(true, "172.18.8.1", "255.255.248.0",
+ "66.133.112.131", "24.172.173.113", null, ImmutableSet. of(), ImmutableSet. of()));
+
+ assertEquals(result.getConfiguration().getParentNetwork(), null);
+ assertEquals(result.getConfiguration().getFenceMode(), FenceMode.BRIDGED);
+ assert result.getConfiguration().getFeatures() != null;
+
+ assertEquals(result.getConfiguration().getFeatures().getDhcpService(), null);
+ assertEquals(result.getConfiguration().getFeatures().getFirewallService(), null);
+ assertEquals(result.getConfiguration().getFeatures().getNatService(), null);
+
+ assertEquals(result.getNetworkPool(), null);
+ assertEquals(result.getAllowedExternalIpAddresses(), ImmutableSet. of());
+
+ }
+}
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java
index 3a8b0eac85..e2776a331c 100644
--- a/vcloud/core/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java
@@ -30,7 +30,7 @@ import static org.testng.Assert.assertEquals;
import java.net.URI;
import org.jclouds.http.functions.config.SaxParserModule;
-import org.jclouds.vcloud.domain.FenceMode;
+import org.jclouds.vcloud.domain.network.FenceMode;
import org.testng.annotations.Test;
import com.google.inject.Guice;
@@ -121,13 +121,13 @@ public class InstantiateVAppTemplateOptionsTest {
public void testFenceMode() {
InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions();
options.fenceMode(FenceMode.BRIDGED);
- assertEquals(options.getFenceMode(), "bridged");
+ assertEquals(options.getFenceMode(), FenceMode.BRIDGED);
}
@Test
public void testFenceModeStatic() {
InstantiateVAppTemplateOptions options = fenceMode(FenceMode.BRIDGED);
- assertEquals(options.getFenceMode(), "bridged");
+ assertEquals(options.getFenceMode(), FenceMode.BRIDGED);
}
}
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/NetworkHandlerTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/NetworkHandlerTest.java
deleted file mode 100644
index 51b94a3912..0000000000
--- a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/NetworkHandlerTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- *
- * Copyright (C) 2010 Cloud Conscious, LLC.
- *
- * ====================================================================
- * 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
-
-package org.jclouds.vcloud.xml;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.InputStream;
-import java.net.URI;
-import java.net.UnknownHostException;
-
-import org.jclouds.http.functions.ParseSax;
-import org.jclouds.http.functions.ParseSax.Factory;
-import org.jclouds.http.functions.config.SaxParserModule;
-import org.jclouds.vcloud.domain.FenceMode;
-import org.jclouds.vcloud.domain.FirewallRule;
-import org.jclouds.vcloud.domain.NatRule;
-import org.jclouds.vcloud.domain.Network;
-import org.jclouds.vcloud.domain.internal.NetworkImpl;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-/**
- * Tests behavior of {@code NetworkHandler}
- *
- * @author Adrian Cole
- */
-@Test(groups = "unit", testName = "vcloud.NetworkHandlerTest")
-public class NetworkHandlerTest {
-
- private Injector injector;
-
- private Factory factory;
-
- public void testTerremark() throws UnknownHostException {
- InputStream is = getClass().getResourceAsStream("/network-terremark.xml");
- injector = Guice.createInjector(new SaxParserModule());
- factory = injector.getInstance(ParseSax.Factory.class);
- Network result = factory.create(injector.getInstance(NetworkHandler.class)).parse(is);
- assertEquals(result, new NetworkImpl("10.114.34.128/26", URI
- .create("https://services.vcloudexpress.terremark.com/api/v0.8/network/1708"), null, ImmutableSet
- . of(), "10.114.34.129", "255.255.255.192", ImmutableSet. of(FenceMode.ISOLATED), null,
- ImmutableSet. of(), ImmutableSet. of()));
- }
-
- public void testHosting() throws UnknownHostException {
- InputStream is = getClass().getResourceAsStream("/network-hosting.xml");
- injector = Guice.createInjector(new SaxParserModule());
- factory = injector.getInstance(ParseSax.Factory.class);
- Network result = (Network) factory.create(injector.getInstance(NetworkHandler.class)).parse(is);
- assertEquals(result, new NetworkImpl("188849 trust", URI
- .create("https://vcloud.safesecureweb.com/api/v0.8/network/1183"), "188849 trust", ImmutableSet
- . of("76.12.32.110", "208.112.89.187"), "204.12.53.89", "255.255.255.248", ImmutableSet
- . of(), null, ImmutableSet. of(), ImmutableSet. of()));
- }
-
-}
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/OrgNetworkHandlerTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/OrgNetworkHandlerTest.java
new file mode 100644
index 0000000000..339d538c4e
--- /dev/null
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/OrgNetworkHandlerTest.java
@@ -0,0 +1,107 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.xml;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.net.URI;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ParseSax.Factory;
+import org.jclouds.http.functions.config.SaxParserModule;
+import org.jclouds.vcloud.VCloudMediaType;
+import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
+import org.jclouds.vcloud.domain.network.DhcpService;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.IpRange;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Tests behavior of {@code OrgNetworkHandler}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "vcloud.OrgNetworkHandlerTest")
+public class OrgNetworkHandlerTest {
+ public void testIsolated() {
+ InputStream is = getClass().getResourceAsStream("/orgnetwork-isolated.xml");
+ Injector injector = Guice.createInjector(new SaxParserModule());
+ Factory factory = injector.getInstance(ParseSax.Factory.class);
+ OrgNetwork result = factory.create(injector.getInstance(OrgNetworkHandler.class)).parse(is);
+ assertEquals(result.getName(), "isolation01");
+ assertEquals(result.getId(), URI.create("https://vcenterprise.bluelock.com/api/v1.0/network/990419644"));
+ assertEquals(result.getType(), "application/vnd.vmware.vcloud.network+xml");
+ assertEquals(result.getOrg(), new NamedResourceImpl(null, VCloudMediaType.ORG_XML, URI
+ .create("https://vcenterprise.bluelock.com/api/v1.0/org/9566014")));
+ assertEquals(result.getDescription(), null);
+ assertEquals(result.getTasks(), ImmutableList.of());
+ assert result.getConfiguration() != null;
+
+ assertEquals(result.getConfiguration().getIpScope(), new IpScope(false, "192.168.15.1", "255.255.255.0",
+ "23.172.173.113", null, null,
+ ImmutableSet. of(new IpRange("192.168.15.100", "192.168.15.199")), ImmutableSet. of()));
+ assertEquals(result.getConfiguration().getParentNetwork(), null);
+ assertEquals(result.getConfiguration().getFenceMode(), FenceMode.ISOLATED);
+ assert result.getConfiguration().getFeatures() != null;
+
+ assertEquals(result.getConfiguration().getFeatures().getDhcpService(), new DhcpService(false, 3600, 7200,
+ new IpRange("192.168.15.2", "192.168.15.99")));
+ assertEquals(result.getConfiguration().getFeatures().getFirewallService(), null);
+ assertEquals(result.getConfiguration().getFeatures().getNatService(), null);
+
+ assertEquals(result.getNetworkPool(), null);
+ assertEquals(result.getAllowedExternalIpAddresses(), ImmutableSet. of());
+
+ }
+
+ public void testBridged() {
+ InputStream is = getClass().getResourceAsStream("/orgnetwork-bridged.xml");
+ Injector injector = Guice.createInjector(new SaxParserModule());
+ Factory factory = injector.getInstance(ParseSax.Factory.class);
+ OrgNetwork result = factory.create(injector.getInstance(OrgNetworkHandler.class)).parse(is);
+ assertEquals(result.getName(), "internet01");
+ assertEquals(result.getId(), URI.create("https://vcenterprise.bluelock.com/api/v1.0/network/758634723"));
+ assertEquals(result.getType(), "application/vnd.vmware.vcloud.network+xml");
+ assertEquals(result.getOrg(), new NamedResourceImpl(null, VCloudMediaType.ORG_XML, URI
+ .create("https://vcenterprise.bluelock.com/api/v1.0/org/9566014")));
+ assertEquals(result.getDescription(), null);
+ assertEquals(result.getTasks(), ImmutableList.of());
+ assert result.getConfiguration() != null;
+
+ assertEquals(result.getConfiguration().getIpScope(), new IpScope(true, "174.47.101.161", "255.255.255.224",
+ "24.172.173.113", null, null,
+ ImmutableSet. of(new IpRange("174.47.101.164", "174.47.101.190")), ImmutableSet. of()));
+ assertEquals(result.getConfiguration().getParentNetwork(), null);
+ assertEquals(result.getConfiguration().getFenceMode(), FenceMode.BRIDGED);
+ assert result.getConfiguration().getFeatures() == null;
+ assertEquals(result.getNetworkPool(), null);
+ assertEquals(result.getAllowedExternalIpAddresses(), ImmutableSet. of());
+
+ }
+
+}
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandlerTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandlerTest.java
new file mode 100644
index 0000000000..19ee37b9e3
--- /dev/null
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VCloudExpressNetworkHandlerTest.java
@@ -0,0 +1,91 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.jclouds.vcloud.xml;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.net.UnknownHostException;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ParseSax.Factory;
+import org.jclouds.http.functions.config.SaxParserModule;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.internal.VCloudExpressNetworkImpl;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Tests behavior of {@code VCloudExpressNetworkHandler}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "vcloud.VCloudExpressNetworkHandlerTest")
+public class VCloudExpressNetworkHandlerTest {
+
+ private Injector injector;
+
+ private Factory factory;
+
+ public void testTerremark() throws UnknownHostException {
+ InputStream is = getClass().getResourceAsStream("/express/network-terremark.xml");
+ injector = Guice.createInjector(new SaxParserModule());
+ factory = injector.getInstance(ParseSax.Factory.class);
+ VCloudExpressNetwork result = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
+ assertEquals(result, new VCloudExpressNetworkImpl("10.114.34.128/26",
+ "application/vnd.vmware.vcloud.network+xml", URI
+ .create("https://services.vcloudexpress.terremark.com/api/v0.8/network/1708"), null,
+ ImmutableSet. of(), "10.114.34.129", "255.255.255.192", ImmutableSet
+ . of(FenceMode.ISOLATED), null, ImmutableSet. of(), ImmutableSet
+ . of()));
+ }
+
+ public void testHosting() throws UnknownHostException {
+ InputStream is = getClass().getResourceAsStream("/express/network-hosting.xml");
+ injector = Guice.createInjector(new SaxParserModule());
+ factory = injector.getInstance(ParseSax.Factory.class);
+ VCloudExpressNetwork result = (VCloudExpressNetwork) factory.create(
+ injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
+ assertEquals(result, new VCloudExpressNetworkImpl("188849 trust", null, URI
+ .create("https://vcloud.safesecureweb.com/api/v0.8/network/1183"), "188849 trust", ImmutableSet
+ . of("76.12.32.110", "208.112.89.187"), "204.12.53.89", "255.255.255.248", ImmutableSet
+ . of(), null, ImmutableSet. of(), ImmutableSet. of()));
+ }
+
+ public void testBluelock() throws UnknownHostException {
+ InputStream is = getClass().getResourceAsStream("/express/network-bluelock.xml");
+ injector = Guice.createInjector(new SaxParserModule());
+ factory = injector.getInstance(ParseSax.Factory.class);
+ VCloudExpressNetwork result = (VCloudExpressNetwork) factory.create(
+ injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
+ assertEquals(result, new VCloudExpressNetworkImpl("Pod03_Private", null, URI
+ .create("https://express3.bluelock.com/api/v0.8/network/1"), "Pod 03 Private Network", ImmutableSet
+ . of("24.172.173.113", "66.133.112.131"), "172.18.8.1", "255.255.248.0", ImmutableSet
+ . of(), null, ImmutableSet. of(), ImmutableSet. of()));
+ }
+
+}
diff --git a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VDCHandlerTest.java b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VDCHandlerTest.java
index 4e90f1870f..1646c97631 100644
--- a/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VDCHandlerTest.java
+++ b/vcloud/core/src/test/java/org/jclouds/vcloud/xml/VDCHandlerTest.java
@@ -37,6 +37,7 @@ import org.jclouds.vcloud.domain.VDCStatus;
import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -60,6 +61,7 @@ public class VDCHandlerTest {
assertEquals(result.getOrg(), new NamedResourceImpl(null, VCloudMediaType.ORG_XML, URI
.create("https://vcenterprise.bluelock.com/api/v1.0/org/9566014")));
assertEquals(result.getDescription(), null);
+ assertEquals(result.getTasks(), ImmutableList.of());
assertEquals(result.getAllocationModel(), AllocationModel.ALLOCATION_POOL);
assertEquals(result.getStorageCapacity(), new Capacity("MB", 1024000, 1024000, 0, 0));
assertEquals(result.getCpuCapacity(), new Capacity("MHz", 20000, 20000, 0, 0));
diff --git a/vcloud/core/src/test/resources/express/network-bluelock.xml b/vcloud/core/src/test/resources/express/network-bluelock.xml
new file mode 100644
index 0000000000..834f53b3bd
--- /dev/null
+++ b/vcloud/core/src/test/resources/express/network-bluelock.xml
@@ -0,0 +1,13 @@
+
+
+ Pod 03 Private Network
+
+ 24.172.173.113
+ 66.133.112.131
+ 172.18.8.1
+ 255.255.248.0
+
+
diff --git a/vcloud/core/src/test/resources/network-hosting.xml b/vcloud/core/src/test/resources/express/network-hosting.xml
similarity index 100%
rename from vcloud/core/src/test/resources/network-hosting.xml
rename to vcloud/core/src/test/resources/express/network-hosting.xml
diff --git a/vcloud/core/src/test/resources/network-terremark.xml b/vcloud/core/src/test/resources/express/network-terremark.xml
similarity index 100%
rename from vcloud/core/src/test/resources/network-terremark.xml
rename to vcloud/core/src/test/resources/express/network-terremark.xml
diff --git a/vcloud/core/src/test/resources/orgnetwork-bridged.xml b/vcloud/core/src/test/resources/orgnetwork-bridged.xml
new file mode 100644
index 0000000000..cb2a0d3c23
--- /dev/null
+++ b/vcloud/core/src/test/resources/orgnetwork-bridged.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ true
+ 174.47.101.161
+ 255.255.255.224
+ 24.172.173.113
+
+
+ 174.47.101.164
+ 174.47.101.190
+
+
+
+ bridged
+
+
\ No newline at end of file
diff --git a/vcloud/core/src/test/resources/orgnetwork-isolated.xml b/vcloud/core/src/test/resources/orgnetwork-isolated.xml
new file mode 100644
index 0000000000..ac3a66a2d3
--- /dev/null
+++ b/vcloud/core/src/test/resources/orgnetwork-isolated.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ false
+ 192.168.15.1
+ 255.255.255.0
+ 23.172.173.113
+
+
+ 192.168.15.100
+ 192.168.15.199
+
+
+
+ isolated
+
+
+ false
+ 3600
+ 7200
+
+ 192.168.15.2
+ 192.168.15.99
+
+
+
+
+
diff --git a/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindInstantiateVAppTemplateParamsToXmlPayload.java b/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindInstantiateVAppTemplateParamsToXmlPayload.java
index 4fd62974a0..4e58de9697 100644
--- a/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindInstantiateVAppTemplateParamsToXmlPayload.java
+++ b/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/binders/TerremarkBindInstantiateVAppTemplateParamsToXmlPayload.java
@@ -19,6 +19,7 @@
package org.jclouds.vcloud.terremark.binders;
+import static org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_FENCEMODE;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
@@ -49,35 +50,28 @@ import com.jamesmurty.utils.XMLBuilder;
*/
@Singleton
public class TerremarkBindInstantiateVAppTemplateParamsToXmlPayload extends
- BindInstantiateVAppTemplateParamsToXmlPayload {
+ BindInstantiateVAppTemplateParamsToXmlPayload {
@Inject
- public TerremarkBindInstantiateVAppTemplateParamsToXmlPayload(
- BindToStringPayload stringBinder,
- @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
- @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema,
- @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
- @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode) {
- super(stringBinder, ns, schema, network, fenceMode);
+ public TerremarkBindInstantiateVAppTemplateParamsToXmlPayload(BindToStringPayload stringBinder,
+ @Named(PROPERTY_API_VERSION) String apiVersion, @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
+ @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema, @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
+ @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode) {
+ super(stringBinder, apiVersion, ns, schema, network, fenceMode);
}
@Override
- protected String generateXml(String name, String template,
- Map properties,
- SortedMap virtualHardwareQuantity,
- String networkName, @Nullable String fenceMode, URI network)
- throws ParserConfigurationException, FactoryConfigurationError,
- TransformerException {
- return super.generateXml(name, template, properties,
- virtualHardwareQuantity, networkName, fenceMode, network);
+ protected String generateXml(String name, String template, Map properties,
+ SortedMap virtualHardwareQuantity, String networkName, @Nullable String fenceMode,
+ URI network) throws ParserConfigurationException, FactoryConfigurationError, TransformerException {
+ return super.generateXml(name, template, properties, virtualHardwareQuantity, networkName, fenceMode, network);
}
@Override
- protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder,
- Map properties) {
+ protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder, Map properties) {
if (properties.size() == 0) { // terremark requires the product section.
- instantiationParamsBuilder.e("ProductSection").a("xmlns:q1", ns).a(
- "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1");
+ instantiationParamsBuilder.e("ProductSection").a("xmlns:q1", ns).a("xmlns:ovf",
+ "http://schemas.dmtf.org/ovf/envelope/1");
} else {
super.addPropertiesifPresent(instantiationParamsBuilder, properties);
}