package ch.x42.terye.persistence;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bson.BSONObject;
import com.mongodb.DBObject;
public abstract class ItemState implements DBObject {
private ItemType type;
private String path;
private boolean isPartial;
public ItemState(ItemType type) {
this.type = type;
}
@Override
public boolean containsField(String s) {
boolean ret = false;
if (s.equals("type") && type != null) {
ret = true;
} else if (s.equals("path") && path != null) {
ret = true;
}
return ret;
}
@Override
@Deprecated
public boolean containsKey(String s) {
return this.containsField(s);
}
@Override
public Object get(String key) {
Object value = null;
if (key.equals("type")) {
value = type.ordinal();
} else if (key.equals("path")) {
value = path;
}
return value;
}
@Override
public Set<String> keySet() {
Set<String> set = new HashSet<String>();
set.add("type");
set.add("path");
return set;
}
@Override
public Object put(String key, Object v) {
if (key.equals("type")) {
type = ItemType.values()[(Integer) v];
} else if (key.equals("path")) {
path = (String) v;
}
return v;
}
@Override
public void putAll(BSONObject o) {
putAll(o.toMap());
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void putAll(Map m) {
Set<String> keySet = m.keySet();
for (String key : keySet) {
put(key, m.get(key));
}
}
@Override
public Object removeField(String key) {
Object ret = null;
if (key.equals("type")) {
ret = type;
type = null;
} else if (key.equals("path")) {
ret = path;
path = null;
}
return ret;
}
@Override
@SuppressWarnings("rawtypes")
public Map toMap() {
Map<String, Object> ret = new HashMap<String, Object>();
ret.put("type", type);
ret.put("path", path);
return ret;
}
@Override
public boolean isPartialObject() {
return isPartial;
}
@Override
public void markAsPartialObject() {
isPartial = true;
}
public String getPath() {
return path;
}
public ItemType getType() {
return type;
}
}