blob: c917a467b8438e3d7f6430ea6821b792357611e5 [file] [log] [blame]
package brooklyn.util.collections;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import com.google.common.collect.Sets;
public class MutableSet<V> extends LinkedHashSet<V> {
private static final long serialVersionUID = 2330133488446834595L;
public static <V> MutableSet<V> of() {
return new MutableSet<V>();
}
public static <V> MutableSet<V> of(V v1) {
MutableSet<V> result = new MutableSet<V>();
result.add(v1);
return result;
}
public static <V> MutableSet<V> of(V v1, V v2) {
MutableSet<V> result = new MutableSet<V>();
result.add(v1);
result.add(v2);
return result;
}
public static <V> MutableSet<V> of(V v1, V v2, V v3) {
MutableSet<V> result = new MutableSet<V>();
result.add(v1);
result.add(v2);
result.add(v3);
return result;
}
public static <V> MutableSet<V> of(V v1, V v2, V v3, V v4) {
MutableSet<V> result = new MutableSet<V>();
result.add(v1);
result.add(v2);
result.add(v3);
result.add(v4);
return result;
}
public static <V> MutableSet<V> copyOf(Iterable<? extends V> orig) {
return new MutableSet<V>(orig);
}
public MutableSet() {
}
public MutableSet(Iterable<? extends V> source) {
super((source instanceof Collection) ? (Collection<? extends V>)source : Sets.newLinkedHashSet(source));
}
public Set<V> toImmutable() {
// Don't use ImmutableSet as that does not accept nulls
return Collections.unmodifiableSet(Sets.newLinkedHashSet(this));
}
public static <V> Builder<V> builder() {
return new Builder<V>();
}
/**
* @see guava's ImmutableSet.Builder
*/
public static class Builder<V> {
final MutableSet<V> result = new MutableSet<V>();
public Builder() {}
public Builder<V> add(V value) {
result.add(value);
return this;
}
public Builder<V> remove(V val) {
result.remove(val);
return this;
}
public Builder<V> addAll(Iterable<? extends V> iterable) {
if (iterable instanceof Collection) {
result.addAll((Collection<? extends V>) iterable);
} else {
for (V v : iterable) {
result.add(v);
}
}
return this;
}
public Builder<V> addAll(V... values) {
for (V v : values) {
result.add(v);
}
return this;
}
public Builder<V> removeAll(Iterable<? extends V> iterable) {
if (iterable instanceof Collection) {
result.removeAll((Collection<? extends V>) iterable);
} else {
for (V v : iterable) {
result.remove(v);
}
}
return this;
}
public Builder<V> removeAll(V... values) {
for (V v : values) {
result.remove(v);
}
return this;
}
public MutableSet<V> build() {
return new MutableSet<V>(result);
}
}
}