package com.frontier42.keepass;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map;
import java.util.regex.Matcher;
public class KeepassDatabase {
private Map<MyKeyReferencey, KeepassGroup> groups=KeepassGroup.MAKE_MAP();
private Map<String, KeepassEntry> cache=new Hashtable<String, KeepassEntry>();
private KeepassGroup rootGroup;
public void add(KeepassGroup group) {
groups.put(KeepassGroup.MAKE_KEY(group),group);
}
public Collection<KeepassGroup> getGroups() {
return groups.values();
}
public KeepassGroup newGroup() {
return new KeepassGroup(this);
}
public KeepassEntry getEntryByUUID(String targetUUID) {
return cache.get(targetUUID);
}
protected void onAdd(KeepassEntry entry){
cache.put(entry.getUUID(), entry);
}
public KeepassValue createValue(KeepassEntry ownerEntry, String value){
if (value.startsWith("{REF:")){
return createValueByRef(ownerEntry, value);
}else{
return createValueByVal(ownerEntry, value);
}
}
public KeepassValue createValueByVal(KeepassEntry ownerEntry, String value){
return new KeepassValueByValue(value);
}
public KeepassValue createValueByRef(KeepassEntry ownerEntry, String value){
Matcher m=KeepassValueByRefence.REF_REGEX.matcher(value);
if (m.matches()){
if ("U".equals(m.group(1))){
return new KeepassValueUsernameByRefence(ownerEntry, m.group(3));
}else if ("P".equals(m.group(1))){
return new KeepassValuePasswordByRefence(ownerEntry, m.group(3));
}
}
return createValueByVal(ownerEntry, value);
}
public void onAdd(KeepassGroup group) {
}
public void setRootGroup(KeepassGroup group) {
this.rootGroup=group;
}
public KeepassGroup getRootGroup() {
return rootGroup;
}
}