diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java index 548f2890fb..8f5dac90f7 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java @@ -5,20 +5,20 @@ import java.net.URI; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "CatalogReference") -public class CatalogReference extends ReferenceType { +public class CatalogReference extends Reference { public static Builder builder() { return new ConcreteBuilder(); } public Builder toBuilder() { - return builder().fromReferenceType(this); + return builder().fromCatalogReference(this); } private static class ConcreteBuilder extends Builder { } - public static class Builder> extends ReferenceType.Builder { + public static class Builder> extends Reference.Builder { @Override public CatalogReference build() { @@ -26,7 +26,7 @@ public class CatalogReference extends ReferenceType { } protected B fromCatalogReference(CatalogReference in) { - return fromReferenceType(in); + return fromReference(in); } } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GroupsList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GroupsList.java index 7d2bb4ee40..6c644b4a18 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GroupsList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/GroupsList.java @@ -130,7 +130,7 @@ public class GroupsList { * *

* Objects of the following type(s) are allowed in the list - * {@link ReferenceType } + * {@link Reference } * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiateVAppParamsType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiateVAppParamsType.java index c51edc9b45..6f77e8203e 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiateVAppParamsType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/InstantiateVAppParamsType.java @@ -52,14 +52,14 @@ public class InstantiateVAppParamsType extends VAppCreationParamsType { public static abstract class Builder> extends VAppCreationParamsType.Builder { - private ReferenceType source; + private Reference source; private Boolean sourceDelete; private Boolean linkedClone; /** * @see InstantiateVAppParamsType#getSource() */ - public B source(ReferenceType source) { + public B source(Reference source) { this.source = source; return self(); } @@ -137,7 +137,7 @@ public class InstantiateVAppParamsType extends VAppCreationParamsType { } @XmlElement(name = "Source", required = true) - private ReferenceType source; + private Reference source; @XmlElement(name = "IsSourceDelete") private Boolean sourceDelete; @XmlAttribute @@ -146,7 +146,7 @@ public class InstantiateVAppParamsType extends VAppCreationParamsType { /** * Gets the value of the source property. */ - public ReferenceType getSource() { + public Reference getSource() { return source; } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java index 76c4aa464d..ab41ad3f18 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java @@ -41,7 +41,7 @@ import com.google.common.base.Objects.ToStringHelper; * @author Adrian Cole */ @XmlRootElement(name = "Link") -public class Link extends ReferenceType { +public class Link extends Reference { public static final class Rel { public static final String ADD = "add"; @@ -132,7 +132,7 @@ public class Link extends ReferenceType { private static class ConcreteBuilder extends Builder { } - public static class Builder> extends ReferenceType.Builder { + public static class Builder> extends Reference.Builder { private String rel; @@ -150,7 +150,7 @@ public class Link extends ReferenceType { } public B fromLink(Link in) { - return fromReferenceType(in).rel(in.getRel()); + return fromReference(in).rel(in.getRel()); } /** diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Networks.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Networks.java index 684abd080f..6509e9f213 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Networks.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Networks.java @@ -133,7 +133,7 @@ public class Networks { * *

* Objects of the following type(s) are allowed in the list - * {@link ReferenceType } + * {@link Reference } * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgNetwork.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgNetwork.java index f538f33b4d..85ed49658a 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgNetwork.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/OrgNetwork.java @@ -42,13 +42,13 @@ public class OrgNetwork extends NetworkType { public static abstract class Builder> extends NetworkType.Builder { - private ReferenceType networkPool; + private Reference networkPool; private IpAddresses allowedExternalIpAddresses; /** * @see OrgNetwork#getNetworkPool() */ - public B networkPool(ReferenceType networkPool) { + public B networkPool(Reference networkPool) { this.networkPool = networkPool; return self(); } @@ -84,14 +84,14 @@ public class OrgNetwork extends NetworkType { } @XmlElement(name = "NetworkPool") - private ReferenceType networkPool; + private Reference networkPool; @XmlElement(name = "AllowedExternalIpAddresses") private IpAddresses allowedExternalIpAddresses; /** * @return optional network pool */ - public ReferenceType getNetworkPool() { + public Reference getNetworkPool() { return networkPool; } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Owner.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Owner.java index e3856fbcae..ac5fb1c9bc 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Owner.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Owner.java @@ -53,12 +53,12 @@ public class Owner extends ResourceType { public static abstract class Builder> extends ResourceType.Builder { - private ReferenceType user; + private Reference user; /** * @see Owner#getUser() */ - public B user(ReferenceType user) { + public B user(Reference user) { this.user = user; return self(); } @@ -84,12 +84,12 @@ public class Owner extends ResourceType { } @XmlElement(name = "User", required = true) - private ReferenceType user; + private Reference user; /** * Gets the value of the user property. */ - public ReferenceType getUser() { + public Reference getUser() { return user; } 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 index 29da080931..4b0a3e42b6 100644 --- 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 @@ -18,14 +18,36 @@ */ 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.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; + +import org.jclouds.logging.Logger; + +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 grkvlt@apache.org */ -public class Reference extends ReferenceType { +@XmlAccessorType(XmlAccessType.FIELD) +public class Reference { + + @javax.annotation.Resource + protected static Logger logger = Logger.NULL; public static Builder builder() { return new ConcreteBuilder(); @@ -38,34 +60,145 @@ public class Reference extends ReferenceType { private static class ConcreteBuilder extends Builder { } - public static class Builder> extends ReferenceType.Builder { + public static class Builder> { + + private URI href; + private String id; + private String name; + private String type; + + @SuppressWarnings("unchecked") + protected B self() { + return (B) this; + } + + /** + * @see Reference#getHref() + */ + public B href(URI href) { + this.href = href; + return self(); + } + + /** + * @see Reference#getId() + */ + public B id(String id) { + this.id = id; + return self(); + } + + /** + * @see Reference#getType() + */ + public B type(String type) { + this.type = type; + return self(); + } + + /** + * @see Reference#getName() + */ + public B name(String name) { + this.name = name; + return self(); + } - @Override public Reference build() { return new Reference(this); } - public B fromReference(Reference in) { - return fromReferenceType(in); + protected B fromReference(Reference in) { + return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType()); } - + public B fromEntity(EntityType in) { return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType()); } + + protected B fromAttributes(Map attributes) { + return href(URI.create(attributes.get("href"))).id(attributes.get("id")).name(attributes.get("name")).type(attributes.get("type")); + } } + @XmlAttribute(required = true) + private URI href; + @XmlAttribute + private String id; + @XmlAttribute + private String name; + @XmlAttribute + private String type; + protected Reference(Builder builder) { - super(builder); + this.href = builder.href; + this.id = builder.id; + this.name = builder.name; + this.type = builder.type; } - public Reference(URI href, String id, String name, String type) { - super(href, id, name, type); + protected Reference(URI href, String id, String name, String type) { + this.href = href; + this.id = id; + this.name = name; + this.type = type; } 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; + } + + /** + * 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; + } + + /** + * 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; + } + @Override public boolean equals(Object o) { if (this == o) @@ -73,13 +206,27 @@ public class Reference extends ReferenceType { if (o == null || getClass() != o.getClass()) return false; Reference that = Reference.class.cast(o); - return super.equals(that); + return equal(this.href, that.href) && equal(this.id, that.id) && equal(this.name, that.name) && equal(this.type, that.type); } - public ReferenceType toAdminReference(String endpoint) { + @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); + } + + public Reference toAdminReference(String endpoint) { return toBuilder() .type(null) .href(URI.create(getHref().toASCIIString().replace(endpoint, endpoint+"/admin"))) .build(); } -} +} \ No newline at end of file diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java deleted file mode 100644 index fb2698d617..0000000000 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java +++ /dev/null @@ -1,221 +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.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; - -import org.jclouds.logging.Logger; - -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 grkvlt@apache.org - */ -@XmlAccessorType(XmlAccessType.FIELD) -public class ReferenceType { - - @javax.annotation.Resource - protected static Logger logger = Logger.NULL; - - public static Builder builder() { - return new ConcreteBuilder(); - } - - public Builder toBuilder() { - return builder().fromReferenceType(this); - } - - private static class ConcreteBuilder extends Builder { - } - - public static class Builder> { - - private URI href; - private String id; - private String name; - private String type; - - @SuppressWarnings("unchecked") - protected B self() { - return (B) this; - } - - /** - * @see ReferenceType#getHref() - */ - public B href(URI href) { - this.href = href; - return self(); - } - - /** - * @see ReferenceType#getId() - */ - public B id(String id) { - this.id = id; - return self(); - } - - /** - * @see ReferenceType#getType() - */ - public B type(String type) { - this.type = type; - return self(); - } - - /** - * @see ReferenceType#getName() - */ - public B name(String name) { - this.name = name; - return self(); - } - - public ReferenceType build() { - return new ReferenceType(this); - } - - protected B fromReferenceType(ReferenceType in) { - return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType()); - } - - protected B fromAttributes(Map attributes) { - return href(URI.create(attributes.get("href"))).id(attributes.get("id")).name(attributes.get("name")).type(attributes.get("type")); - } - } - - @XmlAttribute(required = true) - private URI href; - @XmlAttribute - private String id; - @XmlAttribute - private String name; - @XmlAttribute - private String type; - - protected ReferenceType(Builder builder) { - this.href = builder.href; - this.id = builder.id; - this.name = builder.name; - this.type = builder.type; - } - - protected ReferenceType(URI href, String id, String name, String type) { - this.href = href; - this.id = id; - this.name = name; - this.type = type; - } - - protected ReferenceType() { - // 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; - } - - /** - * 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; - } - - /** - * 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; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - ReferenceType that = ReferenceType.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/RelocateParams.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RelocateParams.java index 88bf8ba51c..26f7d24fef 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RelocateParams.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RelocateParams.java @@ -86,9 +86,9 @@ public class RelocateParams { * Gets the value of the datastore property. * * @return possible object is - * {@link ReferenceType } + * {@link Reference } */ - public ReferenceType getDatastore() { + public Reference getDatastore() { return datastore; } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/UsersList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/UsersList.java index 57fc4de64a..26250eff5d 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/UsersList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/UsersList.java @@ -131,7 +131,7 @@ public class UsersList { * *

* Objects of the following type(s) are allowed in the list - * {@link ReferenceType } + * {@link Reference } * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdcs.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdcs.java index 7fa5de9f79..a585073299 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdcs.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Vdcs.java @@ -134,7 +134,7 @@ public class Vdcs { * *

* Objects of the following type(s) are allowed in the list - * {@link ReferenceType } + * {@link Reference } * * */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultReferences.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultReferences.java index 535b639fcf..863a591f8e 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultReferences.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultReferences.java @@ -27,7 +27,7 @@ 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.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Reference; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; @@ -60,12 +60,12 @@ public class QueryResultReferences extends ContainerType { public static class Builder> extends ContainerType.Builder { - private Set references = Sets.newLinkedHashSet(); + private Set references = Sets.newLinkedHashSet(); /** * @see QueryResultReferences#getReferences() */ - public B references(Set references) { + public B references(Set references) { this.references = Sets.newLinkedHashSet(checkNotNull(references, "references")); return self(); } @@ -73,7 +73,7 @@ public class QueryResultReferences extends ContainerType { /** * @see QueryResultReferences#getReferences() */ - public B reference(ReferenceType reference) { + public B reference(Reference reference) { this.references.add(reference); return self(); } @@ -99,12 +99,12 @@ public class QueryResultReferences extends ContainerType { // NOTE add other types as they are used. probably not the best way to do this. @XmlElementRef - private Set references = Sets.newLinkedHashSet(); + private Set references = Sets.newLinkedHashSet(); /** * Set of references representing query results. */ - public Set getReferences() { + public Set getReferences() { return references; } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicates.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicates.java new file mode 100644 index 0000000000..6b4925e7aa --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicates.java @@ -0,0 +1,87 @@ +/* + * 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.predicates; + +import static com.google.common.base.Preconditions.checkNotNull; + +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.Reference; + +import com.google.common.base.Predicate; + +/** + * Predicates handy when working with Reference Types + * + * @author Adrian Cole + */ + +public class ReferencePredicates { + + /** + * matches references of the given name + * + * @param + * type of the Reference, ex. {@link Link} + * @param name + * ex. {@code context.getApi().getCurrentSession().getOrg()} + * @return predicate that will match references of the given name + */ + public static Predicate nameEquals(final String name) { + checkNotNull(name, "name must be defined"); + + return new Predicate() { + @Override + public boolean apply(T reference) { + return name.equals(reference.getName()); + } + + @Override + public String toString() { + return "nameEquals(" + name + ")"; + } + }; + } + + /** + * matches references of the given type + * + * @param + * type of the Reference, ex. {@link Link} + * @param type + * ex. {@link VCloudDirectorMediaType#CATALOG} + * @return predicate that will match references of the given type + * @see VCloudDirectorMediaType + */ + public static Predicate typeEquals(final String type) { + checkNotNull(type, "type must be defined"); + + return new Predicate() { + @Override + public boolean apply(T reference) { + return type.equals(reference.getType()); + } + + @Override + public String toString() { + return "typeEquals(" + type + ")"; + } + }; + } +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferenceTypePredicates.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferenceTypePredicates.java index 2f29ded0f7..dc6b40bffe 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferenceTypePredicates.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/ReferenceTypePredicates.java @@ -22,7 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull; 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.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Reference; import com.google.common.base.Predicate; @@ -43,7 +43,7 @@ public class ReferenceTypePredicates { * ex. {@code context.getApi().getCurrentSession().getOrg()} * @return predicate that will match references of the given name */ - public static Predicate nameEquals(final String name) { + public static Predicate nameEquals(final String name) { checkNotNull(name, "name must be defined"); return new Predicate() { @@ -69,7 +69,7 @@ public class ReferenceTypePredicates { * @return predicate that will match references of the given type * @see VCloudDirectorMediaType */ - public static Predicate typeEquals(final String type) { + public static Predicate typeEquals(final String type) { checkNotNull(type, "type must be defined"); return new Predicate() { diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java index 946a212bc3..0503220834 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java @@ -100,11 +100,11 @@ public class Checks { * * @see checkReferenceType(ReferenceType, Collection) */ - public static void checkReferenceType(ReferenceType reference) { + public static void checkReferenceType(Reference reference) { checkReferenceType(reference, VCloudDirectorMediaType.ALL); } - public static void checkReferenceType(ReferenceType reference, Collection validTypes) { + public static void checkReferenceType(Reference reference, Collection validTypes) { // Check required fields assertNotNull(reference.getHref(), String.format(NOT_NULL_OBJECT_FMT, "Href", "ReferenceType")); @@ -183,13 +183,13 @@ public class Checks { // NOTE startTime cannot be checked // NOTE endTime cannot be checked // NOTE expiryTimecannot be checked - ReferenceType owner = task.getOwner(); + Reference owner = task.getOwner(); if (owner != null) checkReferenceType(owner); Error error = task.getError(); if (error != null) checkError(error); - ReferenceType user = task.getUser(); + Reference user = task.getUser(); if (user != null) checkReferenceType(user); - ReferenceType org = task.getOrg(); + Reference org = task.getOrg(); if (org != null) checkReferenceType(org); Integer progress = task.getProgress(); if (progress != null) checkProgress(progress); diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java index 4bcaaed7f5..7675c1447b 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java @@ -30,7 +30,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Link; import org.jclouds.vcloud.director.v1_5.domain.Owner; import org.jclouds.vcloud.director.v1_5.domain.PublishCatalogParams; import org.jclouds.vcloud.director.v1_5.domain.Reference; -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.internal.BaseVCloudDirectorRestClientExpectTest; import org.testng.annotations.Test; @@ -88,8 +87,6 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx AdminCatalog expected = catalog(); -// assertEquals(client.getAdminCatalogClient().getCatalog(catalogRef.getHref()), expected); - AdminCatalog actual = client.getAdminCatalogClient().getCatalog(catalogRef.getHref()); assertEquals(actual.getHref(), expected.getHref()); assertEquals(actual.getLinks(), expected.getLinks()); @@ -98,10 +95,13 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx System.out.println(actual.getOwner()); System.out.println(expected.getOwner()); - assertEquals(actual.getOwner().getUser(), expected.getOwner().getUser()); + Reference actualUser = actual.getOwner().getUser(); + Reference expectedUser = expected.getOwner().getUser(); + assertEquals(actualUser, expectedUser); assertEquals(actual.getOwner(), expected.getOwner()); - + + assertEquals(client.getAdminCatalogClient().getCatalog(catalogRef.getHref()), expected); } @Test(enabled = false)//TODO diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java index 204e376807..08983a9266 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java @@ -36,7 +36,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Error; import org.jclouds.vcloud.director.v1_5.domain.Owner; import org.jclouds.vcloud.director.v1_5.domain.PublishCatalogParams; import org.jclouds.vcloud.director.v1_5.domain.Reference; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -62,7 +61,7 @@ public class AdminCatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest /* * Shared state between dependant tests. */ - private ReferenceType orgRef; + private Reference orgRef; private AdminCatalog catalog; private Owner owner; diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminOrgClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminOrgClientLiveTest.java index f2bc034fe1..7c974da702 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminOrgClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminOrgClientLiveTest.java @@ -33,7 +33,7 @@ import org.jclouds.vcloud.director.v1_5.domain.OrgLeaseSettings; import org.jclouds.vcloud.director.v1_5.domain.OrgPasswordPolicySettings; import org.jclouds.vcloud.director.v1_5.domain.OrgSettings; import org.jclouds.vcloud.director.v1_5.domain.OrgVAppTemplateLeaseSettings; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Reference; import org.jclouds.vcloud.director.v1_5.domain.SmtpServerSettings; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; import org.testng.annotations.BeforeClass; @@ -60,7 +60,7 @@ public class AdminOrgClientLiveTest extends BaseVCloudDirectorClientLiveTest { /* * Shared state between dependant tests. */ - private ReferenceType orgRef; + private Reference orgRef; private OrgSettings settings, newSettings; private OrgEmailSettings emailSettings, newEmailSettings; private OrgGeneralSettings generalSettings, newGeneralSettings; 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 5654d9931a..0fecf152fa 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 @@ -42,7 +42,6 @@ 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.MetadataValue; import org.jclouds.vcloud.director.v1_5.domain.Reference; -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.query.CatalogReferences; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; @@ -71,9 +70,9 @@ public class CatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest { * Shared state between dependant tests. */ - private ReferenceType catalogRef; - private ReferenceType catalogItemRef; - private ReferenceType newCatalogItemRef; + private Reference catalogRef; + private Reference catalogItemRef; + private Reference newCatalogItemRef; private CatalogType catalog; private CatalogItem catalogItem; private CatalogItem newCatalogItem; diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/GroupClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/GroupClientLiveTest.java index 965d564c36..511d074dd7 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/GroupClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/GroupClientLiveTest.java @@ -35,7 +35,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Checks; import org.jclouds.vcloud.director.v1_5.domain.Error; import org.jclouds.vcloud.director.v1_5.domain.Group; import org.jclouds.vcloud.director.v1_5.domain.Reference; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -59,7 +58,7 @@ public class GroupClientLiveTest extends BaseVCloudDirectorClientLiveTest { /* * Shared state between dependant tests. */ - private ReferenceType groupRef; + private Reference groupRef; private Group group; @Override diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientLiveTest.java index 925f1110d2..ec74b7807b 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientLiveTest.java @@ -35,7 +35,7 @@ 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.MetadataValue; import org.jclouds.vcloud.director.v1_5.domain.OrgNetwork; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Reference; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -76,7 +76,7 @@ public class NetworkClientLiveTest extends BaseVCloudDirectorClientLiveTest { Checks.checkNetworkType(network); // optional - ReferenceType networkPoolRef = network.getNetworkPool(); + Reference networkPoolRef = network.getNetworkPool(); if (networkPoolRef != null) { Checks.checkReferenceType(networkPoolRef); } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/UserClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/UserClientLiveTest.java index 01331ff70e..ab16485bb8 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/UserClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/UserClientLiveTest.java @@ -32,7 +32,6 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorException; import org.jclouds.vcloud.director.v1_5.domain.Checks; 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.ReferenceType; import org.jclouds.vcloud.director.v1_5.domain.User; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; import org.testng.annotations.BeforeClass; @@ -58,7 +57,7 @@ public class UserClientLiveTest extends BaseVCloudDirectorClientLiveTest { /* * Shared state between dependant tests. */ - private ReferenceType orgRef; + private Reference orgRef; private User user; @Override diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppClientLiveTest.java index 491602cab3..5779c285da 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppClientLiveTest.java @@ -64,7 +64,6 @@ import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList; import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList; import org.jclouds.vcloud.director.v1_5.domain.RecomposeVAppParams; import org.jclouds.vcloud.director.v1_5.domain.Reference; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import org.jclouds.vcloud.director.v1_5.domain.RelocateParams; import org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status; import org.jclouds.vcloud.director.v1_5.domain.RuntimeInfoSection; @@ -805,7 +804,7 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest { .notPowerOn() .description("Test VApp") .instantiationParams(instantiationParams()) - .source(ReferenceType.builder().href(vAppTemplateURI).build()) + .source(Reference.builder().href(vAppTemplateURI).build()) .build(); // debug(instantiate); 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 08a521fae1..dd13abebf5 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 @@ -36,7 +36,6 @@ 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.Org; import org.jclouds.vcloud.director.v1_5.domain.Reference; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import org.jclouds.vcloud.director.v1_5.domain.Session; import org.jclouds.vcloud.director.v1_5.domain.Task; import org.jclouds.vcloud.director.v1_5.predicates.ReferenceTypePredicates; @@ -155,7 +154,7 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ context.close(); } - public URI toAdminUri(ReferenceType ref) { + public URI toAdminUri(Reference ref) { return toAdminUri(ref.getHref()); } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicatesTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicatesTest.java new file mode 100644 index 0000000000..a3cf706772 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/predicates/ReferencePredicatesTest.java @@ -0,0 +1,55 @@ +/** + * 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.predicates; + +import java.net.URI; + +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.testng.annotations.Test; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "ReferencePredicatesTest") +public class ReferencePredicatesTest { + Reference ref = Reference.builder().type("application/vnd.vmware.vcloud.catalogItem+xml").name("image").href( + URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/67a469a1-aafe-4b5b-bb31-a6202ad8961f")).build(); + + @Test + public void testNameEqualsWhenEqual() { + assert ReferencePredicates. nameEquals("image").apply(ref); + } + + @Test + public void testNameEqualsWhenNotEqual() { + assert !ReferencePredicates. nameEquals("foo").apply(ref); + } + + @Test + public void testTypeEqualsWhenEqual() { + assert ReferencePredicates. typeEquals(VCloudDirectorMediaType.CATALOG_ITEM).apply(ref); + } + + @Test + public void testTypeEqualsWhenNotEqual() { + assert !ReferencePredicates. typeEquals("foo").apply(ref); + } +}