Added handling of NSArray data.

This commit is contained in:
U-BASIS\dgrove 2018-11-05 02:41:50 -05:00
parent 99cef00b52
commit 559a963a0b

View File

@ -74,7 +74,7 @@ class PListViewer extends javax.swing.JPanel implements FileTypeViewer, Explorer
private final Outline outline; private final Outline outline;
private ExplorerManager explorerManager; private ExplorerManager explorerManager;
private NSDictionary rootDict; private NSObject rootDict;
/** /**
* Creates new form PListViewer * Creates new form PListViewer
@ -415,22 +415,35 @@ class PListViewer extends javax.swing.JPanel implements FileTypeViewer, Explorer
} }
/** /**
* Parses given binary stream and extracts Plist key/value * Parses given binary stream and extracts Plist key/value.
* *
* @param plistbytes * @param plistbytes The byte array containing the Plist data.
* *
* @return list of PropKeyValue * @return list of PropKeyValue
*/ */
private List<PropKeyValue> parsePList(final byte[] plistbytes) throws IOException, PropertyListFormatException, ParseException, ParserConfigurationException, SAXException { private List<PropKeyValue> parsePList(final byte[] plistbytes) throws IOException, PropertyListFormatException, ParseException, ParserConfigurationException, SAXException {
final List<PropKeyValue> plist = new ArrayList<>(); final List<PropKeyValue> plist = new ArrayList<>();
rootDict = (NSDictionary) PropertyListParser.parse(plistbytes); rootDict = PropertyListParser.parse(plistbytes);
final String[] keys = rootDict.allKeys(); /*
for (final String key : keys) { * Parse the data if the root is an NSArray or NSDictionary. Anything
final PropKeyValue pkv = parseProperty(key, rootDict.objectForKey(key)); * else is unexpected and will be ignored.
if (null != pkv) { */
plist.add(pkv); if (rootDict instanceof NSArray) {
for (int i=0; i < ((NSArray)rootDict).count(); i++) {
final PropKeyValue pkv = parseProperty("", ((NSArray)rootDict).objectAtIndex(i));
if (null != pkv) {
plist.add(pkv);
}
}
} else if (rootDict instanceof NSDictionary) {
final String[] keys = ((NSDictionary)rootDict).allKeys();
for (final String key : keys) {
final PropKeyValue pkv = parseProperty(key, ((NSDictionary)rootDict).objectForKey(key));
if (null != pkv) {
plist.add(pkv);
}
} }
} }