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 d52451b1b9..2b445387b9 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 @@ -23,6 +23,7 @@ import org.jclouds.vcloud.director.v1_5.domain.Session; 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 com.google.inject.Provides; @@ -42,6 +43,12 @@ public interface VCloudDirectorAsyncClient { @Provides Session getCurrentSession(); + /** + * @return asynchronous access to query features + */ + @Delegate + QueryAsyncClient getQueryClient(); + /** * @return asynchronous access to {@link Org} features */ 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 096e0737c5..b64c125f65 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 @@ -27,13 +27,13 @@ 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 com.google.inject.Provides; /** * Provides synchronous access to VCloudDirector. - *

* * @see VCloudDirectorAsyncClient * @author Adrian Cole @@ -41,12 +41,17 @@ import com.google.inject.Provides; @Timeout(duration = 60, timeUnit = TimeUnit.SECONDS) public interface VCloudDirectorClient { /** - * * @return the current login session */ @Provides Session getCurrentSession(); - + + /** + * @return asynchronous access to query features + */ + @Delegate + QueryClient getQueryClient(); + /** * @return synchronous access to {@link Org} features */ 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 eae847ebd3..909d347cb6 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 @@ -73,10 +73,12 @@ public class VCloudDirectorMediaType { public static final String ADMIN_USER = "application/vnd.vmware.admin.user+xml"; + public static final String QUERY_RESULT_RECORDS = "application/vnd.vmware.vcloud.query.records+xml"; + public static final List ALL = Arrays.asList( SESSION, ERROR, ORG_LIST, METADATA, METADATA_ENTRY, METADATA_VALUE, ORG, TASKS_LIST, TASK, ORG_NETWORK, CATALOG, CATALOG_ITEM, CATALOG_ITEMS, CATALOGS_LIST, PROPERTY, - MEDIA, OWNER, VDC, ADMIN_USER + MEDIA, OWNER, VDC, ADMIN_USER, QUERY_RESULT_RECORDS ); } 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 104fb3f359..da1ea4dd89 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,8 +17,8 @@ */ 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 static com.google.common.base.Throwables.*; +import static org.jclouds.rest.config.BinderUtils.*; import java.net.URI; import java.util.Map; @@ -50,6 +50,8 @@ 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.functions.LoginUserInOrgWithPassword; @@ -82,6 +84,7 @@ public class VCloudDirectorRestClientModule extends RestClientModule> extends ResourceType { } /** - * @see ReferenceType#getHref() + * @see ResourceType#getHref() */ @Override public Builder href(URI href) { @@ -114,7 +114,7 @@ public class EntityType> extends ResourceType { } /** - * @see ReferenceType#getType() + * @see ResourceType#getType() */ @Override public Builder type(String type) { @@ -123,7 +123,7 @@ public class EntityType> extends ResourceType { } /** - * @see ReferenceType#getLinks() + * @see ResourceType#getLinks() */ @Override public Builder links(Set links) { @@ -132,7 +132,7 @@ public class EntityType> extends ResourceType { } /** - * @see ReferenceType#getLinks() + * @see ResourceType#getLinks() */ @Override public Builder link(Link link) { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceEntity.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceEntity.java new file mode 100644 index 0000000000..5d339e20ab --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceEntity.java @@ -0,0 +1,258 @@ +/** + * 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Base type that represents a resource entity such as a vApp + * template or virtual media. + * + * + *

Java class for ResourceEntity complex type. + * + *

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

+ * <complexType name="ResourceEntity">
+ *   <complexContent>
+ *     <extension base="{http://www.vmware.com/vcloud/v1.5}EntityType">
+ *       <sequence>
+ *         <element name="Files" type="{http://www.vmware.com/vcloud/v1.5}FilesListType" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="status" type="{http://www.w3.org/2001/XMLSchema}int" />
+ *       <anyAttribute processContents='lax' namespace='##other'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "ResourceEntity", propOrder = { + "files" +}) +@XmlSeeAlso({ + MediaType.class, + VAppTemplateType.class, + AbstractVAppType.class, + NetworkPoolType.class +}) +public class ResourceEntity + extends EntityType + +{ + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromResourceEntity(this); + } + + public static class Builder extends EntityType.Builder { + + private FilesList files; + private Integer status; + + /** + * @see ResourceEntity#getFiles() + */ + public Builder files(FilesList files) { + this.files = files; + return this; + } + + /** + * @see ResourceEntity#getStatus() + */ + public Builder status(Integer status) { + this.status = status; + return this; + } + + + public ResourceEntity build() { + ResourceEntity resourceEntity = new ResourceEntity(); + resourceEntity.setFiles(files); + resourceEntity.setStatus(status); + return resourceEntity; + } + + + /** + * @see EntityType#getId() + */ + @Override + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see EntityType#getTasksInProgress() + */ + @Override + public Builder tasksInProgress(TasksInProgress tasksInProgress) { + this.tasksInProgress = tasksInProgress; + return this; + } + + /** + * @see ReferenceType#getHref() + */ + @Override + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see ReferenceType#getType() + */ + @Override + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see ReferenceType#getLinks() + */ + @Override + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + return this; + } + + /** + * @see ReferenceType#getLinks() + */ + @Override + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; + } + + + @Override + public Builder fromEntityType(EntityType in) { + return Builder.class.cast(super.fromEntityType(in)); + } + public Builder fromResourceEntity(ResourceEntity in) { + return fromEntityType(in) + .files(in.getFiles()) + .status(in.getStatus()); + } + } + + private ResourceEntity() { + // For JAXB and builder use + } + + + + @XmlElement(name = "Files") + protected FilesList files; + @XmlAttribute + protected Integer status; + + /** + * Gets the value of the files property. + * + * @return + * possible object is + * {@link FilesList } + * + */ + public FilesList getFiles() { + return files; + } + + /** + * Sets the value of the files property. + * + * @param value + * allowed object is + * {@link FilesList } + * + */ + public void setFiles(FilesList value) { + this.files = value; + } + + /** + * Gets the value of the status property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getStatus() { + return status; + } + + /** + * Sets the value of the status property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setStatus(Integer value) { + this.status = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + ResourceEntity that = ResourceEntity.class.cast(o); + return equal(files, that.files) && + equal(status, that.status); + } + + @Override + public int hashCode() { + return Objects.hashCode(files, + status); + } + + @Override + public String toString() { + return Objects.toStringHelper("") + .add("files", files) + .add("status", status).toString(); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceType.java index abeb7bf3b4..4dfaef9d07 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ResourceType.java @@ -32,7 +32,6 @@ import javax.xml.bind.annotation.XmlElement; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; -import com.google.common.collect.Iterables; import com.google.common.collect.Sets; /** diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/User.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/User.java new file mode 100644 index 0000000000..332841b59c --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/User.java @@ -0,0 +1,924 @@ +/** + * 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.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * + * Represents users in the vCloud system. + * + * + *

Java class for User complex type. + * + *

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

+ * <complexType name="User">
+ *   <complexContent>
+ *     <extension base="{http://www.vmware.com/vcloud/v1.5}EntityType">
+ *       <sequence>
+ *         <element name="FullName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="EmailAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Telephone" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="IsEnabled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="IsLocked" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="IM" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="NameInSource" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="IsAlertEnabled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="AlertEmailPrefix" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="AlertEmail" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="IsExternal" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="IsDefaultCached" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="IsGroupRole" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="StoredVmQuota" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ *         <element name="DeployedVmQuota" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ *         <element name="Role" type="{http://www.vmware.com/vcloud/v1.5}ReferenceType" minOccurs="0"/>
+ *         <element name="Password" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="GroupReferences" type="{http://www.vmware.com/vcloud/v1.5}GroupsListType" minOccurs="0"/>
+ *       </sequence>
+ *       <anyAttribute processContents='lax' namespace='##other'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "User", propOrder = { + "fullName", + "emailAddress", + "telephone", + "isEnabled", + "isLocked", + "im", + "nameInSource", + "isAlertEnabled", + "alertEmailPrefix", + "alertEmail", + "isExternal", + "isDefaultCached", + "isGroupRole", + "storedVmQuota", + "deployedVmQuota", + "role", + "password", + "groupReferences" +}) +public class User + extends EntityType + +{ + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromUser(this); + } + + public static class Builder extends EntityType.Builder { + + private String fullName; + private String emailAddress; + private String telephone; + private Boolean isEnabled; + private Boolean isLocked; + private String im; + private String nameInSource; + private Boolean isAlertEnabled; + private String alertEmailPrefix; + private String alertEmail; + private Boolean isExternal; + private Boolean isDefaultCached; + private Boolean isGroupRole; + private Integer storedVmQuota; + private Integer deployedVmQuota; + private Reference role; + private String password; + private GroupsList groupReferences; + + /** + * @see User#getFullName() + */ + public Builder fullName(String fullName) { + this.fullName = fullName; + return this; + } + + /** + * @see User#getEmailAddress() + */ + public Builder emailAddress(String emailAddress) { + this.emailAddress = emailAddress; + return this; + } + + /** + * @see User#getTelephone() + */ + public Builder telephone(String telephone) { + this.telephone = telephone; + return this; + } + + /** + * @see User#getIsEnabled() + */ + public Builder isEnabled(Boolean isEnabled) { + this.isEnabled = isEnabled; + return this; + } + + /** + * @see User#getIsLocked() + */ + public Builder isLocked(Boolean isLocked) { + this.isLocked = isLocked; + return this; + } + + /** + * @see User#getIm() + */ + public Builder im(String im) { + this.im = im; + return this; + } + + /** + * @see User#getNameInSource() + */ + public Builder nameInSource(String nameInSource) { + this.nameInSource = nameInSource; + return this; + } + + /** + * @see User#getIsAlertEnabled() + */ + public Builder isAlertEnabled(Boolean isAlertEnabled) { + this.isAlertEnabled = isAlertEnabled; + return this; + } + + /** + * @see User#getAlertEmailPrefix() + */ + public Builder alertEmailPrefix(String alertEmailPrefix) { + this.alertEmailPrefix = alertEmailPrefix; + return this; + } + + /** + * @see User#getAlertEmail() + */ + public Builder alertEmail(String alertEmail) { + this.alertEmail = alertEmail; + return this; + } + + /** + * @see User#getIsExternal() + */ + public Builder isExternal(Boolean isExternal) { + this.isExternal = isExternal; + return this; + } + + /** + * @see User#getIsDefaultCached() + */ + public Builder isDefaultCached(Boolean isDefaultCached) { + this.isDefaultCached = isDefaultCached; + return this; + } + + /** + * @see User#getIsGroupRole() + */ + public Builder isGroupRole(Boolean isGroupRole) { + this.isGroupRole = isGroupRole; + return this; + } + + /** + * @see User#getStoredVmQuota() + */ + public Builder storedVmQuota(Integer storedVmQuota) { + this.storedVmQuota = storedVmQuota; + return this; + } + + /** + * @see User#getDeployedVmQuota() + */ + public Builder deployedVmQuota(Integer deployedVmQuota) { + this.deployedVmQuota = deployedVmQuota; + return this; + } + + /** + * @see User#getRole() + */ + public Builder role(Reference role) { + this.role = role; + return this; + } + + /** + * @see User#getPassword() + */ + public Builder password(String password) { + this.password = password; + return this; + } + + /** + * @see User#getGroupReferences() + */ + public Builder groupReferences(GroupsList groupReferences) { + this.groupReferences = groupReferences; + return this; + } + + + public User build() { + User user = new User(im); + user.setFullName(fullName); + user.setEmailAddress(emailAddress); + user.setTelephone(telephone); + user.setIsEnabled(isEnabled); + user.setIsLocked(isLocked); + user.setNameInSource(nameInSource); + user.setIsAlertEnabled(isAlertEnabled); + user.setAlertEmailPrefix(alertEmailPrefix); + user.setAlertEmail(alertEmail); + user.setIsExternal(isExternal); + user.setIsDefaultCached(isDefaultCached); + user.setIsGroupRole(isGroupRole); + user.setStoredVmQuota(storedVmQuota); + user.setDeployedVmQuota(deployedVmQuota); + user.setRole(role); + user.setPassword(password); + user.setGroupReferences(groupReferences); + return user; + } + + + /** + * @see EntityType#getId() + */ + @Override + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see EntityType#getTasksInProgress() + */ + @Override + public Builder tasksInProgress(TasksInProgress tasksInProgress) { + this.tasksInProgress = tasksInProgress; + return this; + } + + /** + * @see ReferenceType#getHref() + */ + @Override + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see ReferenceType#getType() + */ + @Override + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see ReferenceType#getLinks() + */ + @Override + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + return this; + } + + /** + * @see ReferenceType#getLinks() + */ + @Override + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; + } + + + @Override + public Builder fromEntityType(EntityType in) { + return Builder.class.cast(super.fromEntityType(in)); + } + public Builder fromUser(User in) { + return fromEntityType(in) + .fullName(in.getFullName()) + .emailAddress(in.getEmailAddress()) + .telephone(in.getTelephone()) + .isEnabled(in.getIsEnabled()) + .isLocked(in.getIsLocked()) + .im(in.getIm()) + .nameInSource(in.getNameInSource()) + .isAlertEnabled(in.getIsAlertEnabled()) + .alertEmailPrefix(in.getAlertEmailPrefix()) + .alertEmail(in.getAlertEmail()) + .isExternal(in.getIsExternal()) + .isDefaultCached(in.getIsDefaultCached()) + .isGroupRole(in.getIsGroupRole()) + .storedVmQuota(in.getStoredVmQuota()) + .deployedVmQuota(in.getDeployedVmQuota()) + .role(in.getRole()) + .password(in.getPassword()) + .groupReferences(in.getGroupReferences()); + } + } + + private User() { + // For JAXB and builder use + } + + private User(String im) { + this.im = im; + } + + + @XmlElement(name = "FullName") + protected String fullName; + @XmlElement(name = "EmailAddress") + protected String emailAddress; + @XmlElement(name = "Telephone") + protected String telephone; + @XmlElement(name = "IsEnabled") + protected Boolean isEnabled; + @XmlElement(name = "IsLocked") + protected Boolean isLocked; + @XmlElement(name = "IM") + protected String im; + @XmlElement(name = "NameInSource") + protected String nameInSource; + @XmlElement(name = "IsAlertEnabled") + protected Boolean isAlertEnabled; + @XmlElement(name = "AlertEmailPrefix") + protected String alertEmailPrefix; + @XmlElement(name = "AlertEmail") + protected String alertEmail; + @XmlElement(name = "IsExternal") + protected Boolean isExternal; + @XmlElement(name = "IsDefaultCached") + protected Boolean isDefaultCached; + @XmlElement(name = "IsGroupRole") + protected Boolean isGroupRole; + @XmlElement(name = "StoredVmQuota") + protected Integer storedVmQuota; + @XmlElement(name = "DeployedVmQuota") + protected Integer deployedVmQuota; + @XmlElement(name = "Role") + protected Reference role; + @XmlElement(name = "Password") + protected String password; + @XmlElement(name = "GroupReferences") + protected GroupsList groupReferences; + + /** + * Gets the value of the fullName property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getFullName() { + return fullName; + } + + /** + * Sets the value of the fullName property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFullName(String value) { + this.fullName = value; + } + + /** + * Gets the value of the emailAddress property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEmailAddress() { + return emailAddress; + } + + /** + * Sets the value of the emailAddress property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEmailAddress(String value) { + this.emailAddress = value; + } + + /** + * Gets the value of the telephone property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getTelephone() { + return telephone; + } + + /** + * Sets the value of the telephone property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTelephone(String value) { + this.telephone = value; + } + + /** + * Gets the value of the isEnabled property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsEnabled() { + return isEnabled; + } + + /** + * Sets the value of the isEnabled property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsEnabled(Boolean value) { + this.isEnabled = value; + } + + /** + * Gets the value of the isLocked property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsLocked() { + return isLocked; + } + + /** + * Sets the value of the isLocked property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsLocked(Boolean value) { + this.isLocked = value; + } + + /** + * Gets the value of the im property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getIM() { + return im; + } + + /** + * Sets the value of the im property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setIM(String value) { + this.im = value; + } + + /** + * Gets the value of the nameInSource property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNameInSource() { + return nameInSource; + } + + /** + * Sets the value of the nameInSource property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNameInSource(String value) { + this.nameInSource = value; + } + + /** + * Gets the value of the isAlertEnabled property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsAlertEnabled() { + return isAlertEnabled; + } + + /** + * Sets the value of the isAlertEnabled property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsAlertEnabled(Boolean value) { + this.isAlertEnabled = value; + } + + /** + * Gets the value of the alertEmailPrefix property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAlertEmailPrefix() { + return alertEmailPrefix; + } + + /** + * Sets the value of the alertEmailPrefix property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAlertEmailPrefix(String value) { + this.alertEmailPrefix = value; + } + + /** + * Gets the value of the alertEmail property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getAlertEmail() { + return alertEmail; + } + + /** + * Sets the value of the alertEmail property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAlertEmail(String value) { + this.alertEmail = value; + } + + /** + * Gets the value of the isExternal property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsExternal() { + return isExternal; + } + + /** + * Sets the value of the isExternal property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsExternal(Boolean value) { + this.isExternal = value; + } + + /** + * Gets the value of the isDefaultCached property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsDefaultCached() { + return isDefaultCached; + } + + /** + * Sets the value of the isDefaultCached property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsDefaultCached(Boolean value) { + this.isDefaultCached = value; + } + + /** + * Gets the value of the isGroupRole property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIsGroupRole() { + return isGroupRole; + } + + /** + * Sets the value of the isGroupRole property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIsGroupRole(Boolean value) { + this.isGroupRole = value; + } + + /** + * Gets the value of the storedVmQuota property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getStoredVmQuota() { + return storedVmQuota; + } + + /** + * Sets the value of the storedVmQuota property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setStoredVmQuota(Integer value) { + this.storedVmQuota = value; + } + + /** + * Gets the value of the deployedVmQuota property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getDeployedVmQuota() { + return deployedVmQuota; + } + + /** + * Sets the value of the deployedVmQuota property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setDeployedVmQuota(Integer value) { + this.deployedVmQuota = value; + } + + /** + * Gets the value of the role property. + * + * @return + * possible object is + * {@link Reference } + * + */ + public Reference getRole() { + return role; + } + + /** + * Sets the value of the role property. + * + * @param value + * allowed object is + * {@link Reference } + * + */ + public void setRole(Reference value) { + this.role = value; + } + + /** + * Gets the value of the password property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPassword() { + return password; + } + + /** + * Sets the value of the password property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPassword(String value) { + this.password = value; + } + + /** + * Gets the value of the groupReferences property. + * + * @return + * possible object is + * {@link GroupsList } + * + */ + public GroupsList getGroupReferences() { + return groupReferences; + } + + /** + * Sets the value of the groupReferences property. + * + * @param value + * allowed object is + * {@link GroupsList } + * + */ + public void setGroupReferences(GroupsList value) { + this.groupReferences = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + User that = User.class.cast(o); + return equal(fullName, that.fullName) && + equal(emailAddress, that.emailAddress) && + equal(telephone, that.telephone) && + equal(isEnabled, that.isEnabled) && + equal(isLocked, that.isLocked) && + equal(im, that.im) && + equal(nameInSource, that.nameInSource) && + equal(isAlertEnabled, that.isAlertEnabled) && + equal(alertEmailPrefix, that.alertEmailPrefix) && + equal(alertEmail, that.alertEmail) && + equal(isExternal, that.isExternal) && + equal(isDefaultCached, that.isDefaultCached) && + equal(isGroupRole, that.isGroupRole) && + equal(storedVmQuota, that.storedVmQuota) && + equal(deployedVmQuota, that.deployedVmQuota) && + equal(role, that.role) && + equal(password, that.password) && + equal(groupReferences, that.groupReferences); + } + + @Override + public int hashCode() { + return Objects.hashCode(fullName, + emailAddress, + telephone, + isEnabled, + isLocked, + im, + nameInSource, + isAlertEnabled, + alertEmailPrefix, + alertEmail, + isExternal, + isDefaultCached, + isGroupRole, + storedVmQuota, + deployedVmQuota, + role, + password, + groupReferences); + } + + @Override + public String toString() { + return Objects.toStringHelper("") + .add("fullName", fullName) + .add("emailAddress", emailAddress) + .add("telephone", telephone) + .add("isEnabled", isEnabled) + .add("isLocked", isLocked) + .add("im", im) + .add("nameInSource", nameInSource) + .add("isAlertEnabled", isAlertEnabled) + .add("alertEmailPrefix", alertEmailPrefix) + .add("alertEmail", alertEmail) + .add("isExternal", isExternal) + .add("isDefaultCached", isDefaultCached) + .add("isGroupRole", isGroupRole) + .add("storedVmQuota", storedVmQuota) + .add("deployedVmQuota", deployedVmQuota) + .add("role", role) + .add("password", password) + .add("groupReferences", groupReferences).toString(); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/ContainerType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/ContainerType.java new file mode 100644 index 0000000000..21d64907c7 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/ContainerType.java @@ -0,0 +1,238 @@ +/** + * 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.query; + +import static com.google.common.base.Objects.*; +import static com.google.common.base.Preconditions.*; + +import java.net.URI; +import java.util.Set; + +import javax.xml.bind.annotation.XmlAttribute; + +import org.jclouds.vcloud.director.v1_5.domain.Link; +import org.jclouds.vcloud.director.v1_5.domain.ResourceType; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Sets; + +/** + * Container for query result sets. + * + *
+ * <complexType name="Container" />
+ * 
+ * + * @author grkvlt@apache.org + */ +public class ContainerType> extends ResourceType { + + public static > Builder builder() { + return new Builder(); + } + + @Override + public Builder toBuilder() { + return new Builder().fromContainerType(this); + } + + public static class Builder> extends ResourceType.Builder { + + protected String name; + protected Integer page; + protected Integer pageSize; + protected Long total; + + /** + * @see Container#getName() + */ + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see Container#getPage() + */ + public Builder page(Integer page) { + this.page = page; + return this; + } + + /** + * @see Container#getPageSize() + */ + public Builder pageSize(Integer pageSize) { + this.pageSize = pageSize; + return this; + } + + /** + * @see Container#getTotal() + */ + public Builder total(Long total) { + this.total = total; + return this; + } + + @Override + public ContainerType build() { + ContainerType container = new ContainerType(href); + container.setName(name); + container.setPage(page); + container.setPageSize(pageSize); + container.setTotal(total); + container.setType(type); + container.setLinks(links); + return container; + } + + /** + * @see ResourceType#getHref() + */ + @Override + public Builder href(URI href) { + super.href(href); + return this; + } + + /** + * @see ResourceType#getType() + */ + @Override + public Builder type(String type) { + super.type(type); + return this; + } + + /** + * @see ResourceType#getLinks() + */ + @Override + public Builder links(Set links) { + super.links(Sets.newLinkedHashSet(checkNotNull(links, "links"))); + return this; + } + + /** + * @see ResourceType#getLinks() + */ + @Override + public Builder link(Link link) { + super.link(link); + return this; + } + + @Override + public Builder fromResourceType(ResourceType in) { + return Builder.class.cast(super.fromResourceType(in)); + } + + public Builder fromContainerType(ContainerType in) { + return fromResourceType(in).name(in.getName()).page(in.getPage()).pageSize(in.getPageSize()).total(in.getTotal()); + } + } + + protected ContainerType() { + // For JAXB and builder use + } + + protected ContainerType(URI href) { + super(href); + } + + + @XmlAttribute + protected String name; + @XmlAttribute + protected Integer page; + @XmlAttribute + protected Integer pageSize; + @XmlAttribute + protected Long total; + + /** + * Query name that generated this result set. + */ + public String getName() { + return name; + } + + public void setName(String value) { + this.name = value; + } + + /** + * Page of the result set that this container holds. The first page is page number 1. + */ + public Integer getPage() { + return page; + } + + public void setPage(Integer value) { + this.page = value; + } + + /** + * Page size, as a number of records or references. + */ + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer value) { + this.pageSize = value; + } + + /** + * Total number of records or references in the container. + */ + public Long getTotal() { + return total; + } + + public void setTotal(Long value) { + this.total = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + ContainerType that = ContainerType.class.cast(o); + return super.equals(that) && + equal(this.name, that.name) && equal(this.page, that.page) && + equal(this.pageSize, that.pageSize) && equal(this.total, that.total); + } + + @Override + public int hashCode() { + return super.hashCode() + Objects.hashCode(name, page, pageSize, total); + } + + @Override + public ToStringHelper string() { + return super.string().add("name", name).add("page", page).add("pageSize", pageSize).add("total", total); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultCatalogRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultCatalogRecord.java new file mode 100644 index 0000000000..5e9ad67287 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultCatalogRecord.java @@ -0,0 +1,406 @@ +/** + * 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.query; + +import static com.google.common.base.Objects.*; +import static com.google.common.base.Preconditions.*; + +import java.net.URI; +import java.util.Date; +import java.util.Set; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlSchemaType; + +import org.jclouds.vcloud.director.v1_5.domain.Link; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Sets; + +/** + * Represents the results from a Catalog vCloud query as a record. + * + *
+ * <complexType name="QueryResultCatalogRecord" />
+ * 
+ * + * @author grkvlt@apache.org + */ +public class QueryResultCatalogRecord extends QueryResultRecordType { + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + @Override + public Builder toBuilder() { + return new Builder().fromQueryResultCatalogRecord(this); + } + + public static class Builder extends QueryResultRecordType.Builder { + + private String name; + private Boolean isPublished; + private Boolean isShared; + private Date creationDate; + private String orgName; + private String ownerName; + private Integer numberOfVAppTemplates; + private Integer numberOfMedia; + private String owner; + + /** + * @see QueryResultCatalogRecord#getName() + */ + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsPublished() + */ + public Builder isPublished(Boolean isPublished) { + this.isPublished = isPublished; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsPublished() + */ + public Builder published() { + this.isPublished = Boolean.TRUE; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsPublished() + */ + public Builder notPublished() { + this.isPublished = Boolean.FALSE; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsShared() + */ + public Builder isShared(Boolean isShared) { + this.isShared = isShared; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsShared() + */ + public Builder shared() { + this.isShared = Boolean.TRUE; + return this; + } + + /** + * @see QueryResultCatalogRecord#getIsShared() + */ + public Builder notShared() { + this.isShared = Boolean.FALSE; + return this; + } + + /** + * @see QueryResultCatalogRecord#getCreationDate() + */ + public Builder creationDate(Date creationDate) { + this.creationDate = creationDate; + return this; + } + + /** + * @see QueryResultCatalogRecord#getOrgName() + */ + public Builder orgName(String orgName) { + this.orgName = orgName; + return this; + } + + /** + * @see QueryResultCatalogRecord#getOwnerName() + */ + public Builder ownerName(String ownerName) { + this.ownerName = ownerName; + return this; + } + + /** + * @see QueryResultCatalogRecord#getNumberOfVAppTemplates() + */ + public Builder numberOfVAppTemplates(Integer numberOfVAppTemplates) { + this.numberOfVAppTemplates = numberOfVAppTemplates; + return this; + } + + /** + * @see QueryResultCatalogRecord#getNumberOfMedia() + */ + public Builder numberOfMedia(Integer numberOfMedia) { + this.numberOfMedia = numberOfMedia; + return this; + } + + /** + * @see QueryResultCatalogRecord#getOwner() + */ + public Builder owner(String owner) { + this.owner = owner; + return this; + } + + @Override + public QueryResultCatalogRecord build() { + QueryResultCatalogRecord queryResultCatalogRecord = new QueryResultCatalogRecord(href); + queryResultCatalogRecord.setName(name); + queryResultCatalogRecord.setIsPublished(isPublished); + queryResultCatalogRecord.setIsShared(isShared); + queryResultCatalogRecord.setCreationDate(creationDate); + queryResultCatalogRecord.setOrgName(orgName); + queryResultCatalogRecord.setOwnerName(ownerName); + queryResultCatalogRecord.setNumberOfVAppTemplates(numberOfVAppTemplates); + queryResultCatalogRecord.setNumberOfMedia(numberOfMedia); + queryResultCatalogRecord.setOwner(owner); + queryResultCatalogRecord.setId(id); + queryResultCatalogRecord.setType(type); + queryResultCatalogRecord.setLinks(links); + return queryResultCatalogRecord; + } + + /** + * @see QueryResultRecordType#getHref() + */ + @Override + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see QueryResultRecordType#getId() + */ + @Override + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see QueryResultRecordType#getType() + */ + @Override + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + @Override + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + @Override + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; + } + + @Override + public Builder fromQueryResultRecordType(QueryResultRecordType in) { + return Builder.class.cast(super.fromQueryResultRecordType(in)); + } + + public Builder fromQueryResultCatalogRecord(QueryResultCatalogRecord in) { + return fromQueryResultRecordType(in).name(in.getName()).isPublished(in.isPublished()).isShared(in.isShared()).creationDate(in.getCreationDate()).orgName(in.getOrgName()).ownerName( + in.getOwnerName()).numberOfVAppTemplates(in.getNumberOfVAppTemplates()).numberOfMedia(in.getNumberOfMedia()).owner(in.getOwner()); + } + } + + private QueryResultCatalogRecord() { + // For JAXB and builder use + } + + private QueryResultCatalogRecord(URI href) { + super(href); + } + + @XmlAttribute + protected String name; + @XmlAttribute + protected Boolean isPublished; + @XmlAttribute + protected Boolean isShared; + @XmlAttribute + @XmlSchemaType(name = "dateTime") + protected Date creationDate; + @XmlAttribute + protected String orgName; + @XmlAttribute + protected String ownerName; + @XmlAttribute + protected Integer numberOfVAppTemplates; + @XmlAttribute + protected Integer numberOfMedia; + @XmlAttribute + protected String owner; + + /** + * Gets the value of the name property. + */ + public String getName() { + return name; + } + + public void setName(String value) { + this.name = value; + } + + public Boolean isPublished() { + return isPublished; + } + + /** + * Sets the value of the isPublished property. + */ + public void setIsPublished(Boolean value) { + this.isPublished = value; + } + + public Boolean isShared() { + return isShared; + } + + /** + * Sets the value of the isShared property. + */ + public void setIsShared(Boolean value) { + this.isShared = value; + } + + /** + * Gets the value of the creationDate property. + */ + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date value) { + this.creationDate = value; + } + + /** + * Gets the value of the orgName property. + */ + public String getOrgName() { + return orgName; + } + + public void setOrgName(String value) { + this.orgName = value; + } + + /** + * Gets the value of the ownerName property. + */ + public String getOwnerName() { + return ownerName; + } + + public void setOwnerName(String value) { + this.ownerName = value; + } + + /** + * Gets the value of the numberOfVAppTemplates property. + */ + public Integer getNumberOfVAppTemplates() { + return numberOfVAppTemplates; + } + + public void setNumberOfVAppTemplates(Integer value) { + this.numberOfVAppTemplates = value; + } + + /** + * Gets the value of the numberOfMedia property. + */ + public Integer getNumberOfMedia() { + return numberOfMedia; + } + + public void setNumberOfMedia(Integer value) { + this.numberOfMedia = value; + } + + /** + * Gets the value of the owner property. + */ + public String getOwner() { + return owner; + } + + public void setOwner(String value) { + this.owner = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + QueryResultCatalogRecord that = QueryResultCatalogRecord.class.cast(o); + return super.equals(that) && + equal(this.name, that.name) && equal(this.isPublished, that.isPublished) && + equal(this.isShared, that.isShared) && equal(this.creationDate, that.creationDate) && + equal(this.orgName, that.orgName) && equal(this.ownerName, that.ownerName) && + equal(this.numberOfVAppTemplates, that.numberOfVAppTemplates) && + equal(this.numberOfMedia, that.numberOfMedia) && equal(this.owner, that.owner); + } + + @Override + public int hashCode() { + return super.hashCode() + Objects.hashCode(name, isPublished, isShared, creationDate, + orgName, ownerName, numberOfVAppTemplates, numberOfMedia, owner); + } + + @Override + public ToStringHelper string() { + return super.string() + .add("name", name).add("isPublished", isPublished).add("isShared", isShared) + .add("creationDate", creationDate).add("orgName", orgName).add("ownerName", ownerName) + .add("numberOfVAppTemplates", numberOfVAppTemplates).add("numberOfMedia", numberOfMedia) + .add("owner", owner); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java new file mode 100644 index 0000000000..953cf3b952 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java @@ -0,0 +1,358 @@ +/** + * 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.query; + +import static com.google.common.base.Objects.*; +import static com.google.common.base.Preconditions.*; + +import java.net.URI; +import java.util.Set; + +import javax.xml.bind.annotation.XmlAttribute; + +import org.jclouds.vcloud.director.v1_5.domain.Link; +import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecordType.Builder; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Sets; + +/** + * Represents the results from a Network vCloud query as a record. + * + *
+ * <complexType name="QueryResultNetworkRecord" />
+ * 
+ * + * @author grkvlt@apache.org + */ +public class QueryResultNetworkRecord extends QueryResultRecordType { + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + @Override + public Builder toBuilder() { + return new Builder().fromQueryResultNetworkRecord(this); + } + + public static class Builder extends QueryResultRecordType.Builder { + + private String name; + private String ipScopeId; + private String gateway; + private String netmask; + private String dns1; + private String dns2; + private String dnsSuffix; + private Boolean isBusy; + + /** + * @see QueryResultNetworkRecord#getName() + */ + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see QueryResultNetworkRecord#getIpScopeId() + */ + public Builder ipScopeId(String ipScopeId) { + this.ipScopeId = ipScopeId; + return this; + } + + /** + * @see QueryResultNetworkRecord#getGateway() + */ + public Builder gateway(String gateway) { + this.gateway = gateway; + return this; + } + + /** + * @see QueryResultNetworkRecord#getNetmask() + */ + public Builder netmask(String netmask) { + this.netmask = netmask; + return this; + } + + /** + * @see QueryResultNetworkRecord#getDns1() + */ + public Builder dns1(String dns1) { + this.dns1 = dns1; + return this; + } + + /** + * @see QueryResultNetworkRecord#getDns2() + */ + public Builder dns2(String dns2) { + this.dns2 = dns2; + return this; + } + + /** + * @see QueryResultNetworkRecord#getDnsSuffix() + */ + public Builder dnsSuffix(String dnsSuffix) { + this.dnsSuffix = dnsSuffix; + return this; + } + + /** + * @see QueryResultNetworkRecord#isBusy() + */ + public Builder isBusy(Boolean isBusy) { + this.isBusy = isBusy; + return this; + } + + /** + * @see QueryResultNetworkRecord#isBusy() + */ + public Builder busy() { + this.isBusy = Boolean.TRUE; + return this; + } + + /** + * @see QueryResultNetworkRecord#isBusy() + */ + public Builder notBusy() { + this.isBusy = Boolean.FALSE; + return this; + } + + @Override + public QueryResultNetworkRecord build() { + QueryResultNetworkRecord queryResultNetworkRecord = new QueryResultNetworkRecord(href); + queryResultNetworkRecord.setName(name); + queryResultNetworkRecord.setIpScopeId(ipScopeId); + queryResultNetworkRecord.setGateway(gateway); + queryResultNetworkRecord.setNetmask(netmask); + queryResultNetworkRecord.setDns1(dns1); + queryResultNetworkRecord.setDns2(dns2); + queryResultNetworkRecord.setDnsSuffix(dnsSuffix); + queryResultNetworkRecord.setIsBusy(isBusy); + queryResultNetworkRecord.setId(id); + queryResultNetworkRecord.setType(type); + queryResultNetworkRecord.setLinks(links); + return queryResultNetworkRecord; + } + + /** + * @see QueryResultRecordType#getHref() + */ + @Override + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see QueryResultRecordType#getId() + */ + @Override + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see QueryResultRecordType#getType() + */ + @Override + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + @Override + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + @Override + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; + } + + @Override + public Builder fromQueryResultRecordType(QueryResultRecordType in) { + return Builder.class.cast(super.fromQueryResultRecordType(in)); + } + + public Builder fromQueryResultNetworkRecord(QueryResultNetworkRecord in) { + return fromQueryResultRecordType(in) + .name(in.getName()).ipScopeId(in.getIpScopeId()).gateway(in.getGateway()) + .netmask(in.getNetmask()).dns1(in.getDns1()).dns2(in.getDns2()) + .dnsSuffix(in.getDnsSuffix()).isBusy(in.isBusy()); + } + } + + private QueryResultNetworkRecord() { + // For JAXB and builder use + } + + private QueryResultNetworkRecord(URI href) { + super(href); + } + + @XmlAttribute + protected String name; + @XmlAttribute + protected String ipScopeId; + @XmlAttribute + protected String gateway; + @XmlAttribute + protected String netmask; + @XmlAttribute + protected String dns1; + @XmlAttribute + protected String dns2; + @XmlAttribute + protected String dnsSuffix; + @XmlAttribute + protected Boolean isBusy; + + /** + * name. + */ + public String getName() { + return name; + } + + public void setName(String value) { + this.name = value; + } + + /** + * IP scope object of this network. + */ + public String getIpScopeId() { + return ipScopeId; + } + + public void setIpScopeId(String value) { + this.ipScopeId = value; + } + + /** + * Gateway for the network. + */ + public String getGateway() { + return gateway; + } + + public void setGateway(String value) { + this.gateway = value; + } + + /** + * Netmask for the network. + */ + public String getNetmask() { + return netmask; + } + + public void setNetmask(String value) { + this.netmask = value; + } + + /** + * Primary DNS for the network. + */ + public String getDns1() { + return dns1; + } + + public void setDns1(String value) { + this.dns1 = value; + } + + /** + * Secondary DNS for the network. + */ + public String getDns2() { + return dns2; + } + + public void setDns2(String value) { + this.dns2 = value; + } + + /** + * DNS suffix for the network. + */ + public String getDnsSuffix() { + return dnsSuffix; + } + + public void setDnsSuffix(String value) { + this.dnsSuffix = value; + } + + /** + * Shows whether it is busy. + */ + public Boolean isBusy() { + return isBusy; + } + + public void setIsBusy(Boolean value) { + this.isBusy = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + QueryResultNetworkRecord that = QueryResultNetworkRecord.class.cast(o); + return super.equals(that) && equal(name, that.name) && equal(ipScopeId, that.ipScopeId) && equal(gateway, that.gateway) && equal(netmask, that.netmask) && equal(dns1, that.dns1) + && equal(dns2, that.dns2) && equal(dnsSuffix, that.dnsSuffix) && equal(isBusy, that.isBusy); + } + + @Override + public int hashCode() { + return Objects.hashCode(name, ipScopeId, gateway, netmask, dns1, dns2, dnsSuffix, isBusy); + } + + @Override + public ToStringHelper string() { + return string().add("name", name).add("ipScopeId", ipScopeId).add("gateway", gateway).add("netmask", netmask).add("dns1", dns1).add("dns2", dns2).add("dnsSuffix", dnsSuffix).add("isBusy", + isBusy); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecordType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecordType.java new file mode 100644 index 0000000000..4c21115c69 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecordType.java @@ -0,0 +1,238 @@ +/** + * 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.query; + +import static com.google.common.base.Objects.*; +import static com.google.common.base.Preconditions.*; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.*; + +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyAttribute; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.namespace.QName; + +import org.jclouds.vcloud.director.v1_5.domain.Link; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Sets; + +/** + * Base type for query result Records. Subtypes define more specific elements. + * + *
+ * <complexType name="QueryResultRecordType" />
+ * 
+ * + * @author grkvlt@apache.org + */ +@XmlAccessorType(XmlAccessType.FIELD) +public class QueryResultRecordType> { + + public static > Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromQueryResultRecordType(this); + } + + public static class Builder> { + + protected URI href; + protected String id; + protected String type; + protected Set links = Sets.newLinkedHashSet(); + + /** + * @see QueryResultRecordType#getHref() + */ + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see QueryResultRecordType#getId() + */ + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see QueryResultRecordType#getType() + */ + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + return this; + } + + /** + * @see QueryResultRecordType#getLinks() + */ + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; + } + + public QueryResultRecordType build() { + QueryResultRecordType record = new QueryResultRecordType(href); + record.setId(id); + record.setType(type); + record.setLinks(links); + return record; + } + + public Builder fromQueryResultRecordType(QueryResultRecordType in) { + return href(in.getHref()).id(in.getId()).type(in.getType()); + } + } + + @XmlElement(namespace = VCLOUD_1_5_NS, name = "Link") + private Set links = Sets.newLinkedHashSet(); + @XmlAttribute + @XmlSchemaType(name = "anyURI") + private URI href; + @XmlAttribute + private String id; + @XmlAttribute + private String type; + @XmlAnyAttribute + // XXX not sure about this + private Map otherAttributes = new HashMap(); + + public QueryResultRecordType(URI href) { + this.href = href; + } + + public QueryResultRecordType() { + // For JAXB + } + + /** + * Set of optional links to an entity or operation associated with this object. + */ + public Set getLinks() { + return links; + } + + public void setLinks(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); + } + + public void addLink(Link link) { + this.links.add(checkNotNull(link, "link")); + } + + /** + * Contains the URI to the entity. An object reference, expressed in URL format. Because this URL includes the object identifier + * portion of the id attribute value, it uniquely identifies the object, persists for the life of the object, and is never + * reused. The value of the href attribute is a reference to a view of the object, and can be used to access a representation of + * the object that is valid in a particular context. Although URLs have a well-known syntax and a well-understood interpretation, + * a client should treat each href as an opaque string. The rules that govern how the server constructs href strings might change + * in future releases. + * + * @return an opaque reference and should never be parsed + */ + public URI getHref() { + return href; + } + + public void setHref(URI href) { + this.href = href; + } + + /** + * The resource identifier, expressed in URN format. The value of this attribute uniquely identifies the resource, persists for + * the life of the resource, and is never reused. + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * Contains the type of the the entity. The object type, specified as a MIME content type, of the object that the link + * references. This attribute is present only for links to objects. It is not present for links to actions. + * + * @return type definition, type, expressed as an HTTP Content-Type + */ + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + // XXX not sure about this + + /** + * Gets a map that contains attributes that aren't bound to any typed property on this class. + */ + public Map getOtherAttributes() { + return otherAttributes; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + QueryResultRecordType that = QueryResultRecordType.class.cast(o); + return equal(this.href, that.href) && equal(this.id, that.id) && + equal(this.type, that.type) && equal(this.links, that.links); + } + + @Override + public int hashCode() { + return Objects.hashCode(href, id, type, links); + } + + @Override + public String toString() { + return string().toString(); + } + + protected ToStringHelper string() { + return Objects.toStringHelper("").add("href", href).add("id", id) + .add("type", type).add("links", links); + } +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecords.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecords.java new file mode 100644 index 0000000000..33cdd6fcc7 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultRecords.java @@ -0,0 +1,212 @@ +/** + * 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.query; + +import static com.google.common.base.Objects.*; +import static com.google.common.base.Preconditions.*; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.*; + +import java.net.URI; +import java.util.List; +import java.util.Set; + +import javax.xml.bind.annotation.XmlElementRef; + +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.domain.Link; +import org.jclouds.vcloud.director.v1_5.domain.query.ContainerType.Builder; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +/** + * Represents the results from a vCloud query as records. + * + *
+ * <complexType name="QueryResultRecords" />
+ * 
+ * + * @author grkvlt@apache.org + */ +public class QueryResultRecords extends ContainerType { + + public static final String MEDIA_TYPE = VCloudDirectorMediaType.QUERY_RESULT_RECORDS; + + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + @Override + public Builder toBuilder() { + return new Builder().fromQueryResultRecords(this); + } + + public static class Builder extends ContainerType.Builder { + + private List> records = Lists.newArrayList(); + + /** + * @see QueryResultRecords#getRecords() + */ + public Builder records(List> records) { + this.records = records; + return this; + } + + /** + * @see QueryResultRecords#getRecords() + */ + public Builder record(QueryResultRecordType record) { + this.records.add(record); + return this; + } + + @Override + public QueryResultRecords build() { + QueryResultRecords queryResultRecords = new QueryResultRecords(href); + queryResultRecords.setRecords(records); + queryResultRecords.setName(name); + queryResultRecords.setPage(page); + queryResultRecords.setPageSize(pageSize); + queryResultRecords.setTotal(total); + queryResultRecords.setType(type); + queryResultRecords.setLinks(links); + return queryResultRecords; + } + + /** + * @see Container#getName() + */ + @Override + public Builder name(String name) { + this.name = name; + return this; + } + + /** + * @see Container#getPage() + */ + @Override + public Builder page(Integer page) { + this.page = page; + return this; + } + + /** + * @see Container#getPageSize() + */ + @Override + public Builder pageSize(Integer pageSize) { + this.pageSize = pageSize; + return this; + } + + /** + * @see ResourceType#getHref() + */ + @Override + public Builder href(URI href) { + super.href(href); + return this; + } + + /** + * @see ResourceType#getType() + */ + @Override + public Builder type(String type) { + super.type(type); + return this; + } + + /** + * @see ResourceType#getLinks() + */ + @Override + public Builder links(Set links) { + super.links(Sets.newLinkedHashSet(checkNotNull(links, "links"))); + return this; + } + + /** + * @see ResourceType#getLinks() + */ + @Override + public Builder link(Link link) { + super.link(link); + return this; + } + + @Override + public Builder fromContainerType(ContainerType in) { + return Builder.class.cast(super.fromContainerType(in)); + } + + public Builder fromQueryResultRecords(QueryResultRecords in) { + return fromContainerType(in).records(in.getRecords()); + } + } + + private QueryResultRecords() { + // For JAXB and builder use + } + + @XmlElementRef(name = "Record", namespace = VCLOUD_1_5_NS) + protected List> records; + + /** + * Set of records representing query results. + */ + public List> getRecords() { + return records; + } + + public void setRecords(List> links) { + this.records = Lists.newArrayList(checkNotNull(links, "links")); + } + + public void addRecords(QueryResultRecordType record) { + this.records.add(checkNotNull(record, "record")); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + QueryResultRecords that = QueryResultRecords.class.cast(o); + return super.equals(that) && equal(this.records, that.records); + } + + @Override + public int hashCode() { + return super.hashCode() + Objects.hashCode(records); + } + + @Override + public ToStringHelper string() { + return super.string().add("records", records); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/AbstractVAppType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/AbstractVAppType.java new file mode 100644 index 0000000000..1b353bc825 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/AbstractVAppType.java @@ -0,0 +1,177 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2012.02.08 at 02:47:44 PM GMT +// + + +package org.jclouds.vcloud.director.v1_5.domain.vapp; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.JAXBElement; +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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; +import com.vmware.vcloud.api.rest.schema.ovf.AnnotationSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.DeploymentOptionSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.DiskSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.EulaSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.InstallSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.NetworkSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.OperatingSystemSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.ProductSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.ResourceAllocationSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.SectionType; +import com.vmware.vcloud.api.rest.schema.ovf.StartupSectionType; +import com.vmware.vcloud.api.rest.schema.ovf.VirtualHardwareSectionType; + + +/** + * + * Represents a base type for VAppType and VmType. + * + * + *

Java class for AbstractVAppType complex type. + * + *

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

+ * <complexType name="AbstractVAppType">
+ *   <complexContent>
+ *     <extension base="{http://www.vmware.com/vcloud/v1.5}ResourceEntityType">
+ *       <sequence>
+ *         <element name="VAppParent" type="{http://www.vmware.com/vcloud/v1.5}ReferenceType" minOccurs="0"/>
+ *         <element ref="{http://schemas.dmtf.org/ovf/envelope/1}Section" maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="deployed" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       <anyAttribute processContents='lax' namespace='##other'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AbstractVAppType", propOrder = { + "vAppParent", + "section" +}) +@XmlSeeAlso({ + VmType.class, + VAppType.class +}) +public abstract class AbstractVAppType + extends ResourceEntityType +{ + + @XmlElement(name = "VAppParent") + protected ReferenceType vAppParent; + @XmlElementRef(name = "Section", namespace = "http://schemas.dmtf.org/ovf/envelope/1", type = JAXBElement.class) + protected List> section; + @XmlAttribute + protected Boolean deployed; + + /** + * Gets the value of the vAppParent property. + * + * @return + * possible object is + * {@link ReferenceType } + * + */ + public ReferenceType getVAppParent() { + return vAppParent; + } + + /** + * Sets the value of the vAppParent property. + * + * @param value + * allowed object is + * {@link ReferenceType } + * + */ + public void setVAppParent(ReferenceType value) { + this.vAppParent = value; + } + + /** + * + * Specific ovf:Section with additional information for the vApp. + * 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> getSection() { + if (section == null) { + section = new ArrayList>(); + } + return this.section; + } + + /** + * Gets the value of the deployed property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isDeployed() { + return deployed; + } + + /** + * Sets the value of the deployed property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDeployed(Boolean value) { + this.deployed = value; + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/VApp.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/VApp.java new file mode 100644 index 0000000000..78654802ca --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/vapp/VApp.java @@ -0,0 +1,279 @@ +/** + * 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.vapp; + +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.XmlType; + + +/** + * + * Represents a vApp. + * + * + *

Java class for VApp complex type. + * + *

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

+ * <complexType name="VApp">
+ *   <complexContent>
+ *     <extension base="{http://www.vmware.com/vcloud/v1.5}AbstractVApp">
+ *       <sequence>
+ *         <element name="Owner" type="{http://www.vmware.com/vcloud/v1.5}OwnerType" minOccurs="0"/>
+ *         <element name="InMaintenanceMode" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ *         <element name="Children" type="{http://www.vmware.com/vcloud/v1.5}VAppChildrenType" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="ovfDescriptorUploaded" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       <anyAttribute processContents='lax' namespace='##other'/>
+ *     </extension>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "VApp", propOrder = { + "owner", + "inMaintenanceMode", + "children" +}) +public class VApp + extends AbstractVAppType + +{ + @SuppressWarnings("unchecked") + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder().fromVApp(this); + } + + public static class Builder extends AbstractVAppType.Builder { + + private Owner owner; + private Boolean inMaintenanceMode; + private VAppChildren children; + private Boolean ovfDescriptorUploaded; + + /** + * @see VApp#getOwner() + */ + public Builder owner(Owner owner) { + this.owner = owner; + return this; + } + + /** + * @see VApp#getInMaintenanceMode() + */ + public Builder inMaintenanceMode(Boolean inMaintenanceMode) { + this.inMaintenanceMode = inMaintenanceMode; + return this; + } + + /** + * @see VApp#getChildren() + */ + public Builder children(VAppChildren children) { + this.children = children; + return this; + } + + /** + * @see VApp#getOvfDescriptorUploaded() + */ + public Builder ovfDescriptorUploaded(Boolean ovfDescriptorUploaded) { + this.ovfDescriptorUploaded = ovfDescriptorUploaded; + return this; + } + + + public VApp build() { + VApp vApp = new VApp(); + vApp.setOwner(owner); + vApp.setInMaintenanceMode(inMaintenanceMode); + vApp.setChildren(children); + vApp.setOvfDescriptorUploaded(ovfDescriptorUploaded); + return vApp; + } + + + @Override + public Builder fromAbstractVAppType(AbstractVAppType in) { + return Builder.class.cast(super.fromAbstractVAppType(in)); + } + public Builder fromVApp(VApp in) { + return fromAbstractVAppType(in) + .owner(in.getOwner()) + .inMaintenanceMode(in.getInMaintenanceMode()) + .children(in.getChildren()) + .ovfDescriptorUploaded(in.getOvfDescriptorUploaded()); + } + } + + private VApp() { + // For JAXB and builder use + } + + + + @XmlElement(name = "Owner") + protected Owner owner; + @XmlElement(name = "InMaintenanceMode") + protected Boolean inMaintenanceMode; + @XmlElement(name = "Children") + protected VAppChildren children; + @XmlAttribute + protected Boolean ovfDescriptorUploaded; + + /** + * 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; + } + + /** + * Gets the value of the inMaintenanceMode property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isInMaintenanceMode() { + return inMaintenanceMode; + } + + /** + * Sets the value of the inMaintenanceMode property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setInMaintenanceMode(Boolean value) { + this.inMaintenanceMode = value; + } + + /** + * Gets the value of the children property. + * + * @return + * possible object is + * {@link VAppChildren } + * + */ + public VAppChildren getChildren() { + return children; + } + + /** + * Sets the value of the children property. + * + * @param value + * allowed object is + * {@link VAppChildren } + * + */ + public void setChildren(VAppChildren value) { + this.children = value; + } + + /** + * 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; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + VApp that = VApp.class.cast(o); + return equal(owner, that.owner) && + equal(inMaintenanceMode, that.inMaintenanceMode) && + equal(children, that.children) && + equal(ovfDescriptorUploaded, that.ovfDescriptorUploaded); + } + + @Override + public int hashCode() { + return Objects.hashCode(owner, + inMaintenanceMode, + children, + ovfDescriptorUploaded); + } + + @Override + public String toString() { + return Objects.toStringHelper("") + .add("owner", owner) + .add("inMaintenanceMode", inMaintenanceMode) + .add("children", children) + .add("ovfDescriptorUploaded", ovfDescriptorUploaded).toString(); + } + +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncClient.java new file mode 100644 index 0000000000..be09637d06 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncClient.java @@ -0,0 +1,76 @@ +/** + * 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 java.net.URI; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; + +import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.ExceptionParser; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest; +import org.jclouds.vcloud.director.v1_5.functions.OrgReferenceToTaskListEndpoint; +import org.jclouds.vcloud.director.v1_5.functions.ReferenceToEndpoint; +import org.jclouds.vcloud.director.v1_5.functions.ThrowVCloudErrorOn4xx; + +import com.google.common.util.concurrent.ListenableFuture; + +/** + * @see TaskClient + * @author grkvlt@apache.org + */ +@RequestFilters(AddVCloudAuthorizationToRequest.class) +public interface QueryAsyncClient { + + /** + * @see TaskClient#getTaskList(ReferenceType) + */ + @GET + @Consumes + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture getTaskList(@EndpointParam(parser = OrgReferenceToTaskListEndpoint.class) ReferenceType orgRef); + + /** + * @see TaskClient#getTask(URI) + */ + @GET + @Consumes + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture getTask(@EndpointParam URI taskUri); + + /** + * @see TaskClient#cancelTask(URI) + */ + @POST + @Path("/action/cancel") + @Consumes + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture cancelTask(@EndpointParam URI taskUri); +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryClient.java new file mode 100644 index 0000000000..188f5b7f7e --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryClient.java @@ -0,0 +1,62 @@ +/** + * 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 java.net.URI; +import java.util.concurrent.TimeUnit; + +import org.jclouds.concurrent.Timeout; +import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; + +/** + * Provides synchronous access to The REST API query interface. + * + * @see TaskAsyncClient + * @author grkvlt@apache.org + */ +@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS) +public interface QueryClient { + + /** + * REST API General queries handler. + * + *
+    * GET /query/
+    * 
+ */ + ContainerType query(String queryParams); + + /** + * Retrieves a list of Catalogs by using REST API general QueryHandler. + * + * If filter is provided it will be applied to the corresponding result set. + * Format determines the elements representation - references or records. + * Default format is references. + * + *
+    * GET /catalogs/query/
+    * 
+ * + * @param orgId the unique id for the organization + * @return a list of tasks + */ + ContainerType catalogsQuery(ReferenceType orgRef); +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java index ba26090415..819d5861c7 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java @@ -33,55 +33,30 @@ import org.testng.annotations.Test; import com.google.common.collect.Iterables; /** -* Tests live behavior of {@link taskClient}. -* -* @author grkvlt@apache.task -*/ -@Test(groups = { "live", "apitests" }, testName = "TaskClientLiveTest") + * Tests live behavior of {@link CatalogClient}. + * + * @author grkvlt@apache.org + */ +@Test(groups = { "live", "apitests" }, testName = "CatalogClientLiveTest") public class CatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest { + /* + * Convenience references to API clients. + */ + + private final CatalogClient catalogClient = context.getApi().getCatalogClient(); + private final QueryClient queryClient = context.getApi().getQueryClient(); + /* * Shared state between dependant tests. */ - - private OrgList orgList; - private Reference orgRef; - private TasksList taskList; - private Task task; - private URI taskUri; - - @Test(testName = "GET /tasksList/{id}") + + private Reference catalogRef; + private Catalog catalog; + + @Test(testName = "GET /catalog/{id}") public void testGetTaskList() { - orgList = context.getApi().getOrgClient().getOrgList(); - orgRef = Iterables.getFirst(orgList.getOrgs(), null); - - // Call the method being tested - taskList = context.getApi().getTaskClient().getTaskList(orgRef); - - // NOTE The environment MUST have ... - - // Check required elements and attributes - assertFalse(Iterables.isEmpty(taskList.getTasks()), "There must always be Task elements in the TaskList"); - - for (Task task : taskList.getTasks()) { - checkTask(task); - } + catalogRef = null; + catalog = catalogClient.getCatalog(catalogRef); } - - @Test(testName = "GET /task/{id}", dependsOnMethods = { "testGetTaskList" }) - public void testGetTask() { - taskUri = Iterables.getFirst(taskList.getTasks(), null).getHref(); - - // Call the method being tested - task = context.getApi().getTaskClient().getTask(taskUri); - - // Check required elements and attributes - checkTask(task); - } - - @Test(testName = "GET /task/{id}/metadata/", dependsOnMethods = { "testGetTask" }) - public void testCancelTask() { - // Call the method being tested - context.getApi().getTaskClient().cancelTask(taskUri); - } -} \ No newline at end of file +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientExpectTest.java new file mode 100644 index 0000000000..5bba119b06 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientExpectTest.java @@ -0,0 +1,52 @@ +/* + * 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.testng.Assert.*; + +import java.net.URI; + +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.Error; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorRestClientExpectTest; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMultimap; + +/** + * Test the {@link TaskClient} by observing its side effects. + * + * @author grkvlt@apache.org + */ +@Test(groups = "unit", singleThreaded = true, testName = "QueryClientExpectTest") +public class QueryClientExpectTest extends BaseVCloudDirectorRestClientExpectTest { + + @Test + public void testQueryCatalogNoParam() { + assertTrue(true); + } +} + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientLiveTest.java new file mode 100644 index 0000000000..f90f927e2a --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryClientLiveTest.java @@ -0,0 +1,67 @@ +/* + * 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.VCloudDirectorLiveTestConstants.*; +import static org.jclouds.vcloud.director.v1_5.domain.Checks.*; +import static org.testng.Assert.*; + +import java.net.URI; + +import org.jclouds.vcloud.director.v1_5.domain.Metadata; +import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; +import org.jclouds.vcloud.director.v1_5.domain.OrgList; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; +import org.testng.annotations.Test; + +import com.google.common.collect.Iterables; + +/** +* Tests live behavior of {@link QueryClient}. +* +* @author grkvlt@apache.org +*/ +@Test(groups = { "live", "apitests" }, testName = "QueryClientLiveTest") +public class QueryClientLiveTest extends BaseVCloudDirectorClientLiveTest { + + /* + * Convenience references to API clients. + */ + + private final CatalogClient catalogClient = context.getApi().getCatalogClient(); + private final QueryClient queryClient = context.getApi().getQueryClient(); + + /* + * Shared state between dependant tests. + */ + + private OrgList orgList; + private Reference orgRef; + private TasksList taskList; + private Task task; + private URI taskUri; + + @Test(testName = "GET /catalogs/query/") + public void testQueryCatalogNoParam() { + assertTrue(true); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java index 5bd2cb9c4b..249f9707ad 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java @@ -62,3 +62,4 @@ public class BaseVCloudDirectorClientLiveTest extends BaseVersionedServiceLiveTe } } + diff --git a/labs/vcloud-director/src/test/resources/query/allCatalogs.xml b/labs/vcloud-director/src/test/resources/query/allCatalogs.xml new file mode 100644 index 0000000000..da801692f3 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/query/allCatalogs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file