Program: 118515
Project: 118515
Buggy source:
@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);
    }
  }
}

Fixed version (ground truth):
@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);
    }
  }
}