com.google.gwt.core.ext.linker.ArtifactSet.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.core.ext.linker.ArtifactSet.java

Source

/*
 * Copyright 2008 Google Inc.
 * 
 * Licensed 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 com.google.gwt.core.ext.linker;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 * Provides stable ordering and de-duplication of artifacts.
 */
public final class ArtifactSet implements SortedSet<Artifact<?>>, Serializable {

    private SortedSet<Artifact<?>> treeSet = new TreeSet<Artifact<?>>();

    public ArtifactSet() {
    }

    public ArtifactSet(Collection<? extends Artifact<?>> copyFrom) {
        addAll(copyFrom);
    }

    public boolean add(Artifact<?> o) {
        return treeSet.add(o);
    }

    public boolean addAll(Collection<? extends Artifact<?>> c) {
        return treeSet.addAll(c);
    }

    public void clear() {
        treeSet.clear();
    }

    public Comparator<? super Artifact<?>> comparator() {
        return treeSet.comparator();
    }

    public boolean contains(Object o) {
        return treeSet.contains(o);
    }

    public boolean containsAll(Collection<?> c) {
        return treeSet.containsAll(c);
    }

    @Override
    public boolean equals(Object o) {
        return treeSet.equals(o);
    }

    /**
     * Find all Artifacts assignable to some base type. The returned value will be
     * a snapshot of the values in the ArtifactSet. An example of how this could
     * be used:
     * 
     * <pre>
     *   for (EmittedArtifact ea : artifactSet.find(EmittedArtifact.class)) {
     *     ...
     *   }
     * </pre>
     * 
     * @param <T> the desired type of Artifact
     * @param artifactType the desired type of Artifact
     * @return all Artifacts in the ArtifactSet assignable to the desired type
     */
    public <T extends Artifact<? super T>> SortedSet<T> find(Class<T> artifactType) {
        // TODO make this sub-linear (but must retain order for styles/scripts!)
        SortedSet<T> toReturn = new TreeSet<T>();
        for (Artifact<?> artifact : this) {
            if (artifactType.isInstance(artifact)) {
                toReturn.add(artifactType.cast(artifact));
            }
        }
        return toReturn;
    }

    public Artifact<?> first() {
        return treeSet.first();
    }

    /**
     * Prevent further modification of the the ArtifactSet. Any attempts to alter
     * the ArtifactSet after invoking this method will result in an
     * UnsupportedOperationException.
     */
    public void freeze() {
        if (treeSet instanceof TreeSet<?>) {
            treeSet = Collections.unmodifiableSortedSet(treeSet);
        }
    }

    @Override
    public int hashCode() {
        return treeSet.hashCode();
    }

    public SortedSet<Artifact<?>> headSet(Artifact<?> toElement) {
        return treeSet.headSet(toElement);
    }

    public boolean isEmpty() {
        return treeSet.isEmpty();
    }

    public Iterator<Artifact<?>> iterator() {
        return treeSet.iterator();
    }

    public Artifact<?> last() {
        return treeSet.last();
    }

    public boolean remove(Object o) {
        return treeSet.remove(o);
    }

    public boolean removeAll(Collection<?> c) {
        return treeSet.removeAll(c);
    }

    /**
     * Possibly replace an existing Artifact.
     * 
     * @param artifact the replacement Artifact
     * @return <code>true</code> if an equivalent Artifact was already present.
     */
    public boolean replace(Artifact<?> artifact) {
        boolean toReturn = treeSet.remove(artifact);
        treeSet.add(artifact);
        return toReturn;
    }

    public boolean retainAll(Collection<?> c) {
        return treeSet.retainAll(c);
    }

    public int size() {
        return treeSet.size();
    }

    public SortedSet<Artifact<?>> subSet(Artifact<?> fromElement, Artifact<?> toElement) {
        return treeSet.subSet(fromElement, toElement);
    }

    public SortedSet<Artifact<?>> tailSet(Artifact<?> fromElement) {
        return treeSet.tailSet(fromElement);
    }

    public Object[] toArray() {
        return treeSet.toArray();
    }

    public <T> T[] toArray(T[] a) {
        return treeSet.toArray(a);
    }

    @Override
    public String toString() {
        return treeSet.toString();
    }
}