package si.ijs.acs.objectexplorer.engine; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Set; import alma.acs.gui.util.DataFormatter; import alma.acs.util.UTCUtility; public class DataStruct implements DataElement { private String name; private String id; private HashMap<String, Object> members; private LinkedHashSet<String> keys; private static final SimpleDateFormat df = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS"); public DataStruct(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 != null && 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 { // msekoran - ACS timestamp support (this is really not clean solution) if (key.equals("timeStamp") && id.equals("IDL:alma/ACSErr/Completion:1.0")) { long javaTime = UTCUtility.utcOmgToJava(((Long)value).longValue()); result.append(df.format(new Date(javaTime))); } else result.append(DataFormatter.unpackReturnValue(value, start + " ", level + 1, expand)); } } } } return result.toString(); } }