diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorAsyncClient.java index a66919ce12..8824387478 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorAsyncClient.java @@ -18,24 +18,11 @@ */ package org.jclouds.vcloud.director.v1_5; -import org.jclouds.ovf.Network; -import org.jclouds.rest.annotations.Delegate; -import org.jclouds.vcloud.director.v1_5.domain.Org; -import org.jclouds.vcloud.director.v1_5.domain.Catalog; -import org.jclouds.vcloud.director.v1_5.domain.Media; -import org.jclouds.vcloud.director.v1_5.domain.Org; -import org.jclouds.vcloud.director.v1_5.domain.Session; -import org.jclouds.vcloud.director.v1_5.domain.Task; -import org.jclouds.vcloud.director.v1_5.domain.Vdc; -import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.OrgAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.QueryAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.TaskAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.VdcAsyncClient; - import com.google.inject.Provides; - +import org.jclouds.rest.annotations.Delegate; +import org.jclouds.vcloud.director.v1_5.domain.*; +import org.jclouds.vcloud.director.v1_5.domain.ovf.Network; +import org.jclouds.vcloud.director.v1_5.features.*; /** * Provides asynchronous access to VCloudDirector via their REST API. @@ -92,4 +79,11 @@ public interface VCloudDirectorAsyncClient { */ @Delegate VdcAsyncClient getVdcClient(); + + /** + * @return asynchronous access to {@link org.jclouds.vcloud.director.v1_5.domain.VAppTemplate} features + */ + @Delegate + VAppTemplateAsyncClient getVAppTemplateClient(); + } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClient.java index 7649998ed6..a376a5520c 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClient.java @@ -18,27 +18,14 @@ */ package org.jclouds.vcloud.director.v1_5; -import java.util.concurrent.TimeUnit; - -import org.jclouds.concurrent.Timeout; -import org.jclouds.ovf.Network; -import org.jclouds.rest.annotations.Delegate; -import org.jclouds.vcloud.director.v1_5.domain.Org; -import org.jclouds.vcloud.director.v1_5.domain.Catalog; -import org.jclouds.vcloud.director.v1_5.domain.Media; -import org.jclouds.vcloud.director.v1_5.domain.Org; -import org.jclouds.vcloud.director.v1_5.domain.Session; -import org.jclouds.vcloud.director.v1_5.domain.Task; -import org.jclouds.vcloud.director.v1_5.domain.Vdc; -import org.jclouds.vcloud.director.v1_5.features.CatalogClient; -import org.jclouds.vcloud.director.v1_5.features.MediaClient; -import org.jclouds.vcloud.director.v1_5.features.NetworkClient; -import org.jclouds.vcloud.director.v1_5.features.OrgClient; -import org.jclouds.vcloud.director.v1_5.features.QueryClient; -import org.jclouds.vcloud.director.v1_5.features.TaskClient; -import org.jclouds.vcloud.director.v1_5.features.VdcClient; - import com.google.inject.Provides; +import org.jclouds.concurrent.Timeout; +import org.jclouds.rest.annotations.Delegate; +import org.jclouds.vcloud.director.v1_5.domain.*; +import org.jclouds.vcloud.director.v1_5.domain.ovf.Network; +import org.jclouds.vcloud.director.v1_5.features.*; + +import java.util.concurrent.TimeUnit; /** * Provides synchronous access to VCloudDirector. @@ -95,4 +82,11 @@ public interface VCloudDirectorClient { */ @Delegate VdcClient getVdcClient(); + + /* + * @return synchronous access to {@link org.jclouds.vcloud.director.v1_5.domain.VAppTemplate} features + */ + @Delegate + VAppTemplateClient getVAppTemplateClient(); + } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java index 3bd358e433..bdec38397e 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java @@ -29,6 +29,8 @@ public class VCloudDirectorConstants { /** The XML namespace used by the clients. */ public static final String VCLOUD_1_5_NS = "http://www.vmware.com/vcloud/v1.5"; + public static final String VCLOUD_OVF_NS = "http://schemas.dmtf.org/ovf/envelope/1"; + /** The property used to configure the timeout for task completion. */ public static final String PROPERTY_VCLOUD_DIRECTOR_TIMEOUT_TASK_COMPLETED = "jclouds.vcloud-director.timeout.task-complete"; @@ -51,7 +53,7 @@ public class VCloudDirectorConstants { /** TODO javadoc */ public static final String PROPERTY_VCLOUD_DIRECTOR_XML_NAMESPACE = "jclouds.vcloud-director.xml.ns"; - + /** TODO javadoc */ public static final String PROPERTY_VCLOUD_DIRECTOR_XML_SCHEMA = "jclouds.vcloud-director.xml.schema"; diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java index 23cc523630..6e502cb6cf 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java @@ -107,6 +107,20 @@ public class VCloudDirectorMediaType { public static final String CONTROL_ACCESS = "application/vnd.vmware.vcloud.controlAccess+xml"; + public static final String VAPP_TEMPLATE = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String CUSTOMIZATION_SECTION = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String GUEST_CUSTOMIZATION_SECTION = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String NETWORK_SECTION = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String NETWORK_CONFIG_SECTION = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String NETWORK_CONNECTION_SECTION = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + + public static final String PRODUCT_SECTION_LIST = "application/vnd.vmware.vcloud.vAppTemplate+xml"; + /** * All acceptable media types. * @@ -121,6 +135,7 @@ public class VCloudDirectorMediaType { COMPOSE_VAPP_PARAMS, INSTANTIATE_VAPP_TEMPLATE_PARAMS, UPLOAD_VAPP_TEMPLATE_PARAMS, QUERY_RESULT_RECORDS, QUERY_RESULT_REFERENCES, QUERY_RESULT_ID_RECORDS, - CONTROL_ACCESS + VAPP_TEMPLATE, CUSTOMIZATION_SECTION, GUEST_CUSTOMIZATION_SECTION, NETWORK_SECTION, NETWORK_CONFIG_SECTION, NETWORK_CONNECTION_SECTION, + CONTROL_ACCESS ); } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java index ef9c121fd8..3e26e604b4 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java @@ -17,14 +17,16 @@ */ package org.jclouds.vcloud.director.v1_5.config; -import static com.google.common.base.Throwables.propagate; -import static org.jclouds.rest.config.BinderUtils.bindClientAndAsyncClient; - -import java.net.URI; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - +import com.google.common.base.Function; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import com.google.inject.name.Named; import org.jclouds.Constants; import org.jclouds.concurrent.RetryOnTimeOutExceptionFunction; import org.jclouds.domain.Credentials; @@ -42,36 +44,20 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient; import org.jclouds.vcloud.director.v1_5.annotations.Login; import org.jclouds.vcloud.director.v1_5.domain.Session; import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken; -import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.CatalogClient; -import org.jclouds.vcloud.director.v1_5.features.MediaAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.MediaClient; -import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.NetworkClient; -import org.jclouds.vcloud.director.v1_5.features.OrgAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.OrgClient; -import org.jclouds.vcloud.director.v1_5.features.QueryAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.QueryClient; -import org.jclouds.vcloud.director.v1_5.features.TaskAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.TaskClient; -import org.jclouds.vcloud.director.v1_5.features.VdcAsyncClient; -import org.jclouds.vcloud.director.v1_5.features.VdcClient; +import org.jclouds.vcloud.director.v1_5.features.*; import org.jclouds.vcloud.director.v1_5.functions.LoginUserInOrgWithPassword; import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose; import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler; import org.jclouds.vcloud.director.v1_5.login.SessionAsyncClient; import org.jclouds.vcloud.director.v1_5.login.SessionClient; -import com.google.common.base.Function; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableMap; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; +import java.net.URI; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import static com.google.common.base.Throwables.propagate; +import static org.jclouds.rest.config.BinderUtils.bindClientAndAsyncClient; /** * Configures the VCloudDirector connection. @@ -90,6 +76,7 @@ public class VCloudDirectorRestClientModule extends RestClientModule>> sections) { this.sections = sections; @@ -177,24 +182,24 @@ public class CaptureVAppParams * *

* Objects of the following type(s) are allowed in the list - * {@link JAXBElement }{@code <}{@link Section> }{@code >} - * {@link JAXBElement }{@code <}{@link VirtualHardwareSection> }{@code >} - * {@link JAXBElement }{@code <}{@link LeaseSettingsSection> }{@code >} - * {@link JAXBElement }{@code <}{@link EulaSection> }{@code >} - * {@link JAXBElement }{@code <}{@link RuntimeInfoSection> }{@code >} - * {@link JAXBElement }{@code <}{@link AnnotationSection> }{@code >} - * {@link JAXBElement }{@code <}{@link DeploymentOptionSection> }{@code >} - * {@link JAXBElement }{@code <}{@link StartupSection> }{@code >} - * {@link JAXBElement }{@code <}{@link ResourceAllocationSection> }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConnectionSection> }{@code >} - * {@link JAXBElement }{@code <}{@link CustomizationSection> }{@code >} - * {@link JAXBElement }{@code <}{@link ProductSection> }{@code >} - * {@link JAXBElement }{@code <}{@link GuestCustomizationSection> }{@code >} - * {@link JAXBElement }{@code <}{@link OperatingSystemSection> }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConfigSection> }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkSection> }{@code >} - * {@link JAXBElement }{@code <}{@link DiskSection> }{@code >} - * {@link JAXBElement }{@code <}{@link InstallSection> }{@code >} + * {@link JAXBElement }{@code <}{@link Section> }{@code >} + * {@link JAXBElement }{@code <}{@link VirtualHardwareSection > }{@code >} + * {@link JAXBElement }{@code <}{@link LeaseSettingsSection> }{@code >} + * {@link JAXBElement }{@code <}{@link EulaSection> }{@code >} + * {@link JAXBElement }{@code <}{@link RuntimeInfoSection> }{@code >} + * {@link JAXBElement }{@code <}{@link AnnotationSection> }{@code >} + * {@link JAXBElement }{@code <}{@link DeploymentOptionSection > }{@code >} + * {@link JAXBElement }{@code <}{@link StartupSection> }{@code >} + * {@link JAXBElement }{@code <}{@link ResourceAllocationSection> }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConnectionSection> }{@code >} + * {@link JAXBElement }{@code <}{@link CustomizationSection> }{@code >} + * {@link JAXBElement }{@code <}{@link ProductSection > }{@code >} + * {@link JAXBElement }{@code <}{@link GuestCustomizationSection> }{@code >} + * {@link JAXBElement }{@code <}{@link OperatingSystemSection > }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConfigSection> }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkSection> }{@code >} + * {@link JAXBElement }{@code <}{@link DiskSection > }{@code >} + * {@link JAXBElement }{@code <}{@link InstallSection> }{@code >} * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSection.java new file mode 100644 index 0000000000..72c842740e --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSection.java @@ -0,0 +1,329 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Objects.equal; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + +import org.w3c.dom.Element; + +import com.google.common.base.Objects; + + +/** + * Represents a vApp template customization settings section. + *

+ *

+ *

Java class for CustomizationSection complex type. + *

+ *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <complexType name="CustomizationSection">
+ *   <complexContent>
+ *     <extension base="{http://schemas.dmtf.org/ovf/envelope/1}Section_Type">
+ *       <sequence>
+ *         <element name="CustomizeOnInstantiate" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ *         <element name="Link" type="{http://www.vmware.com/vcloud/v1.5}LinkType" maxOccurs="unbounded" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="href" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <anyAttribute processContents='lax'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "CustomizationSection") +@XmlType(propOrder = { + "customizeOnInstantiate", + "link", + "any" +}) +public class CustomizationSection extends SectionType { + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromCustomizationSection(this); + } + + public static class Builder extends SectionType.Builder { + private boolean customizeOnInstantiate; + private List link; + private List any; + private URI href; + private String type; + + /** + * @see CustomizationSection#isCustomizeOnInstantiate() + */ + public Builder customizeOnInstantiate(boolean customizeOnInstantiate) { + this.customizeOnInstantiate = customizeOnInstantiate; + return this; + } + + /** + * @see CustomizationSection#getLink() + */ + public Builder link(List link) { + this.link = link; + return this; + } + + /** + * @see CustomizationSection#getAny() + */ + public Builder any(List any) { + this.any = any; + return this; + } + + /** + * @see CustomizationSection#getHref() + */ + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see CustomizationSection#getType() + */ + public Builder type(String type) { + this.type = type; + return this; + } + + + public CustomizationSection build() { + CustomizationSection customizationSection = new CustomizationSection(info, link, any); + customizationSection.setCustomizeOnInstantiate(customizeOnInstantiate); + customizationSection.setHref(href); + customizationSection.setType(type); + return customizationSection; + } + + public Builder fromCustomizationSection(CustomizationSection in) { + return fromSection(in) + .customizeOnInstantiate(in.isCustomizeOnInstantiate()) + .link(in.getLink()) + .any(in.getAny()) + .href(in.getHref()) + .type(in.getType()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + private CustomizationSection(String info, List link, List any) { + super(info); + this.link = link; + this.any = any; + } + + private CustomizationSection() { + // For JAXB + } + + @XmlElement(name = "CustomizeOnInstantiate") + protected boolean customizeOnInstantiate; + @XmlElement(name = "Link") + protected List link; + @XmlAnyElement(lax = true) + protected List any; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected URI href; + @XmlAttribute + protected String type; + + /** + * Gets the value of the customizeOnInstantiate property. + */ + public boolean isCustomizeOnInstantiate() { + return customizeOnInstantiate; + } + + /** + * Sets the value of the customizeOnInstantiate property. + */ + public void setCustomizeOnInstantiate(boolean value) { + this.customizeOnInstantiate = value; + } + + /** + * Gets the value of the link property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the link property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getLink().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Link } + */ + public List getLink() { + if (link == null) { + link = new ArrayList(); + } + return this.link; + } + + /** + * Gets the value of the any property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getAny().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } + + /** + * Gets the value of the href property. + * + * @return possible object is + * {@link String } + */ + public URI getHref() { + return href; + } + + /** + * Sets the value of the href property. + * + * @param value allowed object is + * {@link String } + */ + public void setHref(URI value) { + this.href = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is + * {@link String } + */ + public String getType() { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value allowed object is + * {@link String } + */ + public void setType(String value) { + this.type = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + CustomizationSection that = CustomizationSection.class.cast(o); + return equal(customizeOnInstantiate, that.customizeOnInstantiate) && + equal(link, that.link) && + equal(any, that.any) && + equal(href, that.href) && + equal(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hashCode(customizeOnInstantiate, + link, + any, + href, + type); + } + + @Override + public String toString() { + return Objects.toStringHelper("") + .add("customizeOnInstantiate", customizeOnInstantiate) + .add("link", link) + .add("any", any) + .add("href", href) + .add("type", type).toString(); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSectionType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSectionType.java deleted file mode 100644 index d6dd5886c5..0000000000 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CustomizationSectionType.java +++ /dev/null @@ -1,350 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds licenses this file - * to you 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.director.v1_5.domain; - -import static com.google.common.base.Objects.equal; - -import java.util.ArrayList; -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -import org.jclouds.ovf.Section; -import org.w3c.dom.Element; - -import com.google.common.base.Objects; - - -/** - * - * Represents a vApp template customization settings section. - * - * - *

Java class for CustomizationSection complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType name="CustomizationSection">
- *   <complexContent>
- *     <extension base="{http://schemas.dmtf.org/ovf/envelope/1}Section_Type">
- *       <sequence>
- *         <element name="CustomizeOnInstantiate" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="Link" type="{http://www.vmware.com/vcloud/v1.5}LinkType" maxOccurs="unbounded" minOccurs="0"/>
- *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="href" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
- *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <anyAttribute processContents='lax'/>
- *     </extension>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CustomizationSection", propOrder = { - "customizeOnInstantiate", - "link", - "any" -}) -public class CustomizationSectionType> - extends Section - -{ - public static > Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return new Builder().fromCustomizationSectionType(this); - } - - public static class Builder> extends Section.Builder { - - private boolean customizeOnInstantiate; - private List link; - private List any; - private String href; - private String type; - - /** - * @see CustomizationSectionType#getCustomizeOnInstantiate() - */ - public Builder customizeOnInstantiate(boolean customizeOnInstantiate) { - this.customizeOnInstantiate = customizeOnInstantiate; - return this; - } - - /** - * @see CustomizationSectionType#getLink() - */ - public Builder link(List link) { - this.link = link; - return this; - } - - /** - * @see CustomizationSectionType#getAny() - */ - public Builder any(List any) { - this.any = any; - return this; - } - - /** - * @see CustomizationSectionType#getHref() - */ - public Builder href(String href) { - this.href = href; - return this; - } - - /** - * @see CustomizationSectionType#getType() - */ - public Builder type(String type) { - this.type = type; - return this; - } - - - public CustomizationSectionType build() { - CustomizationSectionType customizationSection = new CustomizationSectionType(info, link, any); - customizationSection.setCustomizeOnInstantiate(customizeOnInstantiate); - customizationSection.setHref(href); - customizationSection.setType(type); - return customizationSection; - } - - /** - * @see Section#getInfo - */ - public Builder info(String info) { - this.info = info; - return this; - } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - @Override - public Builder fromSection(Section in) { - return Builder.class.cast(super.fromSection(in)); - } - - public Builder fromCustomizationSectionType(CustomizationSectionType in) { - return fromSection(in) - .customizeOnInstantiate(in.isCustomizeOnInstantiate()) - .link(in.getLink()) - .any(in.getAny()) - .href(in.getHref()) - .type(in.getType()); - } - } - - private CustomizationSectionType() { - // For JAXB and builder use - } - - private CustomizationSectionType(String info, List link, List any) { - super(info); - this.link = link; - this.any = any; - } - - - @XmlElement(name = "CustomizeOnInstantiate") - protected boolean customizeOnInstantiate; - @XmlElement(name = "Link") - protected List link; - @XmlAnyElement(lax = true) - protected List any; - @XmlAttribute - @XmlSchemaType(name = "anyURI") - protected String href; - @XmlAttribute - protected String type; - - /** - * Gets the value of the customizeOnInstantiate property. - * - */ - public boolean isCustomizeOnInstantiate() { - return customizeOnInstantiate; - } - - /** - * Sets the value of the customizeOnInstantiate property. - * - */ - public void setCustomizeOnInstantiate(boolean value) { - this.customizeOnInstantiate = value; - } - - /** - * Gets the value of the link property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the link property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLink().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LinkType } - * - * - */ - public List getLink() { - if (link == null) { - link = new ArrayList(); - } - return this.link; - } - - /** - * Gets the value of the any property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAny().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - * - * - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - - /** - * Gets the value of the href property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getHref() { - return href; - } - - /** - * Sets the value of the href property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setHref(String value) { - this.href = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - CustomizationSectionType that = CustomizationSectionType.class.cast(o); - return equal(customizeOnInstantiate, that.customizeOnInstantiate) && - equal(link, that.link) && - equal(any, that.any) && - equal(href, that.href) && - equal(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hashCode(customizeOnInstantiate, - link, - any, - href, - type); - } - - @Override - public String toString() { - return Objects.toStringHelper("") - .add("customizeOnInstantiate", customizeOnInstantiate) - .add("link", link) - .add("any", any) - .add("href", href) - .add("type", type).toString(); - } - -} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DeploymentOptionSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DeploymentOptionSection.java new file mode 100644 index 0000000000..ced083c198 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DeploymentOptionSection.java @@ -0,0 +1,151 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.util.Set; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +import org.jclouds.vcloud.director.v1_5.domain.ovf.Configuration; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +/** + * The DeploymentOptionSection specifies a discrete set of intended resource configurations. The + * author of an OVF package can include sizing metadata for different configurations. A consumer of + * the OVF shall select a configuration, for example, by prompting the user. The selected + * configuration is visible in the OVF environment, enabling guest software to adapt to the selected + * configuration. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "DeploymentOptionSection", namespace = VCLOUD_OVF_NS) +public class DeploymentOptionSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromDeploymentOptionSection(this); + } + + public static class Builder extends SectionType.Builder { + protected Set configurations = Sets.newLinkedHashSet(); + + /** + * @see DeploymentOptionSection#getConfigurations + */ + public Builder configuration(Configuration configuration) { + this.configurations.add(checkNotNull(configuration, "configuration")); + return this; + } + + /** + * @see DeploymentOptionSection#getConfigurations + */ + public Builder configurations(Iterable configurations) { + this.configurations = ImmutableSet.copyOf(checkNotNull(configurations, "configurations")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DeploymentOptionSection build() { + return new DeploymentOptionSection(info, configurations); + } + + public Builder fromDeploymentOptionSection(DeploymentOptionSection in) { + return info(in.getInfo()).configurations(in.getConfigurations()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + @XmlElement(name = "Configuration") + protected Set configurations; + + private DeploymentOptionSection(String info, Iterable configurations) { + super(info); + this.configurations = ImmutableSet.copyOf(checkNotNull(configurations, "configurations")); + + } + + private DeploymentOptionSection() { + // For JAXB + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), configurations); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!super.equals(obj)) return false; + if (getClass() != obj.getClass()) return false; + + DeploymentOptionSection other = (DeploymentOptionSection) obj; + return super.equals(other) && Objects.equal(configurations, other.configurations); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("configurations", configurations); + } + + public Set getConfigurations() { + return configurations; + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DiskSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DiskSection.java new file mode 100644 index 0000000000..c40ef55a06 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/DiskSection.java @@ -0,0 +1,155 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.util.Set; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +import org.jclouds.vcloud.director.v1_5.domain.ovf.Disk; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +/** + * A DiskSection describes meta-information about virtual disks in the OVF package. Virtual disks + * and their metadata are described outside the virtual hardware to facilitate sharing between + * virtual machines within an OVF package. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "DiskSection", namespace = VCLOUD_OVF_NS) +@XmlType(propOrder = { + "disks" +}) +public class DiskSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return new Builder().fromDiskSection(this); + } + + public static class Builder extends SectionType.Builder { + protected Set disks = Sets.newLinkedHashSet(); + + /** + * @see DiskSection#getDisks + */ + public Builder disk(Disk disk) { + this.disks.add(checkNotNull(disk, "disk")); + return this; + } + + /** + * @see DiskSection#getDisks + */ + public Builder disks(Iterable disks) { + this.disks = ImmutableSet.copyOf(checkNotNull(disks, "disks")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DiskSection build() { + return new DiskSection(info, disks); + } + + public Builder fromDiskSection(DiskSection in) { + return disks(in.getDisks()).info(in.getInfo()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + private Set disks; + + private DiskSection(String info, Iterable disks) { + super(info); + this.disks = ImmutableSet.copyOf(checkNotNull(disks, "disks")); + } + + private DiskSection() { + // for JAXB + } + + /** + * All disks referred to from Connection elements in all {@link VirtualHardwareSection} elements + * shall be defined in the DiskSection. + * + * @return + */ + public Set getDisks() { + return disks; + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), disks); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + DiskSection other = (DiskSection) obj; + return super.equals(other) && Objects.equal(disks, other.disks); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("disks", disks); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GuestCustomizationSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GuestCustomizationSection.java new file mode 100644 index 0000000000..ee3b5336ce --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GuestCustomizationSection.java @@ -0,0 +1,829 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Objects.equal; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; + + +/** + * Represents a guest customization settings. + *

+ *

+ *

Java class for GuestCustomizationSection complex type. + *

+ *

The following schema fragment specifies the expected content contained within this class. + *

+ *

+ * <complexType name="GuestCustomizationSection">
+ *   <complexContent>
+ *     <extension base="{http://schemas.dmtf.org/ovf/envelope/1}Section_Type">
+ *       <sequence>
+ *         <element name="Enabled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="ChangeSid" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="VirtualMachineId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="JoinDomainEnabled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="UseOrgSettings" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="DomainName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DomainUserName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DomainUserPassword" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="AdminPasswordEnabled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="AdminPasswordAuto" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="AdminPassword" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ResetPasswordRequired" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="CustomizationScript" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="ComputerName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Link" type="{http://www.vmware.com/vcloud/v1.5}LinkType" maxOccurs="unbounded" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="href" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <anyAttribute processContents='lax'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "GuestCustomizationSection") +@XmlType(propOrder = { + "enabled", + "changeSid", + "virtualMachineId", + "joinDomainEnabled", + "useOrgSettings", + "domainName", + "domainUserName", + "domainUserPassword", + "adminPasswordEnabled", + "adminPasswordAuto", + "adminPassword", + "resetPasswordRequired", + "customizationScript", + "computerName", + "link", + "any" +}) +public class GuestCustomizationSection extends SectionType { + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromGuestCustomizationSection(this); + } + + public static class Builder extends SectionType.Builder { + + private Boolean enabled; + private Boolean changeSid; + private String virtualMachineId; + private Boolean joinDomainEnabled; + private Boolean useOrgSettings; + private String domainName; + private String domainUserName; + private String domainUserPassword; + private Boolean adminPasswordEnabled; + private Boolean adminPasswordAuto; + private String adminPassword; + private Boolean resetPasswordRequired; + private String customizationScript; + private String computerName; + private List link; + private List any; + private URI href; + private String type; + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isEnabled() + */ + public Builder enabled(Boolean enabled) { + this.enabled = enabled; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isChangeSid() + */ + public Builder changeSid(Boolean changeSid) { + this.changeSid = changeSid; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getVirtualMachineId() + */ + public Builder virtualMachineId(String virtualMachineId) { + this.virtualMachineId = virtualMachineId; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isJoinDomainEnabled() + */ + public Builder joinDomainEnabled(Boolean joinDomainEnabled) { + this.joinDomainEnabled = joinDomainEnabled; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isUseOrgSettings() + */ + public Builder useOrgSettings(Boolean useOrgSettings) { + this.useOrgSettings = useOrgSettings; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getDomainName() + */ + public Builder domainName(String domainName) { + this.domainName = domainName; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getDomainUserName() + */ + public Builder domainUserName(String domainUserName) { + this.domainUserName = domainUserName; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getDomainUserPassword() + */ + public Builder domainUserPassword(String domainUserPassword) { + this.domainUserPassword = domainUserPassword; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isAdminPasswordEnabled() + */ + public Builder adminPasswordEnabled(Boolean adminPasswordEnabled) { + this.adminPasswordEnabled = adminPasswordEnabled; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isAdminPasswordAuto() + */ + public Builder adminPasswordAuto(Boolean adminPasswordAuto) { + this.adminPasswordAuto = adminPasswordAuto; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getAdminPassword() + */ + public Builder adminPassword(String adminPassword) { + this.adminPassword = adminPassword; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#isResetPasswordRequired() + */ + public Builder resetPasswordRequired(Boolean resetPasswordRequired) { + this.resetPasswordRequired = resetPasswordRequired; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getCustomizationScript() + */ + public Builder customizationScript(String customizationScript) { + this.customizationScript = customizationScript; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getComputerName() + */ + public Builder computerName(String computerName) { + this.computerName = computerName; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getLink() + */ + public Builder link(List link) { + this.link = link; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getAny() + */ + public Builder any(List any) { + this.any = any; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getHref() + */ + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection#getType() + */ + public Builder type(String type) { + this.type = type; + return this; + } + + + public GuestCustomizationSection build() { + GuestCustomizationSection guestCustomizationSection = new GuestCustomizationSection(info, resetPasswordRequired, link, any); + guestCustomizationSection.setEnabled(enabled); + guestCustomizationSection.setChangeSid(changeSid); + guestCustomizationSection.setVirtualMachineId(virtualMachineId); + guestCustomizationSection.setJoinDomainEnabled(joinDomainEnabled); + guestCustomizationSection.setUseOrgSettings(useOrgSettings); + guestCustomizationSection.setDomainName(domainName); + guestCustomizationSection.setDomainUserName(domainUserName); + guestCustomizationSection.setDomainUserPassword(domainUserPassword); + guestCustomizationSection.setAdminPasswordEnabled(adminPasswordEnabled); + guestCustomizationSection.setAdminPasswordAuto(adminPasswordAuto); + guestCustomizationSection.setAdminPassword(adminPassword); + guestCustomizationSection.setCustomizationScript(customizationScript); + guestCustomizationSection.setComputerName(computerName); + guestCustomizationSection.setHref(href); + guestCustomizationSection.setType(type); + return guestCustomizationSection; + } + + public Builder fromGuestCustomizationSection(GuestCustomizationSection in) { + return fromSection(in) + .enabled(in.isEnabled()) + .changeSid(in.isChangeSid()) + .virtualMachineId(in.getVirtualMachineId()) + .joinDomainEnabled(in.isJoinDomainEnabled()) + .useOrgSettings(in.isUseOrgSettings()) + .domainName(in.getDomainName()) + .domainUserName(in.getDomainUserName()) + .domainUserPassword(in.getDomainUserPassword()) + .adminPasswordEnabled(in.isAdminPasswordEnabled()) + .adminPasswordAuto(in.isAdminPasswordAuto()) + .adminPassword(in.getAdminPassword()) + .resetPasswordRequired(in.isResetPasswordRequired()) + .customizationScript(in.getCustomizationScript()) + .computerName(in.getComputerName()) + .link(in.getLink()) + .any(in.getAny()) + .href(in.getHref()) + .type(in.getType()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + private GuestCustomizationSection() { + // For JAXB and builder use + super(null); + } + + private GuestCustomizationSection(@Nullable String info, Boolean resetPasswordRequired, List link, List any) { + super(info); + this.resetPasswordRequired = resetPasswordRequired; + this.link = link; + this.any = any; + } + + + @XmlElement(name = "Enabled") + protected Boolean enabled; + @XmlElement(name = "ChangeSid") + protected Boolean changeSid; + @XmlElement(name = "VirtualMachineId") + protected String virtualMachineId; + @XmlElement(name = "JoinDomainEnabled") + protected Boolean joinDomainEnabled; + @XmlElement(name = "UseOrgSettings") + protected Boolean useOrgSettings; + @XmlElement(name = "DomainName") + protected String domainName; + @XmlElement(name = "DomainUserName") + protected String domainUserName; + @XmlElement(name = "DomainUserPassword") + protected String domainUserPassword; + @XmlElement(name = "AdminPasswordEnabled") + protected Boolean adminPasswordEnabled; + @XmlElement(name = "AdminPasswordAuto") + protected Boolean adminPasswordAuto; + @XmlElement(name = "AdminPassword") + protected String adminPassword; + @XmlElement(name = "ResetPasswordRequired") + protected Boolean resetPasswordRequired; + @XmlElement(name = "CustomizationScript") + protected String customizationScript; + @XmlElement(name = "ComputerName") + protected String computerName; + @XmlElement(name = "Link") + protected List link; + @XmlAnyElement(lax = true) + protected List any; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected URI href; + @XmlAttribute + protected String type; + + /** + * Gets the value of the enabled property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isEnabled() { + return enabled; + } + + /** + * Sets the value of the enabled property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setEnabled(Boolean value) { + this.enabled = value; + } + + /** + * Gets the value of the changeSid property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isChangeSid() { + return changeSid; + } + + /** + * Sets the value of the changeSid property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setChangeSid(Boolean value) { + this.changeSid = value; + } + + /** + * Gets the value of the virtualMachineId property. + * + * @return possible object is + * {@link String } + */ + public String getVirtualMachineId() { + return virtualMachineId; + } + + /** + * Sets the value of the virtualMachineId property. + * + * @param value allowed object is + * {@link String } + */ + public void setVirtualMachineId(String value) { + this.virtualMachineId = value; + } + + /** + * Gets the value of the joinDomainEnabled property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isJoinDomainEnabled() { + return joinDomainEnabled; + } + + /** + * Sets the value of the joinDomainEnabled property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setJoinDomainEnabled(Boolean value) { + this.joinDomainEnabled = value; + } + + /** + * Gets the value of the useOrgSettings property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isUseOrgSettings() { + return useOrgSettings; + } + + /** + * Sets the value of the useOrgSettings property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setUseOrgSettings(Boolean value) { + this.useOrgSettings = value; + } + + /** + * Gets the value of the domainName property. + * + * @return possible object is + * {@link String } + */ + public String getDomainName() { + return domainName; + } + + /** + * Sets the value of the domainName property. + * + * @param value allowed object is + * {@link String } + */ + public void setDomainName(String value) { + this.domainName = value; + } + + /** + * Gets the value of the domainUserName property. + * + * @return possible object is + * {@link String } + */ + public String getDomainUserName() { + return domainUserName; + } + + /** + * Sets the value of the domainUserName property. + * + * @param value allowed object is + * {@link String } + */ + public void setDomainUserName(String value) { + this.domainUserName = value; + } + + /** + * Gets the value of the domainUserPassword property. + * + * @return possible object is + * {@link String } + */ + public String getDomainUserPassword() { + return domainUserPassword; + } + + /** + * Sets the value of the domainUserPassword property. + * + * @param value allowed object is + * {@link String } + */ + public void setDomainUserPassword(String value) { + this.domainUserPassword = value; + } + + /** + * Gets the value of the adminPasswordEnabled property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isAdminPasswordEnabled() { + return adminPasswordEnabled; + } + + /** + * Sets the value of the adminPasswordEnabled property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setAdminPasswordEnabled(Boolean value) { + this.adminPasswordEnabled = value; + } + + /** + * Gets the value of the adminPasswordAuto property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isAdminPasswordAuto() { + return adminPasswordAuto; + } + + /** + * Sets the value of the adminPasswordAuto property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setAdminPasswordAuto(Boolean value) { + this.adminPasswordAuto = value; + } + + /** + * Gets the value of the adminPassword property. + * + * @return possible object is + * {@link String } + */ + public String getAdminPassword() { + return adminPassword; + } + + /** + * Sets the value of the adminPassword property. + * + * @param value allowed object is + * {@link String } + */ + public void setAdminPassword(String value) { + this.adminPassword = value; + } + + /** + * Gets the value of the resetPasswordRequired property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isResetPasswordRequired() { + return resetPasswordRequired; + } + + /** + * Sets the value of the resetPasswordRequired property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setResetPasswordRequired(Boolean value) { + this.resetPasswordRequired = value; + } + + /** + * Gets the value of the customizationScript property. + * + * @return possible object is + * {@link String } + */ + public String getCustomizationScript() { + return customizationScript; + } + + /** + * Sets the value of the customizationScript property. + * + * @param value allowed object is + * {@link String } + */ + public void setCustomizationScript(String value) { + this.customizationScript = value; + } + + /** + * Gets the value of the computerName property. + * + * @return possible object is + * {@link String } + */ + public String getComputerName() { + return computerName; + } + + /** + * Sets the value of the computerName property. + * + * @param value allowed object is + * {@link String } + */ + public void setComputerName(String value) { + this.computerName = value; + } + + /** + * Gets the value of the link property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the link property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getLink().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Link } + */ + public List getLink() { + if (link == null) { + link = new ArrayList(); + } + return this.link; + } + + /** + * Gets the value of the any property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getAny().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link org.w3c.dom.Element } + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } + + /** + * Gets the value of the href property. + */ + public URI getHref() { + return href; + } + + /** + * Sets the value of the href property. + */ + public void setHref(URI value) { + this.href = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is + * {@link String } + */ + public String getType() { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value allowed object is + * {@link String } + */ + public void setType(String value) { + this.type = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + GuestCustomizationSection that = GuestCustomizationSection.class.cast(o); + return equal(enabled, that.enabled) && + equal(changeSid, that.changeSid) && + equal(virtualMachineId, that.virtualMachineId) && + equal(joinDomainEnabled, that.joinDomainEnabled) && + equal(useOrgSettings, that.useOrgSettings) && + equal(domainName, that.domainName) && + equal(domainUserName, that.domainUserName) && + equal(domainUserPassword, that.domainUserPassword) && + equal(adminPasswordEnabled, that.adminPasswordEnabled) && + equal(adminPasswordAuto, that.adminPasswordAuto) && + equal(adminPassword, that.adminPassword) && + equal(resetPasswordRequired, that.resetPasswordRequired) && + equal(customizationScript, that.customizationScript) && + equal(computerName, that.computerName) && + equal(link, that.link) && + equal(any, that.any) && + equal(href, that.href) && + equal(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hashCode(enabled, + changeSid, + virtualMachineId, + joinDomainEnabled, + useOrgSettings, + domainName, + domainUserName, + domainUserPassword, + adminPasswordEnabled, + adminPasswordAuto, + adminPassword, + resetPasswordRequired, + customizationScript, + computerName, + link, + any, + href, + type); + } + + @Override + public String toString() { + return Objects.toStringHelper("") + .add("enabled", enabled) + .add("changeSid", changeSid) + .add("virtualMachineId", virtualMachineId) + .add("joinDomainEnabled", joinDomainEnabled) + .add("useOrgSettings", useOrgSettings) + .add("domainName", domainName) + .add("domainUserName", domainUserName) + .add("domainUserPassword", domainUserPassword) + .add("adminPasswordEnabled", adminPasswordEnabled) + .add("adminPasswordAuto", adminPasswordAuto) + .add("adminPassword", adminPassword) + .add("resetPasswordRequired", resetPasswordRequired) + .add("customizationScript", customizationScript) + .add("computerName", computerName) + .add("link", link) + .add("any", any) + .add("href", href) + .add("type", type).toString(); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiationParams.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiationParams.java index af0ab6754b..1b75f75a40 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiationParams.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiationParams.java @@ -30,7 +30,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlType; -import org.jclouds.ovf.Section; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; import com.google.common.base.Objects; @@ -74,12 +74,12 @@ public class InstantiationParams { public static class Builder { - private List>> sections; + private List>> sections; /** - * @see InstantiationParams#getExtend() + * @see InstantiationParams#getSections() */ - public Builder sections(List>> sections) { + public Builder sections(List>> sections) { this.sections = sections; return this; } @@ -100,18 +100,19 @@ public class InstantiationParams { // For JAXB and builder use } - private InstantiationParams(List>> sections) { + private InstantiationParams(List>> sections) { this.sections = sections; } @XmlElementRef(name = "Section", namespace = "http://schemas.dmtf.org/ovf/envelope/1", type = JAXBElement.class) - protected List>> sections; + protected List>> sections; /** * - * An ovf:Section to configure for instantiation. - * Gets the value of the section property. + * An ovf:Section to configure for instantiation. + * + * Gets the value of the section property. * *

* This accessor method returns a reference to the live list, @@ -129,29 +130,29 @@ public class InstantiationParams { *

* Objects of the following type(s) are allowed in the list * {@link JAXBElement }{@code <}{@link SectionType }{@code >} - * {@link JAXBElement }{@code <}{@link VirtualHardwareSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link LeaseSettingsSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link EulaSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link RuntimeInfoSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link AnnotationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link DeploymentOptionSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link StartupSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link ResourceAllocationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConnectionSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link CustomizationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link ProductSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link GuestCustomizationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link OperatingSystemSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConfigSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link DiskSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link InstallSectionType }{@code >} + * {@link JAXBElement }{@code <}{@link VirtualHardwareSection }{@code >} + * {@link JAXBElement }{@code <}{@link LeaseSettingsSection }{@code >} + * {@link JAXBElement }{@code <}{@link EulaSection }{@code >} + * {@link JAXBElement }{@code <}{@link RuntimeInfoSection }{@code >} + * {@link JAXBElement }{@code <}{@link AnnotationSection }{@code >} + * {@link JAXBElement }{@code <}{@link DeploymentOptionSection }{@code >} + * {@link JAXBElement }{@code <}{@link StartupSection }{@code >} + * {@link JAXBElement }{@code <}{@link ResourceAllocationSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConnectionSection }{@code >} + * {@link JAXBElement }{@code <}{@link CustomizationSection }{@code >} + * {@link JAXBElement }{@code <}{@link ProductSection }{@code >} + * {@link JAXBElement }{@code <}{@link GuestCustomizationSection }{@code >} + * {@link JAXBElement }{@code <}{@link org.jclouds.ovf.OperatingSystemSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConfigSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkSection }{@code >} + * {@link JAXBElement }{@code <}{@link DiskSection }{@code >} + * {@link JAXBElement }{@code <}{@link InstallSection }{@code >} * * */ - public List>> getSections() { + public List>> getSections() { if (sections == null) { - sections = new ArrayList>>(); + sections = new ArrayList>>(); } return this.sections; } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/LeaseSettingsSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/LeaseSettingsSection.java index a54ee376a1..038177af73 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/LeaseSettingsSection.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/LeaseSettingsSection.java @@ -20,34 +20,35 @@ package org.jclouds.vcloud.director.v1_5.domain; import static com.google.common.base.Objects.equal; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS; +import java.net.URI; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; -import org.jclouds.ovf.Section; +import org.jclouds.javax.annotation.Nullable; import org.w3c.dom.Element; import com.google.common.base.Objects; /** - * - * Represents the lease settings section for a vApp. - * - * + * Represents the lease settings section for a vApp. + *

+ *

*

Java class for LeaseSettingsSection complex type. - * + *

*

The following schema fragment specifies the expected content contained within this class. - * + *

*

  * <complexType name="LeaseSettingsSection">
  *   <complexContent>
@@ -67,53 +68,48 @@ import com.google.common.base.Objects;
  *   </complexContent>
  * </complexType>
  * 
- * - * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "LeaseSettingsSection", propOrder = { - "link", - "deploymentLeaseInSeconds", - "storageLeaseInSeconds", - "deploymentLeaseExpiration", - "storageLeaseExpiration", - "any" +@XmlRootElement(name = "LeaseSettingsSection", namespace = VCLOUD_1_5_NS) +@XmlType(propOrder = { + "link", + "deploymentLeaseInSeconds", + "storageLeaseInSeconds", + "deploymentLeaseExpiration", + "storageLeaseExpiration", + "any" }) -public class LeaseSettingsSection> - extends Section - -{ - public static > Builder builder() { - return new Builder(); +public class LeaseSettingsSection extends SectionType { + public static Builder builder() { + return new Builder(); } - public Builder toBuilder() { - return new Builder().fromLeaseSettingsSection(this); + public Builder toBuilder() { + return new Builder().fromLeaseSettingsSection(this); } - public static class Builder> extends Section.Builder { - - private List link; + public static class Builder extends SectionType.Builder { + private List links; private Integer deploymentLeaseInSeconds; private Integer storageLeaseInSeconds; private XMLGregorianCalendar deploymentLeaseExpiration; private XMLGregorianCalendar storageLeaseExpiration; private List any; - private String href; + private URI href; private String type; /** - * @see LeaseSettingsSection#getLink() + * @see LeaseSettingsSection#getLinks() */ - public Builder link(List link) { - this.link = link; + public Builder links(List links) { + this.links = links; return this; } /** * @see LeaseSettingsSection#getDeploymentLeaseInSeconds() */ - public Builder deploymentLeaseInSeconds(Integer deploymentLeaseInSeconds) { + public Builder deploymentLeaseInSeconds(Integer deploymentLeaseInSeconds) { this.deploymentLeaseInSeconds = deploymentLeaseInSeconds; return this; } @@ -121,7 +117,7 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getStorageLeaseInSeconds() */ - public Builder storageLeaseInSeconds(Integer storageLeaseInSeconds) { + public Builder storageLeaseInSeconds(Integer storageLeaseInSeconds) { this.storageLeaseInSeconds = storageLeaseInSeconds; return this; } @@ -129,7 +125,7 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getDeploymentLeaseExpiration() */ - public Builder deploymentLeaseExpiration(XMLGregorianCalendar deploymentLeaseExpiration) { + public Builder deploymentLeaseExpiration(XMLGregorianCalendar deploymentLeaseExpiration) { this.deploymentLeaseExpiration = deploymentLeaseExpiration; return this; } @@ -137,7 +133,7 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getStorageLeaseExpiration() */ - public Builder storageLeaseExpiration(XMLGregorianCalendar storageLeaseExpiration) { + public Builder storageLeaseExpiration(XMLGregorianCalendar storageLeaseExpiration) { this.storageLeaseExpiration = storageLeaseExpiration; return this; } @@ -145,7 +141,7 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getAny() */ - public Builder any(List any) { + public Builder any(List any) { this.any = any; return this; } @@ -153,7 +149,7 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getHref() */ - public Builder href(String href) { + public Builder href(URI href) { this.href = href; return this; } @@ -161,14 +157,14 @@ public class LeaseSettingsSection> /** * @see LeaseSettingsSection#getType() */ - public Builder type(String type) { + public Builder type(String type) { this.type = type; return this; } - public LeaseSettingsSection build() { - LeaseSettingsSection leaseSettingsSection = new LeaseSettingsSection(link, any); + public LeaseSettingsSection build() { + LeaseSettingsSection leaseSettingsSection = new LeaseSettingsSection(info, links, any); leaseSettingsSection.setDeploymentLeaseInSeconds(deploymentLeaseInSeconds); leaseSettingsSection.setStorageLeaseInSeconds(storageLeaseInSeconds); leaseSettingsSection.setDeploymentLeaseExpiration(deploymentLeaseExpiration); @@ -178,287 +174,263 @@ public class LeaseSettingsSection> return leaseSettingsSection; } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public Builder fromSection(Section in) { - return Builder.class.cast(super.fromSection(in)); - } - public Builder fromLeaseSettingsSection(LeaseSettingsSection in) { + public Builder fromLeaseSettingsSection(LeaseSettingsSection in) { return fromSection(in) - .link(in.getLink()) - .deploymentLeaseInSeconds(in.getDeploymentLeaseInSeconds()) - .storageLeaseInSeconds(in.getStorageLeaseInSeconds()) - .deploymentLeaseExpiration(in.getDeploymentLeaseExpiration()) - .storageLeaseExpiration(in.getStorageLeaseExpiration()) - .any(in.getAny()) - .href(in.getHref()) - .type(in.getType()); + .links(in.getLinks()) + .deploymentLeaseInSeconds(in.getDeploymentLeaseInSeconds()) + .storageLeaseInSeconds(in.getStorageLeaseInSeconds()) + .deploymentLeaseExpiration(in.getDeploymentLeaseExpiration()) + .storageLeaseExpiration(in.getStorageLeaseExpiration()) + .any(in.getAny()) + .href(in.getHref()) + .type(in.getType()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); } } - private LeaseSettingsSection() { - // For JAXB and builder use - } + @XmlElement(name = "Link") + protected List link; + @XmlElement(name = "DeploymentLeaseInSeconds") + protected Integer deploymentLeaseInSeconds; + @XmlElement(name = "StorageLeaseInSeconds") + protected Integer storageLeaseInSeconds; + @XmlElement(name = "DeploymentLeaseExpiration") + @XmlSchemaType(name = "dateTime") + protected XMLGregorianCalendar deploymentLeaseExpiration; + @XmlElement(name = "StorageLeaseExpiration") + @XmlSchemaType(name = "dateTime") + protected XMLGregorianCalendar storageLeaseExpiration; + @XmlAnyElement(lax = true) + protected List any; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected URI href; + @XmlAttribute + protected String type; - private LeaseSettingsSection(List link, List any) { + private LeaseSettingsSection(@Nullable String info, List link, List any) { + super(info); this.link = link; this.any = any; } + private LeaseSettingsSection() { + // For JAXB + } - @XmlElement(name = "Link") - protected List link; - @XmlElement(name = "DeploymentLeaseInSeconds") - protected Integer deploymentLeaseInSeconds; - @XmlElement(name = "StorageLeaseInSeconds") - protected Integer storageLeaseInSeconds; - @XmlElement(name = "DeploymentLeaseExpiration") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar deploymentLeaseExpiration; - @XmlElement(name = "StorageLeaseExpiration") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar storageLeaseExpiration; - @XmlAnyElement(lax = true) - protected List any; - @XmlAttribute - @XmlSchemaType(name = "anyURI") - protected String href; - @XmlAttribute - protected String type; + /** + * Gets the value of the link property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the link property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getLink().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Link } + */ + public List getLinks() { + if (link == null) { + link = new ArrayList(); + } + return this.link; + } - /** - * Gets the value of the link property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the link property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLink().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LinkType } - * - * - */ - public List getLink() { - if (link == null) { - link = new ArrayList(); - } - return this.link; - } + /** + * Gets the value of the deploymentLeaseInSeconds property. + * + * @return possible object is + * {@link Integer } + */ + public Integer getDeploymentLeaseInSeconds() { + return deploymentLeaseInSeconds; + } - /** - * Gets the value of the deploymentLeaseInSeconds property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getDeploymentLeaseInSeconds() { - return deploymentLeaseInSeconds; - } + /** + * Sets the value of the deploymentLeaseInSeconds property. + * + * @param value allowed object is + * {@link Integer } + */ + public void setDeploymentLeaseInSeconds(Integer value) { + this.deploymentLeaseInSeconds = value; + } - /** - * Sets the value of the deploymentLeaseInSeconds property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setDeploymentLeaseInSeconds(Integer value) { - this.deploymentLeaseInSeconds = value; - } + /** + * Gets the value of the storageLeaseInSeconds property. + * + * @return possible object is + * {@link Integer } + */ + public Integer getStorageLeaseInSeconds() { + return storageLeaseInSeconds; + } - /** - * Gets the value of the storageLeaseInSeconds property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getStorageLeaseInSeconds() { - return storageLeaseInSeconds; - } + /** + * Sets the value of the storageLeaseInSeconds property. + * + * @param value allowed object is + * {@link Integer } + */ + public void setStorageLeaseInSeconds(Integer value) { + this.storageLeaseInSeconds = value; + } - /** - * Sets the value of the storageLeaseInSeconds property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setStorageLeaseInSeconds(Integer value) { - this.storageLeaseInSeconds = value; - } + /** + * Gets the value of the deploymentLeaseExpiration property. + * + * @return possible object is + * {@link XMLGregorianCalendar } + */ + public XMLGregorianCalendar getDeploymentLeaseExpiration() { + return deploymentLeaseExpiration; + } - /** - * Gets the value of the deploymentLeaseExpiration property. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getDeploymentLeaseExpiration() { - return deploymentLeaseExpiration; - } + /** + * Sets the value of the deploymentLeaseExpiration property. + * + * @param value allowed object is + * {@link XMLGregorianCalendar } + */ + public void setDeploymentLeaseExpiration(XMLGregorianCalendar value) { + this.deploymentLeaseExpiration = value; + } - /** - * Sets the value of the deploymentLeaseExpiration property. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setDeploymentLeaseExpiration(XMLGregorianCalendar value) { - this.deploymentLeaseExpiration = value; - } + /** + * Gets the value of the storageLeaseExpiration property. + * + * @return possible object is + * {@link XMLGregorianCalendar } + */ + public XMLGregorianCalendar getStorageLeaseExpiration() { + return storageLeaseExpiration; + } - /** - * Gets the value of the storageLeaseExpiration property. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getStorageLeaseExpiration() { - return storageLeaseExpiration; - } + /** + * Sets the value of the storageLeaseExpiration property. + * + * @param value allowed object is + * {@link XMLGregorianCalendar } + */ + public void setStorageLeaseExpiration(XMLGregorianCalendar value) { + this.storageLeaseExpiration = value; + } - /** - * Sets the value of the storageLeaseExpiration property. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setStorageLeaseExpiration(XMLGregorianCalendar value) { - this.storageLeaseExpiration = value; - } + /** + * Gets the value of the any property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getAny().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } - /** - * Gets the value of the any property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAny().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - * - * - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } + /** + * @return the value of the href property. + */ + public URI getHref() { + return href; + } - /** - * Gets the value of the href property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getHref() { - return href; - } + /** + * Sets the value of the href property. + * + * @param value the value to set + */ + public void setHref(URI value) { + this.href = value; + } - /** - * Sets the value of the href property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setHref(String value) { - this.href = value; - } + /** + * Gets the value of the type property. + * + * @return possible object is + * {@link String } + */ + public String getType() { + return type; + } - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + /** + * Sets the value of the type property. + * + * @param value allowed object is + * {@link String } + */ + public void setType(String value) { + this.type = value; + } @Override public boolean equals(Object o) { if (this == o) - return true; + return true; if (o == null || getClass() != o.getClass()) return false; - LeaseSettingsSection that = LeaseSettingsSection.class.cast(o); - return equal(link, that.link) && - equal(deploymentLeaseInSeconds, that.deploymentLeaseInSeconds) && - equal(storageLeaseInSeconds, that.storageLeaseInSeconds) && - equal(deploymentLeaseExpiration, that.deploymentLeaseExpiration) && - equal(storageLeaseExpiration, that.storageLeaseExpiration) && - equal(any, that.any) && - equal(href, that.href) && - equal(type, that.type); + LeaseSettingsSection that = LeaseSettingsSection.class.cast(o); + return equal(link, that.link) && + equal(deploymentLeaseInSeconds, that.deploymentLeaseInSeconds) && + equal(storageLeaseInSeconds, that.storageLeaseInSeconds) && + equal(deploymentLeaseExpiration, that.deploymentLeaseExpiration) && + equal(storageLeaseExpiration, that.storageLeaseExpiration) && + equal(any, that.any) && + equal(href, that.href) && + equal(type, that.type); } @Override public int hashCode() { - return Objects.hashCode(link, - deploymentLeaseInSeconds, - storageLeaseInSeconds, - deploymentLeaseExpiration, - storageLeaseExpiration, - any, - href, - type); + return Objects.hashCode(link, + deploymentLeaseInSeconds, + storageLeaseInSeconds, + deploymentLeaseExpiration, + storageLeaseExpiration, + any, + href, + type); } @Override diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConfigSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConfigSection.java index b17f055187..c283c6cf45 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConfigSection.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConfigSection.java @@ -20,33 +20,34 @@ package org.jclouds.vcloud.director.v1_5.domain; import static com.google.common.base.Objects.equal; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS; +import java.net.URI; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.jclouds.ovf.Section; +import org.jclouds.javax.annotation.Nullable; import org.w3c.dom.Element; import com.google.common.base.Objects; /** - * - * Represents the network config section of a vApp. - * - * + * Represents the network config section of a vApp. + *

+ *

*

Java class for NetworkConfigSection complex type. - * + *

*

The following schema fragment specifies the expected content contained within this class. - * + *

*

  * <complexType name="NetworkConfigSection">
  *   <complexContent>
@@ -63,39 +64,35 @@ import com.google.common.base.Objects;
  *   </complexContent>
  * </complexType>
  * 
- * - * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "NetworkConfigSection", propOrder = { - "link", - "networkConfig", - "any" +@XmlRootElement(name="NetworkConfigSection", namespace = VCLOUD_1_5_NS) +@XmlType( propOrder = { + "link", + "networkConfig", + "any" }) -public class NetworkConfigSection> - extends Section - -{ - public static > Builder builder() { - return new Builder(); +public class NetworkConfigSection extends SectionType { + public static Builder builder() { + return new Builder(); } - public Builder toBuilder() { - return new Builder().fromNetworkConfigSection(this); + public Builder toBuilder() { + return new Builder().fromNetworkConfigSection(this); } - public static class Builder> extends Section.Builder { - + public static class Builder extends SectionType.Builder { + private List link; private List> networkConfig; private List any; - private String href; + private URI href; private String type; /** * @see NetworkConfigSection#getLink() */ - public Builder link(List link) { + public Builder link(List link) { this.link = link; return this; } @@ -103,7 +100,7 @@ public class NetworkConfigSection> /** * @see NetworkConfigSection#getNetworkConfig() */ - public Builder networkConfig(List> networkConfig) { + public Builder networkConfig(List> networkConfig) { this.networkConfig = networkConfig; return this; } @@ -111,7 +108,7 @@ public class NetworkConfigSection> /** * @see NetworkConfigSection#getAny() */ - public Builder any(List any) { + public Builder any(List any) { this.any = any; return this; } @@ -119,7 +116,7 @@ public class NetworkConfigSection> /** * @see NetworkConfigSection#getHref() */ - public Builder href(String href) { + public Builder href(URI href) { this.href = href; return this; } @@ -127,216 +124,206 @@ public class NetworkConfigSection> /** * @see NetworkConfigSection#getType() */ - public Builder type(String type) { + public Builder type(String type) { this.type = type; return this; } - public NetworkConfigSection build() { - NetworkConfigSection networkConfigSection = new NetworkConfigSection(link, networkConfig, any); + public NetworkConfigSection build() { + NetworkConfigSection networkConfigSection = new NetworkConfigSection(info, link, networkConfig, any); networkConfigSection.setHref(href); networkConfigSection.setType(type); return networkConfigSection; } - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public Builder fromSection(Section in) { - return Builder.class.cast(super.fromSection(in)); - } - public Builder fromNetworkConfigSection(NetworkConfigSection in) { + public Builder fromNetworkConfigSection(NetworkConfigSection in) { return fromSection(in) - .link(in.getLink()) - .networkConfig(in.getNetworkConfig()) - .any(in.getAny()) - .href(in.getHref()) - .type(in.getType()); + .link(in.getLink()) + .networkConfig(in.getNetworkConfig()) + .any(in.getAny()) + .href(in.getHref()) + .type(in.getType()); } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + } - private NetworkConfigSection() { - // For JAXB and builder use - } - - private NetworkConfigSection(List link, List> networkConfig, List any) { + @XmlElement(name = "Link") + protected List link; + @XmlElement(name = "NetworkConfig") + protected List> networkConfig; + @XmlAnyElement(lax = true) + protected List any; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected URI href; + @XmlAttribute + protected String type; + + private NetworkConfigSection(@Nullable String info, List link, List> networkConfig, List any) { + super(info); this.link = link; this.networkConfig = networkConfig; this.any = any; } + private NetworkConfigSection() { + // For JAXB + } + + /** + * Gets the value of the link property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the link property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getLink().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Link } + */ + public List getLink() { + if (link == null) { + link = new ArrayList(); + } + return this.link; + } - @XmlElement(name = "Link") - protected List link; - @XmlElement(name = "NetworkConfig") - protected List> networkConfig; - @XmlAnyElement(lax = true) - protected List any; - @XmlAttribute - @XmlSchemaType(name = "anyURI") - protected String href; - @XmlAttribute - protected String type; + /** + * Gets the value of the networkConfig property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the networkConfig property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getNetworkConfig().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link VAppNetworkConfiguration } + */ + public List> getNetworkConfig() { + if (networkConfig == null) { + networkConfig = new ArrayList>(); + } + return this.networkConfig; + } - /** - * Gets the value of the link property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the link property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLink().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LinkType } - * - * - */ - public List getLink() { - if (link == null) { - link = new ArrayList(); - } - return this.link; - } + /** + * Gets the value of the any property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getAny().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } - /** - * Gets the value of the networkConfig property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the networkConfig property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getNetworkConfig().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link VAppNetworkConfigurationType } - * - * - */ - public List> getNetworkConfig() { - if (networkConfig == null) { - networkConfig = new ArrayList>(); - } - return this.networkConfig; - } + /** + * Gets the value of the href property. + */ + public URI getHref() { + return href; + } - /** - * Gets the value of the any property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAny().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - * - * - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } + /** + * Sets the value of the href property. + */ + public void setHref(URI value) { + this.href = value; + } - /** - * Gets the value of the href property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getHref() { - return href; - } + /** + * Gets the value of the type property. + * + * @return possible object is + * {@link String } + */ + public String getType() { + return type; + } - /** - * Sets the value of the href property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setHref(String value) { - this.href = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + /** + * Sets the value of the type property. + * + * @param value allowed object is + * {@link String } + */ + public void setType(String value) { + this.type = value; + } @Override public boolean equals(Object o) { if (this == o) - return true; + return true; if (o == null || getClass() != o.getClass()) return false; - NetworkConfigSection that = NetworkConfigSection.class.cast(o); - return equal(link, that.link) && - equal(networkConfig, that.networkConfig) && - equal(any, that.any) && - equal(href, that.href) && - equal(type, that.type); + NetworkConfigSection that = NetworkConfigSection.class.cast(o); + return equal(link, that.link) && + equal(networkConfig, that.networkConfig) && + equal(any, that.any) && + equal(href, that.href) && + equal(type, that.type); } @Override public int hashCode() { - return Objects.hashCode(link, - networkConfig, - any, - href, - type); + return Objects.hashCode(link, + networkConfig, + any, + href, + type); } @Override diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConnectionSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConnectionSection.java index f6bd6f77a7..eeaa3fa78e 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConnectionSection.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkConnectionSection.java @@ -20,7 +20,9 @@ package org.jclouds.vcloud.director.v1_5.domain; import static com.google.common.base.Objects.equal; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS; +import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -29,24 +31,26 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.jclouds.ovf.Section; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; import org.w3c.dom.Element; import com.google.common.base.Objects; /** - * - * Represents a list of network cards existing in a VM. - * - * + * Represents a list of network cards existing in a VM. + *

+ *

*

Java class for NetworkConnectionSection complex type. - * + *

*

The following schema fragment specifies the expected content contained within this class. - * + *

*

  * <complexType name="NetworkConnectionSection">
  *   <complexContent>
@@ -64,41 +68,38 @@ import com.google.common.base.Objects;
  *   </complexContent>
  * </complexType>
  * 
- * - * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "NetworkConnectionSection", propOrder = { - "primaryNetworkConnectionIndex", - "networkConnection", - "link", - "any" +@XmlRootElement(name="NetworkConnectionSection", namespace = VCLOUD_1_5_NS) +@XmlType(propOrder = { + "primaryNetworkConnectionIndex", + "networkConnection", + "link", + "any" }) -public class NetworkConnectionSection> - extends Section +public class NetworkConnectionSection extends SectionType { -{ - public static > Builder builder() { - return new Builder(); + public static Builder builder() { + return new Builder(); } - public Builder toBuilder() { - return new Builder().fromNetworkConnectionSection(this); + public Builder toBuilder() { + return new Builder().fromNetworkConnectionSection(this); } - public static class Builder> extends Section.Builder { - + public static class Builder extends SectionType.Builder { + private Integer primaryNetworkConnectionIndex; private List networkConnection; private List link; private List any; - private String href; + private URI href; private String type; /** * @see NetworkConnectionSection#getPrimaryNetworkConnectionIndex() */ - public Builder primaryNetworkConnectionIndex(Integer primaryNetworkConnectionIndex) { + public Builder primaryNetworkConnectionIndex(Integer primaryNetworkConnectionIndex) { this.primaryNetworkConnectionIndex = primaryNetworkConnectionIndex; return this; } @@ -106,7 +107,7 @@ public class NetworkConnectionSection> /** * @see NetworkConnectionSection#getNetworkConnection() */ - public Builder networkConnection(List networkConnection) { + public Builder networkConnection(List networkConnection) { this.networkConnection = networkConnection; return this; } @@ -114,7 +115,7 @@ public class NetworkConnectionSection> /** * @see NetworkConnectionSection#getLink() */ - public Builder link(List link) { + public Builder link(List link) { this.link = link; return this; } @@ -122,7 +123,7 @@ public class NetworkConnectionSection> /** * @see NetworkConnectionSection#getAny() */ - public Builder any(List any) { + public Builder any(List any) { this.any = any; return this; } @@ -130,7 +131,7 @@ public class NetworkConnectionSection> /** * @see NetworkConnectionSection#getHref() */ - public Builder href(String href) { + public Builder href(URI href) { this.href = href; return this; } @@ -138,247 +139,233 @@ public class NetworkConnectionSection> /** * @see NetworkConnectionSection#getType() */ - public Builder type(String type) { + public Builder type(String type) { this.type = type; return this; } - public NetworkConnectionSection build() { - NetworkConnectionSection networkConnectionSection = new NetworkConnectionSection(networkConnection, link, any); + public NetworkConnectionSection build() { + NetworkConnectionSection networkConnectionSection = new NetworkConnectionSection(info, networkConnection, link, any); networkConnectionSection.setPrimaryNetworkConnectionIndex(primaryNetworkConnectionIndex); networkConnectionSection.setHref(href); networkConnectionSection.setType(type); return networkConnectionSection; } + public Builder fromNetworkConnectionSection(NetworkConnectionSection in) { + return fromSection(in) + .primaryNetworkConnectionIndex(in.getPrimaryNetworkConnectionIndex()) + .networkConnection(in.getNetworkConnection()) + .link(in.getLink()) + .any(in.getAny()) + .href(in.getHref()) + .type(in.getType()); + } + /** * {@inheritDoc} */ - @SuppressWarnings("unchecked") @Override - public Builder fromSection(Section in) { - return Builder.class.cast(super.fromSection(in)); + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); } - public Builder fromNetworkConnectionSection(NetworkConnectionSection in) { - return fromSection(in) - .primaryNetworkConnectionIndex(in.getPrimaryNetworkConnectionIndex()) - .networkConnection(in.getNetworkConnection()) - .link(in.getLink()) - .any(in.getAny()) - .href(in.getHref()) - .type(in.getType()); + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); } } - private NetworkConnectionSection() { - // For JAXB and builder use - } - - private NetworkConnectionSection(List networkConnection, List link, List any) { + private NetworkConnectionSection(@Nullable String info, List networkConnection, List link, List any) { + super(info); this.networkConnection = networkConnection; this.link = link; this.any = any; } + private NetworkConnectionSection() { + // For JAXB + } - @XmlElement(name = "PrimaryNetworkConnectionIndex") - protected Integer primaryNetworkConnectionIndex; - @XmlElement(name = "NetworkConnection") - protected List networkConnection; - @XmlElement(name = "Link") - protected List link; - @XmlAnyElement(lax = true) - protected List any; - @XmlAttribute - @XmlSchemaType(name = "anyURI") - protected String href; - @XmlAttribute - protected String type; + @XmlElement(name = "PrimaryNetworkConnectionIndex") + protected Integer primaryNetworkConnectionIndex; + @XmlElement(name = "NetworkConnection") + protected List networkConnection; + @XmlElement(name = "Link") + protected List link; + @XmlAnyElement(lax = true) + protected List any; + @XmlAttribute + @XmlSchemaType(name = "anyURI") + protected URI href; + @XmlAttribute + protected String type; - /** - * Gets the value of the primaryNetworkConnectionIndex property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getPrimaryNetworkConnectionIndex() { - return primaryNetworkConnectionIndex; - } + /** + * Gets the value of the primaryNetworkConnectionIndex property. + * + * @return possible object is + * {@link Integer } + */ + public Integer getPrimaryNetworkConnectionIndex() { + return primaryNetworkConnectionIndex; + } - /** - * Sets the value of the primaryNetworkConnectionIndex property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setPrimaryNetworkConnectionIndex(Integer value) { - this.primaryNetworkConnectionIndex = value; - } + /** + * Sets the value of the primaryNetworkConnectionIndex property. + * + * @param value allowed object is + * {@link Integer } + */ + public void setPrimaryNetworkConnectionIndex(Integer value) { + this.primaryNetworkConnectionIndex = value; + } - /** - * Gets the value of the networkConnection property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the networkConnection property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getNetworkConnection().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link NetworkConnectionType } - * - * - */ - public List getNetworkConnection() { - if (networkConnection == null) { - networkConnection = new ArrayList(); - } - return this.networkConnection; - } + /** + * Gets the value of the networkConnection property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the networkConnection property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getNetworkConnection().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link NetworkConnection } + */ + public List getNetworkConnection() { + if (networkConnection == null) { + networkConnection = new ArrayList(); + } + return this.networkConnection; + } - /** - * Gets the value of the link property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the link property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLink().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LinkType } - * - * - */ - public List getLink() { - if (link == null) { - link = new ArrayList(); - } - return this.link; - } + /** + * Gets the value of the link property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the link property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getLink().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Link } + */ + public List getLink() { + if (link == null) { + link = new ArrayList(); + } + return this.link; + } - /** - * Gets the value of the any property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAny().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - * - * - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } + /** + * Gets the value of the any property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getAny().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } - /** - * Gets the value of the href property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getHref() { - return href; - } + /** + * @return the value of the href property. + */ + public URI getHref() { + return href; + } - /** - * Sets the value of the href property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setHref(String value) { - this.href = value; - } + /** + * Sets the value of the href property. + * + * @param value the value to set + */ + public void setHref(URI value) { + this.href = value; + } - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + /** + * Gets the value of the type property. + * + * @return possible object is + * {@link String } + */ + public String getType() { + return type; + } - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + /** + * Sets the value of the type property. + * + * @param value allowed object is + * {@link String } + */ + public void setType(String value) { + this.type = value; + } @Override public boolean equals(Object o) { if (this == o) - return true; + return true; if (o == null || getClass() != o.getClass()) return false; - NetworkConnectionSection that = NetworkConnectionSection.class.cast(o); - return equal(primaryNetworkConnectionIndex, that.primaryNetworkConnectionIndex) && - equal(networkConnection, that.networkConnection) && - equal(link, that.link) && - equal(any, that.any) && - equal(href, that.href) && - equal(type, that.type); + NetworkConnectionSection that = NetworkConnectionSection.class.cast(o); + return equal(primaryNetworkConnectionIndex, that.primaryNetworkConnectionIndex) && + equal(networkConnection, that.networkConnection) && + equal(link, that.link) && + equal(any, that.any) && + equal(href, that.href) && + equal(type, that.type); } @Override public int hashCode() { - return Objects.hashCode(primaryNetworkConnectionIndex, - networkConnection, - link, - any, - href, - type); + return Objects.hashCode(primaryNetworkConnectionIndex, + networkConnection, + link, + any, + href, + type); } @Override diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkSection.java new file mode 100644 index 0000000000..73e63c5b76 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/NetworkSection.java @@ -0,0 +1,152 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.util.Set; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.vcloud.director.v1_5.domain.ovf.Network; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +/** + * The NetworkSection element shall list all logical networks used in the OVF package. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "NetworkSection", namespace = VCLOUD_OVF_NS) +public class NetworkSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromNetworkSection(this); + } + + public static class Builder extends SectionType.Builder { + protected Set networks = Sets.newLinkedHashSet(); + + /** + * @see NetworkSection#getNetworks + */ + public Builder network(Network network) { + this.networks.add(checkNotNull(network, "network")); + return this; + } + + /** + * @see NetworkSection#getNetworks + */ + public Builder networks(Iterable networks) { + this.networks = ImmutableSet. copyOf(checkNotNull(networks, "networks")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public NetworkSection build() { + return new NetworkSection(info, networks); + } + + public Builder fromNetworkSection(NetworkSection in) { + return networks(in.getNetworks()).info(in.getInfo()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + private Set networks; + + private NetworkSection(String info, Iterable networks) { + super(info); + this.networks = ImmutableSet. copyOf(checkNotNull(networks, "networks")); + } + + private NetworkSection() { + // for JAXB + } + + /** + * All networks referred to from Connection elements in all {@link VirtualHardwareSection} + * elements shall be defined in the NetworkSection. + * + * @return + */ + public Set getNetworks() { + return networks; + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), networks); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + NetworkSection other = (NetworkSection) obj; + return super.equals(other) && Objects.equal(networks, other.networks); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("networks", networks); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OperatingSystemSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OperatingSystemSection.java new file mode 100644 index 0000000000..e958a274e1 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OperatingSystemSection.java @@ -0,0 +1,172 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.javax.annotation.Nullable; + +import com.google.common.base.Objects; + +/** + * An OperatingSystemSection specifies the operating system installed on a virtual machine. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "VirtualHardwareSection") +public class OperatingSystemSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromOperatingSystemSection(this); + } + + public static class Builder extends SectionType.Builder { + private Integer id; + private String description; + private String version; + + /** + * @see OperatingSystemSection#getId() + */ + public Builder id(Integer id) { + this.id = id; + return this; + } + + /** + * @see OperatingSystemSection#getVersion() + */ + public Builder version(String version) { + this.version = version; + return this; + } + + /** + * @see OperatingSystemSection#getDescription + */ + public Builder description(String description) { + this.description = description; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public OperatingSystemSection build() { + return new OperatingSystemSection(info, id, version, description); + } + + public Builder fromOperatingSystemSection(OperatingSystemSection in) { + return id(in.getId()).info(in.getInfo()).description(in.getDescription()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + @XmlAttribute + protected Integer id; + @XmlAttribute + protected String version; + @XmlElement + protected String description; + + public OperatingSystemSection(@Nullable String info, @Nullable Integer id, @Nullable String version, @Nullable String description) { + super(info); + this.id = id; + this.description = description; + this.version = version; + } + + protected OperatingSystemSection() { + // For Builders and JAXB + } + + /** + * + * @return ovf id + * @see org.jclouds.vcloud.director.v1_5.domain.cim.OSType#getCode() + */ + public Integer getId() { + return id; + } + + public String getVersion() { + return version; + } + + /** + * + * @return description or null + */ + public String getDescription() { + return description; + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), description); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + OperatingSystemSection other = (OperatingSystemSection) obj; + return super.equals(other) && Objects.equal(description, other.description); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("description", description); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSection.java new file mode 100644 index 0000000000..f6c90dd3e0 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSection.java @@ -0,0 +1,140 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.util.Set; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +/** + * The ProductSection element specifies product-information for an appliance, such as product name, + * version, and vendor. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "ProductSection", namespace = VCLOUD_OVF_NS) +public class ProductSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromDeploymentOptionSection(this); + } + + public static class Builder extends SectionType.Builder { + protected Set properties = Sets.newLinkedHashSet(); + + /** + * @see ProductSection#getProperties + */ + public Builder property(org.jclouds.vcloud.director.v1_5.domain.ovf.Property property) { + this.properties.add(checkNotNull(property, "property")); + return this; + } + + /** + * @see ProductSection#getProperties + */ + public Builder properties(Iterable properties) { + this.properties = ImmutableSet. copyOf(checkNotNull(properties, "properties")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ProductSection build() { + return new ProductSection(info, properties); + } + + public Builder fromDeploymentOptionSection(ProductSection in) { + return info(in.getInfo()).properties(in.getProperties()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + } + + protected Set properties; + + private ProductSection(String info, Iterable properties) { + super(info); + this.properties = ImmutableSet. copyOf(checkNotNull(properties, "properties")); + } + + private ProductSection() { + // For JAXB + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), properties); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!super.equals(obj)) return false; + if (getClass() != obj.getClass()) return false; + + ProductSection other = (ProductSection) obj; + return super.equals(other) && Objects.equal(properties, other.properties); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("properties", properties); + } + + public Set getProperties() { + return properties; + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java index f1134e2305..b11a5f4d1c 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java @@ -32,17 +32,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; -import org.jclouds.ovf.ProductSection; - import com.google.common.base.Objects; import com.google.common.collect.Sets; /** * - * Essentially a container - * with a list of product sections. - * + * Essentially a container with a list of product sections. * *

Java class for ProductSectionList complex type. * @@ -176,9 +172,7 @@ public class ProductSectionList * *

* Objects of the following type(s) are allowed in the list - * {@link ProductSectionType } - * - * + * {@link ProductSection } */ public List getProductSection() { if (productSection == null) { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/SectionType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/SectionType.java new file mode 100644 index 0000000000..396a94ed09 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/SectionType.java @@ -0,0 +1,123 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlTransient; + +import org.jclouds.javax.annotation.Nullable; + +import com.google.common.base.Objects; + +/** + * Metadata about a virtual machine or grouping of them. + *

+ * Base type for Sections, subclassing this is the most common form of extensibility. Subtypes define more specific + * elements. + * + * @author Adrian Cole + * @author Adam Lowe + */ + +// TODO why do I have to declare these? +@XmlSeeAlso( + {CustomizationSection.class, + DeploymentOptionSection.class, + DiskSection.class, + LeaseSettingsSection.class, + GuestCustomizationSection.class, + NetworkSection.class, + NetworkConfigSection.class, + NetworkConnectionSection.class, + ProductSection.class, + VirtualHardwareSection.class, + VirtualSystem.class }) +public abstract class SectionType> { + + public abstract Builder toBuilder(); + + public static abstract class Builder> { + protected String info; + + public abstract SectionType build(); + + /** + * @see SectionType#getInfo + */ + public Builder info(String info) { + this.info = info; + return this; + } + + public Builder fromSection(SectionType in) { + return info(in.getInfo()); + } + } + + @XmlElement(name = "Info", namespace = VCLOUD_OVF_NS) + protected String info; + + public SectionType(@Nullable String info) { + this.info = info; + } + + protected SectionType() { + // For Builders and JAXB + } + + /** + * Info element describes the meaning of the Section, this is typically shown if the Section is not understood by an + * application + * + * @return ovf info + */ + public String getInfo() { + return info; + } + + @Override + public int hashCode() { + return Objects.hashCode(info); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SectionType other = (SectionType) obj; + return Objects.equal(info, other.info); + } + + @Override + public String toString() { + return string().toString(); + } + + protected Objects.ToStringHelper string() { + return Objects.toStringHelper("").add("info", info); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplate.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplate.java index 249e17c3d0..9bda7a622e 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplate.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplate.java @@ -21,31 +21,31 @@ package org.jclouds.vcloud.director.v1_5.domain; import static com.google.common.base.Objects.equal; +import java.net.URI; import java.util.ArrayList; import java.util.List; - -import javax.xml.bind.JAXBElement; +import java.util.Set; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; -import org.jclouds.ovf.Section; +import org.jclouds.javax.annotation.Nullable; import com.google.common.base.Objects; /** - * - * Represents a vApp template. - * - * + * Represents a vApp template. + *

+ *

*

Java class for VAppTemplate complex type. - * + *

*

The following schema fragment specifies the expected content contained within this class. - * + *

*

  * <complexType name="VAppTemplate">
  *   <complexContent>
@@ -63,18 +63,17 @@ import com.google.common.base.Objects;
  *   </complexContent>
  * </complexType>
  * 
- * - * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "VAppTemplate", propOrder = { - "owner", - "children", - "section", - "vAppScopedLocalId" +@XmlRootElement(name = "VAppTemplate") +@XmlType(propOrder = { + "owner", + "children", + "sections", + "vAppScopedLocalId" }) public class VAppTemplate - extends ResourceEntityType + extends ResourceEntityType { @SuppressWarnings("unchecked") @@ -87,10 +86,9 @@ public class VAppTemplate } public static class Builder extends ResourceEntityType.Builder { - private Owner owner; private VAppTemplateChildren children; - private List>> sections; + private List sections; private String vAppScopedLocalId; private Boolean ovfDescriptorUploaded; private Boolean goldMaster; @@ -112,9 +110,9 @@ public class VAppTemplate } /** - * @see VAppTemplate#getExtend() + * @see VAppTemplate#getSections() */ - public Builder extend(List>> sections) { + public Builder sections(List sections) { this.sections = sections; return this; } @@ -128,7 +126,7 @@ public class VAppTemplate } /** - * @see VAppTemplate#getOvfDescriptorUploaded() + * @see VAppTemplate#isOvfDescriptorUploaded() */ public Builder ovfDescriptorUploaded(Boolean ovfDescriptorUploaded) { this.ovfDescriptorUploaded = ovfDescriptorUploaded; @@ -136,262 +134,342 @@ public class VAppTemplate } /** - * @see VAppTemplate#getGoldMaster() + * @see VAppTemplate#isGoldMaster() */ public Builder goldMaster(Boolean goldMaster) { this.goldMaster = goldMaster; return this; } - + @Override public VAppTemplate build() { - VAppTemplate vAppTemplate = new VAppTemplate(sections); - vAppTemplate.setOwner(owner); - vAppTemplate.setChildren(children); - vAppTemplate.setVAppScopedLocalId(vAppScopedLocalId); - vAppTemplate.setOvfDescriptorUploaded(ovfDescriptorUploaded); - vAppTemplate.setGoldMaster(goldMaster); - return vAppTemplate; + VAppTemplate result = new VAppTemplate(href, name, owner, children, sections, vAppScopedLocalId, ovfDescriptorUploaded, goldMaster); + result.setFiles(files); + result.setStatus(status); + result.setDescription(description); + result.setTasksInProgress(tasksInProgress); + result.setId(id); + result.setType(type); + result.setLinks(links); + return result; } @Override public Builder fromResourceEntityType(ResourceEntityType in) { - return Builder.class.cast(super.fromResourceEntityType(in)); + return Builder.class.cast(super.fromResourceEntityType(in)); } + public Builder fromVAppTemplate(VAppTemplate in) { return fromResourceEntityType(in) - .owner(in.getOwner()) - .children(in.getChildren()) - .extend(in.getSections()) - .vAppScopedLocalId(in.getVAppScopedLocalId()) - .ovfDescriptorUploaded(in.isOvfDescriptorUploaded()) - .goldMaster(in.isGoldMaster()); + .owner(in.getOwner()) + .children(in.getChildren()) + .sections(in.getSections()) + .vAppScopedLocalId(in.getVAppScopedLocalId()) + .ovfDescriptorUploaded(in.isOvfDescriptorUploaded()) + .goldMaster(in.isGoldMaster()); } + + + /** + * @see ResourceEntityType#getFiles() + */ + @Override + public Builder files(FilesList files) { + super.files(files); + return this; + } + + /** + * @see ResourceEntityType#getStatus() + */ + @Override + public Builder status(Integer status) { + super.status(status); + return this; + } + + /** + * @see EntityType#getName() + */ + @Override + public Builder name(String name) { + super.name(name); + return this; + } + + /** + * @see EntityType#getDescription() + */ + @Override + public Builder description(String description) { + super.description(description); + return this; + } + + /** + * @see EntityType#getId() + */ + @Override + public Builder id(String id) { + super.id(id); + return this; + } + + /** + * @see EntityType#getTasksInProgress() + */ + @Override + public Builder tasksInProgress(TasksInProgress tasksInProgress) { + super.tasksInProgress(tasksInProgress); + return this; + } + + /** + * @see ReferenceType#getHref() + */ + @Override + public Builder href(URI href) { + super.href(href); + return this; + } + + /** + * @see ReferenceType#getType() + */ + @Override + public Builder type(String type) { + super.type(type); + return this; + } + + /** + * @see EntityType#getLinks() + */ + @Override + public Builder links(Set links) { + super.links(links); + return this; + } + + /** + * @see EntityType#getLinks() + */ + @Override + public Builder link(Link link) { + super.link(link); + return this; + } + } + + @XmlElementRef + protected Owner owner; + @XmlElement(name = "Children") + protected VAppTemplateChildren children; + @XmlElementRef + protected List sections; + @XmlElement(name = "VAppScopedLocalId") + protected String vAppScopedLocalId; + @XmlAttribute + protected Boolean ovfDescriptorUploaded; + @XmlAttribute + protected Boolean goldMaster; + + private VAppTemplate(URI href, String name, @Nullable Owner owner, @Nullable VAppTemplateChildren children, + List sections, @Nullable String vAppScopedLocalId, + @Nullable Boolean ovfDescriptorUploaded, @Nullable Boolean goldMaster) { + super(href, name); + this.sections = sections; + this.owner = owner; + this.children = children; + this.vAppScopedLocalId = vAppScopedLocalId; + this.ovfDescriptorUploaded = ovfDescriptorUploaded; + this.goldMaster = goldMaster; } private VAppTemplate() { // For JAXB and builder use } - private VAppTemplate(List>> sections) { - this.sections = sections; + /** + * Gets the value of the owner property. + * + * @return possible object is + * {@link Owner } + */ + public Owner getOwner() { + return owner; } + /** + * Sets the value of the owner property. + * + * @param value allowed object is + * {@link Owner } + */ + public void setOwner(Owner value) { + this.owner = value; + } - @XmlElement(name = "Owner") - protected Owner owner; - @XmlElement(name = "Children") - protected VAppTemplateChildren children; - @XmlElementRef(name = "Section", namespace = "http://schemas.dmtf.org/ovf/envelope/1", type = JAXBElement.class) - protected List>> sections; - @XmlElement(name = "VAppScopedLocalId") - protected String vAppScopedLocalId; - @XmlAttribute - protected Boolean ovfDescriptorUploaded; - @XmlAttribute - protected Boolean goldMaster; + /** + * Gets the value of the children property. + * + * @return possible object is + * {@link VAppTemplateChildren } + */ + public VAppTemplateChildren getChildren() { + return children; + } - /** - * Gets the value of the owner property. - * - * @return - * possible object is - * {@link Owner } - * - */ - public Owner getOwner() { - return owner; - } + /** + * Sets the value of the children property. + * + * @param value allowed object is + * {@link VAppTemplateChildren } + */ + public void setChildren(VAppTemplateChildren value) { + this.children = value; + } - /** - * Sets the value of the owner property. - * - * @param value - * allowed object is - * {@link Owner } - * - */ - public void setOwner(Owner value) { - this.owner = value; - } + /** + * Contains ovf sections for vApp template. + * Gets the value of the section property. + *

+ *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the section property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+    *    getSection().add(newItem);
+    * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link SectionType }{@code >} + * {@link JAXBElement }{@code <}{@link VirtualHardwareSection }{@code >} + * {@link JAXBElement }{@code <}{@link LeaseSettingsSection }{@code >} + * {@link JAXBElement }{@code <}{@link EulaSection }{@code >} + * {@link JAXBElement }{@code <}{@link RuntimeInfoSection }{@code >} + * {@link JAXBElement }{@code <}{@link AnnotationSection }{@code >} + * {@link JAXBElement }{@code <}{@link DeploymentOptionSection }{@code >} + * {@link JAXBElement }{@code <}{@link StartupSection }{@code >} + * {@link JAXBElement }{@code <}{@link ResourceAllocationSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConnectionSection }{@code >} + * {@link JAXBElement }{@code <}{@link CustomizationSection }{@code >} + * {@link JAXBElement }{@code <}{@link ProductSection }{@code >} + * {@link JAXBElement }{@code <}{@link GuestCustomizationSection }{@code >} + * {@link JAXBElement }{@code <}{@link OperatingSystemSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkConfigSection }{@code >} + * {@link JAXBElement }{@code <}{@link NetworkSection }{@code >} + * {@link JAXBElement }{@code <}{@link DiskSection }{@code >} + * {@link JAXBElement }{@code <}{@link InstallSection }{@code >} + */ + public List getSections() { + if (sections == null) { + sections = new ArrayList(); + } + return this.sections; + } - /** - * Gets the value of the children property. - * - * @return - * possible object is - * {@link VAppTemplateChildren } - * - */ - public VAppTemplateChildren getChildren() { - return children; - } + /** + * Gets the value of the vAppScopedLocalId property. + * + * @return possible object is + * {@link String } + */ + public String getVAppScopedLocalId() { + return vAppScopedLocalId; + } - /** - * Sets the value of the children property. - * - * @param value - * allowed object is - * {@link VAppTemplateChildren } - * - */ - public void setChildren(VAppTemplateChildren value) { - this.children = value; - } + /** + * Sets the value of the vAppScopedLocalId property. + * + * @param value allowed object is + * {@link String } + */ + public void setVAppScopedLocalId(String value) { + this.vAppScopedLocalId = value; + } - /** - * - * Contains ovf sections for vApp template. - * Gets the value of the section property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the section property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSection().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JAXBElement }{@code <}{@link SectionType }{@code >} - * {@link JAXBElement }{@code <}{@link VirtualHardwareSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link LeaseSettingsSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link EulaSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link RuntimeInfoSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link AnnotationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link DeploymentOptionSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link StartupSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link ResourceAllocationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConnectionSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link CustomizationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link ProductSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link GuestCustomizationSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link OperatingSystemSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkConfigSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link NetworkSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link DiskSectionType }{@code >} - * {@link JAXBElement }{@code <}{@link InstallSectionType }{@code >} - * - * - */ - public List>> getSections() { - if (sections == null) { - sections = new ArrayList>>(); - } - return this.sections; - } + /** + * Gets the value of the ovfDescriptorUploaded property. + * + * @return possible object is + * {@link Boolean } + */ + public Boolean isOvfDescriptorUploaded() { + return ovfDescriptorUploaded; + } - /** - * Gets the value of the vAppScopedLocalId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVAppScopedLocalId() { - return vAppScopedLocalId; - } + /** + * Sets the value of the ovfDescriptorUploaded property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setOvfDescriptorUploaded(Boolean value) { + this.ovfDescriptorUploaded = value; + } - /** - * Sets the value of the vAppScopedLocalId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVAppScopedLocalId(String value) { - this.vAppScopedLocalId = value; - } + /** + * Gets the value of the goldMaster property. + * + * @return possible object is + * {@link Boolean } + */ + public boolean isGoldMaster() { + if (goldMaster == null) { + return false; + } else { + return goldMaster; + } + } - /** - * Gets the value of the ovfDescriptorUploaded property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isOvfDescriptorUploaded() { - return ovfDescriptorUploaded; - } - - /** - * Sets the value of the ovfDescriptorUploaded property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setOvfDescriptorUploaded(Boolean value) { - this.ovfDescriptorUploaded = value; - } - - /** - * Gets the value of the goldMaster property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isGoldMaster() { - if (goldMaster == null) { - return false; - } else { - return goldMaster; - } - } - - /** - * Sets the value of the goldMaster property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setGoldMaster(Boolean value) { - this.goldMaster = value; - } + /** + * Sets the value of the goldMaster property. + * + * @param value allowed object is + * {@link Boolean } + */ + public void setGoldMaster(Boolean value) { + this.goldMaster = value; + } @Override public boolean equals(Object o) { if (this == o) - return true; + return true; if (o == null || getClass() != o.getClass()) return false; VAppTemplate that = VAppTemplate.class.cast(o); - return equal(owner, that.owner) && - equal(children, that.children) && - equal(sections, that.sections) && - equal(vAppScopedLocalId, that.vAppScopedLocalId) && - equal(ovfDescriptorUploaded, that.ovfDescriptorUploaded) && - equal(goldMaster, that.goldMaster); + return super.equals(that) && + equal(owner, that.owner) && + equal(children, that.children) && + equal(sections, that.sections) && + equal(vAppScopedLocalId, that.vAppScopedLocalId) && + equal(ovfDescriptorUploaded, that.ovfDescriptorUploaded) && + equal(goldMaster, that.goldMaster); } @Override public int hashCode() { - return Objects.hashCode(owner, - children, - sections, - vAppScopedLocalId, - ovfDescriptorUploaded, - goldMaster); + return Objects.hashCode(super.hashCode(), + owner, + children, + sections, + vAppScopedLocalId, + ovfDescriptorUploaded, + goldMaster); } @Override public String toString() { - return Objects.toStringHelper("") + return Objects.toStringHelper(super.toString()) .add("owner", owner) .add("children", children) .add("sections", sections) diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplateChildren.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplateChildren.java index 3adf7a0054..d08798b220 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplateChildren.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppTemplateChildren.java @@ -123,7 +123,7 @@ public class VAppTemplateChildren { * *

* Objects of the following type(s) are allowed in the list - * {@link VAppTemplateType } + * {@link VAppTemplate } * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdc.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdc.java index 23cad56744..e89ea51350 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdc.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdc.java @@ -273,7 +273,7 @@ public class Vdc } /** - * @see ReferenceType#getLinks() + * @see EntityType#getLinks() */ @Override public Builder links(Set links) { @@ -282,7 +282,7 @@ public class Vdc } /** - * @see ReferenceType#getLinks() + * @see EntityType#getLinks() */ @Override public Builder link(Link link) { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualHardwareSection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualHardwareSection.java new file mode 100644 index 0000000000..7f4b092615 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualHardwareSection.java @@ -0,0 +1,207 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.util.Set; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.vcloud.director.v1_5.domain.cim.ResourceAllocationSettingData; +import org.jclouds.vcloud.director.v1_5.domain.cim.VirtualSystemSettingData; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +/** + * The virtual hardware required by a virtual machine is specified in VirtualHardwareSection. + *

+ * This specification supports abstract or incomplete hardware descriptions in which only the major + * devices are described. The hypervisor is allowed to create additional virtual hardware + * controllers and devices, as long as the required devices listed in the descriptor are realized. + * + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "VirtualHardwareSection", namespace = VCLOUD_OVF_NS) +public class VirtualHardwareSection extends SectionType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromVirtualHardwareSection(this); + } + + public static class Builder extends SectionType.Builder { + protected VirtualSystemSettingData virtualSystem; + protected Set transports = Sets.newLinkedHashSet(); + protected Set items = Sets.newLinkedHashSet(); + + /** + * @see VirtualHardwareSection#getSystem + */ + public Builder system(VirtualSystemSettingData virtualSystem) { + this.virtualSystem = virtualSystem; + return this; + } + + /** + * @see VirtualHardwareSection#getTransports + */ + public Builder transport(String transport) { + this.transports.add(checkNotNull(transport, "transport")); + return this; + } + + /** + * @see VirtualHardwareSection#getTransports + */ + public Builder transports(Iterable transports) { + this.transports = ImmutableSet.copyOf(checkNotNull(transports, "transports")); + return this; + } + + /** + * @see VirtualHardwareSection#getItems + */ + public Builder item(ResourceAllocationSettingData item) { + this.items.add(checkNotNull(item, "item")); + return this; + } + + /** + * @see VirtualHardwareSection#getItems + */ + public Builder items(Iterable items) { + this.items = ImmutableSet.copyOf(checkNotNull( + items, "items")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public VirtualHardwareSection build() { + return new VirtualHardwareSection(info, transports, virtualSystem, items); + } + + public Builder fromVirtualHardwareSection(VirtualHardwareSection in) { + return fromSection(in).items(in.getItems()).transports(in.getTransports()).system( + in.getSystem()).info(in.getInfo()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + } + + private VirtualSystemSettingData virtualSystem; + private Set transports; + private Set items; + + private VirtualHardwareSection(String info, Iterable transports, VirtualSystemSettingData virtualSystem, + Iterable items) { + super(info); + this.virtualSystem = virtualSystem; + this.transports = ImmutableSet.copyOf(checkNotNull(transports, "transports")); + this.items = ImmutableSet.copyOf(checkNotNull(items, "items")); + } + + private VirtualHardwareSection() { + // For JAXB + } + + /** + * transport types define methods by which the environment document is communicated from the + * deployment platform to the guest software. + *

+ * To enable interoperability, this specification defines an "iso" transport type which all + * implementations that support CD-ROM devices are required to support. The iso transport + * communicates the environment 1346 document by making a dynamically generated ISO image + * available to the guest software. To support the iso transport type, prior to booting a virtual + * machine, an implementation shall make an ISO 9660 read-only disk image available as backing + * for a disconnected CD-ROM. If the iso transport is selected for a VirtualHardwareSection, at + * least one disconnected CD-ROM device shall be present in this section. + *

+ * Support for the "iso" transport type is not a requirement for virtual hardware architectures + * or guest 1351 operating systems which do not have CD-ROM device support. + * + * @return + */ + public Set getTransports() { + return transports; + } + + public VirtualSystemSettingData getSystem() { + return virtualSystem; + } + + public Set getItems() { + return items; + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), transports, virtualSystem, items); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + VirtualHardwareSection other = (VirtualHardwareSection) obj; + return super.equals(other) && Objects.equal(transports, other.transports) + && Objects.equal(virtualSystem, other.virtualSystem) + && Objects.equal(items, other.items); + } + + @Override + protected Objects.ToStringHelper string() { + return super.string().add("transports", transports).add("virtualSystem", virtualSystem).add("items", items); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualSystem.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualSystem.java new file mode 100644 index 0000000000..402cf87ee3 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VirtualSystem.java @@ -0,0 +1,167 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.ovf.internal.BaseVirtualSystem; + +import com.google.common.collect.Multimap; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlRootElement(name = "VirtualSystem", namespace = VCLOUD_OVF_NS) +public class VirtualSystem extends BaseVirtualSystem { + + public static Builder builder() { + return new Builder(); + } + + @Override + public SectionType.Builder toBuilder() { + return new Builder().fromVirtualSystem(this); + } + + public static class Builder extends BaseVirtualSystem.Builder { + + /** + * {@inheritDoc} + */ + @Override + public VirtualSystem build() { + return new VirtualSystem(id, info, name, operatingSystem, virtualHardwareSections, productSections, + additionalSections); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + public Builder additionalSection(String name, SectionType additionalSection) { + return Builder.class.cast(super.additionalSection(name, additionalSection)); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + public Builder additionalSections(Multimap additionalSections) { + return Builder.class.cast(super.additionalSections(additionalSections)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return Builder.class.cast(super.fromSection(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromVirtualSystem(BaseVirtualSystem in) { + return Builder.class.cast(super.fromVirtualSystem(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder virtualHardwareSection(VirtualHardwareSection virtualHardwareSection) { + return Builder.class.cast(super.virtualHardwareSection(virtualHardwareSection)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder virtualHardwareSections(Iterable virtualHardwareSections) { + return Builder.class.cast(super.virtualHardwareSections(virtualHardwareSections)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder id(String id) { + return Builder.class.cast(super.id(id)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return Builder.class.cast(super.info(info)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder name(String name) { + return Builder.class.cast(super.name(name)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder operatingSystemSection(OperatingSystemSection operatingSystem) { + return Builder.class.cast(super.operatingSystemSection(operatingSystem)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder productSection(ProductSection productSection) { + return Builder.class.cast(super.productSection(productSection)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder productSections(Iterable productSections) { + return Builder.class.cast(super.productSections(productSections)); + } + + } + + @SuppressWarnings("unchecked") + private VirtualSystem(String id, String info, String name, OperatingSystemSection operatingSystem, + Iterable virtualHardwareSections, + Iterable productSections, Multimap additionalSections) { + super(id, info, name, operatingSystem, virtualHardwareSections, productSections, additionalSections); + } + + private VirtualSystem() { + // for JAXB + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ManagedElement.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ManagedElement.java new file mode 100644 index 0000000000..33159fa5c7 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ManagedElement.java @@ -0,0 +1,128 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.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 + * + */ +public abstract class ManagedElement extends SettingData { + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromManagedElement(this); + } + + public static class Builder extends SettingData.Builder { + protected String caption; + protected String description; + + /** + * @see ManagedElement#getCaption + */ + public Builder caption(String caption) { + this.caption = caption; + return this; + } + + /** + * @see ManagedElement#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 String caption; + protected String description; + + protected ManagedElement(String elementName, String instanceID, String caption, String description) { + super(elementName, instanceID); + this.caption = caption; + this.description = description; + } + + protected ManagedElement() { + // for JAXB + } + + /** + * 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); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/OSType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/OSType.java new file mode 100644 index 0000000000..1eea2ad047 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/OSType.java @@ -0,0 +1,242 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.cim; + +import org.jclouds.compute.domain.OsFamily; + +/** + * Operating system based on DMTF CIM model. + * + * @author Adrian Cole + * @see + */ +public enum OSType { + /** + * Other + */ + OTHER(1, "Other", OsFamily.UNRECOGNIZED, false), + /** + * MACOS + */ + MACOS(2, "MACOS", OsFamily.DARWIN, false), + /** + * Solaris + */ + SOLARIS(29, "Solaris", OsFamily.SOLARIS, false), + /** + * LINUX + */ + LINUX(36, "LINUX", OsFamily.LINUX, false), + /** + * FreeBSD + */ + FREEBSD(42, "FreeBSD", OsFamily.FREEBSD, false), + /** + * NetBSD + */ + NETBSD(43, "NetBSD", OsFamily.NETBSD, false), + /** + * OpenBSD + */ + OPENBSD(65, "OpenBSD", OsFamily.OPENBSD, false), + /** + * Not Applicable + */ + NOT_APPLICABLE(66, "Not Applicable", OsFamily.UNRECOGNIZED, false), + /** + * Microsoft Windows Server 2003 + */ + WINDOWS_SERVER_2003(69, "Microsoft Windows Server 2003", OsFamily.WINDOWS, false), + /** + * Microsoft Windows Server 2003 64-Bit + */ + WINDOWS_SERVER_2003_64(70, "Microsoft Windows Server 2003 64-Bit", OsFamily.WINDOWS, true), + /** + * Microsoft Windows Server 2008 + */ + WINDOWS_SERVER_2008(76, "Microsoft Windows Server 2008", OsFamily.WINDOWS, false), + /** + * Microsoft Windows Server 2008 64-Bit + */ + WINDOWS_SERVER_2008_64(77, "Microsoft Windows Server 2008 64-Bit", OsFamily.WINDOWS, true), + /** + * FreeBSD 64-Bit + */ + FREEBSD_64(78, "FreeBSD 64-Bit", OsFamily.FREEBSD, true), + /** + * RedHat Enterprise Linux + */ + RHEL(79, "RedHat Enterprise Linux", OsFamily.RHEL, false), + /** + * RedHat Enterprise Linux 64-Bit + */ + RHEL_64(80, "RedHat Enterprise Linux 64-Bit", OsFamily.RHEL, true), + /** + * Solaris 64-Bit + */ + SOLARIS_64(81, "Solaris 64-Bit", OsFamily.SOLARIS, true), + /** + * SUSE + */ + SUSE(82, "SUSE", OsFamily.SUSE, false), + /** + * SUSE 64-Bit + */ + SUSE_64(83, "SUSE 64-Bit", OsFamily.SUSE, true), + /** + * SLES + */ + SLES(84, "SLES", OsFamily.SUSE, false), + /** + * SLES 64-Bit + */ + SLES_64(85, "SLES 64-Bit", OsFamily.SUSE, true), + /** + * Novell OES + */ + NOVELL_OES(86, "Novell OES", OsFamily.SUSE, true), + /** + * Mandriva + */ + MANDRIVA(89, "Mandriva", OsFamily.MANDRIVA, false), + /** + * Mandriva 64-Bit + */ + MANDRIVA_64(90, "Mandriva 64-Bit", OsFamily.MANDRIVA, true), + /** + * TurboLinux + */ + TURBOLINUX(91, "TurboLinux", OsFamily.TURBOLINUX, false), + /** + * TurboLinux 64-Bit + */ + TURBOLINUX_64(92, "TurboLinux 64-Bit", OsFamily.TURBOLINUX, true), + /** + * Ubuntu + */ + UBUNTU(93, "Ubuntu", OsFamily.UBUNTU, false), + /** + * Ubuntu 64-Bit + */ + UBUNTU_64(94, "Ubuntu 64-Bit", OsFamily.UBUNTU, true), + /** + * Debian + */ + DEBIAN(95, "Debian", OsFamily.DEBIAN, false), + /** + * Debian 64-Bit + */ + DEBIAN_64(96, "Debian 64-Bit", OsFamily.DEBIAN, false), + /** + * Linux 2.4.x + */ + LINUX_2_4(97, "Linux 2.4.x", OsFamily.LINUX, false), + /** + * Linux 2.4.x 64-Bi + */ + LINUX_2_4_64(98, "Linux 2.4.x 64-Bit", OsFamily.LINUX, true), + /** + * Linux 2.6.x + */ + LINUX_2_6(99, "Linux 2.6.x", OsFamily.LINUX, false), + /** + * Linux 2.6.x 64-Bit + */ + LINUX_2_6_64(100, "Linux 2.6.x 64-Bit", OsFamily.LINUX, true), + /** + * Linux 64-Bit + */ + LINUX_64(101, "Linux 64-Bit", OsFamily.LINUX, true), + /** + * Other 64-Bit + */ + OTHER_64(102, "Other 64-Bit", OsFamily.UNRECOGNIZED, true), + /** + * Microsoft Windows Server 2008 R2 + */ + WINDOWS_SERVER_2008_R2(103, "Microsoft Windows Server 2008 R2", OsFamily.WINDOWS, true), + /** + * VMware ESXi + */ + ESXI(104, "VMware ESXi", OsFamily.ESX, true), + /** + * Microsoft Windows 7 + */ + WINDOWS_7(105, "Microsoft Windows 7", OsFamily.WINDOWS, false), + /** + * CentOS 32-bit + */ + CENTOS(106, "CentOS 32-bit", OsFamily.CENTOS, false), + /** + * CentOS 64-bit + */ + CENTOS_64(107, "CentOS 64-bit", OsFamily.CENTOS, true), + /** + * Oracle Enterprise Linux 32-bit + */ + ORACLE_ENTERPRISE_LINUX(108, "Oracle Enterprise Linux 32-bit", OsFamily.OEL, false), + /** + * Oracle Enterprise Linux 64-bit + */ + ORACLE_ENTERPRISE_LINUX_64(109, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true), + /** + * eComStation 32-bitx + */ + ECOMSTATION_32(109, "eComStation 32-bitx", OsFamily.UNRECOGNIZED, false), UNRECOGNIZED(Integer.MAX_VALUE, + "UNRECOGNIZED", null, true); + private final int code; + + public int getCode() { + return code; + } + + public String getValue() { + return value; + } + + public OsFamily getFamily() { + return family; + } + + public boolean is64Bit() { + return is64Bit; + } + + private final String value; + private final OsFamily family; + private final boolean is64Bit; + + OSType(int code, String value, OsFamily family, boolean is64Bit) { + this.code = code; + this.value = value; + this.family = family; + this.is64Bit = is64Bit; + } + + public static OSType fromValue(int code) { + for (OSType type : values()) { + if (type.code == code) + return type; + } + return UNRECOGNIZED; + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ResourceAllocationSettingData.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ResourceAllocationSettingData.java new file mode 100644 index 0000000000..fd1e3576d5 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/ResourceAllocationSettingData.java @@ -0,0 +1,747 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.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 + * + */ +public class ResourceAllocationSettingData extends ManagedElement { + + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromResourceAllocationSettingData(this); + } + + 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 connections = Lists.newArrayList(); + protected List 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#isAutomaticAllocation() + */ + public Builder automaticAllocation(Boolean automaticAllocation) { + this.automaticAllocation = automaticAllocation; + return this; + } + + /** + * @see ResourceAllocationSettingData#isAutomaticDeallocation() + */ + 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#getConnections() + */ + public Builder connection(String connection) { + this.connections.add(checkNotNull(connection, "connection")); + return this; + } + + /** + * @see ResourceAllocationSettingData#getHostResources() + */ + public Builder hostResource(String hostResource) { + this.hostResources.add(checkNotNull(hostResource, "hostResource")); + return this; + } + + /** + * @see ResourceAllocationSettingData#getConnections + */ + public Builder connections(List connections) { + this.connections.addAll(checkNotNull(connections, "connections")); + return this; + } + + /** + * @see ResourceAllocationSettingData#getHostResources + */ + public Builder hostResources(List 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 fromManagedElement(in).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 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)); + } + + } + + /** + * 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 RESOURCE_TYPE_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(ResourceType.values()), new Function() { + + @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 MAPPING_BEHAVIOR_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(ConsumerVisibility.values()), new Function() { + + @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 MAPPING_BEHAVIOR_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(MappingBehavior.values()), new Function() { + + @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 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 connections; + protected List hostResources; + + private 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 connections, List 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); + } + + private ResourceAllocationSettingData() { + // for JAXB + } + + /** + * 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 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 getHostResources() { + return hostResources; + } + + @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; + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/SettingData.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/SettingData.java new file mode 100644 index 0000000000..0bfdbdea85 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/SettingData.java @@ -0,0 +1,143 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.cim; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * + * The type of resource this allocation setting represents. + * + * @author Adrian Cole + * @see + * + */ +public abstract class SettingData implements Comparable { + + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return builder().fromSettingData(this); + } + + 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 String elementName; + protected String instanceID; + + public SettingData(String elementName, String instanceID) { + this.elementName = checkNotNull(elementName, "elementName"); + this.instanceID = checkNotNull(instanceID, "instanceID"); + } + + protected SettingData() { + // for JAXB + } + + /** + * 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); + } + + /** + * {@inheritDoc} + */ + @Override + public int compareTo(SettingData o) { + if (instanceID == null) + return -1; + return (this == o) ? 0 : instanceID.compareTo(o.instanceID); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/VirtualSystemSettingData.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/VirtualSystemSettingData.java new file mode 100644 index 0000000000..75b13e5302 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/cim/VirtualSystemSettingData.java @@ -0,0 +1,582 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.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 + * + */ +public class VirtualSystemSettingData extends ManagedElement { + + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder toBuilder() { + return builder().fromVirtualSystemSettingData(this); + } + + 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 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 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 AUTOMATIC_RECOVERY_ACTION_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(AutomaticRecoveryAction.values()), new Function() { + + @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 AUTOMATIC_SHUTDOWN_ACTION_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(AutomaticShutdownAction.values()), new Function() { + + @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 AUTOMATIC_STARTUP_ACTION_BY_ID = Maps.uniqueIndex( + ImmutableSet.copyOf(AutomaticStartupAction.values()), new Function() { + + @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 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 virtualSystemTypes; + private String notes; + + private 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 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; + } + + private VirtualSystemSettingData() { + // for JAXB + } + + /** + * 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 getVirtualSystemTypes() { + return virtualSystemTypes; + } + + /** + * End-user supplied notes that are related to the virtual system. + */ + public String getNotes() { + return notes; + } + + @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); + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Configuration.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Configuration.java new file mode 100644 index 0000000000..8e9f9f0127 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Configuration.java @@ -0,0 +1,156 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +import com.google.common.base.Objects; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "Configuration", namespace = VCLOUD_OVF_NS, propOrder = { + "label", "description" +}) +public class Configuration { + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + protected String id; + protected boolean isDefault; + protected String label; + protected String description; + + /** + * @see Configuration#getId + */ + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see Configuration#getLabel + */ + public Builder label(String label) { + this.label = label; + return this; + } + + /** + * @see Configuration#getDescription + */ + public Builder description(String description) { + this.description = description; + return this; + } + + /** + * @see Configuration#isDefault + */ + public Builder isDefault(boolean isDefault) { + this.isDefault = isDefault; + return this; + } + + public Configuration build() { + return new Configuration(id, isDefault, label, description); + } + + public Builder fromConfiguration(Configuration in) { + return id(in.getId()).description(in.getDescription()).label(in.getLabel()); + } + } + + @XmlAttribute + private String id; + @XmlAttribute(name = "default") + private boolean isDefault; + @XmlElement(name = "Label") + private String label; + @XmlElement(name = "Description") + private String description; + + public Configuration(String id, boolean isDefault, String label, String description) { + this.id = id; + this.label = label; + this.description = description; + this.isDefault = isDefault; + } + + public Configuration() { + // for JAXB + } + + @Override + public int hashCode() { + return Objects.hashCode(id, label, description); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Configuration other = (Configuration) obj; + return Objects.equal(id, other.id) + && Objects.equal(label, other.label) + && Objects.equal(description, other.description); + } + + + @Override + public String toString() { + return string().toString(); + } + + protected Objects.ToStringHelper string() { + return Objects.toStringHelper("").add("id", id).add("default", isDefault).add("label", label).add("description", description); + } + + public String getId() { + return id; + } + + public String getDescription() { + return description; + } + + public String getLabel() { + return label; + } + + public boolean isDefault() { + return isDefault; + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Disk.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Disk.java new file mode 100644 index 0000000000..b606be628d --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Disk.java @@ -0,0 +1,249 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import java.net.URI; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + +import org.jclouds.vcloud.director.v1_5.domain.DiskSection; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "Disk", namespace = VCLOUD_OVF_NS) +public class Disk implements Comparable{ + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private String id; + private Long capacity; + private String parentRef; + private String fileRef; + private URI format; + private Long populatedSize; + private String capacityAllocationUnits; + + /** + * @see Disk#getId + */ + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see Disk#getCapacity + */ + public Builder capacity(Long capacity) { + this.capacity = capacity; + return this; + } + + /** + * @see Disk#getParentRef + */ + public Builder parentRef(String parentRef) { + this.parentRef = parentRef; + return this; + } + + /** + * @see Disk#getFileRef + */ + public Builder fileRef(String fileRef) { + this.fileRef = fileRef; + return this; + } + + /** + * @see Disk#getFormat + */ + public Builder format(URI format) { + this.format = format; + return this; + } + + /** + * @see Disk#getPopulatedSize + */ + public Builder populatedSize(Long populatedSize) { + this.populatedSize = populatedSize; + return this; + } + + /** + * @see Disk#getCapacityAllocationUnits + */ + public Builder capacityAllocationUnits(String capacityAllocationUnits) { + this.capacityAllocationUnits = capacityAllocationUnits; + return this; + } + + public Disk build() { + return new Disk(id, capacity, parentRef, fileRef, format, populatedSize, capacityAllocationUnits); + } + + public Builder fromDisk(Disk in) { + return id(in.getId()).capacity(in.getCapacity()).parentRef(in.getParentRef()).fileRef(in.getFileRef()).format( + in.getFormat()).populatedSize(in.getPopulatedSize()).capacityAllocationUnits( + in.getCapacityAllocationUnits()); + } + } + + private String id; + private Long capacity; + private String parentRef; + private String fileRef; + private URI format; + private Long populatedSize; + private String capacityAllocationUnits; + + private Disk(String id, Long capacity, String parentRef, String fileRef, URI format, Long populatedSize, + String capacityAllocationUnits) { + this.id = id; + this.capacity = capacity; + this.parentRef = parentRef; + this.fileRef = fileRef; + this.format = format; + this.populatedSize = populatedSize; + this.capacityAllocationUnits = capacityAllocationUnits; + } + + private Disk() { + // For Jaxb + } + + /** + * Each virtual disk is represented by a Disk element that shall be given a identifier using the + * {@code id} attribute, the identifier shall be unique within the {@link DiskSection}. + */ + public String getId() { + return id; + } + + /** + * The capacity of a virtual disk shall be specified by the {@code capacity} attribute with an + * xs:long integer value. The default unit of allocation shall be bytes. + */ + public Long getCapacity() { + return capacity; + } + + /** + * OVF allows a disk image to be represented as a set of modified blocks in comparison to a + * parent image. The use of parent disks can often significantly reduce the size of an OVF + * package, if it contains multiple disks with similar content. For a Disk element, a parent disk + * may optionally be specified using the {@code parentRef} attribute, which shall contain a valid + * ovf:id reference to a different Disk element. If a disk block does not exist locally, lookup + * for that disk block then occurs in the parent disk. In {@link DiskSection}, parent Disk + * elements shall occur before child Disk elements that refer to them. + */ + public String getParentRef() { + return parentRef; + } + + /** + * The ovf:fileRef attribute denotes the virtual disk content by identifying an existing File + * element in the References element, the File element is identified by matching its {@code id} + * attribute value with the {@code fileRef} attribute value. Omitting the {@code fileRef} + * attribute shall indicate an empty disk. In this case, the disk shall be created and the entire + * disk content zeroed at installation time. The guest software will typically format empty disks + * in some file system format. + */ + public String getFileRef() { + return fileRef; + } + + /** + * The format URI of a non-empty virtual disk shall be specified by the {@code format} attribute. + */ + public URI getFormat() { + return format; + } + + /** + * For non-empty disks, the actual used size of the disk may optionally be specified using the + * {@code populatedSize} attribute. The unit of this attribute is always bytes. {@code + * populatedSize} is allowed to be an estimate of used disk size but shall not be larger than + * {@code capacity}. + */ + public Long getPopulatedSize() { + return populatedSize; + } + + /** + * The optional string attribute {@code ovf:capacityAllocationUnits} may be used to specify a + * particular unit of allocation. Values for {@code ovf:capacityAllocationUnits} shall match the + * format for programmatic units defined in DSP0004. + */ + public String getCapacityAllocationUnits() { + return capacityAllocationUnits; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.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; + Disk other = (Disk) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + @Override + public String toString() { + return String + .format( + "[id=%s, capacity=%s, capacityAllocationUnits=%s, fileRef=%s, format=%s, parentRef=%s, populatedSize=%s]", + id, capacity, capacityAllocationUnits, fileRef, format, parentRef, populatedSize); + } + + /** + * {@inheritDoc} + */ + @Override + public int compareTo(Disk o) { + if (id == null) + return -1; + return (this == o) ? 0 : id.compareTo(o.id); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Envelope.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Envelope.java new file mode 100644 index 0000000000..b40d4442ef --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Envelope.java @@ -0,0 +1,142 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.vcloud.director.v1_5.domain.DiskSection; +import org.jclouds.vcloud.director.v1_5.domain.NetworkSection; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.VirtualSystem; +import org.jclouds.vcloud.director.v1_5.domain.ovf.internal.BaseEnvelope; + +import com.google.common.collect.Multimap; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "Envelope", namespace = VCLOUD_OVF_NS) +public class Envelope extends BaseEnvelope { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + /** + * {@inheritDoc} + */ + public Builder toBuilder() { + return new Builder().fromEnvelope(this); + } + + public static class Builder extends BaseEnvelope.Builder { + + /** + * {@inheritDoc} + */ + public Envelope build() { + return new Envelope(diskSections, networkSections, additionalSections, virtualSystem); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + public Builder additionalSection(String name, SectionType additionalSection) { + return Builder.class.cast(super.additionalSection(name, additionalSection)); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + public Builder additionalSections(Multimap additionalSections) { + return Builder.class.cast(super.additionalSections(additionalSections)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder diskSection(DiskSection diskSection) { + return Builder.class.cast(super.diskSection(diskSection)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder diskSections(Iterable diskSections) { + return Builder.class.cast(super.diskSections(diskSections)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromEnvelope(BaseEnvelope in) { + return Builder.class.cast(super.fromEnvelope(in)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder networkSection(NetworkSection networkSection) { + return Builder.class.cast(super.networkSection(networkSection)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder networkSections(Iterable networkSections) { + return Builder.class.cast(super.networkSections(networkSections)); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder virtualSystem(VirtualSystem virtualSystem) { + return Builder.class.cast(super.virtualSystem(virtualSystem)); + } + + } + + @SuppressWarnings("unchecked") + private Envelope(Iterable diskSections, Iterable networkSections, + Multimap additionalSections, VirtualSystem virtualSystem) { + super(diskSections, networkSections, additionalSections, virtualSystem); + } + + private Envelope() { + // For JaxB + } + +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Network.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Network.java new file mode 100644 index 0000000000..3a673266e6 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Network.java @@ -0,0 +1,123 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf; + + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "Network", namespace = VCLOUD_OVF_NS) +public class Network { + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + protected String name; + protected String description; + + /** + * @see Network#getName + */ + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see Network#getDescription + */ + public Builder description(String description) { + this.description = description; + return this; + } + + public Network build() { + return new Network(name, description); + } + + public Builder fromNetwork(Network in) { + return name(in.getName()).description(in.getDescription()); + } + } + + private String name; + private String description; + + protected Network(String name, String description) { + this.name = name; + this.description = description; + } + + protected Network() { + // for JAXB + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((name == null) ? 0 : name.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; + Network other = (Network) obj; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + @Override + public String toString() { + return "[name=" + name + ", description=" + description + "]"; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Property.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Property.java new file mode 100644 index 0000000000..2860a9d941 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/Property.java @@ -0,0 +1,147 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +/** + * @author Adrian Cole + * @author Adam Lowe + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "Property", namespace = VCLOUD_OVF_NS) +public class Property { + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + protected String key; + protected String value; + protected String label; + protected String description; + + /** + * @see Property#getKey + */ + public Builder key(String key) { + this.key = key; + return this; + } + + /** + * @see Property#getValue + */ + public Builder value(String value) { + this.value = value; + return this; + } + + /** + * @see Property#getLabel + */ + public Builder label(String label) { + this.label = label; + return this; + } + + /** + * @see Property#getDescription + */ + public Builder description(String description) { + this.description = description; + return this; + } + + public Property build() { + return new Property(key, value, label, description); + } + + public Builder fromProperty(Property in) { + return key(in.getKey()).value(in.getValue()).description(in.getDescription()).label(in.getLabel()); + } + } + + private String key; + private String value; + private String label; + private String description; + + private Property(String key, String value, String label, String description) { + this.key = key; + this.value = value; + this.label = label; + this.description = description; + } + + private Property() { + // for JAXB + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.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; + Property other = (Property) obj; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) + return false; + return true; + } + + @Override + public String toString() { + return String.format("[key=%s, value=%s, label=%s, description=%s]", key, value, label, description); + } + + public String getKey() { + return key; + } + + public String getDescription() { + return description; + } + + public String getLabel() { + return label; + } + + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseEnvelope.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseEnvelope.java new file mode 100644 index 0000000000..083decbe02 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseEnvelope.java @@ -0,0 +1,189 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf.internal; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Set; + +import org.jclouds.vcloud.director.v1_5.domain.DiskSection; +import org.jclouds.vcloud.director.v1_5.domain.NetworkSection; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; + +/** + * @author Adrian Cole + */ +public abstract class BaseEnvelope, E extends BaseEnvelope> { + + /** + * {@inheritDoc} + */ + public abstract Builder toBuilder(); + + public static abstract class Builder, E extends BaseEnvelope> { + protected Set diskSections = Sets.newLinkedHashSet(); + protected Set networkSections = Sets.newLinkedHashSet(); + @SuppressWarnings("unchecked") + protected Multimap additionalSections = LinkedHashMultimap.create(); + protected V virtualSystem; + + /** + * @see BaseEnvelope#getDiskSections + */ + public Builder diskSection(DiskSection diskSection) { + this.diskSections.add(checkNotNull(diskSection, "diskSection")); + return this; + } + + /** + * @see BaseEnvelope#getDiskSections + */ + public Builder diskSections(Iterable diskSections) { + this.diskSections = ImmutableSet. copyOf(checkNotNull(diskSections, "diskSections")); + return this; + } + + /** + * @see BaseEnvelope#getNetworkSections + */ + public Builder networkSection(NetworkSection networkSection) { + this.networkSections.add(checkNotNull(networkSection, "networkSection")); + return this; + } + + /** + * @see BaseEnvelope#getNetworkSections + */ + public Builder networkSections(Iterable networkSections) { + this.networkSections = ImmutableSet. copyOf(checkNotNull(networkSections, "networkSections")); + return this; + } + + /** + * @see BaseEnvelope#getAdditionalSections + */ + @SuppressWarnings("unchecked") + public Builder additionalSection(String name, SectionType additionalSection) { + this.additionalSections.put(checkNotNull(name, "name"), checkNotNull(additionalSection, "additionalSection")); + return this; + } + + /** + * @see BaseEnvelope#getAdditionalSections + */ + @SuppressWarnings("unchecked") + public Builder additionalSections(Multimap additionalSections) { + this.additionalSections = ImmutableMultimap. copyOf(checkNotNull(additionalSections, + "additionalSections")); + return this; + } + + /** + * @see BaseEnvelope#getVirtualSystem + */ + public Builder virtualSystem(V virtualSystem) { + this.virtualSystem = virtualSystem; + return this; + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + public abstract E build() ; + + public Builder fromEnvelope(BaseEnvelope in) { + return virtualSystem(in.getVirtualSystem()).diskSections(in.getDiskSections()) + .networkSections(networkSections).additionalSections(in.getAdditionalSections()); + } + + } + + private Set diskSections; + private Set networkSections; + @SuppressWarnings("unchecked") + private Multimap additionalSections; + private V virtualSystem; + + @SuppressWarnings("unchecked") + protected BaseEnvelope(Iterable diskSections, Iterable networkSections, + Multimap additionalSections, V virtualSystem) { + this.diskSections = ImmutableSet.copyOf(checkNotNull(diskSections, "diskSections")); + this.networkSections = ImmutableSet.copyOf(checkNotNull(networkSections, "networkSections")); + this.additionalSections = ImmutableMultimap.copyOf(checkNotNull(additionalSections, "additionalSections")); + this.virtualSystem = checkNotNull(virtualSystem, "virtualSystem"); + } + + protected BaseEnvelope() { + // for JAXB + } + + public V getVirtualSystem() { + return virtualSystem; + } + + public Set getDiskSections() { + return diskSections; + } + + @SuppressWarnings("unchecked") + public Multimap getAdditionalSections() { + return additionalSections; + } + + @Override + public int hashCode() { + return Objects.hashCode(additionalSections, diskSections, networkSections, virtualSystem); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + BaseEnvelope other = (BaseEnvelope) obj; + return Objects.equal(additionalSections, other.additionalSections) + && Objects.equal(diskSections, other.diskSections) + && Objects.equal(networkSections, other.networkSections) + && Objects.equal(virtualSystem, other.virtualSystem); + } + + @Override + public String toString() { + return string().toString(); + } + + protected Objects.ToStringHelper string() { + return Objects.toStringHelper("").add("diskSections", diskSections).add("networkSections", networkSections) + .add("additionalSections", additionalSections).add("virtualSystem", virtualSystem); + } + + public Set getNetworkSections() { + return networkSections; + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseVirtualSystem.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseVirtualSystem.java new file mode 100644 index 0000000000..6d8733908d --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ovf/internal/BaseVirtualSystem.java @@ -0,0 +1,250 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.domain.ovf.internal; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Set; + +import org.jclouds.vcloud.director.v1_5.domain.OperatingSystemSection; +import org.jclouds.vcloud.director.v1_5.domain.ProductSection; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; +import org.jclouds.vcloud.director.v1_5.domain.VirtualHardwareSection; +import org.jclouds.vcloud.director.v1_5.domain.SectionType; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; + +/** + * @author Adrian Cole + */ +public abstract class BaseVirtualSystem> extends SectionType { + + public static abstract class Builder> extends SectionType.Builder { + protected String id; + protected String name; + protected OperatingSystemSection operatingSystem; + protected Set virtualHardwareSections = Sets.newLinkedHashSet(); + protected Set productSections = Sets.newLinkedHashSet(); + @SuppressWarnings("unchecked") + protected Multimap additionalSections = LinkedHashMultimap.create(); + + /** + * @see BaseVirtualSystem#getName + */ + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see BaseVirtualSystem#getId + */ + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see BaseVirtualSystem#getOperatingSystemSection + */ + public Builder operatingSystemSection(OperatingSystemSection operatingSystem) { + this.operatingSystem = operatingSystem; + return this; + } + + /** + * @see BaseVirtualSystem#getVirtualHardwareSections + */ + public Builder virtualHardwareSection(VirtualHardwareSection virtualHardwareSection) { + this.virtualHardwareSections.add(checkNotNull(virtualHardwareSection, "virtualHardwareSection")); + return this; + } + + /** + * @see BaseVirtualSystem#getVirtualHardwareSections + */ + public Builder virtualHardwareSections(Iterable virtualHardwareSections) { + this.virtualHardwareSections = ImmutableSet. copyOf(checkNotNull(virtualHardwareSections, + "virtualHardwareSections")); + return this; + } + + /** + * @see BaseVirtualSystem#getProductSections + */ + public Builder productSection(ProductSection productSection) { + this.productSections.add(checkNotNull(productSection, "productSection")); + return this; + } + + /** + * @see BaseVirtualSystem#getProductSections + */ + public Builder productSections(Iterable productSections) { + this.productSections = ImmutableSet. copyOf(checkNotNull(productSections, "productSections")); + return this; + } + + /** + * @see BaseVirtualSystem#getAdditionalSections + */ + @SuppressWarnings("unchecked") + public Builder additionalSection(String name, SectionType additionalSection) { + this.additionalSections.put(checkNotNull(name, "name"), checkNotNull(additionalSection, "additionalSection")); + return this; + } + + /** + * @see BaseVirtualSystem#getAdditionalSections + */ + @SuppressWarnings("unchecked") + public Builder additionalSections(Multimap additionalSections) { + this.additionalSections = ImmutableMultimap. copyOf(checkNotNull(additionalSections, + "additionalSections")); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public abstract BaseVirtualSystem build(); + + public Builder fromVirtualSystem(BaseVirtualSystem in) { + return fromSection(in).id(in.getId()).name(in.getName()) + .operatingSystemSection(in.getOperatingSystemSection()).virtualHardwareSections( + in.getVirtualHardwareSections()).productSections(in.getProductSections()) + .additionalSections(in.getAdditionalSections()); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder fromSection(SectionType in) { + return (Builder) super.fromSection(in); + } + + /** + * {@inheritDoc} + */ + @Override + public Builder info(String info) { + return (Builder) super.info(info); + } + + } + + private String id; + private String name; + private OperatingSystemSection operatingSystem; + private Set virtualHardwareSections; + private Set productSections; + @SuppressWarnings("unchecked") + private Multimap additionalSections; + + @SuppressWarnings("unchecked") + protected BaseVirtualSystem(String id, String info, String name, OperatingSystemSection operatingSystem, + Iterable virtualHardwareSections, + Iterable productSections, Multimap additionalSections) { + super(info); + this.id = id; + this.name = name; + this.operatingSystem = checkNotNull(operatingSystem, "operatingSystem"); + this.virtualHardwareSections = ImmutableSet.copyOf(checkNotNull(virtualHardwareSections, "virtualHardwareSections")); + this.productSections = ImmutableSet.copyOf(checkNotNull(productSections, "productSections")); + this.additionalSections = ImmutableMultimap.copyOf(checkNotNull(additionalSections, "additionalSections")); + } + + protected BaseVirtualSystem() { + // For JAXB + } + + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public OperatingSystemSection getOperatingSystemSection() { + return operatingSystem; + } + + /** + * Each VirtualSystem element may contain one or more VirtualHardwareSection elements, each of + * which describes the virtual virtualHardwareSections required by the virtual system. + */ + public Set getVirtualHardwareSections() { + return virtualHardwareSections; + } + + /** + * Specifies product-information for a package, such as product name and version, along with a + * set of properties that can be configured + */ + public Set getProductSections() { + return productSections; + } + + @SuppressWarnings("unchecked") + public Multimap getAdditionalSections() { + return additionalSections; + } + + @Override + public int hashCode() { + return Objects.hashCode(id, name, info, operatingSystem, virtualHardwareSections, productSections, additionalSections); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + BaseVirtualSystem other = (BaseVirtualSystem) obj; + return Objects.equal(id, other.id) + && Objects.equal(name, other.name) + && Objects.equal(info, other.info) + && Objects.equal(operatingSystem, other.operatingSystem) + && Objects.equal(virtualHardwareSections, other.virtualHardwareSections) + && Objects.equal(productSections, other.productSections) + && Objects.equal(additionalSections, other.additionalSections); + } + + @Override + public String toString() { + return string().toString(); + } + + protected Objects.ToStringHelper string() { + return Objects.toStringHelper("").add("id", id).add("name", name).add("info", info) + .add("operatingSystem", operatingSystem).add("virtualHardwareSections", virtualHardwareSections) + .add("productSections", productSections).add("additionalSections", additionalSections) + .add("additionalSections", additionalSections); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java new file mode 100644 index 0000000000..7dbc58e560 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java @@ -0,0 +1,292 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.features; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.*; + +import com.google.common.util.concurrent.ListenableFuture; + +import org.jclouds.ovf.Envelope; +import org.jclouds.ovf.NetworkSection; +import org.jclouds.rest.annotations.*; +import org.jclouds.rest.binders.BindToXMLPayload; +import org.jclouds.vcloud.director.v1_5.domain.*; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest; +import org.jclouds.vcloud.director.v1_5.functions.ReferenceToEndpoint; +import org.jclouds.vcloud.director.v1_5.functions.ThrowVCloudErrorOn4xx; + +import javax.ws.rs.*; + +/** + * @author Adam Lowe + * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateClient + */ +@RequestFilters(AddVCloudAuthorizationToRequest.class) +public interface VAppTemplateAsyncClient { + + /** + * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateClient#getVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(VAPP_TEMPLATE) + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture getVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier reference); + + + /** + * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateClient#editVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.VAppTemplate) + */ + @PUT + @Consumes(TASK) + @JAXBResponseParser + ListenableFuture editVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier reference, + @BinderParam(BindToXMLPayload.class) VAppTemplate template); + + /** + * @see VAppTemplateClient#deleteVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @DELETE + @Consumes(TASK) + @JAXBResponseParser + ListenableFuture deleteVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#consolidateVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @POST + @Consumes(TASK) + @Path("/consolidate") + @JAXBResponseParser + ListenableFuture consolidateVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#disableDownloadVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @POST + @Consumes(TASK) + @Path("/action/disableDownload") + @JAXBResponseParser + ListenableFuture disableDownloadVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#enableDownloadVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @POST + @Consumes(TASK) + @Path("/action/enableDownload") + @JAXBResponseParser + ListenableFuture enableDownloadVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#relocateVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.RelocateParams) + */ + @POST + @Consumes(TASK) + @Path("/action/relocate") + @JAXBResponseParser + ListenableFuture relocateVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) RelocateParams params); + + /** + * @see VAppTemplateClient#getVAppTemplateCustomizationSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(CUSTOMIZATION_SECTION) + @Path("/customizationSection") + @JAXBResponseParser + CustomizationSection getVAppTemplateCustomizationSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editVAppTemplateCustomizationSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.CustomizationSection) + */ + @PUT + @Path("/customizationSection") + @JAXBResponseParser + ListenableFuture editVAppTemplateCustomizationSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) CustomizationSection sectionType); + + /** + * @see VAppTemplateClient#getVAppTemplateGuestCustomizationSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(GUEST_CUSTOMIZATION_SECTION) + @Path("/guestCustomizationSection") + @JAXBResponseParser + GuestCustomizationSection getVAppTemplateGuestCustomizationSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editVAppTemplateGuestCustomizationSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection) + */ + @PUT + @Consumes(TASK) + @Path("/guestCustomizationSection") + @JAXBResponseParser + Task editVAppTemplateGuestCustomizationSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section); + + /** + * @see VAppTemplateClient#getVappTemplateLeaseSettingsSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Path("/leaseSettingsSection") + @JAXBResponseParser + LeaseSettingsSection getVappTemplateLeaseSettingsSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editVappTemplateLeaseSettingsSection(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.LeaseSettingsSection) + */ + @PUT + @Consumes(TASK) + @Path("/leaseSettingsSection") + @JAXBResponseParser + ListenableFuture editVappTemplateLeaseSettingsSection(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection); + + /** + * @see VAppTemplateClient#getMetadataForVappTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(METADATA) + @Path("/metadata") + @JAXBResponseParser + ListenableFuture getMetadataForVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + @PUT + @Consumes(TASK) + @Path("/metadata") + @JAXBResponseParser + ListenableFuture editMetadataForVappTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) Metadata metadata); + + /** + * @see VAppTemplateClient#editMetadataEntryForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, String, org.jclouds.vcloud.director.v1_5.domain.MetadataEntry) + */ + @GET + @Consumes(METADATA_ENTRY) + @Path("/metadata/{key}") + ListenableFuture getMetadataEntryForVAppTemplateAndKey(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @PathParam("key") String key); + + /** + * @see VAppTemplateClient#editMetadataEntryForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, String, org.jclouds.vcloud.director.v1_5.domain.MetadataEntry) + */ + @PUT + @Consumes(TASK) + @Path("/metadata/{key}") + ListenableFuture editMetadataEntryForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @PathParam("key") String key, + @BinderParam(BindToXMLPayload.class) MetadataEntry entry); + + /** + * @see VAppTemplateClient#deleteMetadataEntryForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, String) + */ + @DELETE + @Produces() + @Consumes(TASK) + @Path("/metadata/{key}") + ListenableFuture deleteMetadataEntryForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @PathParam("key") String key); + + /** + * @see VAppTemplateClient#getNetworkConfigSectionForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(NETWORK_CONFIG_SECTION) + @Path("/networkConfigSection") + ListenableFuture getNetworkConfigSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editNetworkConfigSectionForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.NetworkConfigSection) + */ + @PUT + @Produces(NETWORK_CONFIG_SECTION) + @Consumes(TASK) + @Path("/networkConfigSection") + ListenableFuture editNetworkConfigSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) NetworkConfigSection section); + + /** + * @see VAppTemplateClient#getNetworkConnectionSectionForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(NETWORK_CONNECTION_SECTION) + @Path("/networkConnectionSection") + ListenableFuture getNetworkConnectionSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editNetworkConnectionSectionForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.NetworkConnectionSection) + */ + @PUT + @Produces(NETWORK_CONNECTION_SECTION) + @Consumes(TASK) + @Path("/networkConnectionSection") + ListenableFuture editNetworkConnectionSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section); + + /** + * @see VAppTemplateClient#getNetworkSectionForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(NETWORK_SECTION) + @Path("/networkSection") + ListenableFuture getNetworkSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + @PUT + @Produces(NETWORK_SECTION) + @Consumes(TASK) + @Path("/networkSection") + ListenableFuture editNetworkSectionForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) NetworkSection section); + + /** + * @see VAppTemplateClient#getOvfForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Path("/ovf") + ListenableFuture getOvfForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#getOwnerOfVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(OWNER) + @Path("/owner") + ListenableFuture getOwnerOfVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#getProductSectionsForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier) + */ + @GET + @Consumes(PRODUCT_SECTION_LIST) + @Path("/productSections") + ListenableFuture getProductSectionsForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference); + + /** + * @see VAppTemplateClient#editProductSectionsForVAppTemplate(org.jclouds.vcloud.director.v1_5.domain.URISupplier, org.jclouds.vcloud.director.v1_5.domain.ProductSectionList) + */ + @PUT + @Produces(PRODUCT_SECTION_LIST) + @Consumes(TASK) + @Path("/productSections") + ListenableFuture editProductSectionsForVAppTemplate(@EndpointParam(parser = ReferenceToEndpoint.class) URISupplier templateReference, + @BinderParam(BindToXMLPayload.class) ProductSectionList sections); + + // TODO shadowVms ? +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java new file mode 100644 index 0000000000..6e0408cf38 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java @@ -0,0 +1,264 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.features; + +import org.jclouds.concurrent.Timeout; +import org.jclouds.ovf.Envelope; +import org.jclouds.ovf.NetworkSection; +import org.jclouds.vcloud.director.v1_5.domain.*; + +import java.net.URI; +import java.util.concurrent.TimeUnit; + +/** + * Provides synchronous access to {@link org.jclouds.vcloud.director.v1_5.domain.VAppTemplate} objects. + * + * @author Adam Lowe + * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncClient + */ +@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS) +public interface VAppTemplateClient { + + /** + * Retrieves a vApp template (can be used also to retrieve a VM from a vApp Template). + * + * @param templateReference the reference to the template + * @return the requested template + */ + VAppTemplate getVAppTemplate(URISupplier templateReference); + + /** + * Modifies only the name/description of a vApp template. + * + * @param templateReference the reference to the template + * @param template the template containing the new name and/or description + * @return the task performing the action + */ + Task editVAppTemplate(URISupplier templateReference, VAppTemplate template); + + /** + * Deletes a vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task deleteVappTemplate(URISupplier templateReference); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task consolidateVappTemplate(URISupplier templateReference); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task disableDownloadVappTemplate(URISupplier templateReference); + + /** + * Consolidates a VM, + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task enableDownloadVappTemplate(URISupplier templateReference); + + /** + * Relocates a virtual machine in a vApp template to a different datastore. * + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task relocateVappTemplate(URISupplier templateReference, RelocateParams params); + + /** + * Retrieves the customization section of a vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + CustomizationSection getVAppTemplateCustomizationSection(URISupplier templateReference); + + /** + * Modifies the vApp template customization information. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editVAppTemplateCustomizationSection(URISupplier templateReference, CustomizationSection sectionType); + + /** + * Retrieves the Guest Customization Section of a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + GuestCustomizationSection getVAppTemplateGuestCustomizationSection(URISupplier templateReference); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editVAppTemplateGuestCustomizationSection(URISupplier templateReference, GuestCustomizationSection sectionType); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + LeaseSettingsSection getVappTemplateLeaseSettingsSection(URISupplier templateReference); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editVappTemplateLeaseSettingsSection(URISupplier templateReference, LeaseSettingsSection settingsSection); + + /** + * Retrieves the metadata associated with a vApp Template. + * + * @param templateReference the reference to the template + * @return the requested metadata + */ + Metadata getMetadataForVappTemplate(URISupplier templateReference); + + /** + * Merges the metadata for a vApp Template with the information provided. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editMetadataForVappTemplate(URISupplier templateReference, Metadata metadata); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + MetadataEntry getMetadataEntryForVAppTemplateAndKey(URISupplier templateReference, String key); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editMetadataEntryForVAppTemplate(URISupplier templateReference, String key, MetadataEntry entry); + + /** + * Consolidates a VM + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task deleteMetadataEntryForVAppTemplate(URISupplier templateReference, String key); + + /** + * Retrieves the network config section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the network config section requested + */ + NetworkConfigSection getNetworkConfigSectionForVAppTemplate(URISupplier templateReference); + + /** + * Modifies the network config section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editNetworkConfigSectionForVAppTemplate(URISupplier templateReference, NetworkConfigSection section); + + /** + * Retrieves the network connection section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the network connection section requested + */ + NetworkConnectionSection getNetworkConnectionSectionForVAppTemplate(URISupplier templateReference); + + /** + * Modifies the network connection section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editNetworkConnectionSectionForVAppTemplate(URISupplier templateReference, NetworkConnectionSection section); + + /** + * Retrieves the network section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the network section requested + */ + NetworkSection getNetworkSectionForVAppTemplate(URISupplier templateReference); + + /** + * Modifies the network section of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editNetworkSectionForVAppTemplate(URISupplier templateReference, NetworkSection section); + + /** + * Retrieves an OVF descriptor of a vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Envelope getOvfForVAppTemplate(URISupplier templateReference); + + /** + * Retrieves vApp template owner. + * + * @param templateReference the reference to the template + * @return the owner of the vApp template + */ + Owner getOwnerOfVAppTemplate(URISupplier templateReference); + + /** + * Retrieves VAppTemplate/VM product sections + * + * @param templateReference the reference to the template + * @return the product sections + */ + ProductSectionList getProductSectionsForVAppTemplate(URISupplier templateReference); + + /** + * Modifies the product sections of a vApp or vApp template. + * + * @param templateReference the reference to the template + * @return the task performing the action + */ + Task editProductSectionsForVAppTemplate(URISupplier templateReference, ProductSectionList sections); + + // TODO ShadowVms??? +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java index f1f33bd35b..14fcce00d3 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java @@ -24,6 +24,7 @@ import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import com.google.common.base.Function; import com.google.common.base.Preconditions; +import org.jclouds.vcloud.director.v1_5.domain.URISupplier; /** * @author grkvlt@apache.org @@ -33,8 +34,8 @@ public class ReferenceToEndpoint implements Function { @Override public URI apply(Object input) { Preconditions.checkNotNull(input); - Preconditions.checkArgument(input instanceof ReferenceType); - ReferenceType reference = (ReferenceType) input; + Preconditions.checkArgument(input instanceof URISupplier); + URISupplier reference = (URISupplier) input; return reference.getURI(); }; } \ No newline at end of file diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java new file mode 100644 index 0000000000..d45c8d8fb8 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java @@ -0,0 +1,100 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you 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.director.v1_5.features; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.*; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; + +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorException; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.domain.*; +import org.jclouds.vcloud.director.v1_5.domain.Error; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorRestClientExpectTest; +import org.testng.annotations.Test; + +import java.net.URI; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.fail; + +/** + * Tests the request/response behavior of {@link org.jclouds.vcloud.director.v1_5.features.VAppTemplateClient} + * + * @author Adam Lowe + */ +@Test(groups = {"unit", "user"}, singleThreaded = true, testName = "VAppTemplateClientExpectTest") +public class VAppTemplateClientExpectTest extends BaseVCloudDirectorRestClientExpectTest { + + public void testGetVAppTemplate() { + final String templateId = "/vAppTemplate/vAppTemplate/vappTemplate-xxxx-xxxx-xxxx-xxx"; + Reference vappTemplateRef = Reference.builder().href(URI.create(endpoint + templateId)).build(); + + VAppTemplateClient client = requestsSendResponses(loginRequest, sessionResponse, + new VcloudHttpRequestPrimer().apiCommand("GET", templateId).acceptMedia(VAPP_TEMPLATE).httpRequestBuilder().build(), + new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/vAppTemplate.xml", VAPP_TEMPLATE).httpResponseBuilder().build() + ).getVAppTemplateClient(); + + assertNotNull(client); + VAppTemplate template = client.getVAppTemplate(vappTemplateRef); + assertEquals(template, exampleTemplate()); + } + + private VAppTemplate exampleTemplate() { + Link aLink = Link.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vdc/d16d333b-e3c0-4176-845d-a5ee6392df07")) + .type("application/vnd.vmware.vcloud.vdc+xml").rel("up").build(); + Link bLink = Link.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9")) + .rel("remove").build(); + + Owner owner = Owner.builder().user(Reference.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69")).name("x@jclouds.org").type("application/vnd.vmware.admin.user+xml").build()).build(); + + LeaseSettingsSection leaseSettings = LeaseSettingsSection.builder().type("application/vnd.vmware.vcloud.leaseSettingsSection+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9/leaseSettingsSection/")) + .info("Lease settings section") + .links(ImmutableList.of(Link.builder().rel("edit").type("application/vnd.vmware.vcloud.leaseSettingsSection+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9/leaseSettingsSection/")).build())) + .storageLeaseInSeconds(0) + .build(); + CustomizationSection customization = CustomizationSection.builder() + .type("application/vnd.vmware.vcloud.customizationSection+xml") + .customizeOnInstantiate(true) + .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9/customizationSection/")) + .build(); + + return VAppTemplate.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9")) + .links(ImmutableSet.of(aLink, bLink)) + .children(VAppTemplateChildren.builder().build()) + .type("application/vnd.vmware.vcloud.vAppTemplate+xml") + .description("For testing") + .id("urn:vcloud:vapptemplate:ef4415e6-d413-4cbb-9262-f9bbec5f2ea9") + .name("ubuntu10") + .sections(ImmutableList.of(leaseSettings, customization)) + .status(-1) + .owner(owner) + .ovfDescriptorUploaded(true) + .goldMaster(false) + .build(); + } +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java index d76fb1bea1..dc041d9469 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java @@ -22,7 +22,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.testng.Assert.assertNotNull; import java.net.URI; +import java.util.Properties; +import org.jclouds.Constants; import org.jclouds.date.DateService; import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpResponse; @@ -57,6 +59,13 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect assertNotNull(dateService); } + @Override + public Properties setupProperties() { + Properties props = new Properties(); + props.put(Constants.PROPERTY_MAX_RETRIES, 1); + return props; + } + protected HttpRequest loginRequest = HttpRequest.builder() .method("POST") .endpoint(URI.create(endpoint + "/sessions")) diff --git a/labs/vcloud-director/src/test/resources/vapptemplate/vAppTemplate.xml b/labs/vcloud-director/src/test/resources/vapptemplate/vAppTemplate.xml new file mode 100644 index 0000000000..1059ddea7c --- /dev/null +++ b/labs/vcloud-director/src/test/resources/vapptemplate/vAppTemplate.xml @@ -0,0 +1,34 @@ + + + + + For testing + + + + + + + Lease settings section + + 0 + + + VApp template customization section + true + + \ No newline at end of file