Program: 75892
Project: 75892
Buggy source:
/** 
 * Start an element. This is called at the beginning of each XML element.  By the time it is called, all of the attributes for the element will already have been reported using the attribute() method.  Unrecognized elements are ignored.
 * @param elementName The element type name.
 * @exception XmlException If the element produces an errorin constructing the model.
 */
public void startElement(String elementName) throws XmlException {
  try {
    if (_configureNesting > 0 || _docNesting > 0) {
      if (elementName.equals("String_Node_Str")) {
        _configureNesting++;
      }
 else       if (elementName.equals("String_Node_Str")) {
        _docNesting++;
      }
      _currentCharData.append("String_Node_Str" + elementName);
      Iterator attributes=_attributes.entrySet().iterator();
      while (attributes.hasNext()) {
        Map.Entry entry=(Map.Entry)attributes.next();
        if (entry.getValue() != null) {
          _currentCharData.append("String_Node_Str" + entry.getKey() + "String_Node_Str"+ entry.getValue()+ "String_Node_Str");
        }
      }
      _attributes.clear();
      _currentCharData.append("String_Node_Str");
      return;
    }
    if (_skipRendition) {
      return;
    }
    if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      _checkForNull(className,"String_Node_Str");
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      String source=(String)_attributes.get("String_Node_Str");
      NamedObj newEntity=_createEntity(className,entityName,source);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
 else       if (_toplevel == null) {
        _toplevel=newEntity.toplevel();
      }
      newEntity.getMoMLInfo().elementName="String_Node_Str";
      newEntity.getMoMLInfo().className=newEntity.getFullName();
      newEntity.getMoMLInfo().superclass=className;
      _current=newEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      _checkClass(_current,Configurable.class,"String_Node_Str" + "String_Node_Str" + _current);
      _configureSource=(String)_attributes.get("String_Node_Str");
      _currentCharData=new StringBuffer();
      _configureNesting++;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      NamedObj deletedEntity=_deleteEntity(entityName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      NamedObj deletedPort=_deletePort(portName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedPort;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String propName=(String)_attributes.get("String_Node_Str");
      _checkForNull(propName,"String_Node_Str");
      NamedObj deletedProp=_deleteProperty(propName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedProp;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      NamedObj deletedRelation=_deleteRelation(relationName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedRelation;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      _checkForNull(className,"String_Node_Str");
      String dirName=(String)_attributes.get("String_Node_Str");
      _checkForNull(dirName,"String_Node_Str");
      _checkClass(_current,CompositeActor.class,"String_Node_Str" + "String_Node_Str" + _current);
      Object[] arguments=new Object[2];
      arguments[0]=_current;
      arguments[1]=dirName;
      NamedObj container=_current;
      _containers.push(_current);
      _namespaces.push(_namespace);
      Class newClass=Class.forName(className,true,_classLoader);
      _current=_createInstance(newClass,arguments);
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      _currentDocName=(String)_attributes.get("String_Node_Str");
      _currentCharData=new StringBuffer();
      _docNesting++;
    }
 else     if (elementName.equals("String_Node_Str") || elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      String source=(String)_attributes.get("String_Node_Str");
      NamedObj newEntity=_createEntity(className,entityName,source);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
 else       if (_toplevel == null) {
        _toplevel=newEntity.toplevel();
      }
      _current=newEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String groupName=(String)_attributes.get("String_Node_Str");
      if (groupName != null) {
        _namespaces.push(_namespace);
        _namespace=groupName;
      }
 else {
        _namespaces.push(DEFAULT_NAMESPACE);
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String source=(String)_attributes.get("String_Node_Str");
      _checkForNull(source,"String_Node_Str");
      MoMLParser newParser=new MoMLParser(_workspace,_classLoader);
      newParser.setContext(_current);
      newParser._propagating=_propagating;
      _parse(newParser,_base,source);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity context=(CompositeEntity)_current;
      ComponentPort port=_getPort(portName,context);
      Relation tmpRelation=context.getRelation(relationName);
      _checkForNull(tmpRelation,"String_Node_Str" + relationName + "String_Node_Str"+ context.getFullName());
      ComponentRelation relation=(ComponentRelation)tmpRelation;
      String insertAtSpec=(String)_attributes.get("String_Node_Str");
      if (insertAtSpec == null) {
        port.link(relation);
      }
 else {
        int insertAt=Integer.parseInt(insertAtSpec);
        port.insertLink(insertAt,relation);
      }
      _recordLink(context,portName,relationName,insertAtSpec);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      _checkClass(_current,Entity.class,"String_Node_Str" + "String_Node_Str" + _current);
      Entity container=(Entity)_current;
      Class newClass=null;
      if (className != null) {
        newClass=Class.forName(className,true,_classLoader);
      }
      Port port=container.getPort(portName);
      if (port != null) {
        if (newClass != null) {
          _checkClass(port,newClass,"String_Node_Str" + portName + "String_Node_Str"+ className);
        }
      }
 else {
        if (className == null) {
          port=container.newPort(portName);
        }
 else {
          Object[] arguments=new Object[2];
          arguments[0]=container;
          arguments[1]=portName;
          port=(Port)_createInstance(newClass,arguments);
        }
        _recordNewObject(container,port);
      }
      _containers.push(_current);
      _namespaces.push(_namespace);
      _current=port;
      _namespace=DEFAULT_NAMESPACE;
      if (port instanceof IOPort) {
        String direction=(String)_attributes.get("String_Node_Str");
        if (direction != null) {
          IOPort ioport=(IOPort)port;
          ioport.setOutput(direction.equals("String_Node_Str") || direction.equals("String_Node_Str"));
          ioport.setInput(direction.equals("String_Node_Str") || direction.equals("String_Node_Str"));
        }
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String propertyName=(String)_attributes.get("String_Node_Str");
      _checkForNull(propertyName,"String_Node_Str");
      String value=(String)_attributes.get("String_Node_Str");
      boolean isIOPort=(_current instanceof IOPort);
      if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setMultiport(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setMultiport(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else       if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setOutput(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setOutput(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else       if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setInput(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setInput(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else {
        NamedObj property=(Attribute)_current.getAttribute(propertyName);
        String className=(String)_attributes.get("String_Node_Str");
        Class newClass=null;
        if (className != null) {
          newClass=Class.forName(className,true,_classLoader);
        }
        boolean createdNew=false;
        if (property == null || (className != null && !property.getClass().getName().equals(className))) {
          try {
            if (newClass == null) {
              newClass=Attribute.class;
            }
            Object[] arguments=new Object[2];
            arguments[0]=_current;
            arguments[1]=propertyName;
            property=_createInstance(newClass,arguments);
            if (value != null) {
              if (!(property instanceof Settable)) {
                throw new XmlException("String_Node_Str" + "String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
              }
              Settable settable=(Settable)property;
              settable.setExpression(value);
              _paramsToParse.add(property);
            }
            createdNew=true;
          }
 catch (          NameDuplicationException ex) {
          }
        }
        if (!createdNew) {
          if (value != null) {
            if (!(property instanceof Settable)) {
              throw new XmlException("String_Node_Str" + "String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
            }
            Settable settable=(Settable)property;
            settable.setExpression(value);
            _paramsToParse.add(property);
          }
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=property;
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity container=(CompositeEntity)_current;
      Class newClass=null;
      if (className != null) {
        newClass=Class.forName(className,true,_classLoader);
      }
      Relation relation=container.getRelation(relationName);
      if (relation == null) {
        NamedObj newRelation=null;
        _containers.push(_current);
        _namespaces.push(_namespace);
        if (newClass == null) {
          newRelation=container.newRelation(relationName);
        }
 else {
          Object[] arguments=new Object[2];
          arguments[0]=(CompositeEntity)_current;
          arguments[1]=relationName;
          newRelation=_createInstance(newClass,arguments);
        }
        _namespace=DEFAULT_NAMESPACE;
        _recordNewObject(_current,newRelation);
        _current=newRelation;
      }
 else {
        if (newClass != null) {
          _checkClass(relation,newClass,"String_Node_Str" + relationName + "String_Node_Str"+ className);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=relation;
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String newName=(String)_attributes.get("String_Node_Str");
      _checkForNull(newName,"String_Node_Str");
      if (_current != null) {
        _current.setName(newName);
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      _skipRendition=true;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      String indexSpec=(String)_attributes.get("String_Node_Str");
      String insideIndexSpec=(String)_attributes.get("String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity context=(CompositeEntity)_current;
      ComponentPort port=_getPort(portName,context);
      int countArgs=0;
      if (indexSpec != null)       countArgs++;
      if (insideIndexSpec != null)       countArgs++;
      if (relationName != null)       countArgs++;
      if (countArgs != 1) {
        throw new XmlException("String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
      }
      if (relationName != null) {
        Relation tmpRelation=context.getRelation(relationName);
        _checkForNull(tmpRelation,"String_Node_Str" + relationName + "String_Node_Str"+ context.getFullName());
        ComponentRelation relation=(ComponentRelation)tmpRelation;
        port.unlink(relation);
      }
 else       if (indexSpec != null) {
        int index=Integer.parseInt(indexSpec);
        port.unlink(index);
      }
 else {
        int index=Integer.parseInt(insideIndexSpec);
        port.unlinkInside(index);
      }
      _recordUnlink(context,portName,relationName,indexSpec,insideIndexSpec);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String vertexName=(String)_attributes.get("String_Node_Str");
      _checkForNull(vertexName,"String_Node_Str");
      _checkClass(_current,Relation.class,"String_Node_Str" + "String_Node_Str" + _current);
      Vertex vertex=new Vertex((Relation)_current,vertexName);
      String value=(String)_attributes.get("String_Node_Str");
      if (value != null) {
        vertex.setExpression(value);
        _paramsToParse.add(vertex);
      }
      _containers.push(_current);
      _namespaces.push(_namespace);
      _current=vertex;
      _namespace=DEFAULT_NAMESPACE;
    }
 else {
      if (_unrecognized == null) {
        _unrecognized=new LinkedList();
      }
      _unrecognized.add(elementName);
    }
  }
 catch (  InvocationTargetException ex) {
    String msg="String_Node_Str" + elementName + "String_Node_Str"+ ex.getTargetException().toString();
    throw new XmlException(msg,_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
  }
catch (  Exception ex) {
    if (ex instanceof XmlException) {
      throw (XmlException)ex;
    }
 else {
      String msg="String_Node_Str" + elementName + "String_Node_Str"+ ex.toString();
      throw new XmlException(msg,_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
    }
  }
  _attributes.clear();
}

Fixed version (ground truth):
/** 
 * Start an element. This is called at the beginning of each XML element.  By the time it is called, all of the attributes for the element will already have been reported using the attribute() method.  Unrecognized elements are ignored.
 * @param elementName The element type name.
 * @exception XmlException If the element produces an errorin constructing the model.
 */
public void startElement(String elementName) throws XmlException {
  try {
    if (_configureNesting > 0 || _docNesting > 0) {
      if (elementName.equals("String_Node_Str")) {
        _configureNesting++;
      }
 else       if (elementName.equals("String_Node_Str")) {
        _docNesting++;
      }
      _currentCharData.append("String_Node_Str" + elementName);
      Iterator attributes=_attributes.entrySet().iterator();
      while (attributes.hasNext()) {
        Map.Entry entry=(Map.Entry)attributes.next();
        if (entry.getValue() != null) {
          _currentCharData.append("String_Node_Str" + entry.getKey() + "String_Node_Str"+ StringUtilities.escapeForXML((String)entry.getValue())+ "String_Node_Str");
        }
      }
      _attributes.clear();
      _currentCharData.append("String_Node_Str");
      return;
    }
    if (_skipRendition) {
      return;
    }
    if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      _checkForNull(className,"String_Node_Str");
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      String source=(String)_attributes.get("String_Node_Str");
      NamedObj newEntity=_createEntity(className,entityName,source);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
 else       if (_toplevel == null) {
        _toplevel=newEntity.toplevel();
      }
      newEntity.getMoMLInfo().elementName="String_Node_Str";
      newEntity.getMoMLInfo().className=newEntity.getFullName();
      newEntity.getMoMLInfo().superclass=className;
      _current=newEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      _checkClass(_current,Configurable.class,"String_Node_Str" + "String_Node_Str" + _current);
      _configureSource=(String)_attributes.get("String_Node_Str");
      _currentCharData=new StringBuffer();
      _configureNesting++;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      NamedObj deletedEntity=_deleteEntity(entityName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      NamedObj deletedPort=_deletePort(portName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedPort;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String propName=(String)_attributes.get("String_Node_Str");
      _checkForNull(propName,"String_Node_Str");
      NamedObj deletedProp=_deleteProperty(propName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedProp;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      NamedObj deletedRelation=_deleteRelation(relationName);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
      _current=deletedRelation;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      _checkForNull(className,"String_Node_Str");
      String dirName=(String)_attributes.get("String_Node_Str");
      _checkForNull(dirName,"String_Node_Str");
      _checkClass(_current,CompositeActor.class,"String_Node_Str" + "String_Node_Str" + _current);
      Object[] arguments=new Object[2];
      arguments[0]=_current;
      arguments[1]=dirName;
      NamedObj container=_current;
      _containers.push(_current);
      _namespaces.push(_namespace);
      Class newClass=Class.forName(className,true,_classLoader);
      _current=_createInstance(newClass,arguments);
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      _currentDocName=(String)_attributes.get("String_Node_Str");
      _currentCharData=new StringBuffer();
      _docNesting++;
    }
 else     if (elementName.equals("String_Node_Str") || elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String entityName=(String)_attributes.get("String_Node_Str");
      _checkForNull(entityName,"String_Node_Str");
      String source=(String)_attributes.get("String_Node_Str");
      NamedObj newEntity=_createEntity(className,entityName,source);
      if (_current != null) {
        _containers.push(_current);
        _namespaces.push(_namespace);
      }
 else       if (_toplevel == null) {
        _toplevel=newEntity.toplevel();
      }
      _current=newEntity;
      _namespace=DEFAULT_NAMESPACE;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String groupName=(String)_attributes.get("String_Node_Str");
      if (groupName != null) {
        _namespaces.push(_namespace);
        _namespace=groupName;
      }
 else {
        _namespaces.push(DEFAULT_NAMESPACE);
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String source=(String)_attributes.get("String_Node_Str");
      _checkForNull(source,"String_Node_Str");
      MoMLParser newParser=new MoMLParser(_workspace,_classLoader);
      newParser.setContext(_current);
      newParser._propagating=_propagating;
      _parse(newParser,_base,source);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity context=(CompositeEntity)_current;
      ComponentPort port=_getPort(portName,context);
      Relation tmpRelation=context.getRelation(relationName);
      _checkForNull(tmpRelation,"String_Node_Str" + relationName + "String_Node_Str"+ context.getFullName());
      ComponentRelation relation=(ComponentRelation)tmpRelation;
      String insertAtSpec=(String)_attributes.get("String_Node_Str");
      if (insertAtSpec == null) {
        port.link(relation);
      }
 else {
        int insertAt=Integer.parseInt(insertAtSpec);
        port.insertLink(insertAt,relation);
      }
      _recordLink(context,portName,relationName,insertAtSpec);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      _checkClass(_current,Entity.class,"String_Node_Str" + "String_Node_Str" + _current);
      Entity container=(Entity)_current;
      Class newClass=null;
      if (className != null) {
        newClass=Class.forName(className,true,_classLoader);
      }
      Port port=container.getPort(portName);
      if (port != null) {
        if (newClass != null) {
          _checkClass(port,newClass,"String_Node_Str" + portName + "String_Node_Str"+ className);
        }
      }
 else {
        if (className == null) {
          port=container.newPort(portName);
        }
 else {
          Object[] arguments=new Object[2];
          arguments[0]=container;
          arguments[1]=portName;
          port=(Port)_createInstance(newClass,arguments);
        }
        _recordNewObject(container,port);
      }
      _containers.push(_current);
      _namespaces.push(_namespace);
      _current=port;
      _namespace=DEFAULT_NAMESPACE;
      if (port instanceof IOPort) {
        String direction=(String)_attributes.get("String_Node_Str");
        if (direction != null) {
          IOPort ioport=(IOPort)port;
          ioport.setOutput(direction.equals("String_Node_Str") || direction.equals("String_Node_Str"));
          ioport.setInput(direction.equals("String_Node_Str") || direction.equals("String_Node_Str"));
        }
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String propertyName=(String)_attributes.get("String_Node_Str");
      _checkForNull(propertyName,"String_Node_Str");
      String value=(String)_attributes.get("String_Node_Str");
      boolean isIOPort=(_current instanceof IOPort);
      if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setMultiport(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setMultiport(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else       if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setOutput(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setOutput(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else       if (propertyName.equals("String_Node_Str") && isIOPort) {
        if (value == null || value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setInput(true);
        }
 else         if (value.trim().toLowerCase().equals("String_Node_Str")) {
          ((IOPort)_current).setInput(false);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=(Attribute)_current.getAttribute(propertyName);
        _namespace=DEFAULT_NAMESPACE;
      }
 else {
        NamedObj property=(Attribute)_current.getAttribute(propertyName);
        String className=(String)_attributes.get("String_Node_Str");
        Class newClass=null;
        if (className != null) {
          newClass=Class.forName(className,true,_classLoader);
        }
        boolean createdNew=false;
        if (property == null || (className != null && !property.getClass().getName().equals(className))) {
          try {
            if (newClass == null) {
              newClass=Attribute.class;
            }
            Object[] arguments=new Object[2];
            arguments[0]=_current;
            arguments[1]=propertyName;
            property=_createInstance(newClass,arguments);
            if (value != null) {
              if (!(property instanceof Settable)) {
                throw new XmlException("String_Node_Str" + "String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
              }
              Settable settable=(Settable)property;
              settable.setExpression(value);
              _paramsToParse.add(property);
            }
            createdNew=true;
          }
 catch (          NameDuplicationException ex) {
          }
        }
        if (!createdNew) {
          if (value != null) {
            if (!(property instanceof Settable)) {
              throw new XmlException("String_Node_Str" + "String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
            }
            Settable settable=(Settable)property;
            settable.setExpression(value);
            _paramsToParse.add(property);
          }
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=property;
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String className=(String)_attributes.get("String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      _checkForNull(relationName,"String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity container=(CompositeEntity)_current;
      Class newClass=null;
      if (className != null) {
        newClass=Class.forName(className,true,_classLoader);
      }
      Relation relation=container.getRelation(relationName);
      if (relation == null) {
        NamedObj newRelation=null;
        _containers.push(_current);
        _namespaces.push(_namespace);
        if (newClass == null) {
          newRelation=container.newRelation(relationName);
        }
 else {
          Object[] arguments=new Object[2];
          arguments[0]=(CompositeEntity)_current;
          arguments[1]=relationName;
          newRelation=_createInstance(newClass,arguments);
        }
        _namespace=DEFAULT_NAMESPACE;
        _recordNewObject(_current,newRelation);
        _current=newRelation;
      }
 else {
        if (newClass != null) {
          _checkClass(relation,newClass,"String_Node_Str" + relationName + "String_Node_Str"+ className);
        }
        _containers.push(_current);
        _namespaces.push(_namespace);
        _current=relation;
        _namespace=DEFAULT_NAMESPACE;
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      String newName=(String)_attributes.get("String_Node_Str");
      _checkForNull(newName,"String_Node_Str");
      if (_current != null) {
        _current.setName(newName);
      }
    }
 else     if (elementName.equals("String_Node_Str")) {
      _skipRendition=true;
    }
 else     if (elementName.equals("String_Node_Str")) {
      String portName=(String)_attributes.get("String_Node_Str");
      _checkForNull(portName,"String_Node_Str");
      String relationName=(String)_attributes.get("String_Node_Str");
      String indexSpec=(String)_attributes.get("String_Node_Str");
      String insideIndexSpec=(String)_attributes.get("String_Node_Str");
      _checkClass(_current,CompositeEntity.class,"String_Node_Str" + "String_Node_Str" + _current);
      CompositeEntity context=(CompositeEntity)_current;
      ComponentPort port=_getPort(portName,context);
      int countArgs=0;
      if (indexSpec != null)       countArgs++;
      if (insideIndexSpec != null)       countArgs++;
      if (relationName != null)       countArgs++;
      if (countArgs != 1) {
        throw new XmlException("String_Node_Str" + "String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
      }
      if (relationName != null) {
        Relation tmpRelation=context.getRelation(relationName);
        _checkForNull(tmpRelation,"String_Node_Str" + relationName + "String_Node_Str"+ context.getFullName());
        ComponentRelation relation=(ComponentRelation)tmpRelation;
        port.unlink(relation);
      }
 else       if (indexSpec != null) {
        int index=Integer.parseInt(indexSpec);
        port.unlink(index);
      }
 else {
        int index=Integer.parseInt(insideIndexSpec);
        port.unlinkInside(index);
      }
      _recordUnlink(context,portName,relationName,indexSpec,insideIndexSpec);
    }
 else     if (elementName.equals("String_Node_Str")) {
      String vertexName=(String)_attributes.get("String_Node_Str");
      _checkForNull(vertexName,"String_Node_Str");
      _checkClass(_current,Relation.class,"String_Node_Str" + "String_Node_Str" + _current);
      Vertex vertex=new Vertex((Relation)_current,vertexName);
      String value=(String)_attributes.get("String_Node_Str");
      if (value != null) {
        vertex.setExpression(value);
        _paramsToParse.add(vertex);
      }
      _containers.push(_current);
      _namespaces.push(_namespace);
      _current=vertex;
      _namespace=DEFAULT_NAMESPACE;
    }
 else {
      if (_unrecognized == null) {
        _unrecognized=new LinkedList();
      }
      _unrecognized.add(elementName);
    }
  }
 catch (  InvocationTargetException ex) {
    String msg="String_Node_Str" + elementName + "String_Node_Str"+ ex.getTargetException().toString();
    throw new XmlException(msg,_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
  }
catch (  Exception ex) {
    if (ex instanceof XmlException) {
      throw (XmlException)ex;
    }
 else {
      String msg="String_Node_Str" + elementName + "String_Node_Str"+ ex.toString();
      throw new XmlException(msg,_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
    }
  }
  _attributes.clear();
}