if (readIdRef != null) {
       public Object action (SaxDocumentHandler handler, AttributeList attrs) {          // if this is still defined, we havent init'd an          //  XMLDataIOStyle object for this array yet, do it now.           if ( !(DataIOStyleAttribs.isEmpty()) ) {             // create new object appropriately              FormattedXMLDataIOStyle readObj =                  new FormattedXMLDataIOStyle (CurrentArray, DataIOStyleAttribs);             String readId = readObj.getReadId();             String readIdRef = readObj.getReadIdRef();             // add this object to the lookup table, if it has an ID             if (readId != null) {                // a warning check, just in case                 if (ReadObj.containsKey(readId))                   Log.warnln("More than one read node with readId=\""+readId+"\", using latest node." );                // add this into the list of note objects                ReadObj.put(readId, readObj);             }             //  If there is a reference object, clone it to get             //  the new readObj             if (readIdRef != null) {                if (ReadObj.containsKey(readIdRef)) {                   BaseObject refReadObj = (BaseObject) ReadObj.get(readIdRef);                   try {                      readObj = (FormattedXMLDataIOStyle) refReadObj.clone();                   } catch (java.lang.CloneNotSupportedException e) {                      Log.errorln("Weird error, cannot clone FormattedXMLDataIOStyle (read node) object. Aborting read.");                      System.exit(-1);                   }                   // override attrs with those in passed list                   readObj.hashtableInitXDFAttributes(DataIOStyleAttribs);                   // give the clone a unique Id and remove IdRef                    readObj.setReadId(findUniqueIdName(ReadObj, readObj.getReadId()));                   readObj.setReadIdRef(null);                   // add this into the list of note objects                   ReadObj.put(readObj.getReadId(), readObj);                } else {                   Log.warnln("Error: Reader got a read node with ReadIdRef=\""+readIdRef+"\" but no previous read node has that id! Ignoring add request.");                   return (Object) null;                }             }             CurrentArray.setXMLDataIOStyle(readObj);              DataIOStyleAttribs = new Hashtable();  // clear table              CurrentFormatObjectList.add(readObj);          }          // okey, now that that is taken care off, we will go          // get the current format (read) object, and add the readCell          // command to it.          Object formatObj = (Object) CurrentFormatObjectList.get(CurrentFormatObjectList.size()-1);          ReadCellFormattedIOCmd readCellObj = new ReadCellFormattedIOCmd();          readCellObj.setXMLAttributes(attrs);          if (formatObj instanceof FormattedXMLDataIOStyle) {             return ((FormattedXMLDataIOStyle) formatObj).addFormatCommand(readCellObj);          } else if ( formatObj instanceof RepeatFormattedIOCmd ) {             return ((RepeatFormattedIOCmd) formatObj).addFormatCommand(readCellObj);          } else {             Log.warnln("Warning: cant add ReadCellFormattedIOCmd object to parent, ignoring request ");          }          return (Object) null;       }