MorphicSetFactory.java
package edu.udel.cis.vsl.tass.morph;
import java.util.LinkedHashSet;
public class MorphicSetFactory<T extends Morphic> extends
MorphicFactory<MorphicSet<T>> {
private MorphicFactoryIF<? super T> elementFactory;
public MorphicSetFactory(MorphicFactoryIF<? super T> elementFactory) {
this.elementFactory = elementFactory;
}
public MorphicFactoryIF<? super T> elementFactory() {
return elementFactory;
}
public MorphicSet<T> newSet() {
return new MorphicSet<T>();
}
public MorphicSet<T> newSet(LinkedHashSet<T> elements) {
return new MorphicSet<T>(elements);
}
public MorphicSet<T> newSet(MorphicSet<T> oldSet) {
return new MorphicSet<T>(oldSet);
}
@Override
protected void canonicalizeChildren(MorphicSet<T> set) {
set.canonicalizeChildren(elementFactory);
}
public MorphicSet<T> add(MorphicSet<T> set, T element) {
if (!set.isCommitted()) {
set.add(element);
return set;
} else if (!set.contains(element)) {
LinkedHashSet<T> newElements = new LinkedHashSet<T>(set.elements());
newElements.add(element);
return newSet(newElements);
} else {
return set;
}
}
}