Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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 java.net.URI; import org.jclouds.vcloud.director.v1_5.domain.Reference; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; /** * Predicates for working with {@link Reference} collections. * * @author Adrian Cole */ public class ReferencePredicates { /** * Matches {@link Reference}s with the given name. * * @param T type of the reference, for example {@link Link} * @param name value of the name attribute of the referenced object * @return predicate that will match references of the given name */ public static <T extends Reference> Predicate<T> nameEquals(final String name) { checkNotNull(name, "name must be defined"); return new Predicate<T>() { @Override public boolean apply(T reference) { return name.equals(reference.getName()); } @Override public String toString() { return "nameEquals(" + name + ")"; } }; } /** * Matches {@link Reference}s with names starting with the given prefix. * * @param T type of the reference, for example {@link Link} * @param name prefix of the name attribute of the referenced object * @return predicate that will match references with names starting with the given prefix */ public static <T extends Reference> Predicate<T> nameStartsWith(final String prefix) { checkNotNull(prefix, "prefix must be defined"); return new Predicate<T>() { @Override public boolean apply(T reference) { String name = reference.getName(); return name != null && name.startsWith(prefix); } @Override public String toString() { return "nameStartsWith(" + prefix + ")"; } }; } /** * Matches {@link Reference}s with names in the given collection. * * @param T type of the reference, for example {@link Link} * @param names collection of values for the name attribute of the referenced object * @return predicate that will match references with names starting with the given prefix */ public static <T extends Reference> Predicate<T> nameIn(final Iterable<String> names) { checkNotNull(names, "names must be defined"); return new Predicate<T>() { @Override public boolean apply(T reference) { String name = reference.getName(); return Iterables.contains(names, name); } @Override public String toString() { return "nameIn(" + Iterables.toString(names) + ")"; } }; } /** * Matches {@link Reference}s of the given type. * * @param T type of the reference, for example {@link Link} * @param type the media type string of the referenced object, for example {@link VCloudDirectorMediaType#CATALOG} * @return predicate that will match references of the given type * @see VCloudDirectorMediaType */ public static <T extends Reference> Predicate<T> typeEquals(final String type) { checkNotNull(type, "type must be defined"); return new Predicate<T>() { @Override public boolean apply(T reference) { return type.equals(reference.getType()); } @Override public String toString() { return "typeEquals(" + type + ")"; } }; } /** * Matches {@link Reference}s with the given {@link URI}. * * @param T type of the reference, for example {@link Link} * @param href the URI of the reference * @return predicate that will match references with the given URI * @see VCloudDirectorMediaType */ public static <T extends Reference> Predicate<T> hrefEquals(final URI href) { checkNotNull(href, "href must be defined"); return new Predicate<T>() { @Override public boolean apply(T reference) { return href.equals(reference.getHref()); } @Override public String toString() { return "hrefEquals(" + href.toASCIIString() + ")"; } }; } }