diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseNamedResource.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseNamedResource.java deleted file mode 100644 index 8d7ddd7ef0..0000000000 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseNamedResource.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.jclouds.vcloud.director.v1_5.domain; - -import static com.google.common.base.Objects.equal; - -import java.net.URI; -import java.util.Map; - -import javax.xml.bind.annotation.XmlAttribute; - -import com.google.common.base.Objects; -import com.google.common.base.Objects.ToStringHelper; - -/** - * Location of a Rest resource. - * - *
- * <xs:complexType name="ReferenceType"> - *- * - * @author Adrian Cole - */ -public class BaseNamedResource
+ * <xs:complexType name="EntityType"> + *+ * + * @author Adrian Cole + */ +public class Entity
* <xs:complexType name="OrgType"> @@ -44,7 +48,7 @@ import com.google.common.collect.Sets; * @author Adrian Cole */ @XmlRootElement(namespace = NS, name = "Org") -public class Org extends BaseNamedResource{ +public class Org extends Entity { @SuppressWarnings("unchecked") public static Builder builder() { @@ -56,28 +60,9 @@ public class Org extends BaseNamedResource { return new Builder().fromOrg(this); } - public static class Builder extends BaseNamedResource.Builder { + public static class Builder extends Entity.Builder { - private String id; - private String description; private String fullName; - private Set links = Sets.newLinkedHashSet(); - - /** - * @see Org#getId() - */ - public Builder id(String id) { - this.id = id; - return this; - } - - /** - * @see Org#getDescription() - */ - public Builder description(String description) { - this.description = description; - return this; - } /** * @see Org#getFullName() @@ -87,84 +72,38 @@ public class Org extends BaseNamedResource { return this; } - /** - * @see Org#getLinks() - */ - public Builder links(Set links) { - this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); - return this; - } - - /** - * @see Org#getLinks() - */ - public Builder addLink(Link org) { - links.add(checkNotNull(org, "org")); - return this; + @Override + public Org build() { + Org org = new Org(href, name, fullName); + org.setDescription(description); + org.setId(id); + org.setType(type); + org.setLinks(links); + org.setTasks(tasks); + return org; } @Override - public Org build() { - return new Org(href, type, name, id, description, fullName, links); + public Builder fromEntity(Entity in) { + return Builder.class.cast(super.fromEntity(in)); } public Builder fromOrg(Org in) { - return id(in.getId()).description(in.getDescription()).fullName(in.getFullName()).links(in.getLinks()); + return fromEntity(in).fullName(in.getFullName()); } - - @Override - public Builder name(String name) { - return Builder.class.cast(super.name(name)); - } - - @Override - public Builder href(URI href) { - return Builder.class.cast(super.href(href)); - } - - @Override - public Builder type(String type) { - return Builder.class.cast(super.type(type)); - } - } private Org() { // For JAXB and builder use } - private Org(URI href, String type, String name, String id, String description, String fullName, Set links) { - super(href, type, name); - this.id = id; - this.description = description; + private Org(URI href, String name, String fullName) { + super(href, name); this.fullName = fullName; - this.links = ImmutableSet.copyOf(links); } - @XmlAttribute - private String id; - @XmlElement(namespace = NS, name = "Description") - private String description; @XmlElement(namespace = NS, name = "FullName") private String fullName; - @XmlElement(namespace = NS, name = "Link") - private Set links = Sets.newLinkedHashSet(); - - /** - * - * @return id of the org - */ - public String getId() { - return id; - } - - /** - * - * @return description of the org - */ - public String getDescription() { - return description; - } /** * @@ -174,29 +113,21 @@ public class Org extends BaseNamedResource { return fullName; } - /** - * TODO - */ - public Set getLinks() { - return ImmutableSet.copyOf(links); - } - @Override public boolean equals(Object o) { if (!super.equals(o)) return false; Org that = Org.class.cast(o); - return equal(id, that.id) && equal(description, that.description) && equal(fullName, that.fullName) - && equal(links, that.links); + return super.equals(that) && equal(fullName, that.fullName); } @Override public int hashCode() { - return super.hashCode() + Objects.hashCode(id, description, fullName, links); + return super.hashCode() + Objects.hashCode(fullName); } @Override public ToStringHelper string() { - return super.string().add("id", id).add("description", description).add("fullName", fullName).add("links", links); + return super.string().add("fullName", fullName); } } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgLink.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgLink.java deleted file mode 100644 index 8fcb156891..0000000000 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgLink.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.jclouds.vcloud.director.v1_5.domain; - -import java.net.URI; - -/** - * A link to an organization. - * - * @author Adrian Cole - */ -public class OrgLink extends BaseNamedResource { - - @SuppressWarnings("unchecked") - public static Builder builder() { - return new Builder(); - } - - /** - * {@inheritDoc} - */ - @Override - public Builder toBuilder() { - return Builder.class.cast(new Builder().fromNamedResource(this)); - } - - public static class Builder extends BaseNamedResource.Builder { - - @Override - public OrgLink build() { - return new OrgLink(href, type, name); - } - - @Override - public Builder name(String name) { - return Builder.class.cast(super.name(name)); - } - - @Override - public Builder href(URI href) { - return Builder.class.cast(super.href(href)); - } - - @Override - public Builder type(String type) { - return Builder.class.cast(super.type(type)); - } - - } - - private OrgLink(URI href, String type, String name) { - super(href, type, name); - } - - private OrgLink() { - // for JAXB - } -} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java new file mode 100644 index 0000000000..49aac7ad0b --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java @@ -0,0 +1,219 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5.domain; + +import static com.google.common.base.Objects.equal; + +import java.net.URI; +import java.util.Map; + +import javax.xml.bind.annotation.XmlAttribute; + +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; + +/** + * A reference to a resource. + * + * Contains an href attribute and optional name and type attributes. + * + * + * <xs:complexType name="ReferenceType"> + *+ * + * @author Adrian Cole + */ +public class Reference> { + + public static > Builder builder() { + return new Builder (); + } + + public Builder toBuilder() { + return new Builder ().fromReference(this); + } + + public static class Builder > { + + protected URI href; + protected String id; + protected String name; + protected String type; + + /** + * @see Reference#getHref() + */ + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see Reference#getId() + */ + public Builder id(String id) { + this.id = id; + return this; + } + + /** + * @see Reference#getType() + */ + public Builder type(String type) { + this.type = type; + return this; + } + + /** + * @see Reference#getName() + */ + public Builder name(String name) { + this.name = name; + return this; + } + + public Reference build() { + Reference reference = new Reference (href); + reference.setId(id); + reference.setName(name); + reference.setType(type); + return reference; + } + + protected Builder fromReference(Reference in) { + return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType()); + } + + protected Builder fromAttributes(Map attributes) { + return href(URI.create(attributes.get("href"))).id(attributes.get("id")).name(attributes.get("name")).type(attributes.get("type")); + } + + } + + @XmlAttribute + protected URI href; + @XmlAttribute + protected String id; + @XmlAttribute + protected String name; + @XmlAttribute + protected String type; + + protected Reference(URI href) { + this.href = href; + } + + protected Reference() { + // For JAXB + } + + /** + * 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; + } + + /** + * 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 name 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 getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + /** + * 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; + } + + /** + * @see #getHref() + */ + public URI getURI() { + return getHref(); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Reference> that = Reference.class.cast(o); + return equal(this.href, that.href) && equal(this.id, that.id) && equal(this.name, that.name) && equal(this.type, that.type); + } + + @Override + public int hashCode() { + return Objects.hashCode(href, id, name, type); + } + + @Override + public String toString() { + return string().toString(); + } + + protected ToStringHelper string() { + return Objects.toStringHelper("").add("href", href).add("id", id).add("name", name).add("type", type); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseResource.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Resource.java similarity index 56% rename from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseResource.java rename to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Resource.java index dee43207b9..2d5fb93515 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/BaseResource.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Resource.java @@ -19,37 +19,59 @@ package org.jclouds.vcloud.director.v1_5.domain; import static com.google.common.base.Objects.equal; +import static com.google.common.base.Preconditions.*; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.*; import java.net.URI; import java.util.Map; +import java.util.Set; import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; + +import org.jclouds.vcloud.director.v1_5.domain.Task.Builder; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.Sets; /** - * Location of a Rest resource + * The base type for all objects in the vCloud model. + * + * Has an optional list of links and href and type attributes. + * + * + * <xs:complexType name="ResourceType"> + ** * @author Adrian Cole */ -public class BaseResource> { +public class Resource > { - public static > Builder builder() { + public static > Builder builder() { return new Builder (); } public Builder toBuilder() { - return new Builder ().fromBaseResource(this); + return new Builder ().fromResource(this); } - public static class Builder > { + public static class Builder > { - protected String type; protected URI href; + protected String type; + protected Set links = Sets.newLinkedHashSet(); /** - * @see BaseResource#getType + * @see Reference#getHref() + */ + public Builder href(URI href) { + this.href = href; + return this; + } + + /** + * @see Reference#getType() */ public Builder type(String type) { this.type = type; @@ -57,53 +79,51 @@ public class BaseResource > { } /** - * @see BaseResource#getHref + * @see Reference#getLinks() */ - public Builder href(URI href) { - this.href = href; + public Builder links(Set links) { + this.links = Sets.newLinkedHashSet(checkNotNull(links, "links")); return this; } - public BaseResource build() { - return new BaseResource (href, type); + /** + * @see Reference#getLinks() + */ + public Builder link(Link link) { + this.links.add(checkNotNull(link, "link")); + return this; } - protected Builder fromBaseResource(BaseResource in) { - return type(in.getType()).href(in.getHref()); + public Resource build() { + Resource reference = new Resource (href); + reference.setType(type); + reference.setLinks(links); + return reference; } - protected Builder fromAttributes(Map attributes) { - return href(URI.create(attributes.get("href"))).type(attributes.get("type")); + protected Builder fromResource(Resource in) { + return href(in.getHref()).type(in.getType()).links(in.getLinks()); } - } - @XmlAttribute - protected String type; - @XmlAttribute protected URI href; + @XmlAttribute + protected String type; + @XmlElement(namespace = NS, name = "Link") + protected Set links = Sets.newLinkedHashSet(); - protected BaseResource(URI href, String type) { - this.type = type; + protected Resource(URI href) { this.href = href; } - protected BaseResource() { + protected Resource() { // For JAXB } /** - * 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; - } - - /** + * 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 @@ -119,7 +139,38 @@ public class BaseResource > { } /** - * @see #getHref + * 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; + } + + /** + * Set of optional links to an entity or operation associated with this object. + */ + public SetgetLinks() { + 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")); + } + + /** + * @see #getHref() */ public URI getURI() { return getHref(); @@ -131,13 +182,13 @@ public class BaseResource > { return true; if (o == null || getClass() != o.getClass()) return false; - BaseResource> that = BaseResource.class.cast(o); - return equal(href, that.href) && equal(type, that.type); + Resource> that = Resource.class.cast(o); + return equal(this.href, that.href) && equal(this.links, that.links) && equal(this.type, that.type); } @Override public int hashCode() { - return Objects.hashCode(type, href); + return Objects.hashCode(href, links, type); } @Override @@ -146,6 +197,6 @@ public class BaseResource > { } protected ToStringHelper string() { - return Objects.toStringHelper("").add("href", href).add("type", type); + return Objects.toStringHelper("").add("href", href).add("links", links).add("type", type); } } \ No newline at end of file