package org.codemap.kdtree;
public interface Editor<T> {
public T edit(T current) throws KeyDuplicateException;
public static abstract class BaseEditor<T> implements Editor<T> {
final T val;
public BaseEditor(T val) {
this.val = val;
}
public abstract T edit(T current) throws KeyDuplicateException;
}
public static class Inserter<T> extends BaseEditor<T> {
public Inserter(T val) {
super(val);
}
public T edit(T current) throws KeyDuplicateException {
if (current == null) {
return this.val;
}
throw new KeyDuplicateException(this.val.toString());
}
}
public static class OptionalInserter<T> extends BaseEditor<T> {
public OptionalInserter(T val) {
super(val);
}
public T edit(T current) {
return (current == null) ? this.val : current;
}
}
public static class Replacer<T> extends BaseEditor<T> {
public Replacer(T val) {
super(val);
}
public T edit(T current) {
return this.val;
}
}
}