Added PropKeyValue class to store a property key/type/value

This commit is contained in:
Raman 2018-01-31 08:05:10 -05:00
parent fce9559106
commit 8a6b50b053

View File

@ -107,59 +107,90 @@ public class PListViewer extends javax.swing.JPanel implements FileTypeViewer {
LOGGER.log(Level.SEVERE, "Error reading bytes of plist file.", ex); LOGGER.log(Level.SEVERE, "Error reading bytes of plist file.", ex);
} }
HashMap<String, Object> map = parsePList(buf); List<PropKeyValue> plist = parsePList(buf);
System.out.println("Map size = " + map.size()); System.out.println("List size = " + plist.size());
// RAMAN TBD: populate the display table // RAMAN TBD: populate the display table
for (String key : map.keySet()) { for (PropKeyValue pkv : plist) {
printValue(key, map.get(key)); printValue(pkv);
} }
} }
private void printValue(String key, Object value) { private void printValue(PropKeyValue pkv) {
if (value == null) { if (pkv == null) {
return; return;
} }
System.out.println(""); System.out.println("");
System.out.println("Key = " + key); System.out.println("Key = " + pkv.getKey());
System.out.println("Value Type = " + value.getClass().getSimpleName()); String type = pkv.getType();
System.out.println("Value = " + value.toString()); System.out.println("Value Type = " + type);
// TBD: handle the array and Dictionary type if (type.equalsIgnoreCase("array")) {
System.out.println("BEGIN Array");
List<PropKeyValue> array = (List<PropKeyValue>)pkv.getValue();
for (int i = 0; i < array.size(); i++) {
printValue(array.get(i));
}
System.out.println("End Array");
}
else if (type.equalsIgnoreCase("Dictionary")) {
System.out.println("BEGIN Dictionary");
List<PropKeyValue> dict = (List<PropKeyValue>)pkv.getValue();
for (PropKeyValue pkv2 : dict) {
printValue(pkv2);
}
System.out.println("End Dictionary");
} else {
System.out.println("Value = " + pkv.getValue().toString());
}
} }
private <T> T castValue(NSObject value) { private <T> PropKeyValue<T> castValue(String key, NSObject value) {
if (value == null) { if (value == null) {
return null; return null;
} else if (value instanceof NSString) { } else if (value instanceof NSString) {
return (T) value.toString(); return new PropKeyValue(key, "String", (T) value.toString());
//return (T) value.toString();
} else if (value instanceof NSNumber) { } else if (value instanceof NSNumber) {
NSNumber number = (NSNumber) value; NSNumber number = (NSNumber) value;
if (number.isInteger()) { if (number.isInteger()) {
return (T) new Long(number.longValue()); return new PropKeyValue(key, "Number", (T) new Long(number.longValue()) );
//return (T) new Long(number.longValue());
} else if (number.isBoolean()) { } else if (number.isBoolean()) {
return (T) new Boolean(number.boolValue()); return new PropKeyValue(key, "Boolean", (T) new Boolean(number.boolValue()) );
//return (T) new Boolean(number.boolValue());
} else { } else {
// TODO can be long, float or double // TODO can be long, float or double
return (T) new Float(number.floatValue()); return new PropKeyValue(key, "Number", (T) new Float(number.floatValue())) ;
//return (T) new Float(number.floatValue());
} }
} else if (value instanceof NSArray) { } else if (value instanceof NSArray) {
List<T> res = new ArrayList<T>(); List<PropKeyValue<T>> res = new ArrayList<>();
NSArray array = (NSArray) value; NSArray array = (NSArray) value;
for (int i = 0; i < array.count(); i++) { for (int i = 0; i < array.count(); i++) {
res.add((T) castValue(array.objectAtIndex(i))); res.add(castValue("", array.objectAtIndex(i)));
//res.add((T) castValue(array.objectAtIndex(i)));
} }
return (T) res;
return new PropKeyValue(key, "Array", (T) res);
//return (T) res;
} else if (value instanceof NSDictionary) { } else if (value instanceof NSDictionary) {
Map<String, Object> res = new HashMap<String, Object>(); List<PropKeyValue> dict = new ArrayList<PropKeyValue>();
for (String key : ((NSDictionary) value).allKeys()) { for (String key2 : ((NSDictionary) value).allKeys()) {
NSObject o = ((NSDictionary) value).objectForKey(key); NSObject o = ((NSDictionary) value).objectForKey(key2);
res.put(key, castValue(o)); dict.add(castValue(key2, o));
} }
return (T) res; return new PropKeyValue(key, "Dictionary", (T) dict);
//return (T) res;
} else { } else {
LOGGER.severe("Can't cast from " + value.getClass()); LOGGER.severe("Can't cast from " + value.getClass());
} }
@ -167,9 +198,9 @@ public class PListViewer extends javax.swing.JPanel implements FileTypeViewer {
return null; return null;
} }
private HashMap<String, Object> parsePList(byte[] plistbytes) { private List<PropKeyValue> parsePList(byte[] plistbytes) {
HashMap<String, Object> map = new HashMap<>(); List<PropKeyValue> plist = new ArrayList<>();
try { try {
NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(plistbytes); NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(plistbytes);
@ -184,11 +215,11 @@ public class PListViewer extends javax.swing.JPanel implements FileTypeViewer {
System.out.println("Found Key = " + keys[i]); System.out.println("Found Key = " + keys[i]);
System.out.println("Value class = " + object.getClass().toString()); System.out.println("Value class = " + object.getClass().toString());
Object value = castValue(rootDict.objectForKey(keys[i])); PropKeyValue pkv = castValue(keys[i], rootDict.objectForKey(keys[i]));
if (null != value) { if (null != pkv) {
map.put(keys[i], value); plist.add(pkv);
System.out.println("Value = " + value.toString()); //System.out.println("Value = " + pvalue.toString());
} }
/**** /****
@ -248,9 +279,39 @@ public class PListViewer extends javax.swing.JPanel implements FileTypeViewer {
return null; return null;
} }
return map; return plist;
} }
/**
*
*
* @param <T> the type of the value
*/
public class PropKeyValue<T> {
// T stands for "Type"
private String key;
private String type;
private T value;
PropKeyValue(String key, String type, T value) {
this.key = key;
this.type = type;
this.value = value;
}
String getKey() {
return this.key;
}
String getType() {
return this.type;
}
T getValue() {
return this.value;
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
} }