package com.sleepycat.persist.evolve;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.sleepycat.persist.EntityStore;
import com.sleepycat.persist.StoreConfig;
public class Mutations implements Serializable {
private static final long serialVersionUID = -1744401530444812916L;
private Map<Mutation,Renamer> renamers;
private Map<Mutation,Deleter> deleters;
private Map<Mutation,Converter> converters;
public Mutations() {
renamers = new HashMap<Mutation,Renamer>();
deleters = new HashMap<Mutation,Deleter>();
converters = new HashMap<Mutation,Converter>();
}
public boolean isEmpty() {
return renamers.isEmpty() &&
deleters.isEmpty() &&
converters.isEmpty();
}
public void addRenamer(Renamer renamer) {
renamers.put(new Key(renamer), renamer);
}
public Renamer getRenamer(String className,
int classVersion,
String fieldName) {
return renamers.get(new Key(className, classVersion, fieldName));
}
public Collection<Renamer> getRenamers() {
return renamers.values();
}
public void addDeleter(Deleter deleter) {
deleters.put(new Key(deleter), deleter);
}
public Deleter getDeleter(String className,
int classVersion,
String fieldName) {
return deleters.get(new Key(className, classVersion, fieldName));
}
public Collection<Deleter> getDeleters() {
return deleters.values();
}
public void addConverter(Converter converter) {
converters.put(new Key(converter), converter);
}
public Converter getConverter(String className,
int classVersion,
String fieldName) {
return converters.get(new Key(className, classVersion, fieldName));
}
public Collection<Converter> getConverters() {
return converters.values();
}
private static class Key extends Mutation {
Key(String className, int classVersion, String fieldName) {
super(className, classVersion, fieldName);
}
Key(Mutation mutation) {
super(mutation.getClassName(),
mutation.getClassVersion(),
mutation.getFieldName());
}
}
@Override
public boolean equals(Object other) {
if (other instanceof Mutations) {
Mutations o = (Mutations) other;
return renamers.equals(o.renamers) &&
deleters.equals(o.deleters) &&
converters.equals(o.converters);
} else {
return false;
}
}
@Override
public int hashCode() {
return renamers.hashCode() +
deleters.hashCode() +
converters.hashCode();
}
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
if (renamers.size() > 0) {
buf.append(renamers.values());
}
if (deleters.size() > 0) {
buf.append(deleters.values());
}
if (converters.size() > 0) {
buf.append(converters.values());
}
if (buf.length() > 0) {
return buf.toString();
} else {
return "[Empty Mutations]";
}
}
}