Program: 118516
Project: 118516
Buggy source:
@Override public ExecutionResult execute(final Item item){
  final ProcessType processType=getProcessType(item);
  ComponentCategory category=ComponentCategory.getComponentCategoryFromItem(item);
  Properties props=getPropertiesFromFile();
  IComponentConversion conversion=new IComponentConversion(){
    @Override public void transform(    NodeType nodeType){
      if (nodeType == null || props == null) {
        return;
      }
      boolean modified=false;
      Map<String,String> schemaParamMap=new HashMap<>();
      String currComponentName=nodeType.getComponentName();
      String newComponentName=props.getProperty(currComponentName);
      nodeType.setComponentName(newComponentName);
      IComponent component=ComponentsFactoryProvider.getInstance().get(newComponentName,category.getName());
      ComponentProperties compProperties=ComponentsUtils.getComponentProperties(newComponentName);
      FakeNode fNode=new FakeNode(component);
      for (      IElementParameter param : fNode.getElementParameters()) {
        if (param instanceof GenericElementParameter) {
          String paramName=param.getName();
          NamedThing currNamedThing=ComponentsUtils.getGenericSchemaElement(compProperties,paramName);
          String oldParamName=props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName);
          if (oldParamName != null && !(oldParamName=oldParamName.trim()).isEmpty()) {
            if (currNamedThing instanceof Property && ((Property)currNamedThing).getType() == Type.SCHEMA) {
              schemaParamMap.put(paramName,oldParamName);
            }
            ElementParameterType paramType=getParameterType(nodeType,oldParamName);
            if (paramType != null) {
              if (currNamedThing instanceof ComponentReferenceProperties) {
                ComponentReferenceProperties refProps=(ComponentReferenceProperties)currNamedThing;
                refProps.referenceType.setValue(ComponentReferenceProperties.ReferenceType.COMPONENT_INSTANCE);
                refProps.componentInstanceId.setValue(ParameterUtilTool.convertParameterValue(paramType));
                refProps.componentInstanceId.setTaggedValue(IGenericConstants.ADD_QUOTES,true);
              }
 else {
                if (EParameterFieldType.TABLE.equals(param.getFieldType())) {
                  String tableMapping=props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName+ IGenericConstants.EXP_SEPARATOR+ "String_Node_Str");
                  GenericTableUtils.setTableValues(((ComponentProperties)currNamedThing),getTableValues(paramType,tableMapping),param);
                }
 else {
                  ((Property)currNamedThing).setValue(ParameterUtilTool.convertParameterValue(paramType));
                }
              }
              ParameterUtilTool.removeParameterType(nodeType,paramType);
              modified=true;
            }
            if (EParameterFieldType.SCHEMA_REFERENCE.equals(param.getFieldType())) {
              String schemaTypeName="String_Node_Str" + EParameterName.SCHEMA_TYPE.getName();
              String repSchemaTypeName="String_Node_Str" + EParameterName.REPOSITORY_SCHEMA_TYPE.getName();
              oldParamName=oldParamName.split("String_Node_Str")[0];
              paramType=getParameterType(nodeType,oldParamName + schemaTypeName);
              if (paramType != null) {
                paramType.setName(param.getName() + schemaTypeName);
              }
              paramType=getParameterType(nodeType,oldParamName + repSchemaTypeName);
              if (paramType != null) {
                paramType.setName(param.getName() + repSchemaTypeName);
              }
            }
          }
 else {
            if (currNamedThing instanceof Property) {
              if (((Property)currNamedThing).isRequired() && Property.Type.STRING.equals(((Property)currNamedThing).getType())) {
                ((Property)currNamedThing).setValue("String_Node_Str");
              }
            }
          }
        }
      }
      Map<String,MetadataType> metadatasMap=new HashMap<>();
      EList<MetadataType> metadatas=nodeType.getMetadata();
      for (      MetadataType metadataType : metadatas) {
        metadatasMap.put(metadataType.getConnector(),metadataType);
      }
      Iterator<Entry<String,String>> schemaParamIter=schemaParamMap.entrySet().iterator();
      while (schemaParamIter.hasNext()) {
        Entry<String,String> schemaParamEntry=schemaParamIter.next();
        String newParamName=schemaParamEntry.getKey();
        String oldParamName=schemaParamEntry.getValue();
        oldParamName=oldParamName.split("String_Node_Str")[1];
        MetadataType metadataType=metadatasMap.get(oldParamName);
        if (metadataType != null) {
          if (EConnectionType.FLOW_MAIN.getName().equals(metadataType.getConnector())) {
            metadataType.setConnector(Connector.MAIN_NAME);
          }
          MetadataEmfFactory factory=new MetadataEmfFactory();
          factory.setMetadataType(metadataType);
          IMetadataTable metadataTable=factory.getMetadataTable();
          Schema schema=SchemaUtils.convertTalendSchemaIntoComponentSchema(ConvertionHelper.convert(metadataTable));
          compProperties.setValue(newParamName,schema);
        }
      }
      String uniqueName=ParameterUtilTool.getParameterValue(nodeType,"String_Node_Str");
      for (      Object connectionObj : processType.getConnection()) {
        ConnectionType connection=(ConnectionType)connectionObj;
        if (connection.getSource() != null && connection.getSource().equals(uniqueName)) {
          if (EConnectionType.FLOW_MAIN.getName().equals(connection.getConnectorName())) {
            connection.setConnectorName(Connector.MAIN_NAME);
          }
        }
      }
      if (modified) {
        String serializedProperties=compProperties.toSerialized();
        if (serializedProperties != null) {
          ElementParameterType pType=ParameterUtilTool.createParameterType(null,"String_Node_Str",serializedProperties);
          nodeType.getElementParameter().add(pType);
        }
      }
    }
  }
;
  if (processType != null) {
    for (    Object obj : processType.getNode()) {
      if (obj != null && obj instanceof NodeType) {
        String componentName=((NodeType)obj).getComponentName();
        String newComponentName=props.getProperty(componentName);
        if (newComponentName == null) {
          continue;
        }
        IComponentFilter filter=new NameComponentFilter(componentName);
        try {
          ModifyComponentsAction.searchAndModify(item,processType,filter,Arrays.<IComponentConversion>asList(conversion));
        }
 catch (        PersistenceException e) {
          ExceptionHandler.process(e);
          return ExecutionResult.FAILURE;
        }
      }
    }
  }
  return ExecutionResult.SUCCESS_NO_ALERT;
}

Fixed version (ground truth):
@Override public ExecutionResult execute(final Item item){
  final ProcessType processType=getProcessType(item);
  ComponentCategory category=ComponentCategory.getComponentCategoryFromItem(item);
  Properties props=getPropertiesFromFile();
  IComponentConversion conversion=new IComponentConversion(){
    @Override public void transform(    NodeType nodeType){
      if (nodeType == null || props == null) {
        return;
      }
      boolean modified=false;
      Map<String,String> schemaParamMap=new HashMap<>();
      String currComponentName=nodeType.getComponentName();
      String newComponentName=props.getProperty(currComponentName);
      nodeType.setComponentName(newComponentName);
      IComponent component=ComponentsFactoryProvider.getInstance().get(newComponentName,category.getName());
      ComponentProperties compProperties=ComponentsUtils.getComponentProperties(newComponentName);
      FakeNode fNode=new FakeNode(component);
      for (      IElementParameter param : fNode.getElementParameters()) {
        if (param instanceof GenericElementParameter) {
          String paramName=param.getName();
          NamedThing currNamedThing=ComponentsUtils.getGenericSchemaElement(compProperties,paramName);
          String oldParamName=props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName);
          if (oldParamName != null && !(oldParamName=oldParamName.trim()).isEmpty()) {
            if (currNamedThing instanceof Property && ((Property)currNamedThing).getType() == Type.SCHEMA) {
              schemaParamMap.put(paramName,props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName+ IGenericConstants.EXP_SEPARATOR+ "String_Node_Str"));
            }
            ElementParameterType paramType=getParameterType(nodeType,oldParamName);
            if (paramType != null) {
              if (currNamedThing instanceof ComponentReferenceProperties) {
                ComponentReferenceProperties refProps=(ComponentReferenceProperties)currNamedThing;
                refProps.referenceType.setValue(ComponentReferenceProperties.ReferenceType.COMPONENT_INSTANCE);
                refProps.componentInstanceId.setValue(ParameterUtilTool.convertParameterValue(paramType));
                refProps.componentInstanceId.setTaggedValue(IGenericConstants.ADD_QUOTES,true);
              }
 else {
                if (EParameterFieldType.TABLE.equals(param.getFieldType())) {
                  String tableMapping=props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName+ IGenericConstants.EXP_SEPARATOR+ "String_Node_Str");
                  GenericTableUtils.setTableValues(((ComponentProperties)currNamedThing),getTableValues(paramType,tableMapping),param);
                }
 else {
                  ((Property)currNamedThing).setValue(ParameterUtilTool.convertParameterValue(paramType));
                }
              }
              ParameterUtilTool.removeParameterType(nodeType,paramType);
              modified=true;
            }
            if (EParameterFieldType.SCHEMA_REFERENCE.equals(param.getFieldType())) {
              String schemaTypeName="String_Node_Str" + EParameterName.SCHEMA_TYPE.getName();
              String repSchemaTypeName="String_Node_Str" + EParameterName.REPOSITORY_SCHEMA_TYPE.getName();
              paramType=getParameterType(nodeType,oldParamName + schemaTypeName);
              if (paramType != null) {
                paramType.setName(param.getName() + schemaTypeName);
              }
              paramType=getParameterType(nodeType,oldParamName + repSchemaTypeName);
              if (paramType != null) {
                paramType.setName(param.getName() + repSchemaTypeName);
              }
            }
          }
 else {
            if (currNamedThing instanceof Property) {
              if (((Property)currNamedThing).isRequired() && Property.Type.STRING.equals(((Property)currNamedThing).getType())) {
                ((Property)currNamedThing).setValue("String_Node_Str");
              }
            }
          }
        }
 else {
          if (EParameterFieldType.SCHEMA_REFERENCE.equals(param.getFieldType())) {
            String paramName=param.getName();
            schemaParamMap.put(paramName,props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName+ IGenericConstants.EXP_SEPARATOR+ "String_Node_Str"));
            String oldParamName=props.getProperty(currComponentName + IGenericConstants.EXP_SEPARATOR + paramName);
            String schemaTypeName="String_Node_Str" + EParameterName.SCHEMA_TYPE.getName();
            String repSchemaTypeName="String_Node_Str" + EParameterName.REPOSITORY_SCHEMA_TYPE.getName();
            ElementParameterType paramType=getParameterType(nodeType,oldParamName + schemaTypeName);
            if (paramType != null) {
              paramType.setName(param.getName() + schemaTypeName);
            }
            paramType=getParameterType(nodeType,oldParamName + repSchemaTypeName);
            if (paramType != null) {
              paramType.setName(param.getName() + repSchemaTypeName);
            }
          }
        }
      }
      Map<String,MetadataType> metadatasMap=new HashMap<>();
      EList<MetadataType> metadatas=nodeType.getMetadata();
      for (      MetadataType metadataType : metadatas) {
        metadatasMap.put(metadataType.getConnector(),metadataType);
      }
      Iterator<Entry<String,String>> schemaParamIter=schemaParamMap.entrySet().iterator();
      while (schemaParamIter.hasNext()) {
        Entry<String,String> schemaParamEntry=schemaParamIter.next();
        String newParamName=schemaParamEntry.getKey();
        String connectorMapping=schemaParamEntry.getValue();
        String oldConnector=connectorMapping.split("String_Node_Str")[0];
        String newConnector=connectorMapping.split("String_Node_Str")[1];
        MetadataType metadataType=metadatasMap.get(oldConnector);
        if (metadataType != null) {
          metadataType.setConnector(newConnector);
          MetadataEmfFactory factory=new MetadataEmfFactory();
          factory.setMetadataType(metadataType);
          IMetadataTable metadataTable=factory.getMetadataTable();
          Schema schema=SchemaUtils.convertTalendSchemaIntoComponentSchema(ConvertionHelper.convert(metadataTable));
          compProperties.setValue(newParamName,schema);
        }
      }
      String uniqueName=ParameterUtilTool.getParameterValue(nodeType,"String_Node_Str");
      for (      Object connectionObj : processType.getConnection()) {
        ConnectionType connection=(ConnectionType)connectionObj;
        if (connection.getSource() != null && connection.getSource().equals(uniqueName)) {
          if (EConnectionType.FLOW_MAIN.getName().equals(connection.getConnectorName())) {
            connection.setConnectorName(Connector.MAIN_NAME);
          }
        }
      }
      if (modified) {
        String serializedProperties=compProperties.toSerialized();
        if (serializedProperties != null) {
          ElementParameterType pType=ParameterUtilTool.createParameterType(null,"String_Node_Str",serializedProperties);
          nodeType.getElementParameter().add(pType);
        }
      }
    }
  }
;
  if (processType != null) {
    for (    Object obj : processType.getNode()) {
      if (obj != null && obj instanceof NodeType) {
        String componentName=((NodeType)obj).getComponentName();
        String newComponentName=props.getProperty(componentName);
        if (newComponentName == null) {
          continue;
        }
        IComponentFilter filter=new NameComponentFilter(componentName);
        try {
          ModifyComponentsAction.searchAndModify(item,processType,filter,Arrays.<IComponentConversion>asList(conversion));
        }
 catch (        PersistenceException e) {
          ExceptionHandler.process(e);
          return ExecutionResult.FAILURE;
        }
      }
    }
  }
  return ExecutionResult.SUCCESS_NO_ALERT;
}