org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates.java Source code

Java tutorial

Introduction

Here is the source code for org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates.java

Source

/*
 * 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() + ")";
            }
        };
    }
}