public void joinByEnterAttribute(NGCCEventReceiver source, String uri, String local, String qname) throws SAXException { if (isJoining) return; // we are already in the process of joining. ignore. isJoining = true; // send special token to the rest of the branches. // these branches don't understand this token, so they will // try to move to a final state and send the token back to us, // which this object will ignore (because isJoining==true) // Otherwise branches will find an error. for (int i = 0; i < _receivers.length; i++) if (_receivers[i] != source) _receivers[i].enterAttribute(uri, local, qname); // revert to the parent _parent._source.replace(this, _parent); _parent.onChildCompleted(null, _cookie, true); // send this event to the parent _parent.enterAttribute(uri, local, qname); }