5555 * @author blaine
5656 */
5757public class DOMInputCapsule implements InputCapsule {
58- private static final Logger logger =
59- Logger .getLogger (DOMInputCapsule .class .getName ());
58+ private static final Logger logger = Logger .getLogger (DOMInputCapsule .class .getName ());
6059
6160 private Document doc ;
6261 private Element currentElement ;
@@ -80,21 +79,12 @@ public DOMInputCapsule(Document doc, XMLImporter importer) {
8079 @ Override
8180 public int getSavableVersion (Class <? extends Savable > desiredClass ) {
8281 if (classHierarchyVersions != null ){
83- return SavableClassUtil .getSavedSavableVersion (savable , desiredClass ,
84- classHierarchyVersions , importer .getFormatVersion ());
82+ return SavableClassUtil .getSavedSavableVersion (savable , desiredClass , classHierarchyVersions , importer .getFormatVersion ());
8583 }else {
8684 return 0 ;
8785 }
8886 }
8987
90- private Element findFirstChildElement (Element parent ) {
91- Node ret = parent .getFirstChild ();
92- while (ret != null && (!(ret instanceof Element ))) {
93- ret = ret .getNextSibling ();
94- }
95- return (Element ) ret ;
96- }
97-
9888 private Element findChildElement (String name ) {
9989 if (currentElement == null ) {
10090 return null ;
@@ -106,17 +96,6 @@ private Element findChildElement(String name) {
10696 return (Element ) ret ;
10797 }
10898
109- private Element findNextSiblingElement (Element current ) {
110- Node ret = current .getNextSibling ();
111- while (ret != null ) {
112- if (ret instanceof Element ) {
113- return (Element ) ret ;
114- }
115- ret = ret .getNextSibling ();
116- }
117- return null ;
118- }
119-
12099 // helper method to reduce duplicate code. checks that number of tokens in the "data" attribute matches the "size" attribute
121100 // and returns an array of parsed primitives.
122101 private Object readPrimitiveArrayHelper (Element element , String primType ) throws IOException {
@@ -481,16 +460,13 @@ public boolean[][] readBooleanArray2D(String name, boolean[][] defVal) throws IO
481460 @ Override
482461 public String readString (String name , String defVal ) throws IOException {
483462 String attribute = null ;
484- try {
485- // Element.getAttribute() returns an empty string if the specified attribute does not exist.
486- // see https://www.w3.org/2003/01/dom2-javadoc/org/w3c/dom/Element.html#getAttribute_java.lang.String_
487- // somewhat confusing since the w3c JS api equivalent returns null as one would expect.
488- // https://www.w3schools.com/jsref/met_element_getattribute.asp
489- if (XMLUtils .hasAttribute (importer .getFormatVersion (), currentElement , name )) {
490- attribute = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , name );
491- }
492- } catch (DOMException de ) {
493- throw new IOException (de .toString (), de );
463+
464+ // Element.getAttribute() returns an empty string if the specified attribute does not exist.
465+ // see https://www.w3.org/2003/01/dom2-javadoc/org/w3c/dom/Element.html#getAttribute_java.lang.String_
466+ // somewhat confusing since the w3c JS api equivalent returns null as one would expect.
467+ // https://www.w3schools.com/jsref/met_element_getattribute.asp
468+ if (XMLUtils .hasAttribute (importer .getFormatVersion (), currentElement , name )) {
469+ attribute = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , name );
494470 }
495471
496472 if (attribute == null ) {
@@ -560,11 +536,8 @@ public <T extends Enum<T>> T readEnum(String name, Class<T> enumType, T defVal)
560536 @ Override
561537 public BitSet readBitSet (String name , BitSet defVal ) throws IOException {
562538 String attribute = null ;
563- try {
564- attribute = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , name );
565- } catch (DOMException ex ) {
566- throw new IOException (ex .toString (), ex );
567- }
539+
540+ attribute = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , name );
568541
569542 if (attribute == null || attribute .isEmpty ()) {
570543 return defVal ;
@@ -914,90 +887,82 @@ public ArrayList<Savable>[][] readSavableArrayListArray2D(String name, ArrayList
914887
915888 @ Override
916889 public Map <? extends Savable , ? extends Savable > readSavableMap (String name , Map <? extends Savable , ? extends Savable > defVal ) throws IOException {
917- Map <Savable , Savable > ret ;
918- Element tempEl ;
890+ Element mapElement = findChildElement (name );
919891
920- if (name != null ) {
921- tempEl = findChildElement (name );
922- } else {
923- tempEl = currentElement ;
892+ if (mapElement == null ) {
893+ return defVal ;
924894 }
925- ret = new HashMap <Savable , Savable >();
926895
927- NodeList nodes = tempEl .getChildNodes ();
896+ Map <Savable , Savable > ret = new HashMap <Savable , Savable >();
897+
898+ NodeList nodes = mapElement .getChildNodes ();
928899 for (int i = 0 ; i < nodes .getLength (); i ++) {
929- Node n = nodes .item (i );
900+ Node n = nodes .item (i );
930901 if (n instanceof Element && n .getNodeName ().equals ("MapEntry" )) {
931902 Element elem = (Element ) n ;
932- currentElement = elem ;
933- Savable key = readSavable (XMLExporter .ELEMENT_KEY , null );
934- Savable val = readSavable (XMLExporter .ELEMENT_VALUE , null );
935- ret .put (key , val );
936- }
903+ currentElement = elem ;
904+ Savable key = readSavable (XMLExporter .ELEMENT_KEY , null );
905+ Savable val = readSavable (XMLExporter .ELEMENT_VALUE , null );
906+ ret .put (key , val );
907+ }
937908 }
938- currentElement = (Element ) tempEl .getParentNode ();
909+
910+ currentElement = (Element ) mapElement .getParentNode ();
911+
939912 return ret ;
940913 }
941914
942915 @ Override
943916 public Map <String , ? extends Savable > readStringSavableMap (String name , Map <String , ? extends Savable > defVal ) throws IOException {
944- Map <String , Savable > ret = null ;
945- Element tempEl ;
917+ Element mapElement = findChildElement (name );
946918
947- if (name != null ) {
948- tempEl = findChildElement (name );
949- } else {
950- tempEl = currentElement ;
951- }
952- if (tempEl != null ) {
953- ret = new HashMap <String , Savable >();
954-
955- NodeList nodes = tempEl .getChildNodes ();
956- for (int i = 0 ; i < nodes .getLength (); i ++) {
957- Node n = nodes .item (i );
958- if (n instanceof Element && n .getNodeName ().equals ("MapEntry" )) {
959- Element elem = (Element ) n ;
960- currentElement = elem ;
961- String key = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , "key" );
962- Savable val = readSavable ("Savable" , null );
963- ret .put (key , val );
964- }
965- }
966- } else {
967- return defVal ;
919+ if (mapElement == null ) {
920+ return defVal ;
921+ }
922+
923+ Map <String , Savable > ret = new HashMap <String , Savable >();
924+
925+ NodeList nodes = mapElement .getChildNodes ();
926+ for (int i = 0 ; i < nodes .getLength (); i ++) {
927+ Node n = nodes .item (i );
928+ if (n instanceof Element && n .getNodeName ().equals ("MapEntry" )) {
929+ Element elem = (Element ) n ;
930+ currentElement = elem ;
931+ String key = XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , "key" );
932+ Savable val = readSavable ("Savable" , null );
933+ ret .put (key , val );
968934 }
969- currentElement = (Element ) tempEl .getParentNode ();
935+ }
936+
937+ currentElement = (Element ) mapElement .getParentNode ();
938+
970939 return ret ;
971940 }
972941
973942 @ Override
974943 public IntMap <? extends Savable > readIntSavableMap (String name , IntMap <? extends Savable > defVal ) throws IOException {
975- IntMap <Savable > ret = null ;
976- Element tempEl ;
944+ Element mapElement = findChildElement (name );
977945
978- if (name != null ) {
979- tempEl = findChildElement (name );
980- } else {
981- tempEl = currentElement ;
982- }
983- if (tempEl != null ) {
984- ret = new IntMap <Savable >();
985-
986- NodeList nodes = tempEl .getChildNodes ();
987- for (int i = 0 ; i < nodes .getLength (); i ++) {
988- Node n = nodes .item (i );
989- if (n instanceof Element && n .getNodeName ().equals ("MapEntry" )) {
990- Element elem = (Element ) n ;
991- currentElement = elem ;
992- int key = Integer .parseInt (XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , "key" ));
993- Savable val = readSavable ("Savable" , null );
994- ret .put (key , val );
995- }
996- }
997- } else {
998- return defVal ;
946+ if (mapElement == null ) {
947+ return defVal ;
948+ }
949+
950+ IntMap <Savable > ret = new IntMap <Savable >();
951+
952+ NodeList nodes = mapElement .getChildNodes ();
953+ for (int i = 0 ; i < nodes .getLength (); i ++) {
954+ Node n = nodes .item (i );
955+ if (n instanceof Element && n .getNodeName ().equals ("MapEntry" )) {
956+ Element elem = (Element ) n ;
957+ currentElement = elem ;
958+ int key = Integer .parseInt (XMLUtils .getAttribute (importer .getFormatVersion (), currentElement , "key" ));
959+ Savable val = readSavable ("Savable" , null );
960+ ret .put (key , val );
999961 }
1000- currentElement = (Element ) tempEl .getParentNode ();
962+ }
963+
964+ currentElement = (Element ) mapElement .getParentNode ();
965+
1001966 return ret ;
1002967 }
1003968
0 commit comments