Program: 123334
Project: 123334
Buggy source:
public void selectInputXmlTree(InputXmlTree inputTree){
  if (inputTree != selectedInputTree) {
    selectedInputTree=inputTree;
    MetadataTableEditorView inputMetaEditorView=mapperUI.getTabFolderEditors().getInputMetaEditorView();
    List<IODataComponent> inputs=mapperComponent.getIODataComponents().getInputs();
    IMetadataTable table=null;
    for (int i=0; i < inputs.size(); i++) {
      IODataComponent ioDataComponent=inputs.get(i);
      if (inputTree.getName() != null && inputTree.getName().equals(ioDataComponent.getConnection().getName())) {
        table=ioDataComponent.getTable();
        break;
      }
    }
    if (table != null) {
      MetadataTableEditor editor=new MetadataTableEditor(table,selectedInputTree.getName());
      editor.setModifiedBeanListenable(inputMetaEditorView.getTableViewerCreator());
      IModifiedBeanListener<IMetadataColumn> columnListener=new IModifiedBeanListener<IMetadataColumn>(){
        public void handleEvent(        ModifiedBeanEvent<IMetadataColumn> event){
          fireCurrentDirectEditApply();
          if (AbstractMetadataTableEditorView.ID_COLUMN_NAME.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              if (treeNode != null) {
                treeNode.setName((String)event.newValue);
                processColumnNameChanged(treeNode);
              }
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_TYPE.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              if (treeNode != null) {
                if (treeNode.getType() != null && treeNode.getType().equals(XmlMapUtil.DOCUMENT)) {
                  XmlMapUtil.detachNodeConnections(treeNode,copyOfMapData,true);
                  treeNode.getChildren().clear();
                }
                treeNode.setType((String)event.newValue);
                if (XmlMapUtil.DOCUMENT.equals(event.newValue)) {
                  XmlMapUtil.detachNodeConnections(treeNode,copyOfMapData,true);
                  TreeNode createTreeNode=XmlmapFactory.eINSTANCE.createTreeNode();
                  createTreeNode.setName("String_Node_Str");
                  createTreeNode.setType(XmlMapUtil.DEFAULT_DATA_TYPE);
                  createTreeNode.setNodeType(NodeType.ELEMENT);
                  createTreeNode.setXpath(XmlMapUtil.getXPath(treeNode.getXpath(),createTreeNode.getName(),createTreeNode.getNodeType()));
                  createTreeNode.setLoop(true);
                  createTreeNode.setMain(true);
                  treeNode.getChildren().add(createTreeNode);
                }
                problemsAnalyser.checkLoopProblems(selectedInputTree);
                mapperUI.updateStatusBar();
                refreshInputTreeSchemaEditor(selectedInputTree);
              }
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_KEY.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setKey((Boolean)event.newValue);
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_PATTERN.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setPattern((String)event.newValue);
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_NULLABLE.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setNullable((Boolean)event.newValue);
            }
          }
        }
      }
;
      editor.addModifiedBeanListener(columnListener);
      editor.addAfterOperationListListener(new IListenableListListener(){
        public void handleEvent(        ListenableListEvent event){
          if (event.type == TYPE.ADDED) {
            EList<TreeNode> nodes=selectedInputTree.getNodes();
            List<IMetadataColumn> metadataColumns=(List<IMetadataColumn>)event.addedObjects;
            if (event.index != null) {
              int index=event.index;
              for (              IMetadataColumn column : metadataColumns) {
                TreeNode createTreeNode=XmlmapFactory.eINSTANCE.createTreeNode();
                createTreeNode.setName(column.getLabel());
                createTreeNode.setType(column.getTalendType());
                createTreeNode.setNullable(column.isNullable());
                createTreeNode.setPattern(column.getPattern());
                createTreeNode.setXpath(XmlMapUtil.getXPath(selectedInputTree.getName(),createTreeNode.getName(),createTreeNode.getNodeType()));
                selectedInputTree.getNodes().add(index,createTreeNode);
                index=index + 1;
              }
            }
          }
 else           if (event.type == TYPE.REMOVED) {
            List<IMetadataColumn> metadataColumns=(List<IMetadataColumn>)event.removedObjects;
            List treeNodeToRemove=new ArrayList();
            for (            IMetadataColumn column : metadataColumns) {
              for (              TreeNode node : selectedInputTree.getNodes()) {
                if (node.getName() != null && node.getName().equals(column.getLabel())) {
                  XmlMapUtil.detachNodeConnections(node,copyOfMapData,true);
                  treeNodeToRemove.add(node);
                }
              }
            }
            selectedInputTree.getNodes().removeAll(treeNodeToRemove);
          }
 else           if (event.type == TYPE.SWAPED) {
            List<Integer> listIndexTarget=event.indicesTarget;
            List<Integer> listIndexOrignal=event.indicesOrigin;
            for (int i=0; i < listIndexOrignal.size(); i++) {
              int orignal=listIndexOrignal.get(i);
              int target=listIndexTarget.get(i);
              if (orignal < selectedInputTree.getNodes().size()) {
                TreeNode tempTreeNode=selectedInputTree.getNodes().get(orignal);
                selectedInputTree.getNodes().remove(orignal);
                selectedInputTree.getNodes().add(target,tempTreeNode);
              }
            }
          }
        }
      }
);
      inputMetaEditorView.setMetadataTableEditor(editor);
    }
    refreshInputTreeSchemaEditor(inputTree);
  }
}

Fixed version (ground truth):
public void selectInputXmlTree(InputXmlTree inputTree){
  if (inputTree != selectedInputTree) {
    selectedInputTree=inputTree;
    MetadataTableEditorView inputMetaEditorView=mapperUI.getTabFolderEditors().getInputMetaEditorView();
    List<IODataComponent> inputs=mapperComponent.getIODataComponents().getInputs();
    IMetadataTable table=null;
    for (int i=0; i < inputs.size(); i++) {
      IODataComponent ioDataComponent=inputs.get(i);
      if (inputTree.getName() != null && inputTree.getName().equals(ioDataComponent.getConnection().getName())) {
        table=ioDataComponent.getTable();
        break;
      }
    }
    if (table != null) {
      MetadataTableEditor editor=new MetadataTableEditor(table,selectedInputTree.getName());
      editor.setModifiedBeanListenable(inputMetaEditorView.getTableViewerCreator());
      IModifiedBeanListener<IMetadataColumn> columnListener=new IModifiedBeanListener<IMetadataColumn>(){
        public void handleEvent(        ModifiedBeanEvent<IMetadataColumn> event){
          fireCurrentDirectEditApply();
          if (AbstractMetadataTableEditorView.ID_COLUMN_NAME.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              if (treeNode != null) {
                treeNode.setName((String)event.newValue);
                processColumnNameChanged(treeNode);
              }
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_TYPE.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              if (treeNode != null) {
                if (treeNode.getType() != null && treeNode.getType().equals(XmlMapUtil.DOCUMENT)) {
                  XmlMapUtil.detachNodeConnections(treeNode,copyOfMapData,true);
                  treeNode.getChildren().clear();
                }
                treeNode.setType((String)event.newValue);
                if (XmlMapUtil.DOCUMENT.equals(event.newValue)) {
                  XmlMapUtil.detachNodeConnections(treeNode,copyOfMapData,true);
                  TreeNode createTreeNode=XmlmapFactory.eINSTANCE.createTreeNode();
                  createTreeNode.setName("String_Node_Str");
                  createTreeNode.setType(XmlMapUtil.DEFAULT_DATA_TYPE);
                  createTreeNode.setNodeType(NodeType.ELEMENT);
                  createTreeNode.setXpath(XmlMapUtil.getXPath(treeNode.getXpath(),createTreeNode.getName(),createTreeNode.getNodeType()));
                  createTreeNode.setLoop(true);
                  createTreeNode.setMain(true);
                  treeNode.getChildren().add(createTreeNode);
                }
                problemsAnalyser.checkProblems(selectedInputTree);
                mapperUI.updateStatusBar();
                refreshInputTreeSchemaEditor(selectedInputTree);
              }
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_KEY.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setKey((Boolean)event.newValue);
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_PATTERN.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setPattern((String)event.newValue);
            }
          }
 else           if (AbstractMetadataTableEditorView.ID_COLUMN_NULLABLE.equals(event.column.getId())) {
            if (event.index < selectedInputTree.getNodes().size()) {
              TreeNode treeNode=selectedInputTree.getNodes().get(event.index);
              treeNode.setNullable((Boolean)event.newValue);
            }
          }
        }
      }
;
      editor.addModifiedBeanListener(columnListener);
      editor.addAfterOperationListListener(new IListenableListListener(){
        public void handleEvent(        ListenableListEvent event){
          if (event.type == TYPE.ADDED) {
            EList<TreeNode> nodes=selectedInputTree.getNodes();
            List<IMetadataColumn> metadataColumns=(List<IMetadataColumn>)event.addedObjects;
            if (event.index != null) {
              int index=event.index;
              for (              IMetadataColumn column : metadataColumns) {
                TreeNode createTreeNode=XmlmapFactory.eINSTANCE.createTreeNode();
                createTreeNode.setName(column.getLabel());
                createTreeNode.setType(column.getTalendType());
                createTreeNode.setNullable(column.isNullable());
                createTreeNode.setPattern(column.getPattern());
                createTreeNode.setXpath(XmlMapUtil.getXPath(selectedInputTree.getName(),createTreeNode.getName(),createTreeNode.getNodeType()));
                selectedInputTree.getNodes().add(index,createTreeNode);
                index=index + 1;
              }
            }
          }
 else           if (event.type == TYPE.REMOVED) {
            List<IMetadataColumn> metadataColumns=(List<IMetadataColumn>)event.removedObjects;
            List treeNodeToRemove=new ArrayList();
            for (            IMetadataColumn column : metadataColumns) {
              for (              TreeNode node : selectedInputTree.getNodes()) {
                if (node.getName() != null && node.getName().equals(column.getLabel())) {
                  XmlMapUtil.detachNodeConnections(node,copyOfMapData,true);
                  treeNodeToRemove.add(node);
                }
              }
            }
            selectedInputTree.getNodes().removeAll(treeNodeToRemove);
          }
 else           if (event.type == TYPE.SWAPED) {
            List<Integer> listIndexTarget=event.indicesTarget;
            List<Integer> listIndexOrignal=event.indicesOrigin;
            for (int i=0; i < listIndexOrignal.size(); i++) {
              int orignal=listIndexOrignal.get(i);
              int target=listIndexTarget.get(i);
              if (orignal < selectedInputTree.getNodes().size()) {
                TreeNode tempTreeNode=selectedInputTree.getNodes().get(orignal);
                selectedInputTree.getNodes().remove(orignal);
                selectedInputTree.getNodes().add(target,tempTreeNode);
              }
            }
          }
        }
      }
);
      inputMetaEditorView.setMetadataTableEditor(editor);
    }
    refreshInputTreeSchemaEditor(inputTree);
  }
}