diff options
author | James Ahlborn <jtahlborn@yahoo.com> | 2013-08-15 12:58:11 +0000 |
---|---|---|
committer | James Ahlborn <jtahlborn@yahoo.com> | 2013-08-15 12:58:11 +0000 |
commit | 1eb7bb4bc2bb6569ee52e4c43bf46f4d48243deb (patch) | |
tree | 3ea0ef223e8c8993e0e1130d52a79a6790298f8a | |
parent | 741dfb72fe4b6e6e9e8470dfa7a3c955dde29bb1 (diff) | |
download | jackcess-1eb7bb4bc2bb6569ee52e4c43bf46f4d48243deb.tar.gz jackcess-1eb7bb4bc2bb6569ee52e4c43bf46f4d48243deb.zip |
Fix reading of Properties with multiple value blocks (issue 96)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/jackcess-1.2.14@779 f203690c-595d-4dc9-a70b-905162fa7fd2
-rw-r--r-- | src/changes/changes.xml | 5 | ||||
-rw-r--r-- | src/java/com/healthmarketscience/jackcess/PropertyMap.java | 18 | ||||
-rw-r--r-- | src/java/com/healthmarketscience/jackcess/PropertyMaps.java | 8 |
3 files changed, 26 insertions, 5 deletions
diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6886107..28c348f 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -4,6 +4,11 @@ <author email="javajedi@users.sf.net">Tim McCune</author> </properties> <body> + <release version="1.2.14.2" date="TBD"> + <action dev="jahlborn" type="fix" system="SourceForge2" issue="96"> + Fix reading of Properties with multiple value blocks. + </action> + </release> <release version="1.2.14.1" date="2013-08-11"> <action dev="jahlborn" type="fix" system="SourceForge2Features" issue="25"> diff --git a/src/java/com/healthmarketscience/jackcess/PropertyMap.java b/src/java/com/healthmarketscience/jackcess/PropertyMap.java index dc25dc0..57b3775 100644 --- a/src/java/com/healthmarketscience/jackcess/PropertyMap.java +++ b/src/java/com/healthmarketscience/jackcess/PropertyMap.java @@ -112,6 +112,24 @@ public class PropertyMap implements Iterable<PropertyMap.Property> return _props.values().iterator(); } + PropertyMap merge(PropertyMap opm) { + if(opm == null) { + return this; + } + + // merge into least map type + PropertyMap dest = opm; + PropertyMap src = this; + if(dest._mapType < src._mapType) { + dest = this; + src = opm; + } + + dest._props.putAll(src._props); + + return dest; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/src/java/com/healthmarketscience/jackcess/PropertyMaps.java b/src/java/com/healthmarketscience/jackcess/PropertyMaps.java index 51853ee..3ffd908 100644 --- a/src/java/com/healthmarketscience/jackcess/PropertyMaps.java +++ b/src/java/com/healthmarketscience/jackcess/PropertyMaps.java @@ -98,7 +98,8 @@ public class PropertyMaps implements Iterable<PropertyMap> * Adds the given PropertyMap to this group. */ public void put(PropertyMap map) { - _maps.put(Database.toLookupName(map.getName()), map); + String mapName = Database.toLookupName(map.getName()); + _maps.put(mapName, map.merge(_maps.get(mapName))); } public Iterator<PropertyMap> iterator() { @@ -176,11 +177,8 @@ public class PropertyMaps implements Iterable<PropertyMap> if(type == PROPERTY_NAME_LIST) { propNames = readPropertyNames(bbBlock); - } else if((type == DEFAULT_PROPERTY_VALUE_LIST) || - (type == COLUMN_PROPERTY_VALUE_LIST)) { - maps.put(readPropertyValues(bbBlock, propNames, type)); } else { - throw new IOException("Unknown property block type " + type); + maps.put(readPropertyValues(bbBlock, propNames, type)); } bb.position(endPos); |