package si.ijs.acs.objectexplorer.engine; import java.util.HashMap; import java.util.Set; import java.util.LinkedHashSet; import alma.acs.gui.util.DataFormatter; public class DataException extends Exception implements DataElement { private static final long serialVersionUID = 6575735409776282697L; private String name; private String id; private HashMap<String, Object> members; private LinkedHashSet<String> keys; public DataException(String id) { this.id = id; name = id.substring(id.lastIndexOf("/")+1,id.lastIndexOf(":")); members = new HashMap<String, Object>(); keys = new LinkedHashSet<String>(); } public void add(String name, Object value) { if(members.get(name) != null) members.remove(name); if(keys.contains(name)) keys.remove(name); members.put(name,value); keys.add(name); } public void remove(String name) { if(members.get(name) != null) members.remove(name); if(keys.contains(name)) keys.remove(name); } public Object get(String name) { return members.get(name); } public int size() { return members.size(); } public String name() { return name; } public Set<String> keySet() { return keys; } public String id() { return id; } public String toString() { return name+": "+id; } public String toString(String start, int level, boolean expand) { StringBuffer result = new StringBuffer(500); result.append(id()); if (expand) { result.append('\n'); result.append(start); result.append(" (" + name + ")"); for(String key: keys) { result.append('\n'); result.append(start); result.append(key); result.append(": "); Object value = get(key); if (value.getClass().isArray()) { result.append(DataElementFormatter.unpackArray(value,start,level, expand)); } else { if(value instanceof DataElement) result.append(((DataElement)value).toString(start + " ", level + 1, expand)); else result.append(DataFormatter.unpackReturnValue(value, start + " ", level + 1, expand)); } } } return result.toString(); } }