String readIdRef = (String) DataIOStyleAttribs.get("readIdRef"); if (readIdRef != null) {  XMLDataIOStyle readObj = null;  if (ReadObj.containsKey(readIdRef)) {  XMLDataIOStyle refReadObj = (XMLDataIOStyle) ReadObj.get(readIdRef); try { readObj = (XMLDataIOStyle) refReadObj.clone(); } catch (java.lang.CloneNotSupportedException e) { Log.errorln("Weird error, cannot clone XMLDataIOStyle (read node) object. Aborting read."); System.exit(-1); }   readObj.hashtableInitXDFAttributes(DataIOStyleAttribs);   readObj.setReadId(findUniqueIdName(ReadObj, readObj.getReadId())); readObj.setReadIdRef(null);   ReadObj.put(readObj.getReadId(), readObj);  } else { Log.warnln("Error: Reader got a read node with ReadIdRef=\""+readIdRef+"\""); Log.warnln("but no previous read node has that id! Ignoring add request."); return (Object) null; }   CurrentArray.setXMLDataIOStyle(readObj);   DataIOStyleAttribs.clear();  CurrentFormatObjectList.add(readObj);  }
       public Object action (SaxDocumentHandler handler, AttributeList attrs) {          // save these for later, when we know what kind of dataIOstyle we got          // Argh we really need a clone on AttributeList. Just dumb copy for now.          DataIOStyleAttribs = new Hashtable();          int size = attrs.getLength();           for (int i = 0; i < size; i++) {              String name = attrs.getName(i);              String value = attrs.getValue(i);             if (value != null)                 DataIOStyleAttribs.put(name, value);          }          // clear out the format command object array          // (its used by Formatted reads only, but this is reasonable           //  spot to do this).          CurrentFormatObjectList = new ArrayList ();          // this will be used in formatted/delimited reads to          // set the iteration order of the locator that will populate          // the datacube           AxisReadOrder = new ArrayList();          return (Object) null;       }