package kornell.scorm.client.scorm12;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import kornell.core.util.StringUtils;
public class CMINode extends CMITree {
SortedMap<String, CMITree> children = new TreeMap<String, CMITree>();
@Override
public String getValue(String path) {
String[] parts = path.split("\\.", 2);
String key = parts[0];
String subParam = null;
if (parts.length > 1) {
subParam = parts[1];
}
if (children.containsKey(key)) {
CMITree cmiTree = children.get(key);
return cmiTree.getValue(subParam);
}
return null;
}
@Override
public String setValue(String path, String value) {
String[] parts = path.split("\\.", 2);
String key = parts[0];
String subPath = null;
if (parts.length > 1) {
subPath = parts[1];
}
CMITree cmiTree = children.get(key);
if (cmiTree == null) {
if (StringUtils.isSome(subPath)) {
cmiTree = new CMINode();
} else {
cmiTree = new CMILeaf();
}
children.put(key, cmiTree);
}
return cmiTree.setValue(subPath, value);
}
@Override
boolean isLeaf() {
return false;
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("{\n");
for (Map.Entry<String, CMITree> child : children.entrySet()) {
buf.append(" " + child.getKey() + " = " + child.getValue() + "\n");
}
buf.append("}\n");
return buf.toString();
}
//TODO: Consider complexity / DRY
@Override
boolean isDirty() {
for (CMITree child : children.values()) {
if(child.isDirty()) return true;
}
return false;
}
@Override
void scrub() {
for (CMITree child : children.values()) {
child.scrub();
}
}
}