Issue 508: promoted OVF and CIM to jclouds-compute so that they can be reused across vcloud, trmk, and savvis

This commit is contained in:
Adrian Cole 2011-03-20 22:15:08 -07:00
parent f952b4df8c
commit fff61b8b4d
160 changed files with 4177 additions and 2470 deletions

View File

@ -60,6 +60,7 @@ import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.Provides;
/** /**
* Provides asynchronous access to EMC Atmos Online Storage resources via their REST API. * Provides asynchronous access to EMC Atmos Online Storage resources via their REST API.
@ -76,6 +77,7 @@ public interface AtmosAsyncClient {
/** /**
* Creates a default implementation of AtmosObject * Creates a default implementation of AtmosObject
*/ */
@Provides
AtmosObject newObject(); AtmosObject newObject();
/** /**

View File

@ -31,6 +31,8 @@ import org.jclouds.atmos.options.ListOptions;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import org.jclouds.http.options.GetOptions; import org.jclouds.http.options.GetOptions;
import com.google.inject.Provides;
/** /**
* Provides access to EMC Atmos Online Storage resources via their REST API. * Provides access to EMC Atmos Online Storage resources via their REST API.
* <p/> * <p/>
@ -44,6 +46,7 @@ public interface AtmosClient {
/** /**
* Creates a default implementation of AtmosObject * Creates a default implementation of AtmosObject
*/ */
@Provides
AtmosObject newObject(); AtmosObject newObject();
BoundedSet<? extends DirectoryEntry> listDirectories(ListOptions... options); BoundedSet<? extends DirectoryEntry> listDirectories(ListOptions... options);

View File

@ -88,6 +88,7 @@ import org.jclouds.rest.annotations.XMLResponseParser;
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.Provides;
/** /**
* Provides asynchronous access to S3 via their REST API. * Provides asynchronous access to S3 via their REST API.
@ -110,6 +111,7 @@ public interface S3AsyncClient {
/** /**
* Creates a default implementation of S3Object * Creates a default implementation of S3Object
*/ */
@Provides
public S3Object newS3Object(); public S3Object newS3Object();
/** /**

View File

@ -39,6 +39,8 @@ import org.jclouds.s3.options.PutObjectOptions;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import org.jclouds.http.options.GetOptions; import org.jclouds.http.options.GetOptions;
import com.google.inject.Provides;
import java.util.concurrent.Future; import java.util.concurrent.Future;
/** /**
@ -58,6 +60,7 @@ public interface S3Client {
/** /**
* Creates a default implementation of S3Object * Creates a default implementation of S3Object
*/ */
@Provides
public S3Object newS3Object(); public S3Object newS3Object();
/** /**

View File

@ -64,6 +64,7 @@ import org.jclouds.rest.annotations.SkipEncoding;
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.Provides;
/** /**
* Common features between OpenStack Swift and CloudFiles * Common features between OpenStack Swift and CloudFiles
@ -76,7 +77,7 @@ import com.google.common.util.concurrent.ListenableFuture;
@RequestFilters(AuthenticateRequest.class) @RequestFilters(AuthenticateRequest.class)
@Endpoint(Storage.class) @Endpoint(Storage.class)
public interface CommonSwiftAsyncClient { public interface CommonSwiftAsyncClient {
@Provides
SwiftObject newSwiftObject(); SwiftObject newSwiftObject();
/** /**

View File

@ -34,6 +34,8 @@ import org.jclouds.openstack.swift.domain.ObjectInfo;
import org.jclouds.openstack.swift.domain.SwiftObject; import org.jclouds.openstack.swift.domain.SwiftObject;
import org.jclouds.openstack.swift.options.ListContainerOptions; import org.jclouds.openstack.swift.options.ListContainerOptions;
import com.google.inject.Provides;
/** /**
* Common features between OpenStack Swift and CloudFiles * Common features between OpenStack Swift and CloudFiles
* *
@ -42,7 +44,7 @@ import org.jclouds.openstack.swift.options.ListContainerOptions;
*/ */
@Timeout(duration = 120, timeUnit = TimeUnit.SECONDS) @Timeout(duration = 120, timeUnit = TimeUnit.SECONDS)
public interface CommonSwiftClient { public interface CommonSwiftClient {
@Provides
SwiftObject newSwiftObject(); SwiftObject newSwiftObject();
/** /**

View File

@ -42,6 +42,8 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.ovf.xml.OvfEnvelopeHandler;
import org.jclouds.predicates.validators.DnsNameValidator; import org.jclouds.predicates.validators.DnsNameValidator;
import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Endpoint; import org.jclouds.rest.annotations.Endpoint;
@ -69,7 +71,6 @@ import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
import org.jclouds.vcloud.endpoints.OrgList; import org.jclouds.vcloud.endpoints.OrgList;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie; import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint; import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
@ -82,7 +83,6 @@ import org.jclouds.vcloud.xml.TaskHandler;
import org.jclouds.vcloud.xml.VAppHandler; import org.jclouds.vcloud.xml.VAppHandler;
import org.jclouds.vcloud.xml.VAppTemplateHandler; import org.jclouds.vcloud.xml.VAppTemplateHandler;
import org.jclouds.vcloud.xml.VmHandler; import org.jclouds.vcloud.xml.VmHandler;
import org.jclouds.vcloud.xml.ovf.OvfEnvelopeHandler;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;

View File

@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.GuestCustomizationSection;
import org.jclouds.vcloud.domain.NetworkConnectionSection; import org.jclouds.vcloud.domain.NetworkConnectionSection;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
@ -35,7 +36,6 @@ import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
import org.jclouds.vcloud.options.CaptureVAppOptions; import org.jclouds.vcloud.options.CaptureVAppOptions;
import org.jclouds.vcloud.options.CloneVAppOptions; import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions; import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;

View File

@ -192,7 +192,7 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
String networkName; String networkName;
VAppTemplate vAppTemplate = client.getVAppTemplate(template); VAppTemplate vAppTemplate = client.getVAppTemplate(template);
checkArgument(vAppTemplate != null, "vAppTemplate %s not found!", template); checkArgument(vAppTemplate != null, "vAppTemplate %s not found!", template);
Set<org.jclouds.vcloud.domain.ovf.network.Network> networks = vAppTemplate.getNetworkSection().getNetworks(); Set<org.jclouds.ovf.Network> networks = vAppTemplate.getNetworkSection().getNetworks();
checkArgument(networks.size() > 0, "no networks found in vAppTemplate %s", vAppTemplate); checkArgument(networks.size() > 0, "no networks found in vAppTemplate %s", vAppTemplate);
if (networks.size() > 1) if (networks.size() > 1)
logger.warn("multiple networks found for %s, choosing first from: %s", vAppTemplate.getName(), networks); logger.warn("multiple networks found for %s, choosing first from: %s", vAppTemplate.getName(), networks);

View File

@ -20,32 +20,20 @@
package org.jclouds.vcloud.compute.functions; package org.jclouds.vcloud.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import java.util.List;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder; import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.predicates.ImagePredicates; import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.ovf.VirtualHardwareSection;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.VirtualHardwareSection;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -56,13 +44,13 @@ public class HardwareForVApp implements Function<VApp, Hardware> {
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
private final FindLocationForResource findLocationForResource; private final FindLocationForResource findLocationForResource;
private final ResourceAllocationsToVolumes resourceAllocationsToVolumes; private final VCloudHardwareBuilderFromResourceAllocations rasdToHardwareBuilder;
@Inject @Inject
protected HardwareForVApp(FindLocationForResource findLocationForResource, protected HardwareForVApp(FindLocationForResource findLocationForResource,
ResourceAllocationsToVolumes resourceAllocationsToVolumes) { VCloudHardwareBuilderFromResourceAllocations rasdToHardwareBuilder) {
this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource"); this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource");
this.resourceAllocationsToVolumes = checkNotNull(resourceAllocationsToVolumes, "resourceAllocationsToVolumes"); this.rasdToHardwareBuilder = checkNotNull(rasdToHardwareBuilder, "rasdToHardwareBuilder");
} }
@Override @Override
@ -72,25 +60,12 @@ public class HardwareForVApp implements Function<VApp, Hardware> {
Vm vm = from.getChildren().size() == 0 ? null : Iterables.get(from.getChildren(), 0); Vm vm = from.getChildren().size() == 0 ? null : Iterables.get(from.getChildren(), 0);
if (vm == null) if (vm == null)
return null; return null;
Location location = findLocationForResource.apply(checkNotNull(from, "from").getVDC());
VirtualHardwareSection hardware = vm.getVirtualHardwareSection(); VirtualHardwareSection hardware = vm.getVirtualHardwareSection();
HardwareBuilder builder = rasdToHardwareBuilder.apply(hardware.getResourceAllocations());
int ram = (int) find(hardware.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(); builder.location(findLocationForResource.apply(checkNotNull(from, "from").getVDC()));
builder.ids(from.getHref().toASCIIString()).name(from.getName()).supportsImage(
List<Processor> processors = Lists.newArrayList(transform( ImagePredicates.idEquals(from.getHref().toASCIIString()));
filter(hardware.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)), return builder.build();
new Function<ResourceAllocation, Processor>() {
@Override
public Processor apply(ResourceAllocation arg0) {
return new Processor(arg0.getVirtualQuantity(), 1);
}
}));
List<Volume> volumes = Lists.newArrayList(resourceAllocationsToVolumes.apply(hardware.getResourceAllocations()));
return new HardwareBuilder().ids(from.getHref().toASCIIString()).uri(from.getHref()).name(from.getName())
.location(location).processors(processors).ram(ram).volumes(volumes)
.supportsImage(ImagePredicates.idEquals(from.getHref().toASCIIString())).build();
} }
} }

View File

@ -20,34 +20,22 @@
package org.jclouds.vcloud.compute.functions; package org.jclouds.vcloud.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import java.util.List;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder; import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.predicates.ImagePredicates; import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.ovf.VirtualHardwareSection;
import org.jclouds.vcloud.VCloudClient; import org.jclouds.vcloud.VCloudClient;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.VirtualHardwareSection;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -59,16 +47,16 @@ public class HardwareForVAppTemplate implements Function<VAppTemplate, Hardware>
private final VCloudClient client; private final VCloudClient client;
private final FindLocationForResource findLocationForResource; private final FindLocationForResource findLocationForResource;
private final ResourceAllocationsToVolumes resourceAllocationsToVolumes; private final VCloudHardwareBuilderFromResourceAllocations rasdToHardwareBuilder;
private ReferenceType parent; private ReferenceType parent;
@Inject @Inject
protected HardwareForVAppTemplate(VCloudClient client, FindLocationForResource findLocationForResource, protected HardwareForVAppTemplate(VCloudClient client, FindLocationForResource findLocationForResource,
ResourceAllocationsToVolumes resourceAllocationsToVolumes) { VCloudHardwareBuilderFromResourceAllocations rasdToHardwareBuilder) {
this.client = checkNotNull(client, "client"); this.client = checkNotNull(client, "client");
this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource"); this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource");
this.resourceAllocationsToVolumes = checkNotNull(resourceAllocationsToVolumes, "resourceAllocationsToVolumes"); this.rasdToHardwareBuilder = checkNotNull(rasdToHardwareBuilder, "rasdToHardwareBuilder");
} }
public HardwareForVAppTemplate withParent(ReferenceType parent) { public HardwareForVAppTemplate withParent(ReferenceType parent) {
@ -90,8 +78,6 @@ public class HardwareForVAppTemplate implements Function<VAppTemplate, Hardware>
logger.warn("cannot parse hardware as no ovf envelope found for %s", from); logger.warn("cannot parse hardware as no ovf envelope found for %s", from);
return null; return null;
} }
Location location = findLocationForResource.apply(checkNotNull(parent, "parent"));
if (ovf.getVirtualSystem().getHardware().size() == 0) { if (ovf.getVirtualSystem().getHardware().size() == 0) {
logger.warn("cannot parse hardware for %s as no hardware sections exist in ovf %s", ovf); logger.warn("cannot parse hardware for %s as no hardware sections exist in ovf %s", ovf);
return null; return null;
@ -100,24 +86,11 @@ public class HardwareForVAppTemplate implements Function<VAppTemplate, Hardware>
logger.warn("multiple hardware choices found. using first", ovf); logger.warn("multiple hardware choices found. using first", ovf);
} }
VirtualHardwareSection hardware = Iterables.get(ovf.getVirtualSystem().getHardware(), 0); VirtualHardwareSection hardware = Iterables.get(ovf.getVirtualSystem().getHardware(), 0);
HardwareBuilder builder = rasdToHardwareBuilder.apply(hardware.getResourceAllocations());
int ram = (int) find(hardware.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(); builder.location(findLocationForResource.apply(checkNotNull(parent, "parent")));
builder.ids(from.getHref().toASCIIString()).name(from.getName()).supportsImage(
List<Processor> processors = Lists.newArrayList(transform( ImagePredicates.idEquals(from.getHref().toASCIIString()));
filter(hardware.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)), return builder.build();
new Function<ResourceAllocation, Processor>() {
@Override
public Processor apply(ResourceAllocation arg0) {
return new Processor(arg0.getVirtualQuantity(), 1);
}
}));
List<Volume> volumes = Lists.newArrayList(resourceAllocationsToVolumes.apply(hardware.getResourceAllocations()));
return new HardwareBuilder().ids(from.getHref().toASCIIString()).uri(from.getHref()).name(from.getName())
.location(location).processors(processors).ram(ram).volumes(volumes)
.supportsImage(ImagePredicates.idEquals(from.getHref().toASCIIString())).build();
} }
protected String getName(String name) { protected String getName(String name) {

View File

@ -20,17 +20,17 @@
package org.jclouds.vcloud.compute.functions; package org.jclouds.vcloud.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.vcloud.compute.util.VCloudComputeUtils.toComputeOs;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.compute.domain.CIMOperatingSystem;
import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.ImageBuilder; import org.jclouds.compute.domain.ImageBuilder;
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy; import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.vcloud.VCloudClient; import org.jclouds.vcloud.VCloudClient;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
import com.google.common.base.Function; import com.google.common.base.Function;
@ -65,7 +65,7 @@ public class ImageForVAppTemplate implements Function<VAppTemplate, Image> {
builder.location(findLocationForResource.apply(checkNotNull(parent, "parent"))); builder.location(findLocationForResource.apply(checkNotNull(parent, "parent")));
builder.description(from.getDescription() != null ? from.getDescription() : from.getName()); builder.description(from.getDescription() != null ? from.getDescription() : from.getName());
OvfEnvelope ovf = client.getOvfEnvelopeForVAppTemplate(from.getHref()); OvfEnvelope ovf = client.getOvfEnvelopeForVAppTemplate(from.getHref());
builder.operatingSystem(toComputeOs(ovf)); builder.operatingSystem(CIMOperatingSystem.toComputeOs(ovf));
builder.defaultCredentials(credentialsProvider.execute(from)); builder.defaultCredentials(credentialsProvider.execute(from));
return builder.build(); return builder.build();
} }

View File

@ -1,61 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.compute.functions;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import javax.inject.Singleton;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
import com.google.common.base.Function;
/**
* @author Adrian Cole
*/
@Singleton
public class ResourceAllocationsToVolumes implements Function<Iterable<? extends ResourceAllocation>, Iterable<Volume>> {
@Override
public Iterable<Volume> apply(Iterable<? extends ResourceAllocation> resourceAllocations) {
Iterable<Volume> volumes = transform(filter(resourceAllocations, resourceType(ResourceType.DISK_DRIVE)),
new Function<ResourceAllocation, Volume>() {
@Override
public Volume apply(ResourceAllocation from) {
if (from instanceof VCloudHardDisk) {
VCloudHardDisk vDisk = VCloudHardDisk.class.cast(from);
return new VolumeImpl(from.getAddressOnParent() + "", Volume.Type.LOCAL,
vDisk.getCapacity() / 1024f, null, from.getAddressOnParent() == 0, true);
} else {
return new VolumeImpl(from.getAddressOnParent() + "", Volume.Type.LOCAL,
from.getVirtualQuantity() / 1024 / 1024f, null, from.getAddressOnParent() == 0, true);
}
}
});
return volumes;
}
}

View File

@ -0,0 +1,46 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.compute.functions;
import javax.inject.Singleton;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.functions.HardwareBuilderFromResourceAllocations;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
/**
* @author Adrian Cole
*/
@Singleton
public class VCloudHardwareBuilderFromResourceAllocations extends HardwareBuilderFromResourceAllocations {
@Override
public Volume apply(ResourceAllocationSettingData from) {
if (from instanceof VCloudHardDisk) {
VCloudHardDisk vDisk = VCloudHardDisk.class.cast(from);
return new VolumeImpl(from.getAddressOnParent() + "", Volume.Type.LOCAL, vDisk.getCapacity() / 1024f, null,
"0".equals(from.getAddressOnParent()), true);
} else {
return super.apply(from);
}
}
}

View File

@ -20,25 +20,24 @@
package org.jclouds.vcloud.compute.util; package org.jclouds.vcloud.compute.util;
import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.filter;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import java.util.Set; import java.util.Set;
import org.jclouds.cim.CIMPredicates;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.compute.domain.CIMOperatingSystem;
import org.jclouds.compute.domain.OperatingSystem; import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.os.CIMOperatingSystem;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
import org.jclouds.vcloud.domain.NetworkConnection; import org.jclouds.vcloud.domain.NetworkConnection;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter; import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.ImmutableSet.Builder;
/** /**
* *
@ -55,16 +54,8 @@ public class VCloudComputeUtils {
return vApp.getChildren().size() > 0 ? toComputeOs(Iterables.get(vApp.getChildren(), 0)) : null; return vApp.getChildren().size() > 0 ? toComputeOs(Iterables.get(vApp.getChildren(), 0)) : null;
} }
public static CIMOperatingSystem toComputeOs(OvfEnvelope ovf) {
return toComputeOs(ovf.getVirtualSystem().getOperatingSystem());
}
public static CIMOperatingSystem toComputeOs(Vm vm) { public static CIMOperatingSystem toComputeOs(Vm vm) {
return toComputeOs(vm.getOperatingSystemSection()); return CIMOperatingSystem.toComputeOs(vm.getOperatingSystemSection());
}
public static CIMOperatingSystem toComputeOs(org.jclouds.vcloud.domain.ovf.OperatingSystemSection os) {
return new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(os.getId()), "", null, os.getDescription());
} }
public static Credentials getCredentialsFrom(VApp vApp) { public static Credentials getCredentialsFrom(VApp vApp) {
@ -106,8 +97,8 @@ public class VCloudComputeUtils {
ips.add(connection.getExternalIpAddress()); ips.add(connection.getExternalIpAddress());
} }
} else { } else {
for (ResourceAllocation net : filter(vm.getVirtualHardwareSection().getResourceAllocations(), for (ResourceAllocationSettingData net : filter(vm.getVirtualHardwareSection().getResourceAllocations(),
resourceType(ResourceType.ETHERNET_ADAPTER))) { CIMPredicates.resourceTypeIn(ResourceType.ETHERNET_ADAPTER))) {
if (net instanceof VCloudNetworkAdapter) { if (net instanceof VCloudNetworkAdapter) {
VCloudNetworkAdapter vNet = VCloudNetworkAdapter.class.cast(net); VCloudNetworkAdapter vNet = VCloudNetworkAdapter.class.cast(net);
if (vNet.getIpAddress() != null) if (vNet.getIpAddress() != null)

View File

@ -27,6 +27,7 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.http.RequiresHttp; import org.jclouds.http.RequiresHttp;
import org.jclouds.rest.AsyncClientFactory; import org.jclouds.rest.AsyncClientFactory;
import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.ConfiguresRestClient;
@ -38,16 +39,15 @@ import org.jclouds.vcloud.domain.CatalogItem;
import org.jclouds.vcloud.domain.VAppTemplate; import org.jclouds.vcloud.domain.VAppTemplate;
import org.jclouds.vcloud.domain.VCloudSession; import org.jclouds.vcloud.domain.VCloudSession;
import org.jclouds.vcloud.functions.VAppTemplatesForCatalogItems; import org.jclouds.vcloud.functions.VAppTemplatesForCatalogItems;
import org.jclouds.vcloud.xml.ovf.VCloudResourceAllocationSettingDataHandler;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.inject.Provides; import com.google.inject.Provides;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
/** /**
* Configures the VCloud authentication service connection, including logging * Configures the VCloud authentication service connection, including logging and http transport.
* and http transport.
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
@ -65,6 +65,7 @@ public abstract class BaseVCloudRestClientModule<S extends VCloudClient, A exten
bind(new TypeLiteral<Function<Iterable<? extends CatalogItem>, Iterable<? extends VAppTemplate>>>() { bind(new TypeLiteral<Function<Iterable<? extends CatalogItem>, Iterable<? extends VAppTemplate>>>() {
}).to(new TypeLiteral<VAppTemplatesForCatalogItems>() { }).to(new TypeLiteral<VAppTemplatesForCatalogItems>() {
}); });
bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
super.configure(); super.configure();
} }

View File

@ -21,8 +21,8 @@ package org.jclouds.vcloud.domain;
import java.util.Set; import java.util.Set;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation; import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.vcloud.domain.ovf.System; import org.jclouds.cim.VirtualSystemSettingData;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -33,10 +33,10 @@ import com.google.common.collect.Sets;
public class InstantiateVAppTemplateParams { public class InstantiateVAppTemplateParams {
protected final String info; protected final String info;
protected final System virtualSystem; protected final VirtualSystemSettingData virtualSystem;
protected final Set<ResourceAllocation> resourceAllocations = Sets.newLinkedHashSet(); protected final Set<ResourceAllocationSettingData> resourceAllocations = Sets.newLinkedHashSet();
public InstantiateVAppTemplateParams(String info, System virtualSystem, Iterable<? extends ResourceAllocation> resourceAllocations) { public InstantiateVAppTemplateParams(String info, VirtualSystemSettingData virtualSystem, Iterable<? extends ResourceAllocationSettingData> resourceAllocations) {
this.info = info; this.info = info;
this.virtualSystem = virtualSystem; this.virtualSystem = virtualSystem;
Iterables.addAll(this.resourceAllocations, resourceAllocations); Iterables.addAll(this.resourceAllocations, resourceAllocations);
@ -46,11 +46,11 @@ public class InstantiateVAppTemplateParams {
return info; return info;
} }
public System getSystem() { public VirtualSystemSettingData getSystem() {
return virtualSystem; return virtualSystem;
} }
public Set<? extends ResourceAllocation> getResourceAllocations() { public Set<? extends ResourceAllocationSettingData> getResourceAllocationSettingDatas() {
return resourceAllocations; return resourceAllocations;
} }

View File

@ -1,72 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import org.jclouds.vcloud.domain.ReferenceType;
/**
* @author Adrian Cole
*
*/
public class EditableResourceAllocation extends ResourceAllocation {
private final ReferenceType edit;
public EditableResourceAllocation(int id, String name, String description, ResourceType type, String subType,
String hostResource, String address, Integer addressOnParent, Integer parent, Boolean connected,
long virtualQuantity, String virtualQuantityUnits, ReferenceType edit) {
super(id, name, description, type, subType, hostResource, address, addressOnParent, parent, connected,
virtualQuantity, virtualQuantityUnits);
this.edit = edit;
}
@Override
public String toString() {
return "[id=" + getId() + ", name=" + getName() + ", description=" + getDescription() + ", type=" + getType()
+ ", virtualQuantity=" + getVirtualQuantity() + ", virtualQuantityUnits=" + getVirtualQuantityUnits()
+ ", edit=" + edit + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((edit == null) ? 0 : edit.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;
EditableResourceAllocation other = (EditableResourceAllocation) obj;
if (edit == null) {
if (other.edit != null)
return false;
} else if (!edit.equals(other.edit))
return false;
return true;
}
}

View File

@ -0,0 +1,303 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import java.util.List;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.vcloud.domain.ReferenceType;
/**
* @author Adrian Cole
*
*/
public class EditableResourceAllocationSettingData extends ResourceAllocationSettingData {
public static Builder builder() {
return new Builder();
}
public static class Builder extends ResourceAllocationSettingData.Builder {
private ReferenceType edit;
/**
* @see EditableResourceAllocationSettingData#getEdit
*/
public Builder edit(ReferenceType edit) {
this.edit = edit;
return this;
}
public EditableResourceAllocationSettingData build() {
return new EditableResourceAllocationSettingData(elementName, instanceID, caption, description, address,
addressOnParent, allocationUnits, automaticAllocation, automaticDeallocation, consumerVisibility,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight, connections, hostResources, edit);
}
public Builder fromEditableResourceAllocationSettingData(EditableResourceAllocationSettingData in) {
return edit(in.getEdit()).fromResourceAllocationSettingData(in);
}
/**
* {@inheritDoc}
*/
@Override
public Builder caption(String caption) {
return Builder.class.cast(super.caption(caption));
}
/**
* {@inheritDoc}
*/
@Override
public Builder description(String description) {
return Builder.class.cast(super.description(description));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder address(String address) {
return Builder.class.cast(super.address(address));
}
/**
* {@inheritDoc}
*/
@Override
public Builder addressOnParent(String addressOnParent) {
return Builder.class.cast(super.addressOnParent(addressOnParent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder allocationUnits(String allocationUnits) {
return Builder.class.cast(super.allocationUnits(allocationUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticAllocation(Boolean automaticAllocation) {
return Builder.class.cast(super.automaticAllocation(automaticAllocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticDeallocation(Boolean automaticDeallocation) {
return Builder.class.cast(super.automaticDeallocation(automaticDeallocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connection(String connection) {
return Builder.class.cast(super.connection(connection));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connections(List<String> connections) {
return Builder.class.cast(super.connections(connections));
}
/**
* {@inheritDoc}
*/
@Override
public Builder consumerVisibility(ConsumerVisibility consumerVisibility) {
return Builder.class.cast(super.consumerVisibility(consumerVisibility));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResource(String hostResource) {
return Builder.class.cast(super.hostResource(hostResource));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResources(List<String> hostResources) {
return Builder.class.cast(super.hostResources(hostResources));
}
/**
* {@inheritDoc}
*/
@Override
public Builder limit(Long limit) {
return Builder.class.cast(super.limit(limit));
}
/**
* {@inheritDoc}
*/
@Override
public Builder mappingBehavior(MappingBehavior mappingBehavior) {
return Builder.class.cast(super.mappingBehavior(mappingBehavior));
}
/**
* {@inheritDoc}
*/
@Override
public Builder otherResourceType(String otherResourceType) {
return Builder.class.cast(super.otherResourceType(otherResourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder parent(String parent) {
return Builder.class.cast(super.parent(parent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder poolID(String poolID) {
return Builder.class.cast(super.poolID(poolID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder reservation(Long reservation) {
return Builder.class.cast(super.reservation(reservation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceSubType(String resourceSubType) {
return Builder.class.cast(super.resourceSubType(resourceSubType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceType(org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType) {
return Builder.class.cast(super.resourceType(resourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantity(Long virtualQuantity) {
return Builder.class.cast(super.virtualQuantity(virtualQuantity));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantityUnits(String virtualQuantityUnits) {
return Builder.class.cast(super.virtualQuantityUnits(virtualQuantityUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder weight(Integer weight) {
return Builder.class.cast(super.weight(weight));
}
@Override
public Builder fromResourceAllocationSettingData(ResourceAllocationSettingData in) {
return Builder.class.cast(super.fromResourceAllocationSettingData(in));
}
}
private final ReferenceType edit;
public EditableResourceAllocationSettingData(String elementName, String instanceID, String caption,
String description, String address, String addressOnParent, String allocationUnits,
Boolean automaticAllocation, Boolean automaticDeallocation, ConsumerVisibility consumerVisibility,
Long limit, MappingBehavior mappingBehavior, String otherResourceType, String parent, String poolID,
Long reservation, String resourceSubType,
org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType, Long virtualQuantity,
String virtualQuantityUnits, Integer weight, List<String> connections, List<String> hostResources,
ReferenceType edit) {
super(elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, consumerVisibility, limit, mappingBehavior,
otherResourceType, parent, poolID, reservation, resourceSubType, resourceType, virtualQuantity,
virtualQuantityUnits, weight, connections, hostResources);
this.edit = edit;
}
public ReferenceType getEdit() {
return edit;
}
@Override
public Builder toBuilder() {
return new Builder().fromEditableResourceAllocationSettingData(this);
}
@Override
public String toString() {
return String
.format(
"[elementName=%s, instanceID=%s, caption=%s, description=%s, address=%s, addressOnParent=%s, allocationUnits=%s, automaticAllocation=%s, automaticDeallocation=%s, connections=%s, consumerVisibility=%s, hostResources=%s, limit=%s, mappingBehavior=%s, otherResourceType=%s, parent=%s, poolID=%s, reservation=%s, resourceSubType=%s, resourceType=%s, virtualQuantity=%s, virtualQuantityUnits=%s, weight=%s, edit=%s]",
elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, connections, consumerVisibility, hostResources,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight, edit);
}
}

View File

@ -19,21 +19,283 @@
package org.jclouds.vcloud.domain.ovf; package org.jclouds.vcloud.domain.ovf;
import java.util.List;
import org.jclouds.cim.ResourceAllocationSettingData;
/** /**
* @author Adrian Cole * @author Adrian Cole
* *
*/ */
public class VCloudHardDisk extends ResourceAllocation { public class VCloudHardDisk extends ResourceAllocationSettingData {
public static Builder builder() {
return new Builder();
}
public static class Builder extends ResourceAllocationSettingData.Builder {
private long capacity;
private int busType;
private String busSubType;
/**
* @see VCloudHardDisk#getCapacity
*/
public Builder capacity(long capacity) {
this.capacity = capacity;
return this;
}
/**
* @see VCloudHardDisk#getBusType
*/
public Builder busType(int busType) {
this.busType = busType;
return this;
}
/**
* @see VCloudHardDisk#getBusSubType
*/
public Builder busSubType(String busSubType) {
this.busSubType = busSubType;
return this;
}
public VCloudHardDisk build() {
return new VCloudHardDisk(elementName, instanceID, caption, description, address, addressOnParent,
allocationUnits, automaticAllocation, automaticDeallocation, consumerVisibility, limit,
mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType, resourceType,
virtualQuantity, virtualQuantityUnits, weight, connections, hostResources, capacity, busType,
busSubType);
}
public Builder fromVCloudHardDisk(VCloudHardDisk in) {
return capacity(in.getCapacity()).busType(in.getBusType()).busSubType(in.getBusSubType())
.fromResourceAllocationSettingData(in);
}
/**
* {@inheritDoc}
*/
@Override
public Builder caption(String caption) {
return Builder.class.cast(super.caption(caption));
}
/**
* {@inheritDoc}
*/
@Override
public Builder description(String description) {
return Builder.class.cast(super.description(description));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder address(String address) {
return Builder.class.cast(super.address(address));
}
/**
* {@inheritDoc}
*/
@Override
public Builder addressOnParent(String addressOnParent) {
return Builder.class.cast(super.addressOnParent(addressOnParent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder allocationUnits(String allocationUnits) {
return Builder.class.cast(super.allocationUnits(allocationUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticAllocation(Boolean automaticAllocation) {
return Builder.class.cast(super.automaticAllocation(automaticAllocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticDeallocation(Boolean automaticDeallocation) {
return Builder.class.cast(super.automaticDeallocation(automaticDeallocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connection(String connection) {
return Builder.class.cast(super.connection(connection));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connections(List<String> connections) {
return Builder.class.cast(super.connections(connections));
}
/**
* {@inheritDoc}
*/
@Override
public Builder consumerVisibility(ConsumerVisibility consumerVisibility) {
return Builder.class.cast(super.consumerVisibility(consumerVisibility));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResource(String hostResource) {
return Builder.class.cast(super.hostResource(hostResource));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResources(List<String> hostResources) {
return Builder.class.cast(super.hostResources(hostResources));
}
/**
* {@inheritDoc}
*/
@Override
public Builder limit(Long limit) {
return Builder.class.cast(super.limit(limit));
}
/**
* {@inheritDoc}
*/
@Override
public Builder mappingBehavior(MappingBehavior mappingBehavior) {
return Builder.class.cast(super.mappingBehavior(mappingBehavior));
}
/**
* {@inheritDoc}
*/
@Override
public Builder otherResourceType(String otherResourceType) {
return Builder.class.cast(super.otherResourceType(otherResourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder parent(String parent) {
return Builder.class.cast(super.parent(parent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder poolID(String poolID) {
return Builder.class.cast(super.poolID(poolID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder reservation(Long reservation) {
return Builder.class.cast(super.reservation(reservation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceSubType(String resourceSubType) {
return Builder.class.cast(super.resourceSubType(resourceSubType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceType(org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType) {
return Builder.class.cast(super.resourceType(resourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantity(Long virtualQuantity) {
return Builder.class.cast(super.virtualQuantity(virtualQuantity));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantityUnits(String virtualQuantityUnits) {
return Builder.class.cast(super.virtualQuantityUnits(virtualQuantityUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder weight(Integer weight) {
return Builder.class.cast(super.weight(weight));
}
@Override
public Builder fromResourceAllocationSettingData(ResourceAllocationSettingData in) {
return Builder.class.cast(super.fromResourceAllocationSettingData(in));
}
}
private final long capacity; private final long capacity;
private final int busType; private final int busType;
private final String busSubType; private final String busSubType;
public VCloudHardDisk(int id, String name, String description, ResourceType type, String subType, public VCloudHardDisk(String elementName, String instanceID, String caption, String description, String address,
String hostResource, String address, Integer addressOnParent, Integer parent, Boolean connected, String addressOnParent, String allocationUnits, Boolean automaticAllocation, Boolean automaticDeallocation,
long virtualQuantity, String virtualQuantityUnits, long capacity, int busType, String busSubType) { ConsumerVisibility consumerVisibility, Long limit, MappingBehavior mappingBehavior,
super(id, name, description, type, subType, hostResource, address, addressOnParent, parent, connected, String otherResourceType, String parent, String poolID, Long reservation, String resourceSubType,
virtualQuantity, virtualQuantityUnits); org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType, Long virtualQuantity,
String virtualQuantityUnits, Integer weight, List<String> connections, List<String> hostResources,
long capacity, int busType, String busSubType) {
super(elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, consumerVisibility, limit, mappingBehavior,
otherResourceType, parent, poolID, reservation, resourceSubType, resourceType, virtualQuantity,
virtualQuantityUnits, weight, connections, hostResources);
this.capacity = capacity; this.capacity = capacity;
this.busType = busType; this.busType = busType;
this.busSubType = busSubType; this.busSubType = busSubType;
@ -52,41 +314,18 @@ public class VCloudHardDisk extends ResourceAllocation {
} }
@Override @Override
public int hashCode() { public Builder toBuilder() {
final int prime = 31; return builder().fromVCloudHardDisk(this);
int result = super.hashCode();
result = prime * result + ((busSubType == null) ? 0 : busSubType.hashCode());
result = prime * result + busType;
result = prime * result + (int) (capacity ^ (capacity >>> 32));
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;
VCloudHardDisk other = (VCloudHardDisk) obj;
if (busSubType == null) {
if (other.busSubType != null)
return false;
} else if (!busSubType.equals(other.busSubType))
return false;
if (busType != other.busType)
return false;
if (capacity != other.capacity)
return false;
return true;
} }
@Override @Override
public String toString() { public String toString() {
return "[id=" + getId() + ", name=" + getName() + ", description=" + getDescription() + ", type=" + getType() return String
+ ", virtualQuantity=" + getVirtualQuantity() + ", virtualQuantityUnits=" + getVirtualQuantityUnits() .format(
+ ", capacity=" + capacity + ", busType=" + busType + ", busSubType=" + busSubType + "]"; "[elementName=%s, instanceID=%s, caption=%s, description=%s, address=%s, addressOnParent=%s, allocationUnits=%s, automaticAllocation=%s, automaticDeallocation=%s, connections=%s, consumerVisibility=%s, hostResources=%s, limit=%s, mappingBehavior=%s, otherResourceType=%s, parent=%s, poolID=%s, reservation=%s, resourceSubType=%s, resourceType=%s, virtualQuantity=%s, virtualQuantityUnits=%s, weight=%s, busSubType=%s, busType=%s, capacity=%s]",
elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, connections, consumerVisibility, hostResources,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight, busSubType, busType, capacity);
} }
} }

View File

@ -19,21 +19,283 @@
package org.jclouds.vcloud.domain.ovf; package org.jclouds.vcloud.domain.ovf;
import java.util.List;
import org.jclouds.cim.ResourceAllocationSettingData;
/** /**
* @author Adrian Cole * @author Adrian Cole
* *
*/ */
public class VCloudNetworkAdapter extends ResourceAllocation { public class VCloudNetworkAdapter extends ResourceAllocationSettingData {
public static Builder builder() {
return new Builder();
}
public static class Builder extends ResourceAllocationSettingData.Builder {
private String ipAddress;
private boolean primaryNetworkConnection;
private String ipAddressingMode;
/**
* @see VCloudNetworkAdapter#getCapacity
*/
public Builder ipAddress(String ipAddress) {
this.ipAddress = ipAddress;
return this;
}
/**
* @see VCloudNetworkAdapter#getBusType
*/
public Builder primaryNetworkConnection(boolean primaryNetworkConnection) {
this.primaryNetworkConnection = primaryNetworkConnection;
return this;
}
/**
* @see VCloudNetworkAdapter#getBusSubType
*/
public Builder ipAddressingMode(String ipAddressingMode) {
this.ipAddressingMode = ipAddressingMode;
return this;
}
public VCloudNetworkAdapter build() {
return new VCloudNetworkAdapter(elementName, instanceID, caption, description, address, addressOnParent,
allocationUnits, automaticAllocation, automaticDeallocation, consumerVisibility, limit,
mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType, resourceType,
virtualQuantity, virtualQuantityUnits, weight, connections, hostResources, ipAddress,
primaryNetworkConnection, ipAddressingMode);
}
public Builder fromVCloudNetworkAdapter(VCloudNetworkAdapter in) {
return ipAddress(in.getIpAddress()).primaryNetworkConnection(in.isPrimaryNetworkConnection())
.ipAddressingMode(in.getIpAddressingMode()).fromResourceAllocationSettingData(in);
}
/**
* {@inheritDoc}
*/
@Override
public Builder caption(String caption) {
return Builder.class.cast(super.caption(caption));
}
/**
* {@inheritDoc}
*/
@Override
public Builder description(String description) {
return Builder.class.cast(super.description(description));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder address(String address) {
return Builder.class.cast(super.address(address));
}
/**
* {@inheritDoc}
*/
@Override
public Builder addressOnParent(String addressOnParent) {
return Builder.class.cast(super.addressOnParent(addressOnParent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder allocationUnits(String allocationUnits) {
return Builder.class.cast(super.allocationUnits(allocationUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticAllocation(Boolean automaticAllocation) {
return Builder.class.cast(super.automaticAllocation(automaticAllocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder automaticDeallocation(Boolean automaticDeallocation) {
return Builder.class.cast(super.automaticDeallocation(automaticDeallocation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connection(String connection) {
return Builder.class.cast(super.connection(connection));
}
/**
* {@inheritDoc}
*/
@Override
public Builder connections(List<String> connections) {
return Builder.class.cast(super.connections(connections));
}
/**
* {@inheritDoc}
*/
@Override
public Builder consumerVisibility(ConsumerVisibility consumerVisibility) {
return Builder.class.cast(super.consumerVisibility(consumerVisibility));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResource(String hostResource) {
return Builder.class.cast(super.hostResource(hostResource));
}
/**
* {@inheritDoc}
*/
@Override
public Builder hostResources(List<String> hostResources) {
return Builder.class.cast(super.hostResources(hostResources));
}
/**
* {@inheritDoc}
*/
@Override
public Builder limit(Long limit) {
return Builder.class.cast(super.limit(limit));
}
/**
* {@inheritDoc}
*/
@Override
public Builder mappingBehavior(MappingBehavior mappingBehavior) {
return Builder.class.cast(super.mappingBehavior(mappingBehavior));
}
/**
* {@inheritDoc}
*/
@Override
public Builder otherResourceType(String otherResourceType) {
return Builder.class.cast(super.otherResourceType(otherResourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder parent(String parent) {
return Builder.class.cast(super.parent(parent));
}
/**
* {@inheritDoc}
*/
@Override
public Builder poolID(String poolID) {
return Builder.class.cast(super.poolID(poolID));
}
/**
* {@inheritDoc}
*/
@Override
public Builder reservation(Long reservation) {
return Builder.class.cast(super.reservation(reservation));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceSubType(String resourceSubType) {
return Builder.class.cast(super.resourceSubType(resourceSubType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder resourceType(org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType) {
return Builder.class.cast(super.resourceType(resourceType));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantity(Long virtualQuantity) {
return Builder.class.cast(super.virtualQuantity(virtualQuantity));
}
/**
* {@inheritDoc}
*/
@Override
public Builder virtualQuantityUnits(String virtualQuantityUnits) {
return Builder.class.cast(super.virtualQuantityUnits(virtualQuantityUnits));
}
/**
* {@inheritDoc}
*/
@Override
public Builder weight(Integer weight) {
return Builder.class.cast(super.weight(weight));
}
@Override
public Builder fromResourceAllocationSettingData(ResourceAllocationSettingData in) {
return Builder.class.cast(super.fromResourceAllocationSettingData(in));
}
}
private final String ipAddress; private final String ipAddress;
private final boolean primaryNetworkConnection; private final boolean primaryNetworkConnection;
private final String ipAddressingMode; private final String ipAddressingMode;
public VCloudNetworkAdapter(int id, String name, String description, ResourceType type, String subType, public VCloudNetworkAdapter(String elementName, String instanceID, String caption, String description,
String hostResource, String address, Integer addressOnParent, Integer parent, Boolean connected, String address, String addressOnParent, String allocationUnits, Boolean automaticAllocation,
long virtualQuantity, String virtualQuantityUnits, String ipAddress, boolean primaryNetworkConnection, Boolean automaticDeallocation, ConsumerVisibility consumerVisibility, Long limit,
String ipAddressingMode) { MappingBehavior mappingBehavior, String otherResourceType, String parent, String poolID, Long reservation,
super(id, name, description, type, subType, hostResource, address, addressOnParent, parent, connected, String resourceSubType, org.jclouds.cim.ResourceAllocationSettingData.ResourceType resourceType,
virtualQuantity, virtualQuantityUnits); Long virtualQuantity, String virtualQuantityUnits, Integer weight, List<String> connections,
List<String> hostResources, String ipAddress, boolean primaryNetworkConnection, String ipAddressingMode) {
super(elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, consumerVisibility, limit, mappingBehavior,
otherResourceType, parent, poolID, reservation, resourceSubType, resourceType, virtualQuantity,
virtualQuantityUnits, weight, connections, hostResources);
this.ipAddress = ipAddress; this.ipAddress = ipAddress;
this.primaryNetworkConnection = primaryNetworkConnection; this.primaryNetworkConnection = primaryNetworkConnection;
this.ipAddressingMode = ipAddressingMode; this.ipAddressingMode = ipAddressingMode;
@ -52,44 +314,19 @@ public class VCloudNetworkAdapter extends ResourceAllocation {
} }
@Override @Override
public int hashCode() { public Builder toBuilder() {
final int prime = 31; return builder().fromVCloudNetworkAdapter(this);
int result = super.hashCode();
result = prime * result + ((ipAddress == null) ? 0 : ipAddress.hashCode());
result = prime * result + ((ipAddressingMode == null) ? 0 : ipAddressingMode.hashCode());
result = prime * result + (primaryNetworkConnection ? 1231 : 1237);
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;
VCloudNetworkAdapter other = (VCloudNetworkAdapter) obj;
if (ipAddress == null) {
if (other.ipAddress != null)
return false;
} else if (!ipAddress.equals(other.ipAddress))
return false;
if (ipAddressingMode == null) {
if (other.ipAddressingMode != null)
return false;
} else if (!ipAddressingMode.equals(other.ipAddressingMode))
return false;
if (primaryNetworkConnection != other.primaryNetworkConnection)
return false;
return true;
} }
@Override @Override
public String toString() { public String toString() {
return "[id=" + getId() + ", name=" + getName() + ", description=" + getDescription() + ", type=" + getType() return String
+ ", address=" + getAddress() + ", ipAddress=" + ipAddress + ", ipAddressingMode=" + ipAddressingMode .format(
+ ", primaryNetworkConnection=" + primaryNetworkConnection + "]"; "[elementName=%s, instanceID=%s, caption=%s, description=%s, address=%s, addressOnParent=%s, allocationUnits=%s, automaticAllocation=%s, automaticDeallocation=%s, connections=%s, consumerVisibility=%s, hostResources=%s, limit=%s, mappingBehavior=%s, otherResourceType=%s, parent=%s, poolID=%s, reservation=%s, resourceSubType=%s, resourceType=%s, virtualQuantity=%s, virtualQuantityUnits=%s, weight=%s, ipAddressingMode=%s, primaryNetworkConnection=%s, ipAddress=%s]",
elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, connections, consumerVisibility, hostResources,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight, ipAddressingMode,
primaryNetworkConnection, ipAddress);
} }
} }

View File

@ -21,7 +21,8 @@ package org.jclouds.vcloud.domain.ovf;
import java.net.URI; import java.net.URI;
import org.jclouds.vcloud.domain.ovf.network.Network; import org.jclouds.ovf.Network;
import org.jclouds.ovf.NetworkSection;
/** /**
* VCloud extension * VCloud extension

View File

@ -25,6 +25,7 @@ import java.net.URI;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.jclouds.ovf.OperatingSystemSection;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
/** /**

View File

@ -21,6 +21,9 @@ package org.jclouds.vcloud.domain.ovf;
import java.net.URI; import java.net.URI;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.ovf.VirtualHardwareSection;
/** /**
* A description of the virtual hardware supported by a virtual machine. * A description of the virtual hardware supported by a virtual machine.
@ -29,8 +32,8 @@ public class VCloudVirtualHardwareSection extends VirtualHardwareSection {
protected final String type; protected final String type;
protected final URI href; protected final URI href;
public VCloudVirtualHardwareSection(String type, URI href, String info, System virtualSystem, public VCloudVirtualHardwareSection(String type, URI href, String info, VirtualSystemSettingData virtualSystem,
Iterable<? extends ResourceAllocation> resourceAllocations) { Iterable<? extends ResourceAllocationSettingData> resourceAllocations) {
super(info, virtualSystem, resourceAllocations); super(info, virtualSystem, resourceAllocations);
this.type = type; this.type = type;
this.href = href; this.href = href;
@ -46,11 +49,7 @@ public class VCloudVirtualHardwareSection extends VirtualHardwareSection {
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; return href.hashCode();
int result = super.hashCode();
result = prime * result + ((href == null) ? 0 : href.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
} }
@Override @Override
@ -62,17 +61,7 @@ public class VCloudVirtualHardwareSection extends VirtualHardwareSection {
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
VCloudVirtualHardwareSection other = (VCloudVirtualHardwareSection) obj; VCloudVirtualHardwareSection other = (VCloudVirtualHardwareSection) obj;
if (href == null) { return href.equals(other.href);
if (other.href != null)
return false;
} else if (!href.equals(other.href))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
} }
@Override @Override

View File

@ -19,12 +19,12 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.GuestCustomizationSection;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
@ -80,7 +80,7 @@ public class GuestCustomizationSectionHandler extends ParseSax.HandlerWithResult
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
this.currentText = new StringBuilder(); this.currentText = new StringBuilder();
if (qName.endsWith("GuestCustomizationSection")) { if (qName.endsWith("GuestCustomizationSection")) {
guest = newReferenceType(attributes); guest = newReferenceType(attributes);

View File

@ -19,11 +19,10 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.NetworkConnection; import org.jclouds.vcloud.domain.NetworkConnection;
import org.jclouds.vcloud.domain.network.IpAddressAllocationMode; import org.jclouds.vcloud.domain.network.IpAddressAllocationMode;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
@ -56,7 +55,7 @@ public class NetworkConnectionHandler extends ParseSax.HandlerWithResult<Network
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("NetworkConnection")) { if (qName.endsWith("NetworkConnection")) {
network = attributes.get("network"); network = attributes.get("network");
} }

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
@ -28,6 +27,7 @@ import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.NetworkConnection; import org.jclouds.vcloud.domain.NetworkConnection;
import org.jclouds.vcloud.domain.NetworkConnectionSection; import org.jclouds.vcloud.domain.NetworkConnectionSection;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
@ -62,7 +62,7 @@ public class NetworkConnectionSectionHandler extends ParseSax.HandlerWithResult<
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("NetworkConnection")) { if (qName.endsWith("NetworkConnection")) {
inConnections = true; inConnections = true;
} }

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.List; import java.util.List;
@ -29,6 +28,7 @@ import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
@ -75,7 +75,7 @@ public class VAppHandler extends ParseSax.HandlerWithResult<VApp> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Children")) { if (qName.endsWith("Children")) {
inChildren = true; inChildren = true;
} else if (qName.endsWith("Tasks")) { } else if (qName.endsWith("Tasks")) {

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.List; import java.util.List;
@ -29,6 +28,7 @@ import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
@ -83,7 +83,7 @@ public class VAppTemplateHandler extends ParseSax.HandlerWithResult<VAppTemplate
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Children")) { if (qName.endsWith("Children")) {
inChildren = true; inChildren = true;
} else if (qName.endsWith("Tasks")) { } else if (qName.endsWith("Tasks")) {

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
@ -27,9 +26,11 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.ovf.VirtualHardwareSection;
import org.jclouds.ovf.xml.VirtualHardwareSectionHandler;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection; import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection;
import org.jclouds.vcloud.domain.ovf.VirtualHardwareSection;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
/** /**
@ -53,7 +54,7 @@ public class VCloudVirtualHardwareHandler extends ParseSax.HandlerWithResult<VCl
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("VirtualHardwareSection")) { if (qName.endsWith("VirtualHardwareSection")) {
hardware = newReferenceType(attributes); hardware = newReferenceType(attributes);
} }

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.List; import java.util.List;
@ -28,6 +27,7 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.GuestCustomizationSection;
import org.jclouds.vcloud.domain.NetworkConnectionSection; import org.jclouds.vcloud.domain.NetworkConnectionSection;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
@ -92,7 +92,7 @@ public class VmHandler extends ParseSax.HandlerWithResult<Vm> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("VirtualHardwareSection")) { if (qName.endsWith("VirtualHardwareSection")) {
inHardware = true; inHardware = true;
} else if (qName.endsWith("OperatingSystemSection")) { } else if (qName.endsWith("OperatingSystemSection")) {

View File

@ -24,8 +24,10 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.ovf.NetworkSection;
import org.jclouds.ovf.xml.NetworkSectionHandler;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.ovf.NetworkSection;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection; import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection;
import org.jclouds.vcloud.util.Utils; import org.jclouds.vcloud.util.Utils;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
@ -49,7 +51,7 @@ public class VCloudNetworkSectionHandler extends ParseSax.HandlerWithResult<VClo
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("NetworkSection")) { if (qName.endsWith("NetworkSection")) {
this.net = Utils.newReferenceType(attributes); this.net = Utils.newReferenceType(attributes);
} }

View File

@ -24,6 +24,7 @@ import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.ovf.VCloudOperatingSystemSection; import org.jclouds.vcloud.domain.ovf.VCloudOperatingSystemSection;
import org.jclouds.vcloud.util.Utils; import org.jclouds.vcloud.util.Utils;
@ -56,7 +57,7 @@ public class VCloudOperatingSystemHandler extends ParseSax.HandlerWithResult<VCl
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Link")) { if (qName.endsWith("Link")) {
this.edit = Utils.newReferenceType(attributes); this.edit = Utils.newReferenceType(attributes);
} else if (qName.endsWith("OperatingSystemSection")) { } else if (qName.endsWith("OperatingSystemSection")) {

View File

@ -21,9 +21,11 @@ package org.jclouds.vcloud.xml.ovf;
import java.util.Map; import java.util.Map;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.ovf.EditableResourceAllocation; import org.jclouds.vcloud.domain.ovf.EditableResourceAllocationSettingData;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.VCloudHardDisk; import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter; import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter;
import org.jclouds.vcloud.util.Utils; import org.jclouds.vcloud.util.Utils;
@ -32,7 +34,7 @@ import org.xml.sax.Attributes;
/** /**
* @author Adrian Cole * @author Adrian Cole
*/ */
public class VCloudResourceAllocationHandler extends ResourceAllocationHandler { public class VCloudResourceAllocationSettingDataHandler extends ResourceAllocationSettingDataHandler {
private ReferenceType edit; private ReferenceType edit;
@ -44,37 +46,35 @@ public class VCloudResourceAllocationHandler extends ResourceAllocationHandler {
private boolean primaryNetworkConnection; private boolean primaryNetworkConnection;
private String ipAddressingMode; private String ipAddressingMode;
protected ResourceAllocation newResourceAllocation() { public ResourceAllocationSettingData getResult() {
try {
ResourceAllocationSettingData from = super.getResult();
if (edit != null) { if (edit != null) {
ResourceAllocation allocation = new EditableResourceAllocation(instanceID, elementName, description, return EditableResourceAllocationSettingData.builder().fromResourceAllocationSettingData(from).edit(edit)
resourceType, resourceSubType, hostResource, address, addressOnParent, parent, connected, .build();
virtualQuantity, virtualQuantityUnits, edit);
this.edit = null;
return allocation;
} else if (busSubType != null) { } else if (busSubType != null) {
ResourceAllocation allocation = new VCloudHardDisk(instanceID, elementName, description, resourceType, return VCloudHardDisk.builder().fromResourceAllocationSettingData(from).capacity(capacity).busType(busType)
resourceSubType, hostResource, address, addressOnParent, parent, connected, virtualQuantity, .busSubType(busSubType).build();
virtualQuantityUnits, capacity, busType, busSubType);
capacity = -1;
busType = -1;
busSubType = null;
return allocation;
} else if (ipAddress != null) { } else if (ipAddress != null) {
ResourceAllocation allocation = new VCloudNetworkAdapter(instanceID, elementName, description, resourceType, return VCloudNetworkAdapter.builder().fromResourceAllocationSettingData(from).ipAddress(ipAddress)
resourceSubType, hostResource, address, addressOnParent, parent, connected, virtualQuantity, .primaryNetworkConnection(primaryNetworkConnection).ipAddressingMode(ipAddressingMode).build();
virtualQuantityUnits, ipAddress, primaryNetworkConnection, ipAddressingMode); } else {
return from;
}
} finally {
ipAddress = null; ipAddress = null;
primaryNetworkConnection = false; primaryNetworkConnection = false;
ipAddressingMode = null; ipAddressingMode = null;
return allocation; capacity = -1;
} else { busType = -1;
return super.newResourceAllocation(); busSubType = null;
edit = null;
} }
} }
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Link")) { if (qName.endsWith("Link")) {
this.edit = Utils.newReferenceType(attributes); this.edit = Utils.newReferenceType(attributes);
} else if (qName.endsWith("HostResource") && attributes.size() > 0) { } else if (qName.endsWith("HostResource") && attributes.size() > 0) {

View File

@ -42,6 +42,7 @@ import org.jclouds.http.RequiresHttp;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ReleasePayloadAndReturn; import org.jclouds.http.functions.ReleasePayloadAndReturn;
import org.jclouds.http.functions.ReturnInputStream; import org.jclouds.http.functions.ReturnInputStream;
import org.jclouds.ovf.xml.OvfEnvelopeHandler;
import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.RestClientTest; import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.RestContextFactory; import org.jclouds.rest.RestContextFactory;
@ -81,7 +82,6 @@ import org.jclouds.vcloud.xml.VAppHandler;
import org.jclouds.vcloud.xml.VAppTemplateHandler; import org.jclouds.vcloud.xml.VAppTemplateHandler;
import org.jclouds.vcloud.xml.VDCHandler; import org.jclouds.vcloud.xml.VDCHandler;
import org.jclouds.vcloud.xml.VmHandler; import org.jclouds.vcloud.xml.VmHandler;
import org.jclouds.vcloud.xml.ovf.OvfEnvelopeHandler;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;

View File

@ -102,7 +102,7 @@ public class BindInstantiateVAppTemplateParamsToXmlPayloadTest {
expect(net.getNetworks()) expect(net.getNetworks())
.andReturn( .andReturn(
ImmutableSet ImmutableSet
.<org.jclouds.vcloud.domain.ovf.network.Network> of(new org.jclouds.vcloud.domain.ovf.network.Network( .<org.jclouds.ovf.Network> of(new org.jclouds.ovf.Network(
"vAppNet-vApp Internal", null))); "vAppNet-vApp Internal", null)));
replay(request); replay(request);
@ -219,7 +219,7 @@ public class BindInstantiateVAppTemplateParamsToXmlPayloadTest {
expect(net.getNetworks()) expect(net.getNetworks())
.andReturn( .andReturn(
ImmutableSet ImmutableSet
.<org.jclouds.vcloud.domain.ovf.network.Network> of(new org.jclouds.vcloud.domain.ovf.network.Network( .<org.jclouds.ovf.Network> of(new org.jclouds.ovf.Network(
"vAppNet-vApp Internal", null))); "vAppNet-vApp Internal", null)));
replay(request); replay(request);

View File

@ -30,6 +30,7 @@ import java.util.Set;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.collect.Memoized; import org.jclouds.collect.Memoized;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadata;
@ -46,6 +47,7 @@ import org.jclouds.vcloud.compute.config.CommonVCloudComputeServiceContextModule
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.xml.VAppHandler; import org.jclouds.vcloud.xml.VAppHandler;
import org.jclouds.vcloud.xml.ovf.VCloudResourceAllocationSettingDataHandler;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Function; import com.google.common.base.Function;
@ -78,6 +80,7 @@ public class VAppToNodeMetadataTest {
bind(new TypeLiteral<Function<VApp, Hardware>>() { bind(new TypeLiteral<Function<VApp, Hardware>>() {
}).to(new TypeLiteral<HardwareForVApp>() { }).to(new TypeLiteral<HardwareForVApp>() {
}); });
bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -106,8 +109,8 @@ public class VAppToNodeMetadataTest {
} }
public void testWhenVDCIsLocation() { public void testWhenVDCIsLocation() {
Location location = new LocationBuilder().id("https://1.1.1.1/api/v1.0/vdc/1").description("description") Location location = new LocationBuilder().id("https://1.1.1.1/api/v1.0/vdc/1").description("description").scope(
.scope(LocationScope.PROVIDER).build(); LocationScope.PROVIDER).build();
Injector injector = createInjectorWithLocation(location); Injector injector = createInjectorWithLocation(location);
InputStream is = getClass().getResourceAsStream("/vapp-pool.xml"); InputStream is = getClass().getResourceAsStream("/vapp-pool.xml");
Factory factory = injector.getInstance(ParseSax.Factory.class); Factory factory = injector.getInstance(ParseSax.Factory.class);
@ -120,8 +123,8 @@ public class VAppToNodeMetadataTest {
} }
public void testGracefulWhenNoIPs() { public void testGracefulWhenNoIPs() {
Location location = new LocationBuilder().id("https://1.1.1.1/api/v1.0/vdc/1").description("description") Location location = new LocationBuilder().id("https://1.1.1.1/api/v1.0/vdc/1").description("description").scope(
.scope(LocationScope.PROVIDER).build(); LocationScope.PROVIDER).build();
Injector injector = createInjectorWithLocation(location); Injector injector = createInjectorWithLocation(location);
InputStream is = getClass().getResourceAsStream("/vapp-none.xml"); InputStream is = getClass().getResourceAsStream("/vapp-none.xml");
Factory factory = injector.getInstance(ParseSax.Factory.class); Factory factory = injector.getInstance(ParseSax.Factory.class);

View File

@ -24,6 +24,7 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import java.net.URI; import java.net.URI;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory; import org.jclouds.http.functions.ParseSax.Factory;
import org.jclouds.http.functions.config.SaxParserModule; import org.jclouds.http.functions.config.SaxParserModule;
@ -32,6 +33,7 @@ import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.xml.ovf.VCloudResourceAllocationSettingDataHandler;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@ -49,7 +51,14 @@ public class VAppHandlerTest {
public void testRhelOffStatic() { public void testRhelOffStatic() {
InputStream is = getClass().getResourceAsStream("/vapp-rhel-off-static.xml"); InputStream is = getClass().getResourceAsStream("/vapp-rhel-off-static.xml");
Injector injector = Guice.createInjector(new SaxParserModule()); Injector injector = Guice.createInjector(new SaxParserModule() {
@Override
protected void configure() {
super.configure();
bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
}
});
Factory factory = injector.getInstance(ParseSax.Factory.class); Factory factory = injector.getInstance(ParseSax.Factory.class);
VApp result = factory.create(injector.getInstance(VAppHandler.class)).parse(is); VApp result = factory.create(injector.getInstance(VAppHandler.class)).parse(is);
assertEquals(result.getName(), "vApp_acole_2"); assertEquals(result.getName(), "vApp_acole_2");

View File

@ -28,6 +28,7 @@ import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory; import org.jclouds.http.functions.ParseSax.Factory;
import org.jclouds.http.functions.config.SaxParserModule; import org.jclouds.http.functions.config.SaxParserModule;
import org.jclouds.ovf.Network;
import org.jclouds.vcloud.VCloudMediaType; import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.GuestCustomizationSection;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
@ -37,7 +38,6 @@ import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.domain.internal.TaskImpl; import org.jclouds.vcloud.domain.internal.TaskImpl;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection; import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection;
import org.jclouds.vcloud.domain.ovf.network.Network;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;

View File

@ -24,6 +24,7 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import java.net.URI; import java.net.URI;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory; import org.jclouds.http.functions.ParseSax.Factory;
import org.jclouds.http.functions.config.SaxParserModule; import org.jclouds.http.functions.config.SaxParserModule;
@ -32,6 +33,7 @@ import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.Vm; import org.jclouds.vcloud.domain.Vm;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.xml.ovf.VCloudOperatingSystemSectionHandlerTest; import org.jclouds.vcloud.xml.ovf.VCloudOperatingSystemSectionHandlerTest;
import org.jclouds.vcloud.xml.ovf.VCloudResourceAllocationSettingDataHandler;
import org.jclouds.vcloud.xml.ovf.VCloudVirtualHardwareSectionHandlerTest; import org.jclouds.vcloud.xml.ovf.VCloudVirtualHardwareSectionHandlerTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -48,7 +50,14 @@ import com.google.inject.Injector;
public class VmHandlerTest { public class VmHandlerTest {
public void testVCloud1_0() { public void testVCloud1_0() {
InputStream is = getClass().getResourceAsStream("/vm-rhel-off-static.xml"); InputStream is = getClass().getResourceAsStream("/vm-rhel-off-static.xml");
Injector injector = Guice.createInjector(new SaxParserModule()); Injector injector = Guice.createInjector(new SaxParserModule() {
@Override
protected void configure() {
super.configure();
bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
}
});
Factory factory = injector.getInstance(ParseSax.Factory.class); Factory factory = injector.getInstance(ParseSax.Factory.class);
Vm result = factory.create(injector.getInstance(VmHandler.class)).parse(is); Vm result = factory.create(injector.getInstance(VmHandler.class)).parse(is);
checkVm(result); checkVm(result);

View File

@ -25,20 +25,24 @@ import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.SaxParserModule;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.domain.ovf.EditableResourceAllocation; import org.jclouds.vcloud.domain.ovf.EditableResourceAllocationSettingData;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.System;
import org.jclouds.vcloud.domain.ovf.VCloudHardDisk; import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter; import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter;
import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection; import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection;
import org.jclouds.vcloud.xml.VCloudVirtualHardwareHandler; import org.jclouds.vcloud.xml.VCloudVirtualHardwareHandler;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.inject.Guice;
/** /**
* Tests behavior of {@code VCloudVirtualHardwareSectionHandler} * Tests behavior of {@code VCloudVirtualHardwareSectionHandler}
@ -48,11 +52,24 @@ import com.google.common.collect.Iterables;
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire // NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "VCloudVirtualHardwareSectionHandlerTest") @Test(groups = "unit", testName = "VCloudVirtualHardwareSectionHandlerTest")
public class VCloudVirtualHardwareSectionHandlerTest extends BaseHandlerTest { public class VCloudVirtualHardwareSectionHandlerTest extends BaseHandlerTest {
@BeforeTest
@Override
protected void setUpInjector() {
injector = Guice.createInjector(new SaxParserModule() {
public void configure() {
super.configure();
bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
}
});
factory = injector.getInstance(ParseSax.Factory.class);
assert factory != null;
}
public void testDefault() throws UnknownHostException { public void testDefault() throws UnknownHostException {
InputStream is = getClass().getResourceAsStream("/virtualhardwaresection.xml"); InputStream is = getClass().getResourceAsStream("/virtualhardwaresection.xml");
VCloudVirtualHardwareSection result = factory.create(injector.getInstance(VCloudVirtualHardwareHandler.class)).parse(is); VCloudVirtualHardwareSection result = factory.create(injector.getInstance(VCloudVirtualHardwareHandler.class))
.parse(is);
checkHardware(result); checkHardware(result);
@ -60,73 +77,80 @@ public class VCloudVirtualHardwareSectionHandlerTest extends BaseHandlerTest {
@Test(enabled = false) @Test(enabled = false)
public static void checkHardware(VCloudVirtualHardwareSection result) { public static void checkHardware(VCloudVirtualHardwareSection result) {
System system = new System(0, "Virtual Hardware Family", "RHEL5", ImmutableSet.of("vmx-07")); VirtualSystemSettingData system = VirtualSystemSettingData.builder().instanceID("0").elementName(
"Virtual Hardware Family").virtualSystemIdentifier("RHEL5").virtualSystemType("vmx-07").build();
assertEquals(result.getHref(), URI assertEquals(result.getHref(), URI
.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/")); .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/"));
assertEquals(result.getType(), "application/vnd.vmware.vcloud.virtualHardwareSection+xml"); assertEquals(result.getType(), "application/vnd.vmware.vcloud.virtualHardwareSection+xml");
assertEquals(result.getSystem(), system); assertEquals(result.getSystem().toString(), system.toString());
assertEquals(result.getInfo(), "Virtual hardware requirements"); assertEquals(result.getInfo(), "Virtual hardware requirements");
assertEquals(Iterables.get(result.getResourceAllocations(), 0), new VCloudNetworkAdapter(1, "Network adapter 0", assertEquals(Iterables.get(result.getResourceAllocations(), 0).toString(), VCloudNetworkAdapter.builder()
"PCNet32 ethernet adapter", ResourceType.ETHERNET_ADAPTER, "PCNet32", null, "00:50:56:01:01:f2", 0, .instanceID("1").elementName("Network adapter 0").description("PCNet32 ethernet adapter").resourceType(
null, false, 1, null, "174.47.101.164", true, "POOL")); ResourceType.ETHERNET_ADAPTER).resourceSubType("PCNet32").automaticAllocation(true).connection(
"internet01").address("00:50:56:01:01:f2").addressOnParent("0").ipAddress("174.47.101.164")
.primaryNetworkConnection(true).ipAddressingMode("POOL").build().toString());
assertEquals(Iterables.get(result.getResourceAllocations(), 1), new ResourceAllocation(2, "SCSI Controller 0", assertEquals(Iterables.get(result.getResourceAllocations(), 1).toString(), ResourceAllocationSettingData
"SCSI Controller", ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null, null, 1, null)); .builder().instanceID("2").elementName("SCSI Controller 0").description("SCSI Controller").resourceType(
ResourceType.PARALLEL_SCSI_HBA).resourceSubType("lsilogic").address("0").build().toString());
assertEquals(Iterables.get(result.getResourceAllocations(), 2), new VCloudHardDisk(2000, "Hard disk 1", assertEquals(Iterables.get(result.getResourceAllocations(), 2).toString(), VCloudHardDisk.builder().instanceID(
"Hard disk", ResourceType.DISK_DRIVE, null, null, null, 0, 2, null, 1, null, 30720, 6, "lsilogic")); "2000").elementName("Hard disk 1").description("Hard disk").resourceType(ResourceType.DISK_DRIVE)
.addressOnParent("0").parent("2").capacity(30720).busType(6).busSubType("lsilogic").build().toString());
assertEquals(Iterables.get(result.getResourceAllocations(), 3), new ResourceAllocation(3, "IDE Controller 0", assertEquals(Iterables.get(result.getResourceAllocations(), 3).toString(), ResourceAllocationSettingData
"IDE Controller", ResourceType.IDE_CONTROLLER, null, null, "0", null, null, null, 1, null)); .builder().instanceID("3").elementName("IDE Controller 0").description("IDE Controller").resourceType(
ResourceType.IDE_CONTROLLER).address("0").build().toString());
assertEquals(Iterables.get(result.getResourceAllocations(), 4), new ResourceAllocation(3002, "CD/DVD Drive 1", assertEquals(Iterables.get(result.getResourceAllocations(), 4).toString(), ResourceAllocationSettingData
"CD/DVD Drive", ResourceType.CD_DRIVE, null, null, null, 0, 3, null, 1, null)); .builder().instanceID("3002").elementName("CD/DVD Drive 1").description("CD/DVD Drive").resourceType(
ResourceType.CD_DRIVE).addressOnParent("0").automaticAllocation(false).parent("3").build()
.toString());
assertEquals(Iterables.get(result.getResourceAllocations(), 5), new ResourceAllocation(8000, "Floppy Drive 1", assertEquals(Iterables.get(result.getResourceAllocations(), 5).toString(), ResourceAllocationSettingData
"Floppy Drive", ResourceType.FLOPPY_DRIVE, null, null, null, 0, null, null, 1, null)); .builder().instanceID("8000").elementName("Floppy Drive 1").description("Floppy Drive").resourceType(
ResourceType.FLOPPY_DRIVE).addressOnParent("0").automaticAllocation(false).build().toString());
assertEquals( assertEquals(
Iterables.get(result.getResourceAllocations(), 6), Iterables.get(result.getResourceAllocations(), 6).toString(),
new EditableResourceAllocation( EditableResourceAllocationSettingData
4, .builder()
"1 virtual CPU(s)", .instanceID("4")
"Number of Virtual CPUs", .elementName("1 virtual CPU(s)")
ResourceType.PROCESSOR, .description("Number of Virtual CPUs")
null, .resourceType(ResourceType.PROCESSOR)
null, .virtualQuantity(1l)
null, .allocationUnits("hertz * 10^6")
null, .reservation(0l)
null, .weight(0)
null, .edit(
1,
"hertz * 10^6",
new ReferenceTypeImpl( new ReferenceTypeImpl(
null, null,
"application/vnd.vmware.vcloud.rasdItem+xml", "application/vnd.vmware.vcloud.rasdItem+xml",
URI URI
.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/cpu")))); .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/cpu")))
.build().toString());
assertEquals( assertEquals(
Iterables.get(result.getResourceAllocations(), 7), Iterables.get(result.getResourceAllocations(), 7).toString(),
new EditableResourceAllocation( EditableResourceAllocationSettingData
5, .builder()
"384 MB of memory", .instanceID("5")
"Memory Size", .elementName("384 MB of memory")
ResourceType.MEMORY, .description("Memory Size")
null, .resourceType(ResourceType.MEMORY)
null, .virtualQuantity(384l)
null, .allocationUnits("byte * 2^20")
null, .reservation(0l)
null, .weight(0)
null, .edit(
384,
"byte * 2^20",
new ReferenceTypeImpl( new ReferenceTypeImpl(
null, null,
"application/vnd.vmware.vcloud.rasdItem+xml", "application/vnd.vmware.vcloud.rasdItem+xml",
URI URI
.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/memory")))); .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/virtualHardwareSection/memory")))
.build().toString());
} }
} }

View File

@ -1,106 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
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.ovf.OperatingSystemSection;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.System;
import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter;
import org.jclouds.vcloud.domain.ovf.VirtualHardwareSection;
import org.jclouds.vcloud.domain.ovf.VirtualSystem;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* Tests behavior of {@code VirtualSystemHandler}
*
* @author Adrian Cole
*/
@Test(groups = "unit")
public class VirtualSystemHandlerTest {
public void testVCloud1_0() {
InputStream is = getClass().getResourceAsStream("/virtualsystem.xml");
Injector injector = Guice.createInjector(new SaxParserModule());
Factory factory = injector.getInstance(ParseSax.Factory.class);
VirtualSystem result = factory.create(injector.getInstance(VirtualSystemHandler.class)).parse(is);
checkVirtualSystem(result);
}
static void checkVirtualSystem(VirtualSystem result) {
assertEquals(result.getId(), "Ubuntu1004");
assertEquals(result.getName(), "Ubuntu1004");
assertEquals(result.getInfo(), "A virtual machine:");
checkHardware(Iterables.get(result.getHardware(), 0));
checkOs(result.getOperatingSystem());
}
@Test(enabled = false)
public static void checkHardware(VirtualHardwareSection result) {
assertEquals(result.getSystem(),
new System(0, "Virtual Hardware Family", "Ubuntu1004", ImmutableSet.of("vmx-07")));
assertEquals(result.getInfo(), "Virtual hardware requirements");
assertEquals(Iterables.get(result.getResourceAllocations(), 0), new VCloudNetworkAdapter(1, "Network adapter 0",
"PCNet32 ethernet adapter", ResourceType.ETHERNET_ADAPTER, "PCNet32", null, "00:50:56:8c:00:13", 0,
null, false, 1, null, "192.168.2.100", true, "POOL"));
assertEquals(Iterables.get(result.getResourceAllocations(), 1), new ResourceAllocation(2, "SCSI Controller 0",
"SCSI Controller", ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null, null, 1, null));
assertEquals(Iterables.get(result.getResourceAllocations(), 2), new VCloudHardDisk(2000, "Hard disk 1",
"Hard disk", ResourceType.DISK_DRIVE, null, null, null, 0, 2, null, 1, null, 30720, 6, "lsilogic"));
assertEquals(Iterables.get(result.getResourceAllocations(), 3), new ResourceAllocation(3, "IDE Controller 0",
"IDE Controller", ResourceType.IDE_CONTROLLER, null, null, "0", null, null, null, 1, null));
assertEquals(Iterables.get(result.getResourceAllocations(), 4), new ResourceAllocation(3002, "CD/DVD Drive 1",
"CD/DVD Drive", ResourceType.CD_DRIVE, null, null, null, 0, 3, null, 1, null));
assertEquals(Iterables.get(result.getResourceAllocations(), 5), new ResourceAllocation(8000, "Floppy Drive 1",
"Floppy Drive", ResourceType.FLOPPY_DRIVE, null, null, null, 0, null, null, 1, null));
assertEquals(Iterables.get(result.getResourceAllocations(), 6), new ResourceAllocation(4, "1 virtual CPU(s)",
"Number of Virtual CPUs", ResourceType.PROCESSOR, null, null, null, null, null, null, 1, "hertz * 10^6"));
assertEquals(Iterables.get(result.getResourceAllocations(), 7), new ResourceAllocation(5, "512 MB of memory",
"Memory Size", ResourceType.MEMORY, null, null, null, null, null, null, 512, "byte * 2^20"));
}
@Test(enabled = false)
public static void checkOs(OperatingSystemSection result) {
assertEquals(result.getDescription(), "Ubuntu Linux (64-bit)");
assertEquals(result.getId(), new Integer(94));
assertEquals(result.getInfo(), "Specifies the operating system installed");
}
}

View File

@ -40,12 +40,12 @@ import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerException;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequest;
import org.jclouds.rest.MapBinder; import org.jclouds.rest.MapBinder;
import org.jclouds.rest.binders.BindToStringPayload; import org.jclouds.rest.binders.BindToStringPayload;
import org.jclouds.rest.internal.GeneratedHttpRequest; import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.vcloud.domain.network.NetworkConfig; import org.jclouds.vcloud.domain.network.NetworkConfig;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.endpoints.Network; import org.jclouds.vcloud.endpoints.Network;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions; import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;

View File

@ -20,30 +20,20 @@
package org.jclouds.vcloud.compute.functions; package org.jclouds.vcloud.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.cim.functions.HardwareBuilderFromResourceAllocations;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder; import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.predicates.ImagePredicates; import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Lists;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -54,36 +44,24 @@ public class HardwareForVCloudExpressVApp implements Function<VCloudExpressVApp,
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
private final FindLocationForResource findLocationForResource; private final FindLocationForResource findLocationForResource;
private final ResourceAllocationsToVolumes resourceAllocationsToVolumes; private final HardwareBuilderFromResourceAllocations rasdToHardwareBuilder;
@Inject @Inject
protected HardwareForVCloudExpressVApp(FindLocationForResource findLocationForResource, protected HardwareForVCloudExpressVApp(FindLocationForResource findLocationForResource,
ResourceAllocationsToVolumes resourceAllocationsToVolumes) { HardwareBuilderFromResourceAllocations rasdToHardwareBuilder) {
this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource"); this.findLocationForResource = checkNotNull(findLocationForResource, "findLocationForResource");
this.resourceAllocationsToVolumes = checkNotNull(resourceAllocationsToVolumes, "resourceAllocationsToVolumes"); this.rasdToHardwareBuilder = checkNotNull(rasdToHardwareBuilder, "rasdToHardwareBuilder");
} }
@Override @Override
public Hardware apply(VCloudExpressVApp from) { public Hardware apply(VCloudExpressVApp from) {
checkNotNull(from, "VApp"); checkNotNull(from, "VApp");
Location location = findLocationForResource.apply(checkNotNull(from, "from").getVDC());
try { try {
int ram = (int) find(from.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(); HardwareBuilder builder = rasdToHardwareBuilder.apply(from.getResourceAllocations());
builder.location(findLocationForResource.apply(checkNotNull(from, "from").getVDC()));
List<Processor> processors = Lists.newArrayList(transform( builder.ids(from.getHref().toASCIIString()).name(from.getName()).supportsImage(
filter(from.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)), ImagePredicates.idEquals(from.getHref().toASCIIString()));
new Function<ResourceAllocation, Processor>() { return builder.build();
@Override
public Processor apply(ResourceAllocation arg0) {
return new Processor(arg0.getVirtualQuantity(), 1);
}
}));
List<Volume> volumes = Lists.newArrayList(resourceAllocationsToVolumes.apply(from.getResourceAllocations()));
return new HardwareBuilder().ids(from.getHref().toASCIIString()).name(from.getName()).location(location)
.processors(processors).ram(ram).volumes(volumes)
.supportsImage(ImagePredicates.idEquals(from.getHref().toASCIIString())).build();
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
logger.debug("incomplete data to form vApp %s", from.getHref()); logger.debug("incomplete data to form vApp %s", from.getHref());
return null; return null;

View File

@ -1,55 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.compute.functions;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import javax.inject.Singleton;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import com.google.common.base.Function;
/**
* @author Adrian Cole
*/
@Singleton
public class ResourceAllocationsToVolumes implements Function<Iterable<? extends ResourceAllocation>, Iterable<Volume>> {
@Override
public Iterable<Volume> apply(Iterable<? extends ResourceAllocation> resourceAllocations) {
Iterable<Volume> volumes = transform(filter(resourceAllocations, resourceType(ResourceType.DISK_DRIVE)),
new Function<ResourceAllocation, Volume>() {
@Override
public Volume apply(ResourceAllocation from) {
return new VolumeImpl(from.getAddressOnParent() + "", Volume.Type.LOCAL,
from.getVirtualQuantity() / 1024 / 1024f, null, from.getAddressOnParent() == 0, true);
}
});
return volumes;
}
}

View File

@ -29,11 +29,11 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.collect.Memoized; import org.jclouds.collect.Memoized;
import org.jclouds.compute.domain.CIMOperatingSystem;
import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.NodeMetadataBuilder; import org.jclouds.compute.domain.NodeMetadataBuilder;
import org.jclouds.compute.domain.NodeState; import org.jclouds.compute.domain.NodeState;
import org.jclouds.compute.domain.os.CIMOperatingSystem;
import org.jclouds.domain.Credentials; import org.jclouds.domain.Credentials;
import org.jclouds.vcloud.compute.VCloudExpressComputeClient; import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;

View File

@ -23,9 +23,9 @@ import java.util.Set;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl; import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.System;
import com.google.common.collect.ListMultimap; import com.google.common.collect.ListMultimap;
import com.google.inject.ImplementedBy; import com.google.inject.ImplementedBy;
@ -62,8 +62,8 @@ public interface VCloudExpressVApp extends ReferenceType {
@Nullable @Nullable
String getOperatingSystemDescription(); String getOperatingSystemDescription();
System getSystem(); VirtualSystemSettingData getSystem();
Set<ResourceAllocation> getResourceAllocations(); Set<ResourceAllocationSettingData> getResourceAllocations();
} }

View File

@ -24,12 +24,12 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.net.URI; import java.net.URI;
import java.util.Set; import java.util.Set;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.vcloud.VCloudExpressMediaType; import org.jclouds.vcloud.VCloudExpressMediaType;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.System;
import com.google.common.collect.ListMultimap; import com.google.common.collect.ListMultimap;
@ -46,8 +46,8 @@ public class VCloudExpressVAppImpl implements VCloudExpressVApp {
private final Long size; private final Long size;
private final ListMultimap<String, String> networkToAddresses; private final ListMultimap<String, String> networkToAddresses;
private final String operatingSystemDescription; private final String operatingSystemDescription;
private final System system; private final VirtualSystemSettingData system;
private final Set<ResourceAllocation> resourceAllocations; private final Set<ResourceAllocationSettingData> resourceAllocations;
private final Integer osType; private final Integer osType;
/** The serialVersionUID */ /** The serialVersionUID */
@ -55,7 +55,7 @@ public class VCloudExpressVAppImpl implements VCloudExpressVApp {
public VCloudExpressVAppImpl(String name, URI href, Status status, Long size, ReferenceType vDC, public VCloudExpressVAppImpl(String name, URI href, Status status, Long size, ReferenceType vDC,
ListMultimap<String, String> networkToAddresses, Integer osType, String operatingSystemDescription, ListMultimap<String, String> networkToAddresses, Integer osType, String operatingSystemDescription,
System system, Set<ResourceAllocation> resourceAllocations) { VirtualSystemSettingData system, Set<ResourceAllocationSettingData> resourceAllocations) {
this.name = checkNotNull(name, "name"); this.name = checkNotNull(name, "name");
this.href = checkNotNull(href, "href"); this.href = checkNotNull(href, "href");
this.status = checkNotNull(status, "status"); this.status = checkNotNull(status, "status");
@ -89,12 +89,12 @@ public class VCloudExpressVAppImpl implements VCloudExpressVApp {
} }
@Override @Override
public System getSystem() { public VirtualSystemSettingData getSystem() {
return system; return system;
} }
@Override @Override
public Set<ResourceAllocation> getResourceAllocations() { public Set<ResourceAllocationSettingData> getResourceAllocations() {
return resourceAllocations; return resourceAllocations;
} }

View File

@ -19,7 +19,8 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
@ -88,21 +89,21 @@ public class VCloudExpressNetworkHandler extends ParseSax.HandlerWithResult<VClo
public void endElement(String uri, String name, String qName) { public void endElement(String uri, String name, String qName) {
if (qName.equals("Description")) { if (qName.equals("Description")) {
description = currentOrNull(); description = currentOrNull(currentText);
} else if (qName.equals("Dns")) { } else if (qName.equals("Dns")) {
dnsServers.add(currentOrNull()); dnsServers.add(currentOrNull(currentText));
} else if (qName.equals("Gateway")) { } else if (qName.equals("Gateway")) {
gateway = currentOrNull(); gateway = currentOrNull(currentText);
} else if (qName.equals("Netmask")) { } else if (qName.equals("Netmask")) {
netmask = currentOrNull(); netmask = currentOrNull(currentText);
} else if (qName.equals("FenceMode")) { } else if (qName.equals("FenceMode")) {
try { try {
fenceModes.add(FenceMode.fromValue(currentOrNull())); fenceModes.add(FenceMode.fromValue(currentOrNull(currentText)));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
fenceModes.add(FenceMode.BRIDGED); fenceModes.add(FenceMode.BRIDGED);
} }
} else if (qName.equals("Dhcp")) { } else if (qName.equals("Dhcp")) {
dhcp = new Boolean(currentOrNull()); dhcp = new Boolean(currentOrNull(currentText));
} else if (qName.equals("NatRule")) { } else if (qName.equals("NatRule")) {
natRules.add(new PortForwardingRule(externalIP, externalPort, internalIP, internalPort, NatProtocol.TCP_UDP)); natRules.add(new PortForwardingRule(externalIP, externalPort, internalIP, internalPort, NatProtocol.TCP_UDP));
externalIP = null; externalIP = null;
@ -110,24 +111,24 @@ public class VCloudExpressNetworkHandler extends ParseSax.HandlerWithResult<VClo
internalIP = null; internalIP = null;
internalPort = null; internalPort = null;
} else if (qName.equals("ExternalIP")) { } else if (qName.equals("ExternalIP")) {
externalIP = currentOrNull(); externalIP = currentOrNull(currentText);
} else if (qName.equals("ExternalPort")) { } else if (qName.equals("ExternalPort")) {
externalPort = Integer.parseInt(currentOrNull()); externalPort = Integer.parseInt(currentOrNull(currentText));
} else if (qName.equals("InternalIP")) { } else if (qName.equals("InternalIP")) {
internalIP = currentOrNull(); internalIP = currentOrNull(currentText);
} else if (qName.equals("InternalPort")) { } else if (qName.equals("InternalPort")) {
internalPort = Integer.parseInt(currentOrNull()); internalPort = Integer.parseInt(currentOrNull(currentText));
} else if (qName.equals("FirewallRule")) { } else if (qName.equals("FirewallRule")) {
firewallRules.add(new FirewallRule(true, null, policy, null, sourcePort, sourceIP)); firewallRules.add(new FirewallRule(true, null, policy, null, sourcePort, sourceIP));
policy = null; policy = null;
sourceIP = null; sourceIP = null;
sourcePort = -1; sourcePort = -1;
} else if (qName.equals("Policy")) { } else if (qName.equals("Policy")) {
policy = FirewallPolicy.fromValue(currentOrNull()); policy = FirewallPolicy.fromValue(currentOrNull(currentText));
} else if (qName.equals("SourceIp")) { } else if (qName.equals("SourceIp")) {
sourceIP = currentOrNull(); sourceIP = currentOrNull(currentText);
} else if (qName.equals("SourcePort")) { } else if (qName.equals("SourcePort")) {
sourcePort = Integer.parseInt(currentOrNull()); sourcePort = Integer.parseInt(currentOrNull(currentText));
} }
currentText = new StringBuilder(); currentText = new StringBuilder();
@ -137,9 +138,4 @@ public class VCloudExpressNetworkHandler extends ParseSax.HandlerWithResult<VClo
currentText.append(ch, start, length); currentText.append(ch, start, length);
} }
protected String currentOrNull() {
String returnVal = currentText.toString().trim();
return returnVal.equals("") ? null : returnVal;
}
} }

View File

@ -20,7 +20,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.Constants.PROPERTY_API_VERSION; import static org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.net.URI; import java.net.URI;
@ -31,17 +30,18 @@ import javax.annotation.Resource;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.cim.xml.VirtualSystemSettingDataHandler;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.VCloudExpressMediaType; import org.jclouds.vcloud.VCloudExpressMediaType;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl; import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.System;
import org.jclouds.vcloud.xml.ovf.ResourceAllocationHandler;
import org.jclouds.vcloud.xml.ovf.SystemHandler;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -54,21 +54,21 @@ import com.google.common.collect.Sets;
*/ */
public class VCloudExpressVAppHandler extends ParseSax.HandlerWithResult<VCloudExpressVApp> { public class VCloudExpressVAppHandler extends ParseSax.HandlerWithResult<VCloudExpressVApp> {
private final String apiVersion; private final String apiVersion;
private final SystemHandler systemHandler; private final VirtualSystemSettingDataHandler systemHandler;
private final ResourceAllocationHandler allocationHandler; private final ResourceAllocationSettingDataHandler allocationHandler;
@Resource @Resource
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
@Inject @Inject
public VCloudExpressVAppHandler(@Named(PROPERTY_API_VERSION) String apiVersion, SystemHandler systemHandler, public VCloudExpressVAppHandler(@Named(PROPERTY_API_VERSION) String apiVersion,
ResourceAllocationHandler allocationHandler) { VirtualSystemSettingDataHandler systemHandler, ResourceAllocationSettingDataHandler allocationHandler) {
this.apiVersion = apiVersion; this.apiVersion = apiVersion;
this.systemHandler = systemHandler; this.systemHandler = systemHandler;
this.allocationHandler = allocationHandler; this.allocationHandler = allocationHandler;
} }
protected System system; protected VirtualSystemSettingData system;
protected Set<ResourceAllocation> allocations = Sets.newLinkedHashSet(); protected Set<ResourceAllocationSettingData> allocations = Sets.newLinkedHashSet();
protected Status status; protected Status status;
protected final ListMultimap<String, String> networkToAddresses = ArrayListMultimap.create(); protected final ListMultimap<String, String> networkToAddresses = ArrayListMultimap.create();
protected StringBuilder currentText = new StringBuilder(); protected StringBuilder currentText = new StringBuilder();
@ -87,7 +87,7 @@ public class VCloudExpressVAppHandler extends ParseSax.HandlerWithResult<VCloudE
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("VApp")) { if (qName.equals("VApp")) {
ReferenceType resource = newReferenceType(attributes); ReferenceType resource = newReferenceType(attributes);
name = resource.getName(); name = resource.getName();

View File

@ -19,7 +19,8 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
@ -58,7 +59,7 @@ public class VCloudExpressVAppTemplateHandler extends ParseSax.HandlerWithResult
public void endElement(String uri, String name, String qName) { public void endElement(String uri, String name, String qName) {
if (qName.equals("Description")) { if (qName.equals("Description")) {
description = currentOrNull(); description = currentOrNull(currentText);
} }
currentText = new StringBuilder(); currentText = new StringBuilder();
} }
@ -66,9 +67,4 @@ public class VCloudExpressVAppTemplateHandler extends ParseSax.HandlerWithResult
public void characters(char ch[], int start, int length) { public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length); currentText.append(ch, start, length);
} }
protected String currentOrNull() {
String returnVal = currentText.toString().trim();
return returnVal.equals("") ? null : returnVal;
}
} }

View File

@ -28,6 +28,9 @@ import java.util.Properties;
import java.util.Set; import java.util.Set;
import org.jclouds.Constants; import org.jclouds.Constants;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.SaxParserModule; import org.jclouds.http.functions.config.SaxParserModule;
@ -35,9 +38,6 @@ import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl; import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.System;
import org.jclouds.vcloud.xml.VCloudExpressVAppHandler; import org.jclouds.vcloud.xml.VCloudExpressVAppHandler;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -81,7 +81,8 @@ public class VCloudExpressVAppHandlerTest extends BaseHandlerTest {
VCloudExpressVApp expects = new VCloudExpressVAppImpl("centos53", URI VCloudExpressVApp expects = new VCloudExpressVAppImpl("centos53", URI
.create("http://10.150.4.49/api/v0.8/vApp/10"), Status.RESOLVED, 123456789l, new ReferenceTypeImpl(null, .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.RESOLVED, 123456789l, new ReferenceTypeImpl(null,
"application/vnd.vmware.vcloud.vdc+xml", URI.create("http://10.150.4.49/api/v0.8/vdc/4")), "application/vnd.vmware.vcloud.vdc+xml", URI.create("http://10.150.4.49/api/v0.8/vdc/4")),
ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.<ResourceAllocation> of()); ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet
.<ResourceAllocationSettingData> of());
assertEquals(result, expects); assertEquals(result, expects);
} }
@ -92,17 +93,31 @@ public class VCloudExpressVAppHandlerTest extends BaseHandlerTest {
ListMultimap<String, String> networkToAddresses = ImmutableListMultimap.<String, String> of("Public Network", ListMultimap<String, String> networkToAddresses = ImmutableListMultimap.<String, String> of("Public Network",
"10.150.4.93"); "10.150.4.93");
System system = new System(0, "Virtual Hardware Family", "centos53", ImmutableSet.of("vmx-07"));
Set<ResourceAllocation> resourceAllocations = ImmutableSet.<ResourceAllocation> of(new ResourceAllocation(1, VirtualSystemSettingData system = VirtualSystemSettingData.builder().instanceID("0").elementName(
"1 virtual CPU(s)", "Number of Virtual CPUs", ResourceType.PROCESSOR, null, null, null, null, null, "Virtual Hardware Family").virtualSystemIdentifier("centos53").virtualSystemType("vmx-07").build();
null, 1, "hertz * 10^6"), new ResourceAllocation(2, "16MB of memory", "Memory Size",
ResourceType.MEMORY, null, null, null, null, null, null, 16, "byte * 2^20"), new ResourceAllocation(3, Set<ResourceAllocationSettingData> resourceAllocations = ImmutableSet.<ResourceAllocationSettingData> of(
"SCSI Controller 0", "SCSI Controller", ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null, ResourceAllocationSettingData.builder().instanceID("1").elementName("1 virtual CPU(s)").description(
null, 1, null), new ResourceAllocation(8, "Network Adapter 1", "Number of Virtual CPUs").resourceType(ResourceType.PROCESSOR).virtualQuantity(1l)
"PCNet32 ethernet adapter on \"Internal\" network", ResourceType.ETHERNET_ADAPTER, "PCNet32", null, .allocationUnits("hertz * 10^6").virtualQuantityUnits("count").build(),
null, 7, null, true, 1, null), new ResourceAllocation(9, "Hard Disk 1", null, ResourceType.DISK_DRIVE,
null, "104857", null, 0, 3, null, 104857, "byte * 2^20")); ResourceAllocationSettingData.builder().instanceID("2").elementName("16MB of memory").description(
"Memory Size").resourceType(ResourceType.MEMORY).virtualQuantity(16l).allocationUnits(
"byte * 2^20").virtualQuantityUnits("byte * 2^20").build(),
ResourceAllocationSettingData.builder().instanceID("3").elementName("SCSI Controller 0").description(
"SCSI Controller").resourceType(ResourceType.PARALLEL_SCSI_HBA).resourceSubType("lsilogic")
.address("0").build(),
ResourceAllocationSettingData.builder().instanceID("8").elementName("Network Adapter 1").description(
"PCNet32 ethernet adapter on \"Internal\" network").resourceType(ResourceType.ETHERNET_ADAPTER)
.resourceSubType("PCNet32").addressOnParent("7").connection("Internal").automaticAllocation(
true).build(),
ResourceAllocationSettingData.builder().instanceID("9").elementName("Hard Disk 1").resourceType(
ResourceType.DISK_DRIVE).hostResource("104857").addressOnParent("0").parent("3")
.virtualQuantity(104857l).build());
VCloudExpressVApp expects = new VCloudExpressVAppImpl("centos53", URI VCloudExpressVApp expects = new VCloudExpressVAppImpl("centos53", URI
.create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, new Long(104857), new ReferenceTypeImpl(null, .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, new Long(104857), new ReferenceTypeImpl(null,
@ -112,10 +127,10 @@ public class VCloudExpressVAppHandlerTest extends BaseHandlerTest {
assertEquals(result.getName(), expects.getName()); assertEquals(result.getName(), expects.getName());
assertEquals(result.getNetworkToAddresses(), expects.getNetworkToAddresses()); assertEquals(result.getNetworkToAddresses(), expects.getNetworkToAddresses());
assertEquals(result.getOperatingSystemDescription(), expects.getOperatingSystemDescription()); assertEquals(result.getOperatingSystemDescription(), expects.getOperatingSystemDescription());
assertEquals(result.getResourceAllocations(), expects.getResourceAllocations()); assertEquals(result.getResourceAllocations().toString(), expects.getResourceAllocations().toString());
assertEquals(result.getSize(), expects.getSize()); assertEquals(result.getSize(), expects.getSize());
assertEquals(result.getStatus(), expects.getStatus()); assertEquals(result.getStatus(), expects.getStatus());
assertEquals(result.getSystem(), expects.getSystem()); assertEquals(result.getSystem().toString(), expects.getSystem().toString());
assertEquals(result.getType(), expects.getType()); assertEquals(result.getType(), expects.getType());
assertEquals(result.getVDC(), expects.getVDC()); assertEquals(result.getVDC(), expects.getVDC());
} }
@ -127,17 +142,30 @@ public class VCloudExpressVAppHandlerTest extends BaseHandlerTest {
ListMultimap<String, String> networkToAddresses = ImmutableListMultimap.<String, String> of("Public Network", ListMultimap<String, String> networkToAddresses = ImmutableListMultimap.<String, String> of("Public Network",
"10.23.119.221"); "10.23.119.221");
System system = new System(0, "Virtual Hardware Family", "m1", ImmutableSet.of("vmx-07")); VirtualSystemSettingData system = VirtualSystemSettingData.builder().instanceID("0").elementName(
"Virtual Hardware Family").virtualSystemIdentifier("m1").virtualSystemType("vmx-07").build();
Set<ResourceAllocation> resourceAllocations = ImmutableSet.<ResourceAllocation> of(new ResourceAllocation(1, Set<ResourceAllocationSettingData> resourceAllocations = ImmutableSet.<ResourceAllocationSettingData> of(
"1 virtual CPU(s)", "Number of Virtual CPUs", ResourceType.PROCESSOR, null, null, null, null, null, ResourceAllocationSettingData.builder().instanceID("1").elementName("1 virtual CPU(s)").description(
null, 1, "hertz * 10^6"), new ResourceAllocation(2, "512MB of memory", "Memory Size", "Number of Virtual CPUs").resourceType(ResourceType.PROCESSOR).virtualQuantity(1l)
ResourceType.MEMORY, null, null, null, null, null, null, 512, "byte * 2^20"), new ResourceAllocation(3, .allocationUnits("hertz * 10^6").virtualQuantityUnits("count").build(),
"SCSI Controller 0", "SCSI Controller", ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null,
null, 1, null), new ResourceAllocation(8, "Network Adapter 1", ResourceAllocationSettingData.builder().instanceID("2").elementName("512MB of memory").description(
"PCNet32 ethernet adapter on \"Internal\" network", ResourceType.ETHERNET_ADAPTER, "PCNet32", null, "Memory Size").resourceType(ResourceType.MEMORY).virtualQuantity(512l).allocationUnits(
null, 7, null, true, 1, null), new ResourceAllocation(9, "Hard Disk 1", null, ResourceType.DISK_DRIVE, "byte * 2^20").virtualQuantityUnits("byte * 2^20").build(),
null, "10485760", null, 0, 3, null, 10485760, "byte * 2^20"));
ResourceAllocationSettingData.builder().instanceID("3").elementName("SCSI Controller 0").description(
"SCSI Controller").resourceType(ResourceType.PARALLEL_SCSI_HBA).resourceSubType("lsilogic")
.address("0").build(),
ResourceAllocationSettingData.builder().instanceID("8").elementName("Network Adapter 1").description(
"PCNet32 ethernet adapter on \"Internal\" network").resourceType(ResourceType.ETHERNET_ADAPTER)
.resourceSubType("PCNet32").addressOnParent("7").connection("Internal").automaticAllocation(
true).build(),
ResourceAllocationSettingData.builder().instanceID("9").elementName("Hard Disk 1").resourceType(
ResourceType.DISK_DRIVE).hostResource("10485760").addressOnParent("0").parent("3")
.virtualQuantity(10485760l).build());
VCloudExpressVApp expects = new VCloudExpressVAppImpl("m1", URI.create("http://localhost:8000/api/v0.8/vApp/80"), VCloudExpressVApp expects = new VCloudExpressVAppImpl("m1", URI.create("http://localhost:8000/api/v0.8/vApp/80"),
Status.ON, new Long(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI Status.ON, new Long(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI
@ -147,10 +175,10 @@ public class VCloudExpressVAppHandlerTest extends BaseHandlerTest {
assertEquals(result.getName(), expects.getName()); assertEquals(result.getName(), expects.getName());
assertEquals(result.getNetworkToAddresses(), expects.getNetworkToAddresses()); assertEquals(result.getNetworkToAddresses(), expects.getNetworkToAddresses());
assertEquals(result.getOperatingSystemDescription(), expects.getOperatingSystemDescription()); assertEquals(result.getOperatingSystemDescription(), expects.getOperatingSystemDescription());
assertEquals(result.getResourceAllocations(), expects.getResourceAllocations()); assertEquals(result.getResourceAllocations().toString(), expects.getResourceAllocations().toString());
assertEquals(result.getSize(), expects.getSize()); assertEquals(result.getSize(), expects.getSize());
assertEquals(result.getStatus(), expects.getStatus()); assertEquals(result.getStatus(), expects.getStatus());
assertEquals(result.getSystem(), expects.getSystem()); assertEquals(result.getSystem().toString(), expects.getSystem().toString());
assertEquals(result.getType(), expects.getType()); assertEquals(result.getType(), expects.getType());
assertEquals(result.getVDC(), expects.getVDC()); assertEquals(result.getVDC(), expects.getVDC());
} }

View File

@ -25,7 +25,6 @@ import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.find;
import static org.jclouds.Constants.PROPERTY_API_VERSION; import static org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE; import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_SCHEMA; import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_SCHEMA;
@ -39,14 +38,15 @@ import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerException;
import org.jclouds.cim.CIMPredicates;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequest;
import org.jclouds.rest.MapBinder; import org.jclouds.rest.MapBinder;
import org.jclouds.rest.binders.BindToStringPayload; import org.jclouds.rest.binders.BindToStringPayload;
import org.jclouds.rest.internal.GeneratedHttpRequest; import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.terremark.domain.VAppConfiguration; import org.jclouds.vcloud.terremark.domain.VAppConfiguration;
import com.google.common.base.Function; import com.google.common.base.Function;
@ -101,8 +101,8 @@ public class BindVAppConfigurationToXmlPayload implements MapBinder, Function<Ob
} }
protected String generateXml(VCloudExpressVApp vApp, VAppConfiguration configuration) throws ParserConfigurationException, protected String generateXml(VCloudExpressVApp vApp, VAppConfiguration configuration)
FactoryConfigurationError, TransformerException { throws ParserConfigurationException, FactoryConfigurationError, TransformerException {
String name = configuration.getName() != null ? configuration.getName() : vApp.getName(); String name = configuration.getName() != null ? configuration.getName() : vApp.getName();
XMLBuilder rootBuilder = buildRoot(vApp, name); XMLBuilder rootBuilder = buildRoot(vApp, name);
@ -121,46 +121,51 @@ public class BindVAppConfigurationToXmlPayload implements MapBinder, Function<Ob
} }
private void addProcessorItem(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) { private void addProcessorItem(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) {
ResourceAllocation cpu = find(vApp.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)); ResourceAllocationSettingData cpu = find(vApp.getResourceAllocations(), CIMPredicates
.resourceTypeIn(ResourceType.PROCESSOR));
long quantity = configuration.getProcessorCount() != null ? configuration.getProcessorCount() : cpu long quantity = configuration.getProcessorCount() != null ? configuration.getProcessorCount() : cpu
.getVirtualQuantity(); .getVirtualQuantity();
addResourceWithQuantity(sectionBuilder, cpu, quantity); addResourceWithQuantity(sectionBuilder, cpu, quantity);
} }
private void addMemoryItem(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) { private void addMemoryItem(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) {
ResourceAllocation memory = find(vApp.getResourceAllocations(), resourceType(ResourceType.MEMORY)); ResourceAllocationSettingData memory = find(vApp.getResourceAllocations(), CIMPredicates
.resourceTypeIn(ResourceType.MEMORY));
long quantity = configuration.getMemory() != null ? configuration.getMemory() : memory.getVirtualQuantity(); long quantity = configuration.getMemory() != null ? configuration.getMemory() : memory.getVirtualQuantity();
addResourceWithQuantity(sectionBuilder, memory, quantity); addResourceWithQuantity(sectionBuilder, memory, quantity);
} }
private void addDiskItems(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) { private void addDiskItems(XMLBuilder sectionBuilder, VCloudExpressVApp vApp, VAppConfiguration configuration) {
for (ResourceAllocation disk : filter(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE))) { for (ResourceAllocationSettingData disk : filter(vApp.getResourceAllocations(), CIMPredicates
.resourceTypeIn(ResourceType.DISK_DRIVE))) {
if (!configuration.getDisksToDelete().contains(disk.getAddressOnParent())) if (!configuration.getDisksToDelete().contains(disk.getAddressOnParent()))
addDiskWithQuantity(sectionBuilder, disk); addDiskWithQuantity(sectionBuilder, disk);
} }
for (Long quantity : configuration.getDisks()) { for (Long quantity : configuration.getDisks()) {
ResourceAllocation disk = new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, null, "1048576", ResourceAllocationSettingData disk = ResourceAllocationSettingData.builder().instanceID("9")
null, -1, null, null, quantity, null); .elementName("n/a").resourceType(ResourceType.DISK_DRIVE).virtualQuantity(quantity).build();
addDiskWithQuantity(sectionBuilder, disk); addDiskWithQuantity(sectionBuilder, disk);
} }
} }
private XMLBuilder addResourceWithQuantity(XMLBuilder sectionBuilder, ResourceAllocation resource, long quantity) { private XMLBuilder addResourceWithQuantity(XMLBuilder sectionBuilder, ResourceAllocationSettingData resource,
long quantity) {
XMLBuilder itemBuilder = sectionBuilder.e("Item"); XMLBuilder itemBuilder = sectionBuilder.e("Item");
addCommonElements(itemBuilder, resource, quantity); addCommonElements(itemBuilder, resource, quantity);
return itemBuilder; return itemBuilder;
} }
private void addCommonElements(XMLBuilder itemBuilder, ResourceAllocation resource, long quantity) { private void addCommonElements(XMLBuilder itemBuilder, ResourceAllocationSettingData resource, long quantity) {
itemBuilder.e("InstanceID").a("xmlns", RESOURCE_ALLOCATION_NS).t(resource.getId() + ""); itemBuilder.e("InstanceID").a("xmlns", RESOURCE_ALLOCATION_NS).t(resource.getInstanceID() + "");
itemBuilder.e("ResourceType").a("xmlns", RESOURCE_ALLOCATION_NS).t(resource.getType().value()); itemBuilder.e("ResourceType").a("xmlns", RESOURCE_ALLOCATION_NS).t(resource.getResourceType().value());
itemBuilder.e("VirtualQuantity").a("xmlns", RESOURCE_ALLOCATION_NS).t(quantity + ""); itemBuilder.e("VirtualQuantity").a("xmlns", RESOURCE_ALLOCATION_NS).t(quantity + "");
} }
private XMLBuilder addDiskWithQuantity(XMLBuilder sectionBuilder, ResourceAllocation disk) { private XMLBuilder addDiskWithQuantity(XMLBuilder sectionBuilder, ResourceAllocationSettingData disk) {
XMLBuilder itemBuilder = sectionBuilder.e("Item"); XMLBuilder itemBuilder = sectionBuilder.e("Item");
itemBuilder.e("AddressOnParent").a("xmlns", RESOURCE_ALLOCATION_NS).t(disk.getAddressOnParent() + ""); itemBuilder.e("AddressOnParent").a("xmlns", RESOURCE_ALLOCATION_NS).t(disk.getAddressOnParent() + "");
itemBuilder.e("HostResource").a("xmlns", RESOURCE_ALLOCATION_NS).t(disk.getHostResource()); for (String hostResource : disk.getHostResources())
itemBuilder.e("HostResource").a("xmlns", RESOURCE_ALLOCATION_NS).t(hostResource);
addCommonElements(itemBuilder, disk, disk.getVirtualQuantity()); addCommonElements(itemBuilder, disk, disk.getVirtualQuantity());
return itemBuilder; return itemBuilder;
} }
@ -199,6 +204,7 @@ public class BindVAppConfigurationToXmlPayload implements MapBinder, Function<Ob
} }
return null; return null;
} }
@Override @Override
public <R extends HttpRequest> R bindToRequest(R request, Object input) { public <R extends HttpRequest> R bindToRequest(R request, Object input) {
throw new IllegalStateException("BindVAppConfigurationToXmlPayload needs parameters"); throw new IllegalStateException("BindVAppConfigurationToXmlPayload needs parameters");

View File

@ -26,18 +26,18 @@ import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_S
import java.net.URI; import java.net.URI;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.Map.Entry;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.rest.binders.BindToStringPayload; import org.jclouds.rest.binders.BindToStringPayload;
import org.jclouds.rest.internal.GeneratedHttpRequest; import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.vcloud.binders.BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload; import org.jclouds.vcloud.binders.BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.endpoints.Network; import org.jclouds.vcloud.endpoints.Network;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions; import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions; import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions;

View File

@ -19,7 +19,7 @@
package org.jclouds.vcloud.terremark.xml; package org.jclouds.vcloud.terremark.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;

View File

@ -19,7 +19,7 @@
package org.jclouds.vcloud.terremark.xml; package org.jclouds.vcloud.terremark.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;

View File

@ -19,7 +19,7 @@
package org.jclouds.vcloud.terremark.xml; package org.jclouds.vcloud.terremark.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;

View File

@ -19,7 +19,7 @@
package org.jclouds.vcloud.terremark.xml; package org.jclouds.vcloud.terremark.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes; import static org.jclouds.util.SaxUtils.cleanseAttributes;
import java.util.Map; import java.util.Map;

View File

@ -24,7 +24,6 @@ import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.size; import static com.google.common.collect.Iterables.size;
import static org.jclouds.vcloud.options.CloneVAppOptions.Builder.deploy; import static org.jclouds.vcloud.options.CloneVAppOptions.Builder.deploy;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import static org.jclouds.vcloud.terremark.domain.VAppConfiguration.Builder.changeNameTo; import static org.jclouds.vcloud.terremark.domain.VAppConfiguration.Builder.changeNameTo;
import static org.jclouds.vcloud.terremark.domain.VAppConfiguration.Builder.deleteDiskWithAddressOnParent; import static org.jclouds.vcloud.terremark.domain.VAppConfiguration.Builder.deleteDiskWithAddressOnParent;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
@ -33,22 +32,25 @@ import static org.testng.Assert.assertNotNull;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import java.util.Properties; import java.util.Properties;
import java.util.Set; import java.util.Set;
import java.util.Map.Entry;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import org.jclouds.Constants; import org.jclouds.Constants;
import org.jclouds.cim.CIMPredicates;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.logging.log4j.config.Log4JLoggingModule; import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.net.IPSocket; import org.jclouds.net.IPSocket;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.predicates.SocketOpen; import org.jclouds.predicates.SocketOpen;
import org.jclouds.rest.RestContextFactory; import org.jclouds.rest.RestContextFactory;
import org.jclouds.ssh.SshClient; import org.jclouds.ssh.SshClient;
import org.jclouds.ssh.SshClient.Factory;
import org.jclouds.ssh.SshException; import org.jclouds.ssh.SshException;
import org.jclouds.ssh.SshClient.Factory;
import org.jclouds.ssh.jsch.config.JschSshClientModule; import org.jclouds.ssh.jsch.config.JschSshClientModule;
import org.jclouds.vcloud.VCloudExpressClientLiveTest; import org.jclouds.vcloud.VCloudExpressClientLiveTest;
import org.jclouds.vcloud.VCloudExpressMediaType; import org.jclouds.vcloud.VCloudExpressMediaType;
@ -59,8 +61,6 @@ import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.VCloudExpressVAppTemplate; import org.jclouds.vcloud.domain.VCloudExpressVAppTemplate;
import org.jclouds.vcloud.domain.VDC; import org.jclouds.vcloud.domain.VDC;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.options.CloneVAppOptions; import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.predicates.TaskSuccess; import org.jclouds.vcloud.predicates.TaskSuccess;
import org.jclouds.vcloud.terremark.domain.CustomizationParameters; import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
@ -347,9 +347,12 @@ public abstract class TerremarkClientLiveTest extends VCloudExpressClientLiveTes
vApp = tmClient.getVApp(vApp.getHref()); vApp = tmClient.getVApp(vApp.getHref());
assertEquals(vApp.getName(), "eduardo"); assertEquals(vApp.getName(), "eduardo");
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)).getVirtualQuantity(), 1); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(), 1536); .getVirtualQuantity().longValue(), 1);
assertEquals(size(filter(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE))), 3); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
.getVirtualQuantity().longValue(), 1536);
assertEquals(size(filter(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))),
3);
assert successTester.apply(tmClient.powerOnVApp(vApp.getHref()).getHref()); assert successTester.apply(tmClient.powerOnVApp(vApp.getHref()).getHref());
@ -358,11 +361,12 @@ public abstract class TerremarkClientLiveTest extends VCloudExpressClientLiveTes
assert successTester.apply(tmClient.powerOffVApp(vApp.getHref()).getHref()); assert successTester.apply(tmClient.powerOffVApp(vApp.getHref()).getHref());
// extract the disks on the vApp sorted by addressOnParent // extract the disks on the vApp sorted by addressOnParent
List<ResourceAllocation> disks = Lists.newArrayList(filter(vApp.getResourceAllocations(), List<ResourceAllocationSettingData> disks = Lists.newArrayList(filter(vApp.getResourceAllocations(),
resourceType(ResourceType.DISK_DRIVE))); CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)));
// delete the second disk // delete the second disk
task = tmClient.configureVApp(vApp, deleteDiskWithAddressOnParent(disks.get(1).getAddressOnParent())); task = tmClient.configureVApp(vApp, deleteDiskWithAddressOnParent(Integer.parseInt(disks.get(1)
.getAddressOnParent())));
assert successTester.apply(task.getHref()); assert successTester.apply(task.getHref());
@ -374,15 +378,16 @@ public abstract class TerremarkClientLiveTest extends VCloudExpressClientLiveTes
int processorCount, long memory, long hardDisk) { int processorCount, long memory, long hardDisk) {
assertEquals(vApp.getName(), serverName); assertEquals(vApp.getName(), serverName);
assertEquals(vApp.getOperatingSystemDescription(), expectedOs); assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)).getVirtualQuantity(), assertEquals((int) find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
processorCount); .getVirtualQuantity().longValue(), processorCount);
assertEquals( assertEquals((int) find(vApp.getResourceAllocations(),
find(vApp.getResourceAllocations(), resourceType(ResourceType.SCSI_CONTROLLER)).getVirtualQuantity(), 1); CIMPredicates.resourceTypeIn(ResourceType.PARALLEL_SCSI_HBA)).getVirtualQuantity().longValue(), 1);
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(), memory); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity(), .getVirtualQuantity().longValue(), memory);
hardDisk); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
assertEquals(vApp.getSize().longValue(), .getVirtualQuantity().longValue(), hardDisk);
find(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity()); assertEquals(vApp.getSize().longValue(), find(vApp.getResourceAllocations(),
CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)).getVirtualQuantity().longValue());
} }
private void doCheckPass(String address) throws IOException { private void doCheckPass(String address) throws IOException {
@ -465,7 +470,8 @@ public abstract class TerremarkClientLiveTest extends VCloudExpressClientLiveTes
Properties overrides = setupProperties(); Properties overrides = setupProperties();
Injector injector = new RestContextFactory().createContextBuilder(provider, Injector injector = new RestContextFactory().createContextBuilder(provider,
ImmutableSet.<Module> of(new Log4JLoggingModule(), new JschSshClientModule()), overrides).buildInjector(); ImmutableSet.<Module> of(new Log4JLoggingModule(), new JschSshClientModule()), overrides)
.buildInjector();
connection = tmClient = injector.getInstance(TerremarkVCloudClient.class); connection = tmClient = injector.getInstance(TerremarkVCloudClient.class);

View File

@ -30,12 +30,12 @@ import java.net.URI;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.rest.internal.GeneratedHttpRequest; import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.util.Strings2; import org.jclouds.util.Strings2;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl; import org.jclouds.vcloud.domain.internal.VCloudExpressVAppImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.terremark.TerremarkVCloudPropertiesBuilder; import org.jclouds.vcloud.terremark.TerremarkVCloudPropertiesBuilder;
import org.jclouds.vcloud.terremark.domain.VAppConfiguration; import org.jclouds.vcloud.terremark.domain.VAppConfiguration;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -61,19 +61,22 @@ public class BindVAppConfigurationToXmlPayloadTest {
@Override @Override
protected void configure() { protected void configure() {
Properties props = new Properties(); Properties props = new Properties();
Names.bindProperties(binder(), Names
checkNotNull(new TerremarkVCloudPropertiesBuilder(props).build(), "properties")); .bindProperties(binder(), checkNotNull(new TerremarkVCloudPropertiesBuilder(props).build(),
"properties"));
} }
}); });
public void testChangeName() throws IOException { public void testChangeName() throws IOException {
VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", URI
URI.create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null, .create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null,
ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(new ResourceAllocation(1, ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(
"n/a", null, ResourceType.PROCESSOR, null, null, null, null, null, null, 2, null), ResourceAllocationSettingData.builder().instanceID("1").elementName("foo").resourceType(
new ResourceAllocation(2, "n/a", null, ResourceType.MEMORY, null, null, null, null, null, null, 1024, ResourceType.PROCESSOR).virtualQuantity(2l).build(), ResourceAllocationSettingData
null), new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, null, "1048576", null, .builder().instanceID("2").elementName("foo").resourceType(ResourceType.MEMORY)
0, null, null, 209152, null))); .virtualQuantity(1024l).build(), ResourceAllocationSettingData.builder().instanceID(
"9").elementName("foo").addressOnParent("0").hostResource("1048576").resourceType(
ResourceType.DISK_DRIVE).virtualQuantity(209152l).build()));
String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml")) String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml"))
.replace("eduardo", "roberto"); .replace("eduardo", "roberto");
@ -94,14 +97,15 @@ public class BindVAppConfigurationToXmlPayloadTest {
} }
public void testRemoveDisk() throws IOException { public void testRemoveDisk() throws IOException {
VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", URI
URI.create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null, .create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null,
ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(new ResourceAllocation(1, ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(
"n/a", null, ResourceType.PROCESSOR, null, null, null, null, null, null, 2, null), ResourceAllocationSettingData.builder().instanceID("1").elementName("foo").resourceType(
new ResourceAllocation(2, "n/a", null, ResourceType.MEMORY, null, null, null, null, null, null, 1024, ResourceType.PROCESSOR).virtualQuantity(2l).build(), ResourceAllocationSettingData
null), new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, null, "1048576", null, .builder().instanceID("2").elementName("foo").resourceType(ResourceType.MEMORY)
0, null, null, 209152, null), new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, .virtualQuantity(1024l).build(), ResourceAllocationSettingData.builder().instanceID(
null, "1048576", null, 1, null, null, 209152, null))); "9").elementName("foo").addressOnParent("0").hostResource("1048576").resourceType(
ResourceType.DISK_DRIVE).virtualQuantity(209152l).build()));
String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml")) String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml"))
.replace("eduardo", "MyAppServer6"); .replace("eduardo", "MyAppServer6");
@ -122,13 +126,15 @@ public class BindVAppConfigurationToXmlPayloadTest {
} }
public void testChangeCPUCountTo4() throws IOException { public void testChangeCPUCountTo4() throws IOException {
VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("eduardo", VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("eduardo", URI
URI.create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null, .create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null,
ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(new ResourceAllocation(1, ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(
"n/a", null, ResourceType.PROCESSOR, null, null, null, null, null, null, 4, null), ResourceAllocationSettingData.builder().instanceID("1").elementName("foo").resourceType(
new ResourceAllocation(2, "n/a", null, ResourceType.MEMORY, null, null, null, null, null, null, 1024, ResourceType.PROCESSOR).virtualQuantity(4l).build(), ResourceAllocationSettingData
null), new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, null, "1048576", null, .builder().instanceID("2").elementName("foo").resourceType(ResourceType.MEMORY)
0, null, null, 209152, null))); .virtualQuantity(1024l).build(), ResourceAllocationSettingData.builder().instanceID(
"9").elementName("foo").addressOnParent("0").hostResource("1048576").resourceType(
ResourceType.DISK_DRIVE).virtualQuantity(209152l).build()));
String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp4.xml")); String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp4.xml"));
VAppConfiguration config = new VAppConfiguration().changeProcessorCountTo(4); VAppConfiguration config = new VAppConfiguration().changeProcessorCountTo(4);
@ -147,13 +153,15 @@ public class BindVAppConfigurationToXmlPayloadTest {
} }
public void testChangeMemoryTo1536() throws IOException { public void testChangeMemoryTo1536() throws IOException {
VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", VCloudExpressVAppImpl vApp = new VCloudExpressVAppImpl("MyAppServer6", URI
URI.create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null, .create("https://services.vcloudexpress/terremark.com/api/v0.8/vapp/4213"), Status.OFF, 4194304l, null,
ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(new ResourceAllocation(1, ImmutableListMultimap.<String, String> of(), null, null, null, ImmutableSet.of(
"n/a", null, ResourceType.PROCESSOR, null, null, null, null, null, null, 2, null), ResourceAllocationSettingData.builder().instanceID("1").elementName("foo").resourceType(
new ResourceAllocation(2, "n/a", null, ResourceType.MEMORY, null, null, null, null, null, null, 1536, ResourceType.PROCESSOR).virtualQuantity(2l).build(), ResourceAllocationSettingData
null), new ResourceAllocation(9, "n/a", null, ResourceType.DISK_DRIVE, null, "1048576", null, .builder().instanceID("2").elementName("foo").resourceType(ResourceType.MEMORY)
0, null, null, 209152, null))); .virtualQuantity(1536l).build(), ResourceAllocationSettingData.builder().instanceID(
"9").elementName("foo").addressOnParent("0").hostResource("1048576").resourceType(
ResourceType.DISK_DRIVE).virtualQuantity(209152l).build()));
String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml")) String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/terremark/configureVApp.xml"))
.replace("eduardo", "MyAppServer6").replace("1024", "1536"); .replace("eduardo", "MyAppServer6").replace("1024", "1536");

View File

@ -23,10 +23,10 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.xml.ovf.ResourceAllocationHandler;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -48,15 +48,13 @@ public class ResourceAllocationHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() { public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/terremark/item.xml"); InputStream is = getClass().getResourceAsStream("/terremark/item.xml");
ResourceAllocation result = (ResourceAllocation) factory.create( ResourceAllocationSettingData result = factory.create(
injector.getInstance(ResourceAllocationHandler.class)).parse(is); injector.getInstance(ResourceAllocationSettingDataHandler.class)).parse(is);
assertEquals(result.getAddress(), "0"); assertEquals(result.getAddress(), "0");
assertEquals(result.getDescription(), "SCSI Controller"); assertEquals(result.getDescription(), "SCSI Controller");
assertEquals(result.getName(), "SCSI Controller 0"); assertEquals(result.getElementName(), "SCSI Controller 0");
assertEquals(result.getId(), 3); assertEquals(result.getInstanceID(), "3");
assertEquals(result.getSubType(), "lsilogic"); assertEquals(result.getResourceSubType(), "lsilogic");
assertEquals(result.getType(), ResourceType.SCSI_CONTROLLER); assertEquals(result.getResourceType(), ResourceType.PARALLEL_SCSI_HBA);
assertEquals(result.getVirtualQuantity(), 1);
} }
} }

View File

@ -19,9 +19,7 @@
package org.jclouds.vcloud.terremark.xml; package org.jclouds.vcloud.terremark.xml;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.find;
import static org.jclouds.vcloud.predicates.VCloudPredicates.resourceType;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
@ -31,6 +29,10 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.jclouds.Constants; import org.jclouds.Constants;
import org.jclouds.cim.CIMPredicates;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.SaxParserModule; import org.jclouds.http.functions.config.SaxParserModule;
@ -38,15 +40,13 @@ import org.jclouds.vcloud.VCloudExpressMediaType;
import org.jclouds.vcloud.domain.Status; import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VCloudExpressVApp; import org.jclouds.vcloud.domain.VCloudExpressVApp;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.domain.ovf.System;
import org.jclouds.vcloud.xml.VCloudExpressVAppHandler; import org.jclouds.vcloud.xml.VCloudExpressVAppHandler;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import com.google.inject.Guice; import com.google.inject.Guice;
@ -110,27 +110,35 @@ public class VAppHandlerTest extends BaseHandlerTest {
assertEquals(result.getVDC(), new ReferenceTypeImpl(null, VCloudExpressMediaType.VDC_XML, URI assertEquals(result.getVDC(), new ReferenceTypeImpl(null, VCloudExpressMediaType.VDC_XML, URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32"))); .create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32")));
assertEquals(result.getSystem(), new System(0, "Virtual Hardware Family", "centos-53", ImmutableSet.of("vmx-07"))); VirtualSystemSettingData system = VirtualSystemSettingData.builder().instanceID("0").elementName(
"Virtual Hardware Family").virtualSystemIdentifier("centos-53").virtualSystemType("vmx-07").build();
assertEquals(result.getSystem().toString(), system.toString());
assertEquals(result.getNetworkToAddresses().get("Internal"), ImmutableList.<String> of("10.114.34.132")); assertEquals(result.getNetworkToAddresses().get("Internal"), ImmutableList.<String> of("10.114.34.132"));
ResourceAllocation cpu = new ResourceAllocation(1, "1 virtual CPU(s)", "Number of Virtual CPUs", ResourceAllocationSettingData cpu = ResourceAllocationSettingData.builder().instanceID("1").elementName(
ResourceType.PROCESSOR, null, null, null, null, null, null, 1, "hertz * 10^6"); "1 virtual CPU(s)").description("Number of Virtual CPUs").resourceType(ResourceType.PROCESSOR)
.virtualQuantity(2l).virtualQuantityUnits("hertz * 10^6").build();
ResourceAllocation controller = new ResourceAllocation(3, "SCSI Controller 0", "SCSI Controller", ResourceAllocationSettingData controller = ResourceAllocationSettingData.builder().instanceID("3").elementName(
ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null, null, 1, null); "SCSI Controller 0").description("SCSI Controller").resourceType(ResourceType.PARALLEL_SCSI_HBA)
ResourceAllocation memory = new ResourceAllocation(2, "512MB of memory", "Memory Size", ResourceType.MEMORY, .resourceSubType("lsilogic").address("0").virtualQuantity(1l).build();
null, null, null, null, null, null, 512, "byte * 2^20"); ResourceAllocationSettingData memory = ResourceAllocationSettingData.builder().instanceID("2").elementName(
ResourceAllocation disk = new ResourceAllocation(9, "Hard Disk 1", null, ResourceType.DISK_DRIVE, null, "512MB of memory").description("Memory Size").resourceType(ResourceType.MEMORY).virtualQuantity(512l)
"10485760", null, 0, 3, null, 10485760, "byte * 2^20"); .virtualQuantityUnits("byte * 2^20").build();
ResourceAllocationSettingData disk = ResourceAllocationSettingData.builder().instanceID("9").elementName(
"Hard Disk 1").resourceType(ResourceType.DISK_DRIVE).hostResource("10485760").addressOnParent("0")
.virtualQuantity(10485760l).virtualQuantityUnits("byte * 2^20").build();
assertEquals(result.getResourceAllocations(), ImmutableSet.of(cpu, memory, controller, disk)); assertEquals(result.getResourceAllocations(), ImmutableSet.of(cpu, memory, controller, disk));
assertEquals(find(result.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)).getVirtualQuantity(), 1); assertEquals(find(result.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
assertEquals(find(result.getResourceAllocations(), resourceType(ResourceType.SCSI_CONTROLLER)) .getVirtualQuantity().intValue(), 1);
.getVirtualQuantity(), 1); find(result.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PARALLEL_SCSI_HBA));
assertEquals(find(result.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(), 512);
assertEquals(find(result.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity(), assertEquals(find(result.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
10485760); .getVirtualQuantity().intValue(), 512);
assertEquals(find(result.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
.getVirtualQuantity().longValue(), 10485760);
assertEquals(result.getSize().longValue(), find(result.getResourceAllocations(), assertEquals(result.getSize().longValue(), find(result.getResourceAllocations(),
resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity()); CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)).getVirtualQuantity().longValue());
} }
public void testGetVApp2disks() throws UnknownHostException { public void testGetVApp2disks() throws UnknownHostException {
@ -147,34 +155,42 @@ public class VAppHandlerTest extends BaseHandlerTest {
assertEquals(vApp.getHref(), URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/vapp/15639")); assertEquals(vApp.getHref(), URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/vapp/15639"));
assertEquals(vApp.getVDC(), new ReferenceTypeImpl(null, VCloudExpressMediaType.VDC_XML, URI assertEquals(vApp.getVDC(), new ReferenceTypeImpl(null, VCloudExpressMediaType.VDC_XML, URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32"))); .create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32")));
VirtualSystemSettingData system = VirtualSystemSettingData.builder().instanceID("0").elementName(
"Virtual Hardware Family").virtualSystemIdentifier("eduardo").virtualSystemType("vmx-07").build();
assertEquals(vApp.getSystem().toString(), system.toString());
assertEquals(vApp.getSystem(), new System(0, "Virtual Hardware Family", "eduardo", ImmutableSet.of("vmx-07")));
assertEquals(vApp.getNetworkToAddresses().get("Internal"), ImmutableList.of("10.114.34.131")); assertEquals(vApp.getNetworkToAddresses().get("Internal"), ImmutableList.of("10.114.34.131"));
ResourceAllocation cpu = new ResourceAllocation(1, "2 virtual CPU(s)", "Number of Virtual CPUs", ResourceAllocationSettingData cpu = ResourceAllocationSettingData.builder().instanceID("1").elementName(
ResourceType.PROCESSOR, null, null, null, null, null, null, 2, "hertz * 10^6"); "2 virtual CPU(s)").description("Number of Virtual CPUs").resourceType(ResourceType.PROCESSOR)
.virtualQuantity(2l).virtualQuantityUnits("hertz * 10^6").build();
ResourceAllocation controller = new ResourceAllocation(3, "SCSI Controller 0", "SCSI Controller", ResourceAllocationSettingData controller = ResourceAllocationSettingData.builder().instanceID("3").elementName(
ResourceType.SCSI_CONTROLLER, "lsilogic", null, "0", null, null, null, 1, null); "SCSI Controller 0").description("SCSI Controller").resourceType(ResourceType.PARALLEL_SCSI_HBA)
ResourceAllocation memory = new ResourceAllocation(2, "1024MB of memory", "Memory Size", ResourceType.MEMORY, .resourceSubType("lsilogic").address("0").virtualQuantity(1l).build();
null, null, null, null, null, null, 1024, "byte * 2^20"); ResourceAllocationSettingData memory = ResourceAllocationSettingData.builder().instanceID("2").elementName(
ResourceAllocation disk = new ResourceAllocation(9, "Hard Disk 1", null, ResourceType.DISK_DRIVE, null, "1024MB of memory").description("Memory Size").resourceType(ResourceType.MEMORY).virtualQuantity(1024l)
"4194304", null, 0, 3, null, 4194304, "byte * 2^20"); .virtualQuantityUnits("byte * 2^20").build();
ResourceAllocation disk2 = new ResourceAllocation(9, "Hard Disk 2", null, ResourceType.DISK_DRIVE, null, ResourceAllocationSettingData disk = ResourceAllocationSettingData.builder().instanceID("9").elementName(
"26214400", null, 1, 3, null, 26214400, "byte * 2^20"); "Hard Disk 1").resourceType(ResourceType.DISK_DRIVE).hostResource("4194304").addressOnParent("0")
.virtualQuantity(4194304l).virtualQuantityUnits("byte * 2^20").build();
ResourceAllocationSettingData disk2 = ResourceAllocationSettingData.builder().instanceID("9").elementName(
"Hard Disk 2").resourceType(ResourceType.DISK_DRIVE).hostResource("26214400").addressOnParent("1")
.virtualQuantity(26214400l).virtualQuantityUnits("byte * 2^20").build();
assertEquals(vApp.getResourceAllocations(), ImmutableSet.of(cpu, memory, controller, disk, disk2)); assertEquals(vApp.getResourceAllocations(), ImmutableSet.of(cpu, memory, controller, disk, disk2));
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)).getVirtualQuantity(), 2); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
assertEquals( .getVirtualQuantity().intValue(), 2);
find(vApp.getResourceAllocations(), resourceType(ResourceType.SCSI_CONTROLLER)).getVirtualQuantity(), 1); find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PARALLEL_SCSI_HBA));
assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(), 1024); assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
.getVirtualQuantity().longValue(), 1024);
// extract the disks on the vApp sorted by addressOnParent // extract the disks on the vApp sorted by addressOnParent
List<ResourceAllocation> disks = Lists.newArrayList(filter(vApp.getResourceAllocations(), List<ResourceAllocationSettingData> disks = Lists.newArrayList(Iterables.filter(vApp.getResourceAllocations(),
resourceType(ResourceType.DISK_DRIVE))); CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)));
assertEquals(disks.get(0).getVirtualQuantity(), 4194304); assertEquals(disks.get(0).getVirtualQuantity().longValue(), 4194304);
assertEquals(disks.get(1).getVirtualQuantity(), 26214400); assertEquals(disks.get(1).getVirtualQuantity().longValue(), 26214400);
} }

View File

@ -23,8 +23,9 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.xml.VirtualSystemSettingDataHandler;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.xml.ovf.SystemHandler;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -48,10 +49,11 @@ public class SystemHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() { public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/terremark/system.xml"); InputStream is = getClass().getResourceAsStream("/terremark/system.xml");
org.jclouds.vcloud.domain.ovf.System result = factory.create(injector.getInstance(SystemHandler.class)).parse(is); VirtualSystemSettingData result = factory.create(injector.getInstance(VirtualSystemSettingDataHandler.class))
assertEquals(result.getName(), "Virtual Hardware Family"); .parse(is);
assertEquals(result.getId(), 0); assertEquals(result.getElementName(), "Virtual Hardware Family");
assertEquals(result.getIdentifier(), "adriantest1"); assertEquals(result.getInstanceID(), "0");
assertEquals(result.getVirtualSystemIdentifier(), "adriantest1");
assertEquals(result.getVirtualSystemTypes(), ImmutableSet.of("vmx-07")); assertEquals(result.getVirtualSystemTypes(), ImmutableSet.of("vmx-07"));
} }
} }

View File

@ -1,201 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* @author Adrian Cole
*
*/
public class ResourceAllocation {
private final int id;
private final String name;
private final String description;
private final ResourceType type;
private final String subType;
private final String hostResource;
private final String address;
private final Integer addressOnParent;
private final Integer parent;
private final Boolean connected;
private final long virtualQuantity;
private final String virtualQuantityUnits;
public ResourceAllocation(int id, String name, String description, ResourceType type, String subType,
String hostResource, String address, Integer addressOnParent, Integer parent, Boolean connected,
long virtualQuantity, String virtualQuantityUnits) {
this.id = id;
this.name = checkNotNull(name, "name");
this.description = description;
this.type = checkNotNull(type, "type");
this.subType = subType;
this.hostResource = hostResource;
this.address = address;
this.addressOnParent = addressOnParent;
this.parent = parent;
this.connected = connected;
this.virtualQuantity = virtualQuantity;
this.virtualQuantityUnits = virtualQuantityUnits;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public ResourceType getType() {
return type;
}
public String getSubType() {
return subType;
}
public String getAddress() {
return address;
}
public Integer getAddressOnParent() {
return addressOnParent;
}
public Integer getParent() {
return parent;
}
public Boolean getConnected() {
return connected;
}
public long getVirtualQuantity() {
return virtualQuantity;
}
public String getVirtualQuantityUnits() {
return virtualQuantityUnits;
}
public String getHostResource() {
return hostResource;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + ((addressOnParent == null) ? 0 : addressOnParent.hashCode());
result = prime * result + ((connected == null) ? 0 : connected.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((hostResource == null) ? 0 : hostResource.hashCode());
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((parent == null) ? 0 : parent.hashCode());
result = prime * result + ((subType == null) ? 0 : subType.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + (int) (virtualQuantity ^ (virtualQuantity >>> 32));
result = prime * result + ((virtualQuantityUnits == null) ? 0 : virtualQuantityUnits.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;
ResourceAllocation other = (ResourceAllocation) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (addressOnParent == null) {
if (other.addressOnParent != null)
return false;
} else if (!addressOnParent.equals(other.addressOnParent))
return false;
if (connected == null) {
if (other.connected != null)
return false;
} else if (!connected.equals(other.connected))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (hostResource == null) {
if (other.hostResource != null)
return false;
} else if (!hostResource.equals(other.hostResource))
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (parent == null) {
if (other.parent != null)
return false;
} else if (!parent.equals(other.parent))
return false;
if (subType == null) {
if (other.subType != null)
return false;
} else if (!subType.equals(other.subType))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
if (virtualQuantity != other.virtualQuantity)
return false;
if (virtualQuantityUnits == null) {
if (other.virtualQuantityUnits != null)
return false;
} else if (!virtualQuantityUnits.equals(other.virtualQuantityUnits))
return false;
return true;
}
@Override
public String toString() {
return "[address=" + address + ", addressOnParent=" + addressOnParent + ", connected=" + connected
+ ", description=" + description + ", hostResource=" + hostResource + ", id=" + id + ", name=" + name
+ ", parent=" + parent + ", subType=" + subType + ", type=" + type + ", virtualQuantity="
+ virtualQuantity + ", virtualQuantityUnits=" + virtualQuantityUnits + "]";
}
}

View File

@ -1,100 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static com.google.common.base.Preconditions.checkNotNull;
/**
*
* VirtualResource such as disks or CPU
*
* @author Adrian Cole
* @see <a href="http://blogs.vmware.com/vapp/2009/11/index.html"/>
*
*/
public enum ResourceType {
OTHER, PROCESSOR, MEMORY, IDE_CONTROLLER, SCSI_CONTROLLER, ETHERNET_ADAPTER, FLOPPY_DRIVE, CD_DRIVE, DVD_DRIVE, DISK_DRIVE, USB_CONTROLLER, UNRECOGNIZED;
public String value() {
switch (this) {
case OTHER:
return "1";
case PROCESSOR:
return "3";
case MEMORY:
return "4";
case IDE_CONTROLLER:
return "5";
case SCSI_CONTROLLER:
return "6";
case ETHERNET_ADAPTER:
return "10";
case FLOPPY_DRIVE:
return "14";
case CD_DRIVE:
return "15";
case DVD_DRIVE:
return "16";
case DISK_DRIVE:
return "17";
case USB_CONTROLLER:
return "23";
default:
throw new IllegalArgumentException("invalid type:" + this);
}
}
public static ResourceType fromValue(String type) {
try {
return fromValue(Integer.parseInt(checkNotNull(type, "type")));
} catch (IllegalArgumentException e) {
return UNRECOGNIZED;
}
}
public static ResourceType fromValue(int v) {
switch (v) {
case 1:
return OTHER;
case 3:
return PROCESSOR;
case 4:
return MEMORY;
case 5:
return IDE_CONTROLLER;
case 6:
return SCSI_CONTROLLER;
case 10:
return ETHERNET_ADAPTER;
case 14:
return FLOPPY_DRIVE;
case 15:
return CD_DRIVE;
case 16:
return DVD_DRIVE;
case 17:
return DISK_DRIVE;
case 23:
return USB_CONTROLLER;
default:
return UNRECOGNIZED;
}
}
}

View File

@ -1,114 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
public class System {
protected final int id;
protected final String name;
protected final String identifier;
protected final Set<String> virtualSystemTypes = Sets.newLinkedHashSet();
public System(int id, String name, String identifier, Iterable<String> virtualSystemTypes) {
this.id = id;
this.name = checkNotNull(name, "name");
this.identifier = checkNotNull(identifier, "identifier");
Iterables.addAll(this.virtualSystemTypes, checkNotNull(virtualSystemTypes, "virtualSystemTypes"));
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public String getIdentifier() {
return identifier;
}
/**
* specifies a virtual system virtualSystemTypes identifier, which is an implementation defined string that
* uniquely identifies the virtualSystemTypes of the virtual system.
*
* <p/>
* For example, a virtual system virtualSystemTypes identifier could be vmx-4 for VMwares fourth-generation
* virtual hardware or xen-3 for Xens third-generation virtual hardware.
*
*/
public Set<String> getVirtualSystemTypes() {
return virtualSystemTypes;
}
@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 + ((virtualSystemTypes == null) ? 0 : virtualSystemTypes.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;
System other = (System) 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 (virtualSystemTypes == null) {
if (other.virtualSystemTypes != null)
return false;
} else if (!virtualSystemTypes.equals(other.virtualSystemTypes))
return false;
return true;
}
@Override
public String toString() {
return "VirtualSystem [id=" + id + ", identifier=" + identifier + ", name=" + name + ", virtualSystemTypes="
+ virtualSystemTypes + "]";
}
}

View File

@ -22,14 +22,11 @@ package org.jclouds.vcloud.util;
import java.net.URI; import java.net.URI;
import java.util.Map; import java.util.Map;
import org.jclouds.vcloud.domain.VCloudError;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.VCloudError;
import org.jclouds.vcloud.domain.VCloudError.MinorCode; import org.jclouds.vcloud.domain.VCloudError.MinorCode;
import org.jclouds.vcloud.domain.internal.ErrorImpl; import org.jclouds.vcloud.domain.internal.ErrorImpl;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.xml.sax.Attributes;
import com.google.common.collect.Maps;
/** /**
* *
@ -45,17 +42,6 @@ public class Utils {
return new ReferenceTypeImpl(attributes.get("name"), type != null ? type : defaultType, href); return new ReferenceTypeImpl(attributes.get("name"), type != null ? type : defaultType, href);
} }
public static Map<String, String> cleanseAttributes(Attributes in) {
Map<String, String> attrs = Maps.newLinkedHashMap();
for (int i = 0; i < in.getLength(); i++) {
String name = in.getQName(i);
if (name.indexOf(':') != -1)
name = name.substring(name.indexOf(':') + 1);
attrs.put(name, in.getValue(i));
}
return attrs;
}
public static ReferenceType newReferenceType(Map<String, String> attributes) { public static ReferenceType newReferenceType(Map<String, String> attributes) {
return newReferenceType(attributes, null); return newReferenceType(attributes, null);
} }

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import static org.jclouds.vcloud.util.Utils.putReferenceType; import static org.jclouds.vcloud.util.Utils.putReferenceType;
@ -29,6 +28,7 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.VCloudMediaType; import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.domain.Catalog; import org.jclouds.vcloud.domain.Catalog;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
@ -69,7 +69,7 @@ public class CatalogHandler extends ParseSax.HandlerWithResult<Catalog> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("Catalog")) { if (qName.equals("Catalog")) {
catalog = newReferenceType(attributes, VCloudMediaType.CATALOG_XML); catalog = newReferenceType(attributes, VCloudMediaType.CATALOG_XML);
} else if (qName.equals("CatalogItem")) { } else if (qName.equals("CatalogItem")) {

View File

@ -19,13 +19,13 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map; import java.util.Map;
import java.util.SortedMap; import java.util.SortedMap;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.CatalogItem; import org.jclouds.vcloud.domain.CatalogItem;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.internal.CatalogItemImpl; import org.jclouds.vcloud.domain.internal.CatalogItemImpl;
@ -53,7 +53,7 @@ public class CatalogItemHandler extends ParseSax.HandlerWithResult<CatalogItem>
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("CatalogItem")) { if (qName.equals("CatalogItem")) {
catalogItem = newReferenceType(attributes); catalogItem = newReferenceType(attributes);
} else if (qName.equals("Entity")) { } else if (qName.equals("Entity")) {

View File

@ -19,11 +19,10 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.VCloudError; import org.jclouds.vcloud.domain.VCloudError;
import org.jclouds.vcloud.util.Utils; import org.jclouds.vcloud.util.Utils;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
@ -41,7 +40,7 @@ public class ErrorHandler extends ParseSax.HandlerWithResult<VCloudError> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("Error")) { if (qName.equals("Error")) {
error = Utils.newError(attributes); error = Utils.newError(attributes);
} }

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import static org.jclouds.vcloud.util.Utils.putReferenceType; import static org.jclouds.vcloud.util.Utils.putReferenceType;
@ -29,6 +28,7 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.Org; import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
@ -70,7 +70,7 @@ public class OrgHandler extends ParseSax.HandlerWithResult<Org> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Org")) { if (qName.endsWith("Org")) {
org = newReferenceType(attributes); org = newReferenceType(attributes);
} else if (qName.endsWith("Link")) { } else if (qName.endsWith("Link")) {

View File

@ -19,12 +19,12 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.putReferenceType; import static org.jclouds.vcloud.util.Utils.putReferenceType;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -44,7 +44,7 @@ public class OrgListHandler extends ParseSax.HandlerWithResult<Map<String, Refer
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Org")) { if (qName.endsWith("Org")) {
String type = attributes.get("type"); String type = attributes.get("type");
if (type != null) { if (type != null) {

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.List; import java.util.List;
@ -29,6 +28,7 @@ import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.network.DhcpService; import org.jclouds.vcloud.domain.network.DhcpService;
@ -144,7 +144,7 @@ public class OrgNetworkHandler extends ParseSax.HandlerWithResult<OrgNetwork> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("OrgNetwork")) { if (qName.equals("OrgNetwork")) {
network = newReferenceType(attributes); network = newReferenceType(attributes);
} else if (qName.equals("FirewallRule")) { } else if (qName.equals("FirewallRule")) {

View File

@ -19,8 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import java.text.ParseException; import java.text.ParseException;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -31,6 +29,7 @@ import javax.inject.Inject;
import org.jclouds.date.DateService; import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TaskStatus; import org.jclouds.vcloud.domain.TaskStatus;
@ -70,7 +69,7 @@ public class TaskHandler extends ParseSax.HandlerWithResult<Task> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equalsIgnoreCase("Task")) { if (qName.equalsIgnoreCase("Task")) {
if (attributes.get("href") != null && !inOwner)// queued tasks may not have an if (attributes.get("href") != null && !inOwner)// queued tasks may not have an
// href yet // href yet

View File

@ -19,14 +19,13 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import java.util.Map; import java.util.Map;
import java.util.SortedSet; import java.util.SortedSet;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TasksList; import org.jclouds.vcloud.domain.TasksList;
@ -57,7 +56,7 @@ public class TasksListHandler extends ParseSax.HandlerWithResult<TasksList> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.equals("TasksList")) { if (qName.equals("TasksList")) {
resource = Utils.newReferenceType(attributes); resource = Utils.newReferenceType(attributes);
} else if (qName.equals("Link") && "self".equals(attributes.get("rel"))) { } else if (qName.equals("Link") && "self".equals(attributes.get("rel"))) {

View File

@ -19,7 +19,6 @@
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType; import static org.jclouds.vcloud.util.Utils.newReferenceType;
import static org.jclouds.vcloud.util.Utils.putReferenceType; import static org.jclouds.vcloud.util.Utils.putReferenceType;
@ -29,6 +28,7 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.SaxUtils;
import org.jclouds.vcloud.domain.AllocationModel; import org.jclouds.vcloud.domain.AllocationModel;
import org.jclouds.vcloud.domain.Capacity; import org.jclouds.vcloud.domain.Capacity;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
@ -97,7 +97,7 @@ public class VDCHandler extends ParseSax.HandlerWithResult<VDC> {
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Vdc")) { if (qName.endsWith("Vdc")) {
vDC = newReferenceType(attributes); vDC = newReferenceType(attributes);
String status = attributes.get("status"); String status = attributes.get("status");

View File

@ -1,128 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import java.util.Map;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.util.Utils;
import org.xml.sax.Attributes;
/**
* @author Adrian Cole
*/
public class ResourceAllocationHandler extends ParseSax.HandlerWithResult<ResourceAllocation> {
protected StringBuilder currentText = new StringBuilder();
protected String address;
protected Integer addressOnParent;
protected String hostResource;
protected String allocationUnits;
protected String automaticAllocation;
protected Boolean connected;
protected String description;
protected String elementName;
protected int instanceID;
protected Integer parent;
protected String resourceSubType;
protected ResourceType resourceType;
protected long virtualQuantity = 1;
protected String virtualQuantityUnits;
public org.jclouds.vcloud.domain.ovf.ResourceAllocation getResult() {
if (allocationUnits != null)
virtualQuantityUnits = allocationUnits;
ResourceAllocation allocation = newResourceAllocation();
address = null;
addressOnParent = null;
allocationUnits = null;
automaticAllocation = null;
connected = null;
description = null;
elementName = null;
instanceID = -1;
parent = null;
resourceSubType = null;
resourceType = null;
virtualQuantity = 1;
virtualQuantityUnits = null;
hostResource = null;
return allocation;
}
protected ResourceAllocation newResourceAllocation() {
return new ResourceAllocation(instanceID, elementName, description, resourceType, resourceSubType, hostResource,
address, addressOnParent, parent, connected, virtualQuantity, virtualQuantityUnits);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs);
if (qName.endsWith("Connection")) {
connected = new Boolean(attributes.get("connected"));
}
}
@Override
public void endElement(String uri, String localName, String qName) {
String current = currentOrNull();
if (current != null) {
if (qName.endsWith("Address")) {
address = current;
} else if (qName.endsWith("AddressOnParent")) {
addressOnParent = Integer.parseInt(current);
} else if (qName.endsWith("AllocationUnits")) {
allocationUnits = current;
} else if (qName.endsWith("Description")) {
description = current;
} else if (qName.endsWith("ElementName")) {
elementName = current;
} else if (qName.endsWith("InstanceID")) {
instanceID = Integer.parseInt(current);
} else if (qName.endsWith("Parent")) {
parent = Integer.parseInt(current);
} else if (qName.endsWith("ResourceSubType")) {
resourceSubType = current;
} else if (qName.endsWith("ResourceType")) {
resourceType = ResourceType.fromValue(current);
} else if (qName.endsWith("VirtualQuantity")) {
virtualQuantity = Long.parseLong(current);
} else if (qName.endsWith("VirtualQuantityUnits")) {
virtualQuantityUnits = current;
} else if (qName.endsWith("HostResource")) {
hostResource = currentText.toString().trim();
virtualQuantity = Long.parseLong(current);
virtualQuantityUnits = "byte * 2^20";
}
}
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;
}
}

View File

@ -1,72 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import java.util.Set;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.domain.ovf.System;
import org.xml.sax.Attributes;
import com.google.common.collect.Sets;
/**
* @author Adrian Cole
*/
public class SystemHandler extends ParseSax.HandlerWithResult<System> {
private StringBuilder currentText = new StringBuilder();
private String elementName;
private int instanceID;
private String virtualSystemIdentifier;
private Set<String> virtualSystemTypes = Sets.newLinkedHashSet();
public System getResult() {
System system = new org.jclouds.vcloud.domain.ovf.System(instanceID, elementName, virtualSystemIdentifier,
virtualSystemTypes);
this.elementName = null;
this.instanceID = -1;
this.virtualSystemIdentifier = null;
this.virtualSystemTypes = null;
return system;
}
public void startElement(String uri, String localName, String qName, Attributes attributes) {
// no op
}
@Override
public void endElement(String uri, String localName, String qName) {
if (qName.endsWith("ElementName")) {
this.elementName = currentText.toString().trim();
} else if (qName.endsWith("InstanceID")) {
this.instanceID = Integer.parseInt(currentText.toString().trim());
} else if (qName.endsWith("VirtualSystemIdentifier")) {
this.virtualSystemIdentifier = currentText.toString().trim();
} else if (qName.endsWith("VirtualSystemType")) {
this.virtualSystemTypes.add(currentText.toString().trim());
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -1,53 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.vcloud.xml.ovf.ResourceAllocationHandler;
import org.testng.annotations.Test;
/**
* Tests behavior of {@code ResourceAllocationHandler}
*
* @author Adrian Cole
*/
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "ResourceAllocationHandlerTest")
public class ResourceAllocationHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/resourceallocation-hosting.xml");
ResourceAllocation result = factory.create(
injector.getInstance(ResourceAllocationHandler.class)).parse(is);
ResourceAllocation expects = new ResourceAllocation(1, "1 virtual CPU(s)",
"Number of Virtual CPUs", ResourceType.PROCESSOR, null, null, null, null, null,
null, 1, "hertz * 10^6");
assertEquals(result, expects);
}
}

View File

@ -1,50 +0,0 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.ovf;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.domain.ovf.System;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
/**
* Tests behavior of {@code SystemHandler}
*
* @author Adrian Cole
*/
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "SystemHandlerTest")
public class SystemHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/virtualsystem-hosting.xml");
System result = factory.create(injector.getInstance(SystemHandler.class)).parse(is);
System expects = new System(0, "Virtual Hardware Family", "SimpleVM", ImmutableSet.of("vmx-04"));
assertEquals(result, expects);
}
}

View File

@ -17,20 +17,22 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.predicates; package org.jclouds.cim;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.vcloud.domain.ovf.ResourceAllocation; import java.util.Set;
import org.jclouds.vcloud.domain.ovf.ResourceType;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
/** /**
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public class VCloudPredicates { public class CIMPredicates {
/** /**
* Return resource allocations of the specific type. * Return resource allocations of the specific type.
@ -39,17 +41,18 @@ public class VCloudPredicates {
* type to match the items * type to match the items
* @return predicate * @return predicate
*/ */
public static Predicate<ResourceAllocation> resourceType(final ResourceType type) { public static Predicate<ResourceAllocationSettingData> resourceTypeIn(final ResourceType... types) {
checkNotNull(type, "type"); checkNotNull(types, "resourceTypes");
return new Predicate<ResourceAllocation>() { final Set<ResourceType> resourceTypes = ImmutableSet.copyOf(types);
return new Predicate<ResourceAllocationSettingData>() {
@Override @Override
public boolean apply(ResourceAllocation in) { public boolean apply(ResourceAllocationSettingData in) {
return type.equals(in.getType()); return resourceTypes.contains(in.getResourceType());
} }
@Override @Override
public String toString() { public String toString() {
return "resourceAllocationType(" + type + ")"; return "resourceTypeIn(" + resourceTypes + ")";
} }
}; };
} }

View File

@ -0,0 +1,114 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim;
/**
*
* ManagedElement is an abstract class that provides a common superclass (or top of the inheritance
* tree) for the non-association classes in the CIM Schema.
*
* @author Adrian Cole
* @see <a
* href="http://dmtf.org/sites/default/files/cim/cim_schema_v2280/cim_schema_2.28.0Final-Doc.zip"
* />
*
*/
public abstract class ManagedElement extends SettingData {
public static class Builder extends SettingData.Builder {
protected String caption;
protected String description;
/**
* @see ManagedSettingData#getCaption
*/
public Builder caption(String caption) {
this.caption = caption;
return this;
}
/**
* @see ManagedSettingData#getDescription
*/
public Builder description(String description) {
this.description = description;
return this;
}
public Builder fromManagedElement(ManagedElement in) {
return caption(in.getCaption()).description(in.getDescription()).fromSettingData(in);
}
/**
* {@inheritDoc}
*/
@Override
public Builder fromSettingData(SettingData in) {
return Builder.class.cast(super.fromSettingData(in));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
}
protected final String caption;
protected final String description;
public ManagedElement(String elementName, String instanceID, String caption, String description) {
super(elementName, instanceID);
this.caption = caption;
this.description = description;
}
/**
* The Caption property is a short textual description (one- line string) of the object.
*/
public String getCaption() {
return caption;
}
/**
* The Description property provides a textual description of the object.
*/
public String getDescription() {
return description;
}
@Override
public String toString() {
return String.format("[elementName=%s, instanceID=%s, caption=%s, description=%s]", elementName, instanceID,
caption, description);
}
}

View File

@ -0,0 +1,708 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import java.util.Map;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
*
* The ResourceAllocationSettingData class represents settings specifically related to an allocated
* resource that are outside the scope of the CIM class typically used to represent the resource
* itself. These settings include information specific to the allocation that may not be visible to
* the consumer of the resource itself. For example, a virtual processor may look like a 2 ghz
* processor to the consumer (virtual computer system), however the virtualization system may use
* time-slicing to schedule the the virtual processor to only allow it to use 1 ghz.
*
* @author Adrian Cole
* @see <a
* href="http://dmtf.org/sites/default/files/cim/cim_schema_v2280/cim_schema_2.28.0Final-Doc.zip"
* />
*
*/
public class ResourceAllocationSettingData extends ManagedElement {
public static Builder builder() {
return new Builder();
}
public static class Builder extends ManagedElement.Builder {
protected String address;
protected String addressOnParent;
protected String allocationUnits;
protected Boolean automaticAllocation;
protected Boolean automaticDeallocation;
protected ConsumerVisibility consumerVisibility;
protected Long limit;
protected MappingBehavior mappingBehavior;
protected String otherResourceType;
protected String parent;
protected String poolID;
protected Long reservation;
protected String resourceSubType;
protected ResourceType resourceType;
protected Long virtualQuantity;
protected String virtualQuantityUnits;
protected Integer weight;
protected List<String> connections = Lists.newArrayList();
protected List<String> hostResources = Lists.newArrayList();
/**
* @see ResourceAllocationSettingData#getAddress
*/
public Builder address(String address) {
this.address = address;
return this;
}
/**
* @see ResourceAllocationSettingData#getAddressOnParent
*/
public Builder addressOnParent(String addressOnParent) {
this.addressOnParent = addressOnParent;
return this;
}
/**
* @see ResourceAllocationSettingData#getAllocationUnits
*/
public Builder allocationUnits(String allocationUnits) {
this.allocationUnits = allocationUnits;
return this;
}
/**
* @see ResourceAllocationSettingData#getAutomaticAllocation
*/
public Builder automaticAllocation(Boolean automaticAllocation) {
this.automaticAllocation = automaticAllocation;
return this;
}
/**
* @see ResourceAllocationSettingData#getAutomaticDeallocation
*/
public Builder automaticDeallocation(Boolean automaticDeallocation) {
this.automaticDeallocation = automaticDeallocation;
return this;
}
/**
* @see ResourceAllocationSettingData#getConsumerVisibility
*/
public Builder consumerVisibility(ConsumerVisibility consumerVisibility) {
this.consumerVisibility = consumerVisibility;
return this;
}
/**
* @see ResourceAllocationSettingData#getLimit
*/
public Builder limit(Long limit) {
this.limit = limit;
return this;
}
/**
* @see ResourceAllocationSettingData#getMappingBehavior
*/
public Builder mappingBehavior(MappingBehavior mappingBehavior) {
this.mappingBehavior = mappingBehavior;
return this;
}
/**
* @see ResourceAllocationSettingData#getOtherResourceType
*/
public Builder otherResourceType(String otherResourceType) {
this.otherResourceType = otherResourceType;
return this;
}
/**
* @see ResourceAllocationSettingData#getParent
*/
public Builder parent(String parent) {
this.parent = parent;
return this;
}
/**
* @see ResourceAllocationSettingData#getPoolID
*/
public Builder poolID(String poolID) {
this.poolID = poolID;
return this;
}
/**
* @see ResourceAllocationSettingData#getReservation
*/
public Builder reservation(Long reservation) {
this.reservation = reservation;
return this;
}
/**
* @see ResourceAllocationSettingData#getResourceSubType
*/
public Builder resourceSubType(String resourceSubType) {
this.resourceSubType = resourceSubType;
return this;
}
/**
* @see ResourceAllocationSettingData#getResourceType
*/
public Builder resourceType(ResourceType resourceType) {
this.resourceType = resourceType;
return this;
}
/**
* @see ResourceAllocationSettingData#getVirtualQuantity
*/
public Builder virtualQuantity(Long virtualQuantity) {
this.virtualQuantity = virtualQuantity;
return this;
}
/**
* @see ResourceAllocationSettingData#getVirtualQuantityUnits
*/
public Builder virtualQuantityUnits(String virtualQuantityUnits) {
this.virtualQuantityUnits = virtualQuantityUnits;
return this;
}
/**
* @see ResourceAllocationSettingData#getWeight
*/
public Builder weight(Integer weight) {
this.weight = weight;
return this;
}
/**
* @see ResourceAllocationSettingData#getConnection
*/
public Builder connection(String connection) {
this.connections.add(checkNotNull(connection, "connection"));
return this;
}
/**
* @see ResourceAllocationSettingData#getHostResource
*/
public Builder hostResource(String hostResource) {
this.hostResources.add(checkNotNull(hostResource, "hostResource"));
return this;
}
/**
* @see ResourceAllocationSettingData#getConnections
*/
public Builder connections(List<String> connections) {
this.connections.addAll(checkNotNull(connections, "connections"));
return this;
}
/**
* @see ResourceAllocationSettingData#getHostResources
*/
public Builder hostResources(List<String> hostResources) {
this.hostResources.addAll(checkNotNull(hostResources, "hostResources"));
return this;
}
public ResourceAllocationSettingData build() {
return new ResourceAllocationSettingData(elementName, instanceID, caption, description, address,
addressOnParent, allocationUnits, automaticAllocation, automaticDeallocation, consumerVisibility,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight, connections, hostResources);
}
public Builder fromResourceAllocationSettingData(ResourceAllocationSettingData in) {
return elementName(in.getElementName()).instanceID(in.getInstanceID()).caption(in.getCaption()).description(
in.getDescription()).address(in.getAddress()).addressOnParent(in.getAddressOnParent())
.allocationUnits(in.getAllocationUnits()).automaticAllocation(in.isAutomaticAllocation())
.automaticDeallocation(in.isAutomaticDeallocation()).consumerVisibility(in.getConsumerVisibility())
.limit(in.getLimit()).mappingBehavior(in.getMappingBehavior()).otherResourceType(
in.getOtherResourceType()).parent(in.getParent()).poolID(in.getPoolID()).reservation(
in.getReservation()).resourceSubType(in.getResourceSubType()).resourceType(
in.getResourceType()).virtualQuantity(in.getVirtualQuantity()).virtualQuantityUnits(
in.getVirtualQuantityUnits()).weight(in.getWeight()).connections(in.getConnections())
.hostResources(in.getHostResources());
}
/**
* {@inheritDoc}
*/
@Override
public Builder caption(String caption) {
return Builder.class.cast(super.caption(caption));
}
/**
* {@inheritDoc}
*/
@Override
public Builder description(String description) {
return Builder.class.cast(super.description(description));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
}
/**
* The type of resource this allocation setting represents.
*/
public static enum ResourceType {
OTHER(1), COMPUTER_SYSTEM(2), PROCESSOR(3), MEMORY(4), IDE_CONTROLLER(5), PARALLEL_SCSI_HBA(6), FC_HBA(7), ISCSI_HBA(
8), IB_HCA(9), ETHERNET_ADAPTER(10), OTHER_NETWORK_ADAPTER(11), IO_SLOT(12), IO_DEVICE(13), FLOPPY_DRIVE(
14), CD_DRIVE(15), DVD_DRIVE(16), DISK_DRIVE(17), TAPE_DRIVE(18), STORAGE_EXTENT(19), OTHER_STORAGE_DEVICE(
20), SERIAL_PORT(21), PARALLEL_PORT(22), USB_CONTROLLER(23), GRAPHICS_CONTROLLER(24), IEEE_1394_CONTROLLER(
25), PARTITIONABLE_UNIT(26), BASE_PARTITIONABLE_UNIT(27), POWER(28), COOLING_CAPACITY(29), ETHERNET_SWITCH_PORT(
30), LOGICAL_DISK(31), STORAGE_VOLUME(32), ETHERNET_CONNECTION(33), DMTF_RESERVED(Integer.valueOf(
"8000", 16)), VENDOR_RESERVED(Integer.valueOf("FFFF", 16));
protected final int code;
ResourceType(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, ResourceType> RESOURCE_TYPE_BY_ID = Maps.uniqueIndex(ImmutableSet
.copyOf(ResourceType.values()), new Function<ResourceType, Integer>() {
@Override
public Integer apply(ResourceType input) {
return input.code;
}
});
public static ResourceType fromValue(String type) {
return RESOURCE_TYPE_BY_ID.get(new Integer(checkNotNull(type, "type")));
}
}
/**
* Describes the consumers visibility to the allocated resource.
*/
public static enum ConsumerVisibility {
UNKNOWN(0),
/**
* indicates the underlying or host resource is utilized and passed through to the consumer,
* possibly using partitioning. At least one item shall be present in the HostResource
* property.
*/
PASSED_THROUGH(2),
/**
* indicates the resource is virtualized and may not map directly to an underlying/host
* resource. Some implementations may support specific assignment for virtualized resources,
* in which case the host resource(s) are exposed using the HostResource property.
*/
VIRTUALIZED(3),
/**
* indicates a representation of the resource does not exist within the context of the
* resource consumer.
*/
NOT_REPRESENTED(4), DMTF_RESERVED(32767), VENDOR_RESERVED(65535);
protected final int code;
ConsumerVisibility(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, ConsumerVisibility> MAPPING_BEHAVIOR_BY_ID = Maps.uniqueIndex(ImmutableSet
.copyOf(ConsumerVisibility.values()), new Function<ConsumerVisibility, Integer>() {
@Override
public Integer apply(ConsumerVisibility input) {
return input.code;
}
});
public static ConsumerVisibility fromValue(String behavior) {
return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior")));
}
}
/**
* Specifies how this resource maps to underlying resourcesIf the HostResource array contains any
* entries, this property reflects how the resource maps to those specific resources.
*/
public static enum MappingBehavior {
UNKNOWN(0), NOT_SUPPORTED(2), DEDICATED(3), SOFT_AFFINITY(4), HARD_AFFINITY(5), DMTF_RESERVED(32767), VENDOR_RESERVED(
65535);
protected final int code;
MappingBehavior(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, MappingBehavior> MAPPING_BEHAVIOR_BY_ID = Maps.uniqueIndex(ImmutableSet
.copyOf(MappingBehavior.values()), new Function<MappingBehavior, Integer>() {
@Override
public Integer apply(MappingBehavior input) {
return input.code;
}
});
public static MappingBehavior fromValue(String behavior) {
return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior")));
}
}
protected final String address;
protected final String addressOnParent;
protected final String allocationUnits;
protected final Boolean automaticAllocation;
protected final Boolean automaticDeallocation;
protected final ConsumerVisibility consumerVisibility;
protected final Long limit;
protected final MappingBehavior mappingBehavior;
protected final String otherResourceType;
protected final String parent;
protected final String poolID;
protected final Long reservation;
protected final String resourceSubType;
protected final ResourceType resourceType;
protected final Long virtualQuantity;
protected final String virtualQuantityUnits;
protected final Integer weight;
protected final List<String> connections;
protected final List<String> hostResources;
public ResourceAllocationSettingData(String elementName, String instanceID, String caption, String description,
String address, String addressOnParent, String allocationUnits, Boolean automaticAllocation,
Boolean automaticDeallocation, ConsumerVisibility consumerVisibility, Long limit,
MappingBehavior mappingBehavior, String otherResourceType, String parent, String poolID, Long reservation,
String resourceSubType, ResourceType resourceType, Long virtualQuantity, String virtualQuantityUnits,
Integer weight, List<String> connections, List<String> hostResources) {
super(elementName, instanceID, caption, description);
this.address = address;
this.addressOnParent = addressOnParent;
this.allocationUnits = allocationUnits;
this.automaticAllocation = automaticAllocation;
this.automaticDeallocation = automaticDeallocation;
this.consumerVisibility = consumerVisibility;
this.limit = limit;
this.mappingBehavior = mappingBehavior;
this.otherResourceType = otherResourceType;
this.parent = parent;
this.poolID = poolID;
this.reservation = reservation;
this.resourceSubType = resourceSubType;
this.resourceType = resourceType;
this.virtualQuantity = virtualQuantity;
this.virtualQuantityUnits = virtualQuantityUnits;
this.weight = weight;
this.connections = ImmutableList.copyOf(connections);
this.hostResources = ImmutableList.copyOf(hostResources);
}
/**
* The address of the resource. For example, the MAC address of a Ethernet port.
*/
public String getAddress() {
return address;
}
/**
* Describes the address of this resource in the context of the Parent. The
* Parent/AddressOnParent properties are used to describe the controller relationship as well the
* ordering of devices on a controller.For example, if the parent is a PCI Controller, this
* property would specify the PCI slot of this child device.
*/
public String getAddressOnParent() {
return addressOnParent;
}
/**
* This property specifies the units of allocation used by the Reservation and Limit properties.
* For example, when ResourceType=Processor, AllocationUnits may be set to hertz*10^6 or percent.
* When ResourceType=Memory, AllocationUnits may be set to bytes*10^3. It is expected that
* profiles constrain the units that apply in context of particular resource types. The value of
* this property shall be a legal value of the Programmatic Units qualifier as defined in Annex
* C.1 of DSP0004 V2.5 or later.
*/
public String getAllocationUnits() {
return allocationUnits;
}
/**
* This property specifies if the resource will be automatically allocated. For example when set
* to true, when the consuming virtual computer system is powered on, this resource would be
* allocated. A value of false indicates the resource must be explicitly allocated. For example,
* the setting may represent removable media (cdrom, floppy, etc.) where at power on time, the
* media is not present. An explicit operation is required to allocate the resource.
*/
public Boolean isAutomaticAllocation() {
return automaticAllocation;
}
/**
* This property specifies if the resource will be automatically de-allocated. For example, when
* set to true, when the consuming virtual computer system is powered off, this resource would be
* de-allocated. When set to false, the resource will remain allocated and must be explicitly
* de-allocated.
*/
public Boolean isAutomaticDeallocation() {
return automaticDeallocation;
}
/**
* Describes the consumers visibility to the allocated resource.
*/
public ConsumerVisibility getConsumerVisibility() {
return consumerVisibility;
}
/**
* This property specifies the upper bound, or maximum amount of resource that will be granted
* for this allocation. For example, a system which supports memory paging may support setting
* the Limit of a Memory allocation below that of the VirtualQuantity, thus forcing paging to
* occur for this allocation. The value of the Limit property is expressed in the unit specified
* by the value of the AllocationUnits property.
*/
public Long getLimit() {
return limit;
}
/**
* Specifies how this resource maps to underlying resourcesIf the HostResource array contains any
* entries, this property reflects how the resource maps to those specific resources.
*/
public MappingBehavior getMappingBehavior() {
return mappingBehavior;
}
/**
* A string that describes the resource type when a well defined value is not available and
* ResourceType has the value "Other".
*/
public String getOtherResourceType() {
return otherResourceType;
}
/**
* The Parent of the resource. For example, a controller for the current allocation
*/
public String getParent() {
return parent;
}
/**
* This property specifies which ResourcePool the resource is currently allocated from, or which
* ResourcePool the resource will be allocated from when the allocation occurs.
*/
public String getPoolID() {
return poolID;
}
/**
* This property specifies the amount of resource guaranteed to be available for this allocation.
* On system which support over-commitment of resources, this value is typically used for
* admission control to prevent an an allocation from being accepted thus preventing starvation.
* The value of the Reservation property is expressed in the unit specified by the value of the
* AllocationUnits property.
*/
public Long getReservation() {
return reservation;
}
/**
* A string describing an implementation specific sub-type for this resource. F
*/
public String getResourceSubType() {
return resourceSubType;
}
/**
* The type of resource this allocation setting represents.
*/
public ResourceType getResourceType() {
return resourceType;
}
/**
* This property specifies the quantity of resources presented to the consumer. For example, when
* ResourceType=Processor, this property would reflect the number of discrete Processors
* presented to the virtual computer system. When ResourceType=Memory, this property could
* reflect the number of MB reported to the virtual computer system. The value of the
* VirtualQuantity property should be expressed in units as defined by the value of the
* VirtualQuantityUnits property.
*/
public Long getVirtualQuantity() {
return virtualQuantity;
}
/**
* This property specifies the units used by the VirtualQuantity property. For example - if
* ResourceType=Processor, the value of the VirtualQuantityUnits property may be set to "count",
* indicating that the value of the VirtualQuantity property is expressed as a count. - if
* ResourceType=Memory, the value of the VirtualQuantityUnits property may be set to
* "bytes*10^3", indicating that the value of the VirtualQuantity property is expressed in
* kilobyte. It is expected that profiles constrain the units that apply in context of particular
* resource types. The value of this property shall be a legal value of the Programmatic Units
* qualifier as defined in Annex C.1 of DSP0004 V2.5 or later.
*/
public String getVirtualQuantityUnits() {
return virtualQuantityUnits;
}
/**
* This property specifies a relative priority for this allocation in relation to other
* allocations from the same ResourcePool. This property has no unit of measure, and is only
* relevant when compared to other allocations vying for the same host resources.
*/
public Integer getWeight() {
return weight;
}
/**
* The thing to which this resource is connected. For example, a named network or switch port.
*/
public List<String> getConnections() {
return connections;
}
/**
* This property exposes specific assignment of resources. Each non-null value of the
* HostResource property shall be formated as a URI per RFC3986. If this resource is modeled then
* a value should be a WBEM URI (DSP0207). If the resource is not modeled then see the
* appropriate profile. Profiles may further constrain the type of URI. A NULL value or empty
* array requests the implementation decide the kind of host resource. If the virtual resource is
* mapped to more than oneunderlying resource, this property may be left NULL. If NULL, the
* DeviceAllocatedFromPool or ResourceAllocationFromPool associations may be used to determine
* the pool of host resources this virtual resource may use. If specific assignment is utilized,
* all underlying resources used by this virtual resource should be listed.The kind of dependency
* is specified by the ConsumerVisibility and the MappingBehavior properties. Typically the array
* contains one item, however multiple host resources may be specified. A client may set the
* value(s) to indicate that the requested virtual resource allocation be based on host resources
* that are identified by element values.
*/
public List<String> getHostResources() {
return hostResources;
}
public Builder toBuilder() {
return new Builder().fromResourceAllocationSettingData(this);
}
@Override
public String toString() {
return String
.format(
"[elementName=%s, instanceID=%s, caption=%s, description=%s, address=%s, addressOnParent=%s, allocationUnits=%s, automaticAllocation=%s, automaticDeallocation=%s, connections=%s, consumerVisibility=%s, hostResources=%s, limit=%s, mappingBehavior=%s, otherResourceType=%s, parent=%s, poolID=%s, reservation=%s, resourceSubType=%s, resourceType=%s, virtualQuantity=%s, virtualQuantityUnits=%s, weight=%s]",
elementName, instanceID, caption, description, address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, connections, consumerVisibility, hostResources,
limit, mappingBehavior, otherResourceType, parent, poolID, reservation, resourceSubType,
resourceType, virtualQuantity, virtualQuantityUnits, weight);
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + ((addressOnParent == null) ? 0 : addressOnParent.hashCode());
result = prime * result + ((resourceSubType == null) ? 0 : resourceSubType.hashCode());
result = prime * result + ((resourceType == null) ? 0 : resourceType.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;
ResourceAllocationSettingData other = (ResourceAllocationSettingData) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (addressOnParent == null) {
if (other.addressOnParent != null)
return false;
} else if (!addressOnParent.equals(other.addressOnParent))
return false;
if (resourceSubType == null) {
if (other.resourceSubType != null)
return false;
} else if (!resourceSubType.equals(other.resourceSubType))
return false;
if (resourceType == null) {
if (other.resourceType != null)
return false;
} else if (!resourceType.equals(other.resourceType))
return false;
return true;
}
}

View File

@ -0,0 +1,126 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim;
import static com.google.common.base.Preconditions.checkNotNull;
/**
*
* The type of resource this allocation setting represents.
*
* @author Adrian Cole
* @see <a
* href="http://dmtf.org/sites/default/files/cim/cim_schema_v2280/cim_schema_2.28.0Final-Doc.zip"
* />
*
*/
public abstract class SettingData {
public static Builder builder() {
return new Builder();
}
public static class Builder {
protected String elementName;
protected String instanceID;
/**
* @see SettingData#getElementName
*/
public Builder elementName(String elementName) {
this.elementName = checkNotNull(elementName, "elementName");
return this;
}
/**
* @see SettingData#getInstanceID
*/
public Builder instanceID(String instanceID) {
this.instanceID = checkNotNull(instanceID, "instanceID");
return this;
}
public Builder fromSettingData(SettingData in) {
return elementName(in.getElementName()).instanceID(in.getInstanceID());
}
}
protected final String elementName;
protected final String instanceID;
public SettingData(String elementName, String instanceID) {
this.elementName = checkNotNull(elementName, "elementName");
this.instanceID = checkNotNull(instanceID, "instanceID");
}
/**
* The user-friendly name for this instance of SettingData. In addition, the user-friendly name
* can be used as an index property for a search or query. (Note: The name does not have to be
* unique within a namespace.)
*/
public String getElementName() {
return elementName;
}
/**
* Within the scope of the instantiating Namespace, InstanceID opaquely and uniquely identifies
* an instance of this class.
*/
public String getInstanceID() {
return instanceID;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((elementName == null) ? 0 : elementName.hashCode());
result = prime * result + ((instanceID == null) ? 0 : instanceID.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;
SettingData other = (SettingData) obj;
if (elementName == null) {
if (other.elementName != null)
return false;
} else if (!elementName.equals(other.elementName))
return false;
if (instanceID == null) {
if (other.instanceID != null)
return false;
} else if (!instanceID.equals(other.instanceID))
return false;
return true;
}
@Override
public String toString() {
return String.format("[elementName=%s, instanceID=%s]", elementName, instanceID);
}
}

View File

@ -0,0 +1,575 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim;
import static com.google.common.base.Preconditions.checkNotNull;
import java.net.URI;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
/**
*
* CIM_VirtualSystemSettingData defines the virtual aspects of a virtual system through a set of
* virtualization specific properties. CIM_VirtualSystemSettingData is also used as the top level
* class of virtual system configurations. Virtual system configurations model configuration
* information about virtual systems and their components. A virtual system configuration consists
* of one top-level instance of class CIM_VirtualSystemSettingData that aggregates a number of
* instances of class CIM_ResourceAllocationSettingData, using association CIM_ConcreteComponent.
* Virtual system configurations may for example be used to reflect configurations of - virtual
* systems that are defined at a virtualization platform, - virtual systems that are currently
* active, - input requests to create new virtual systems, - input requests to modify existing
* virtual systems, or - snapshots of virtual systems.
*
* @author Adrian Cole
* @see <a
* href="http://dmtf.org/sites/default/files/cim/cim_schema_v2280/cim_schema_2.28.0Final-Doc.zip"
* />
*
*/
public class VirtualSystemSettingData extends ManagedElement {
public static Builder builder() {
return new Builder();
}
public static class Builder extends ManagedElement.Builder {
private AutomaticRecoveryAction automaticRecoveryAction;
private AutomaticShutdownAction automaticShutdownAction;
private AutomaticStartupAction automaticStartupAction;
private Long automaticStartupActionDelay;
private Integer automaticStartupActionSequenceNumber;
private URI configurationDataRoot;
private URI configurationFile;
private String configurationID;
private Date creationTime;
private URI logDataRoot;
private URI recoveryFile;
private URI snapshotDataRoot;
private URI suspendDataRoot;
private URI swapFileDataRoot;
private String virtualSystemIdentifier;
private Set<String> virtualSystemTypes = Sets.newLinkedHashSet();
private String notes;
public Builder automaticRecoveryAction(AutomaticRecoveryAction automaticRecoveryAction) {
this.automaticRecoveryAction = automaticRecoveryAction;
return this;
}
public Builder automaticShutdownAction(AutomaticShutdownAction automaticShutdownAction) {
this.automaticShutdownAction = automaticShutdownAction;
return this;
}
public Builder automaticStartupAction(AutomaticStartupAction automaticStartupAction) {
this.automaticStartupAction = automaticStartupAction;
return this;
}
public Builder automaticStartupActionDelay(Long automaticStartupActionDelay) {
this.automaticStartupActionDelay = automaticStartupActionDelay;
return this;
}
public Builder automaticStartupActionSequenceNumber(Integer automaticStartupActionSequenceNumber) {
this.automaticStartupActionSequenceNumber = automaticStartupActionSequenceNumber;
return this;
}
public Builder configurationDataRoot(URI configurationDataRoot) {
this.configurationDataRoot = configurationDataRoot;
return this;
}
public Builder configurationFile(URI configurationFile) {
this.configurationFile = configurationFile;
return this;
}
public Builder configurationID(String configurationID) {
this.configurationID = configurationID;
return this;
}
public Builder creationTime(Date creationTime) {
this.creationTime = creationTime;
return this;
}
public Builder logDataRoot(URI logDataRoot) {
this.logDataRoot = logDataRoot;
return this;
}
public Builder recoveryFile(URI recoveryFile) {
this.recoveryFile = recoveryFile;
return this;
}
public Builder snapshotDataRoot(URI snapshotDataRoot) {
this.snapshotDataRoot = snapshotDataRoot;
return this;
}
public Builder suspendDataRoot(URI suspendDataRoot) {
this.suspendDataRoot = suspendDataRoot;
return this;
}
public Builder swapFileDataRoot(URI swapFileDataRoot) {
this.swapFileDataRoot = swapFileDataRoot;
return this;
}
public Builder virtualSystemIdentifier(String virtualSystemIdentifier) {
this.virtualSystemIdentifier = virtualSystemIdentifier;
return this;
}
public Builder virtualSystemTypes(Iterable<String> virtualSystemTypes) {
this.virtualSystemTypes = ImmutableSet.copyOf(checkNotNull(virtualSystemTypes, "virtualSystemTypes"));
return this;
}
public Builder virtualSystemType(String virtualSystemType) {
this.virtualSystemTypes.add(checkNotNull(virtualSystemType, "virtualSystemType"));
return this;
}
public Builder notes(String notes) {
this.notes = notes;
return this;
}
public VirtualSystemSettingData build() {
return new VirtualSystemSettingData(elementName, instanceID, caption, description, automaticRecoveryAction,
automaticShutdownAction, automaticStartupAction, automaticStartupActionDelay,
automaticStartupActionSequenceNumber, configurationDataRoot, configurationFile, configurationID,
creationTime, logDataRoot, recoveryFile, snapshotDataRoot, suspendDataRoot, swapFileDataRoot,
virtualSystemIdentifier, virtualSystemTypes, notes);
}
public Builder fromVirtualSystemSettingData(VirtualSystemSettingData in) {
return fromManagedElement(in).automaticRecoveryAction(in.getAutomaticRecoveryAction())
.automaticShutdownAction(in.getAutomaticShutdownAction()).automaticStartupAction(
in.getAutomaticStartupAction()).automaticStartupActionDelay(
in.getAutomaticStartupActionDelay()).automaticStartupActionSequenceNumber(
in.getAutomaticStartupActionSequenceNumber()).configurationDataRoot(
in.getConfigurationDataRoot()).configurationFile(in.getConfigurationFile()).configurationID(
in.getConfigurationID()).creationTime(in.getCreationTime()).logDataRoot(in.getLogDataRoot())
.recoveryFile(in.getRecoveryFile()).snapshotDataRoot(in.getSnapshotDataRoot()).suspendDataRoot(
in.getSuspendDataRoot()).swapFileDataRoot(in.getSwapFileDataRoot()).virtualSystemIdentifier(
in.getVirtualSystemIdentifier()).virtualSystemTypes(in.getVirtualSystemTypes()).notes(
in.getNotes());
}
/**
* {@inheritDoc}
*/
@Override
public Builder fromManagedElement(ManagedElement in) {
return Builder.class.cast(super.fromManagedElement(in));
}
/**
* {@inheritDoc}
*/
@Override
public Builder caption(String caption) {
return Builder.class.cast(super.caption(caption));
}
/**
* {@inheritDoc}
*/
@Override
public Builder description(String description) {
return Builder.class.cast(super.description(description));
}
/**
* {@inheritDoc}
*/
@Override
public Builder elementName(String elementName) {
return Builder.class.cast(super.elementName(elementName));
}
/**
* {@inheritDoc}
*/
@Override
public Builder instanceID(String instanceID) {
return Builder.class.cast(super.instanceID(instanceID));
}
}
/**
* Action to take for the virtual system when the software executed by the virtual system fails.
* Failures in this case means a failure that is detectable by the host platform, such as a
* non-interuptable wait state condition.
*/
public static enum AutomaticRecoveryAction {
NONE(2),
RESTART(3),
REVERT_TO_SNAPSHOT(4);
protected final int code;
AutomaticRecoveryAction(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, AutomaticRecoveryAction> AUTOMATIC_RECOVERY_ACTION_BY_ID = Maps.uniqueIndex(
ImmutableSet.copyOf(AutomaticRecoveryAction.values()), new Function<AutomaticRecoveryAction, Integer>() {
@Override
public Integer apply(AutomaticRecoveryAction input) {
return input.code;
}
});
public static AutomaticRecoveryAction fromValue(String automaticRecoveryAction) {
return AUTOMATIC_RECOVERY_ACTION_BY_ID.get(new Integer(checkNotNull(automaticRecoveryAction,
"automaticRecoveryAction")));
}
}
/**
* Action to take for the virtual system when the host is shut down.
*/
public static enum AutomaticShutdownAction {
TURN_OFF(2),
SAVE_STATE(3),
SHUTDOWN(4);
protected final int code;
AutomaticShutdownAction(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, AutomaticShutdownAction> AUTOMATIC_SHUTDOWN_ACTION_BY_ID = Maps.uniqueIndex(
ImmutableSet.copyOf(AutomaticShutdownAction.values()), new Function<AutomaticShutdownAction, Integer>() {
@Override
public Integer apply(AutomaticShutdownAction input) {
return input.code;
}
});
public static AutomaticShutdownAction fromValue(String automaticShutdownAction) {
return AUTOMATIC_SHUTDOWN_ACTION_BY_ID.get(new Integer(checkNotNull(automaticShutdownAction,
"automaticShutdownAction")));
}
}
/**
* Action to take for the virtual system when the host is started.
*/
public static enum AutomaticStartupAction {
NONE(2),
RESTART_IF_PREVIOUSLY_ACTIVE(3),
ALWAYS_STARTUP(4);
protected final int code;
AutomaticStartupAction(int code) {
this.code = code;
}
public String value() {
return code + "";
}
protected final static Map<Integer, AutomaticStartupAction> AUTOMATIC_STARTUP_ACTION_BY_ID = Maps.uniqueIndex(
ImmutableSet.copyOf(AutomaticStartupAction.values()), new Function<AutomaticStartupAction, Integer>() {
@Override
public Integer apply(AutomaticStartupAction input) {
return input.code;
}
});
public static AutomaticStartupAction fromValue(String automaticStartupAction) {
return AUTOMATIC_STARTUP_ACTION_BY_ID.get(new Integer(checkNotNull(automaticStartupAction,
"automaticStartupAction")));
}
}
private final AutomaticRecoveryAction automaticRecoveryAction;
private final AutomaticShutdownAction automaticShutdownAction;
private final AutomaticStartupAction automaticStartupAction;
private final Long automaticStartupActionDelay;
private final Integer automaticStartupActionSequenceNumber;
private final URI configurationDataRoot;
private final URI configurationFile;
private final String configurationID;
private final Date creationTime;
private final URI logDataRoot;
private final URI recoveryFile;
private final URI snapshotDataRoot;
private final URI suspendDataRoot;
private final URI swapFileDataRoot;
private final String virtualSystemIdentifier;
private final Set<String> virtualSystemTypes;
private final String notes;
public VirtualSystemSettingData(String elementName, String instanceID, String caption, String description,
AutomaticRecoveryAction automaticRecoveryAction, AutomaticShutdownAction automaticShutdownAction,
AutomaticStartupAction automaticStartupAction, Long automaticStartupActionDelay,
Integer automaticStartupActionSequenceNumber, URI configurationDataRoot, URI configurationFile,
String configurationID, Date creationTime, URI logDataRoot, URI recoveryFile, URI snapshotDataRoot,
URI suspendDataRoot, URI swapFileDataRoot, String virtualSystemIdentifier,
Iterable<String> virtualSystemTypes, String notes) {
super(elementName, instanceID, caption, description);
this.automaticRecoveryAction = automaticRecoveryAction;
this.automaticShutdownAction = automaticShutdownAction;
this.automaticStartupAction = automaticStartupAction;
this.automaticStartupActionDelay = automaticStartupActionDelay;
this.automaticStartupActionSequenceNumber = automaticStartupActionSequenceNumber;
this.configurationDataRoot = configurationDataRoot;
this.configurationFile = configurationFile;
this.configurationID = configurationID;
this.creationTime = creationTime;
this.logDataRoot = logDataRoot;
this.recoveryFile = recoveryFile;
this.snapshotDataRoot = snapshotDataRoot;
this.suspendDataRoot = suspendDataRoot;
this.swapFileDataRoot = swapFileDataRoot;
this.virtualSystemIdentifier = virtualSystemIdentifier;
this.virtualSystemTypes = ImmutableSet.copyOf(checkNotNull(virtualSystemTypes, "virtualSystemTypes"));
this.notes = notes;
}
/**
* Action to take for the virtual system when the software executed by the virtual system fails.
* Failures in this case means a failure that is detectable by the host platform, such as a
* non-interuptable wait state condition.
*/
public AutomaticRecoveryAction getAutomaticRecoveryAction() {
return automaticRecoveryAction;
}
/**
* Action to take for the virtual system when the host is shut down.
*/
public AutomaticShutdownAction getAutomaticShutdownAction() {
return automaticShutdownAction;
}
/**
* Action to take for the virtual system when the host is started.
*/
public AutomaticStartupAction getAutomaticStartupAction() {
return automaticStartupAction;
}
/**
* Delay applicable to startup action. The value shall be in the interval variant of the datetime
* datatype.
*/
public Long getAutomaticStartupActionDelay() {
return automaticStartupActionDelay;
}
/**
* Number indicating the relative sequence of virtual system activation when the host system is
* started. A lower number indicates earlier activation. If one or more configurations show the
* same value, the sequence is implementation dependent. A value of 0 indicates that the sequence
* is implementation dependent.
*/
public Integer getAutomaticStartupActionSequenceNumber() {
return automaticStartupActionSequenceNumber;
}
/**
* Filepath of a directory where information about the virtual system configuration is
* stored.Format shall be URI based on RFC 2079.
*/
public URI getConfigurationDataRoot() {
return configurationDataRoot;
}
/**
* Filepath of a file where information about the virtual system configuration is stored. A
* relative path appends to the value of the ConfigurationDataRoot property.Format shall be URI
* based on RFC 2079.
*/
public URI getConfigurationFile() {
return configurationFile;
}
/**
* Unique id of the virtual system configuration. Note that the ConfigurationID is different from
* the InstanceID as it is assigned by the implementation to a virtual system or a virtual system
* configuration. It is not a key, and the same value may occur within more than one instance.
*/
public String getConfigurationID() {
return configurationID;
}
/**
* Time when the virtual system configuration was created.
*/
public Date getCreationTime() {
return creationTime;
}
/**
* Filepath of a directory where log information about the virtual system is stored. A relative
* path appends to the value of the ConfigurationDataRoot property.Format shall be URI based on
* RFC 2079.
*/
public URI getLogDataRoot() {
return logDataRoot;
}
/**
* Filepath of a file where recovery relateded information of the virtual system is stored.Format
* shall be URI based on RFC 2079.
*/
public URI getRecoveryFile() {
return recoveryFile;
}
/**
* Filepath of a directory where information about virtual system snapshots is stored. A relative
* path appends to the value of the ConfigurationDataRoot property.Format shall be URI based on
* RFC 2079.
*/
public URI getSnapshotDataRoot() {
return snapshotDataRoot;
}
/**
* Filepath of a directory where suspend related information about the virtual system is stored.
* A relative path appends to the value of the ConfigurationDataRoot property.Format shall be URI
* based on RFC 2079.
*/
public URI getSuspendDataRoot() {
return suspendDataRoot;
}
/**
* Filepath of a directory where swapfiles of the virtual system are stored. A relative path
* appends to the value of the ConfigurationDataRoot property.Format shall be URI based on RFC
* 2079.
*/
public URI getSwapFileDataRoot() {
return swapFileDataRoot;
}
/**
* VirtualSystemIdentifier shall reflect a unique name for the system as it is used within the
* virtualization platform. Note that the VirtualSystemIdentifier is not the hostname assigned to
* the operating system instance running within the virtual system, nor is it an IP address or
* MAC address assigned to any of its network ports. On create requests VirtualSystemIdentifier
* may contain implementation specific rules (like simple patterns or regular expresssion) that
* may be interpreted by the implementation when assigning a VirtualSystemIdentifier.
*/
public String getVirtualSystemIdentifier() {
return virtualSystemIdentifier;
}
/**
* VirtualSystemType shall reflect a particular type of virtual system.
*/
public Set<String> getVirtualSystemTypes() {
return virtualSystemTypes;
}
/**
* End-user supplied notes that are related to the virtual system.
*/
public String getNotes() {
return notes;
}
public Builder toBuilder() {
return builder().fromVirtualSystemSettingData(this);
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((virtualSystemIdentifier == null) ? 0 : virtualSystemIdentifier.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;
VirtualSystemSettingData other = (VirtualSystemSettingData) obj;
if (virtualSystemIdentifier == null) {
if (other.virtualSystemIdentifier != null)
return false;
} else if (!virtualSystemIdentifier.equals(other.virtualSystemIdentifier))
return false;
return true;
}
@Override
public String toString() {
return String
.format(
"[elementName=%s, instanceID=%s, caption=%s, description=%s, automaticRecoveryAction=%s, automaticShutdownAction=%s, automaticStartupAction=%s, automaticStartupActionDelay=%s, automaticStartupActionSequenceNumber=%s, configurationDataRoot=%s, configurationFile=%s, configurationID=%s, creationTime=%s, logDataRoot=%s, notes=%s, recoveryFile=%s, snapshotDataRoot=%s, suspendDataRoot=%s, swapFileDataRoot=%s, virtualSystemIdentifier=%s, virtualSystemTypes=%s]",
elementName, instanceID, caption, description, automaticRecoveryAction,
automaticShutdownAction, automaticStartupAction, automaticStartupActionDelay,
automaticStartupActionSequenceNumber, configurationDataRoot, configurationFile,
configurationID, creationTime, logDataRoot, notes, recoveryFile, snapshotDataRoot,
suspendDataRoot, swapFileDataRoot, virtualSystemIdentifier, virtualSystemTypes);
}
}

View File

@ -0,0 +1,76 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim.functions;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.transform;
import javax.inject.Singleton;
import org.jclouds.cim.CIMPredicates;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl;
import com.google.common.base.Function;
/**
* @author Adrian Cole
*/
@Singleton
public class HardwareBuilderFromResourceAllocations implements
Function<Iterable<? extends ResourceAllocationSettingData>, HardwareBuilder> {
@Override
public HardwareBuilder apply(Iterable<? extends ResourceAllocationSettingData> from) {
HardwareBuilder builder = new HardwareBuilder();
builder.volumes(transform(filter(from, CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE,
ResourceType.BASE_PARTITIONABLE_UNIT, ResourceType.PARTITIONABLE_UNIT)),
new Function<ResourceAllocationSettingData, Volume>() {
@Override
public Volume apply(ResourceAllocationSettingData from) {
return HardwareBuilderFromResourceAllocations.this.apply(from);
}
}));
builder.ram((int) find(from, CIMPredicates.resourceTypeIn(ResourceType.MEMORY)).getVirtualQuantity().longValue());
builder.processors(transform(filter(from, CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR)),
new Function<ResourceAllocationSettingData, Processor>() {
@Override
public Processor apply(ResourceAllocationSettingData arg0) {
return new Processor(arg0.getVirtualQuantity(), 1);
}
}));
return builder;
}
public Volume apply(ResourceAllocationSettingData from) {
return new VolumeImpl(from.getAddressOnParent() + "", Volume.Type.LOCAL, from.getVirtualQuantity() == null ? null
: from.getVirtualQuantity() / 1024 / 1024f, null, "0".equals(from.getAddressOnParent())
|| ResourceType.BASE_PARTITIONABLE_UNIT.equals(from.getResourceType()), true);
}
}

View File

@ -0,0 +1,130 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim.xml;
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.
* ====================================================================
*/
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.ResourceAllocationSettingData.ConsumerVisibility;
import org.jclouds.cim.ResourceAllocationSettingData.MappingBehavior;
import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
import org.jclouds.http.functions.ParseSax;
import org.xml.sax.Attributes;
/**
* @author Adrian Cole
*/
public class ResourceAllocationSettingDataHandler extends ParseSax.HandlerWithResult<ResourceAllocationSettingData> {
protected StringBuilder currentText = new StringBuilder();
protected ResourceAllocationSettingData.Builder builder = ResourceAllocationSettingData.builder();
public ResourceAllocationSettingData getResult() {
try {
return builder.build();
} finally {
builder = ResourceAllocationSettingData.builder();
}
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) {
}
@Override
public void endElement(String uri, String localName, String qName) {
String current = currentOrNull(currentText);
if (current != null) {
if (equalsOrSuffix(qName, "ElementName")) {
builder.elementName(current);
} else if (equalsOrSuffix(qName, "InstanceID")) {
builder.instanceID(current);
} else if (equalsOrSuffix(qName, "Caption")) {
builder.caption(current);
} else if (equalsOrSuffix(qName, "Description")) {
builder.description(current);
} else if (equalsOrSuffix(qName, "Address")) {
builder.address(current);
} else if (equalsOrSuffix(qName, "AddressOnParent")) {
builder.addressOnParent(current);
} else if (equalsOrSuffix(qName, "AllocationUnits")) {
builder.allocationUnits(current);
} else if (equalsOrSuffix(qName, "AutomaticAllocation")) {
builder.automaticAllocation(new Boolean(current));
} else if (equalsOrSuffix(qName, "AutomaticDeallocation")) {
builder.automaticDeallocation(new Boolean(current));
} else if (equalsOrSuffix(qName, "ConsumerVisibility")) {
builder.consumerVisibility(ConsumerVisibility.fromValue(current));
} else if (equalsOrSuffix(qName, "Limit")) {
builder.limit(new Long(current));
} else if (equalsOrSuffix(qName, "MappingBehavior")) {
builder.mappingBehavior(MappingBehavior.fromValue(current));
} else if (equalsOrSuffix(qName, "OtherResourceType")) {
builder.otherResourceType(current);
} else if (equalsOrSuffix(qName, "Parent")) {
builder.parent(current);
} else if (equalsOrSuffix(qName, "PoolID")) {
builder.poolID(current);
} else if (equalsOrSuffix(qName, "Reservation")) {
builder.reservation(new Long(current));
} else if (equalsOrSuffix(qName, "ResourceSubType")) {
builder.resourceSubType(current);
} else if (equalsOrSuffix(qName, "ResourceType")) {
builder.resourceType(ResourceType.fromValue(current));
} else if (equalsOrSuffix(qName, "VirtualQuantity")) {
builder.virtualQuantity(new Long(current));
} else if (equalsOrSuffix(qName, "VirtualQuantityUnits")) {
builder.virtualQuantityUnits(current);
} else if (equalsOrSuffix(qName, "Weight")) {
builder.weight(new Integer(current));
} else if (equalsOrSuffix(qName, "Connection")) {
builder.connection(current);
} else if (equalsOrSuffix(qName, "HostResource")) {
builder.hostResource(current);
}
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -0,0 +1,125 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.cim.xml;
import static com.google.common.base.Predicates.equalTo;
import static com.google.common.base.Predicates.not;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import java.net.URI;
import org.jclouds.cim.VirtualSystemSettingData;
import org.jclouds.cim.VirtualSystemSettingData.AutomaticRecoveryAction;
import org.jclouds.cim.VirtualSystemSettingData.AutomaticShutdownAction;
import org.jclouds.cim.VirtualSystemSettingData.AutomaticStartupAction;
import org.jclouds.http.functions.ParseSax;
import org.xml.sax.Attributes;
import com.google.common.base.Function;
import com.google.common.base.Splitter;
/**
* @author Adrian Cole
*/
public class VirtualSystemSettingDataHandler extends ParseSax.HandlerWithResult<VirtualSystemSettingData> {
protected StringBuilder currentText = new StringBuilder();
protected VirtualSystemSettingData.Builder builder = VirtualSystemSettingData.builder();
public VirtualSystemSettingData getResult() {
try {
return builder.build();
} finally {
builder = VirtualSystemSettingData.builder();
}
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) {
}
@Override
public void endElement(String uri, String localName, String qName) {
String current = currentOrNull(currentText);
if (current != null) {
if (equalsOrSuffix(qName, "ElementName")) {
builder.elementName(current);
} else if (equalsOrSuffix(qName, "InstanceID")) {
builder.instanceID(current);
} else if (equalsOrSuffix(qName, "Caption")) {
builder.caption(current);
} else if (equalsOrSuffix(qName, "Description")) {
builder.description(current);
} else if (equalsOrSuffix(qName, "AutomaticRecoveryAction")) {
builder.automaticRecoveryAction(AutomaticRecoveryAction.fromValue(current));
} else if (equalsOrSuffix(qName, "AutomaticShutdownAction")) {
builder.automaticShutdownAction(AutomaticShutdownAction.fromValue(current));
} else if (equalsOrSuffix(qName, "AutomaticStartupAction")) {
builder.automaticStartupAction(AutomaticStartupAction.fromValue(current));
} else if (equalsOrSuffix(qName, "AutomaticStartupActionDelay")) {
// TODO parse the format for intervals: ddddddddhhmmss.mmmmmm:000
builder.automaticStartupActionDelay(null);
} else if (equalsOrSuffix(qName, "AutomaticStartupActionSequenceNumber")) {
builder.automaticStartupActionSequenceNumber(new Integer(current));
} else if (equalsOrSuffix(qName, "ConfigurationDataRoot")) {
builder.configurationDataRoot(URI.create(current));
} else if (equalsOrSuffix(qName, "ConfigurationFile")) {
builder.configurationFile(URI.create(current));
} else if (equalsOrSuffix(qName, "ConfigurationID")) {
builder.configurationID(current);
} else if (equalsOrSuffix(qName, "CreationTime")) {
// TODO parse the format for timestamps: yyyymmddhhmmss.mmmmmmsutc
builder.creationTime(null);
} else if (equalsOrSuffix(qName, "LogDataRoot")) {
builder.logDataRoot(URI.create(current));
} else if (equalsOrSuffix(qName, "RecoveryFile")) {
builder.recoveryFile(URI.create(current));
} else if (equalsOrSuffix(qName, "RecoveryFile")) {
builder.recoveryFile(URI.create(current));
} else if (equalsOrSuffix(qName, "SuspendDataRoot")) {
builder.suspendDataRoot(URI.create(current));
} else if (equalsOrSuffix(qName, "SwapFileDataRoot")) {
builder.swapFileDataRoot(URI.create(current));
} else if (equalsOrSuffix(qName, "VirtualSystemIdentifier")) {
builder.virtualSystemIdentifier(current);
} else if (equalsOrSuffix(qName, "VirtualSystemType")) {
builder.virtualSystemTypes(filter(transform(Splitter.on(',').split(current),
new Function<String, String>() {
@Override
public String apply(String input) {
return input.trim();
}
}), not(equalTo(""))));
} else if (equalsOrSuffix(qName, "Notes")) {
builder.notes(current);
}
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -17,10 +17,9 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.compute.domain.os; package org.jclouds.compute.domain;
import org.jclouds.compute.domain.OperatingSystem; import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.compute.domain.OsFamily;
import com.google.common.annotations.Beta; import com.google.common.annotations.Beta;
@ -33,6 +32,14 @@ import com.google.common.annotations.Beta;
@Beta @Beta
public class CIMOperatingSystem extends OperatingSystem { public class CIMOperatingSystem extends OperatingSystem {
public static CIMOperatingSystem toComputeOs(org.jclouds.ovf.OperatingSystemSection os) {
return new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(os.getId()), "", null, os.getDescription());
}
public static CIMOperatingSystem toComputeOs(OvfEnvelope ovf) {
return toComputeOs(ovf.getVirtualSystem().getOperatingSystem());
}
public enum OSType { public enum OSType {
/** /**
* Other * Other
@ -201,9 +208,12 @@ public class CIMOperatingSystem extends OperatingSystem {
/** /**
* Oracle Enterprise Linux 64-bit * Oracle Enterprise Linux 64-bit
*/ */
ORACLE_ENTERPRISE_LINUX_64(109, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true), UNRECOGNIZED( ORACLE_ENTERPRISE_LINUX_64(109, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true),
Integer.MAX_VALUE, "UNRECOGNIZED", null, true); /**
* eComStation 32-bitx
*/
ECOMSTATION_32(109, "eComStation 32-bitx", OsFamily.UNRECOGNIZED, false), UNRECOGNIZED(Integer.MAX_VALUE,
"UNRECOGNIZED", null, true);
private final int code; private final int code;
public int getCode() { public int getCode() {

View File

@ -32,6 +32,7 @@ import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location; import org.jclouds.domain.Location;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
/** /**
@ -48,8 +49,8 @@ public class HardwareBuilder extends ComputeMetadataBuilder {
super(ComputeType.HARDWARE); super(ComputeType.HARDWARE);
} }
public HardwareBuilder processors(List<Processor> processors) { public HardwareBuilder processors(Iterable<Processor> processors) {
this.processors = checkNotNull(processors, "processors"); this.processors = ImmutableList.copyOf(checkNotNull(processors, "processors"));
return this; return this;
} }
@ -58,8 +59,8 @@ public class HardwareBuilder extends ComputeMetadataBuilder {
return this; return this;
} }
public HardwareBuilder volumes(List<Volume> volumes) { public HardwareBuilder volumes(Iterable<Volume> volumes) {
this.volumes = checkNotNull(volumes, "volumes"); this.volumes = ImmutableList.copyOf(checkNotNull(volumes, "volumes"));
return this; return this;
} }

View File

@ -17,9 +17,8 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.compute.domain.os; package org.jclouds.compute.domain;
import org.jclouds.compute.domain.OsFamily;
/** /**
* *

View File

@ -17,7 +17,7 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf.network; package org.jclouds.ovf;
/** /**
* *

View File

@ -17,14 +17,11 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf; package org.jclouds.ovf;
import java.util.Set; import java.util.Set;
import org.jclouds.vcloud.domain.ovf.network.Network; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
/** /**
* The NetworkSection element shall list all logical networks used in the OVF package. * The NetworkSection element shall list all logical networks used in the OVF package.
@ -33,11 +30,11 @@ import com.google.common.collect.Sets;
*/ */
public class NetworkSection { public class NetworkSection {
private final String info; private final String info;
private final Set<Network> networks = Sets.newLinkedHashSet(); private final Set<Network> networks;
public NetworkSection(String info, Iterable<Network> networks) { public NetworkSection(String info, Iterable<Network> networks) {
this.info = info; this.info = info;
Iterables.addAll(this.networks, networks); this.networks = ImmutableSet.<Network> copyOf(networks);
} }
public String getInfo() { public String getInfo() {

View File

@ -17,7 +17,7 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf; package org.jclouds.ovf;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -17,7 +17,7 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf; package org.jclouds.ovf;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;

View File

@ -17,15 +17,16 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf; package org.jclouds.ovf;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set; import java.util.Set;
import org.jclouds.cim.ResourceAllocationSettingData;
import org.jclouds.cim.VirtualSystemSettingData;
import com.google.common.collect.Iterables; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
/** /**
* *
@ -38,25 +39,25 @@ import com.google.common.collect.Sets;
public class VirtualHardwareSection { public class VirtualHardwareSection {
protected final String info; protected final String info;
protected final System virtualSystem; protected final VirtualSystemSettingData virtualSystem;
protected final Set<ResourceAllocation> resourceAllocations = Sets.newLinkedHashSet(); protected final Set<ResourceAllocationSettingData> resourceAllocations;
public VirtualHardwareSection(String info, System virtualSystem, public VirtualHardwareSection(String info, VirtualSystemSettingData virtualSystem,
Iterable<? extends ResourceAllocation> resourceAllocations) { Iterable<? extends ResourceAllocationSettingData> resourceAllocations) {
this.info = info; this.info = info;
this.virtualSystem = virtualSystem; this.virtualSystem = virtualSystem;
Iterables.addAll(this.resourceAllocations, checkNotNull(resourceAllocations, "resourceAllocations")); this.resourceAllocations = ImmutableSet.copyOf(checkNotNull(resourceAllocations, "resourceAllocations"));
} }
public String getInfo() { public String getInfo() {
return info; return info;
} }
public System getSystem() { public VirtualSystemSettingData getSystem() {
return virtualSystem; return virtualSystem;
} }
public Set<? extends ResourceAllocation> getResourceAllocations() { public Set<? extends ResourceAllocationSettingData> getResourceAllocations() {
return resourceAllocations; return resourceAllocations;
} }

View File

@ -17,13 +17,14 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.domain.ovf; package org.jclouds.ovf;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set; import java.util.Set;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;

View File

@ -17,15 +17,18 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.xml.ovf; package org.jclouds.ovf.xml;
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.domain.ovf.NetworkSection; import org.jclouds.ovf.Network;
import org.jclouds.vcloud.domain.ovf.network.Network; import org.jclouds.ovf.NetworkSection;
import org.jclouds.vcloud.util.Utils; import org.jclouds.util.SaxUtils;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -50,19 +53,19 @@ public class NetworkSectionHandler extends ParseSax.HandlerWithResult<NetworkSec
} }
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs); Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
if (qName.endsWith("Network")) { if (equalsOrSuffix(qName, "Network")) {
name = attributes.get("name"); name = attributes.get("name");
} }
} }
@Override @Override
public void endElement(String uri, String localName, String qName) { public void endElement(String uri, String localName, String qName) {
if (qName.endsWith("Info")) { if (equalsOrSuffix(qName, "Info")) {
this.info = currentOrNull(); this.info = currentOrNull(currentText);
} else if (qName.endsWith("Description")) { } else if (equalsOrSuffix(qName, "Description")) {
this.description = currentOrNull(); this.description = currentOrNull(currentText);
} else if (qName.endsWith("Network")) { } else if (equalsOrSuffix(qName, "Network")) {
this.networks.add(new Network(name, description)); this.networks.add(new Network(name, description));
} }
currentText = new StringBuilder(); currentText = new StringBuilder();
@ -72,8 +75,4 @@ public class NetworkSectionHandler extends ParseSax.HandlerWithResult<NetworkSec
currentText.append(ch, start, length); currentText.append(ch, start, length);
} }
protected String currentOrNull() {
String returnVal = currentText.toString().trim();
return returnVal.equals("") ? null : returnVal;
}
} }

View File

@ -17,13 +17,16 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.xml.ovf; package org.jclouds.ovf.xml;
import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.util.SaxUtils.currentOrNull;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.domain.ovf.OperatingSystemSection; import org.jclouds.ovf.OperatingSystemSection;
import org.jclouds.vcloud.util.Utils;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
/** /**
@ -46,8 +49,8 @@ public class OperatingSystemSectionHandler extends ParseSax.HandlerWithResult<Op
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attrs) { public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = Utils.cleanseAttributes(attrs); Map<String, String> attributes = cleanseAttributes(attrs);
if (qName.endsWith("OperatingSystemSection")) { if (equalsOrSuffix(qName, "OperatingSystemSection")) {
if (attributes.containsKey("id")) if (attributes.containsKey("id"))
this.id = Integer.parseInt(attributes.get("id")); this.id = Integer.parseInt(attributes.get("id"));
} }
@ -55,10 +58,10 @@ public class OperatingSystemSectionHandler extends ParseSax.HandlerWithResult<Op
@Override @Override
public void endElement(String uri, String localName, String qName) { public void endElement(String uri, String localName, String qName) {
if (qName.endsWith("Info")) { if (equalsOrSuffix(qName, "Info")) {
this.info = currentText.toString().trim(); this.info = currentOrNull(currentText);
} else if (qName.endsWith("Description")) { } else if (equalsOrSuffix(qName, "Description")) {
this.description = currentText.toString().trim(); this.description = currentOrNull(currentText);
} }
currentText = new StringBuilder(); currentText = new StringBuilder();
} }

View File

@ -17,15 +17,15 @@
* ==================================================================== * ====================================================================
*/ */
package org.jclouds.vcloud.xml.ovf; package org.jclouds.ovf.xml;
//import static org.jclouds.vcloud.util.Utils.cleanseAttributes; //import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import javax.inject.Inject; import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.domain.ovf.OvfEnvelope; import org.jclouds.ovf.OvfEnvelope;
import org.jclouds.vcloud.domain.ovf.VirtualSystem; import org.jclouds.ovf.VirtualSystem;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;

Some files were not shown because too many files have changed in this diff Show More