Program: 118051
Project: 118051
Buggy source:
private void checkSchema(){
  boolean canEditSchema=false;
  boolean noSchema=false;
  for (  IElementParameter param : this.getElementParameters()) {
    if (param.isShow(getElementParameters()) && (param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE))) {
      canEditSchema=true;
      break;
    }
  }
  INodeConnector mainConnector;
  if (isELTComponent()) {
    mainConnector=this.getConnectorFromType(EConnectionType.TABLE);
  }
 else {
    mainConnector=this.getConnectorFromType(EConnectionType.FLOW_MAIN);
  }
  List<INodeConnector> mainConnectors=this.getConnectorsFromType(EConnectionType.FLOW_MAIN);
  if (mainConnector != null && !isExternalNode()) {
    IMetadataTable table=getMetadataFromConnector(mainConnector.getName());
    if (canEditSchema && table != null) {
      if (LanguageManager.getCurrentLanguage() == ECodeLanguage.JAVA) {
        for (int i=0; i < table.getListColumns().size(); i++) {
          IMetadataColumn column=table.getListColumns().get(i);
          if (column.isCustom()) {
            continue;
          }
          String value=column.getPattern();
          String typevalue=column.getTalendType();
          if (JavaTypesManager.DATE.getId().equals(typevalue) || PerlTypesManager.DATE.equals(typevalue)) {
            if (value == null || "String_Node_Str".equals(value)) {
              String errorMessage=Messages.getString("String_Node_Str");
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
              noSchema=true;
            }
          }
        }
      }
      if ((mainConnector.getMaxLinkInput() == 0 || ("String_Node_Str".equals(getComponent().getName()) && (mainConnector.getMaxLinkInput() != 0) && getCurrentActiveLinksNbOutput(EConnectionType.FLOW_MAIN) > 0)) && (mainConnector.getMaxLinkOutput() != 0)) {
        if (table.getListColumns().size() == 0) {
          String errorMessage=Messages.getString("String_Node_Str");
          Problems.add(ProblemStatus.WARNING,this,errorMessage);
          noSchema=true;
        }
      }
    }
 else {
      if ((mainConnector.getMaxLinkInput() != 0) && (mainConnector.getMaxLinkOutput() != 0)) {
        if (table != null && table.getListColumns().size() == 0) {
          noSchema=true;
        }
      }
      if (getCurrentActiveLinksNbInput(EConnectionType.FLOW_MAIN) == 0 && noSchema) {
        if ((getCurrentActiveLinksNbOutput(EConnectionType.FLOW_MAIN) > 0) || (getCurrentActiveLinksNbOutput(EConnectionType.FLOW_REF) > 0)) {
          if (!this.getComponent().getName().equals("String_Node_Str")) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
        }
      }
    }
  }
  ICoreTisService service=null;
  if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreTisService.class)) {
    service=(ICoreTisService)GlobalServiceRegister.getDefault().getService(ICoreTisService.class);
  }
  if (mainConnector != null && !noSchema && canEditSchema) {
    if (getMetadataList() != null) {
      for (      IMetadataTable meta : getMetadataList()) {
        if (meta == null) {
          continue;
        }
        int nbDynamic=0;
        for (        IMetadataColumn col : meta.getListColumns()) {
          if (col.getTalendType() != null && col.getTalendType().equals("String_Node_Str")) {
            nbDynamic++;
          }
        }
        if (!isJoblet()) {
          if (nbDynamic > 1) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
          if (nbDynamic > 0 && service == null) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
          if (nbDynamic > 0 && service != null) {
            if (!service.isSupportDynamicType(this)) {
              String errorMessage=Messages.getString("String_Node_Str");
              Problems.add(ProblemStatus.ERROR,this,errorMessage);
            }
          }
        }
      }
    }
  }
  if (mainConnector != null && !noSchema && (!canEditSchema || isExternalNode())) {
    if (mainConnector.isMultiSchema()) {
      if (getMetadataList() != null) {
        for (        IMetadataTable meta : getMetadataList()) {
          String componentName=this.getComponent().getName();
          if (!componentName.equals("String_Node_Str") && meta.getListColumns().size() == 0 && !isCheckMultiSchemaForMSField() && checkSchemaForEBCDIC(meta)) {
            String tableLabel=meta.getTableName();
            if (meta.getLabel() != null) {
              tableLabel=meta.getLabel();
            }
            String errorMessage=Messages.getString("String_Node_Str",tableLabel);
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
        }
      }
    }
  }
  schemaSynchronized=true;
  if ((component.isSchemaAutoPropagated() && getComponent().getName().equals("String_Node_Str")) && (getMetadataList().size() != 0)) {
    for (    INodeConnector nodeConnector : mainConnectors) {
      INodeConnector actualConnector=nodeConnector;
      if (actualConnector != null) {
        int maxFlowInput=actualConnector.getMaxLinkInput();
        if (maxFlowInput <= 1 || getComponent().useLookup() || isELTComponent()) {
          IMetadataTable inputMeta=null, outputMeta=getMetadataList().get(0);
          if ((actualConnector.getMaxLinkInput() != 0) && (actualConnector.getMaxLinkOutput() != 0)) {
            IConnection inputConnecion=null;
            for (            IConnection connection : inputs) {
              if (connection.isActivate() && (connection.getLineStyle().equals(EConnectionType.FLOW_MAIN) || connection.getLineStyle().equals(EConnectionType.TABLE))) {
                inputMeta=connection.getMetadataTable();
                inputConnecion=connection;
              }
            }
            if (inputMeta != null) {
              if ((!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE))) {
                if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_NONE) && outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_LENGTH)) {
                  String warningMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
                  Problems.add(ProblemStatus.WARNING,this,warningMessage);
                }
 else {
                  schemaSynchronized=false;
                  String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
                  Problems.add(ProblemStatus.ERROR,this,errorMessage);
                }
              }
            }
          }
        }
      }
    }
  }
  if (component.isSchemaAutoPropagated() && (getMetadataList().size() != 0)) {
    IConnection inputConnecion=null;
    INodeConnector nodeConn=getConnectorFromName(EConnectionType.FLOW_MAIN.getName());
    if (nodeConn != null) {
      int maxFlowInput=nodeConn.getMaxLinkInput();
      if (maxFlowInput <= 1 || getComponent().useLookup() || isELTComponent()) {
        IMetadataTable inputMeta=null, outputMeta=getMetadataList().get(0);
        for (        IConnection connection : inputs) {
          if (connection.isActivate() && (connection.getLineStyle().equals(EConnectionType.FLOW_MAIN) || connection.getLineStyle().equals(EConnectionType.TABLE))) {
            inputMeta=connection.getMetadataTable();
            inputConnecion=connection;
          }
        }
        if (inputMeta != null) {
          INodeConnector connector=getConnectorFromName(outputMeta.getAttachedConnector());
          if (connector != null && ((connector.getMaxLinkInput() != 0 && connector.getMaxLinkOutput() != 0) || getComponent().getComponentType() == EComponentType.JOBLET_INPUT_OUTPUT) && (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE))) {
            if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_NONE) && outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_LENGTH)) {
              String warningMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,warningMessage);
            }
 else {
              schemaSynchronized=false;
              String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
 else           if (connector != null && connector.getMaxLinkInput() != 0 && connector.getMaxLinkOutput() == 0) {
            if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_NONE)) {
              schemaSynchronized=false;
              String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
        }
        if (outputMeta != null) {
          for (int i=0; i < outputMeta.getListColumns().size(); i++) {
            IMetadataColumn column=outputMeta.getListColumns().get(i);
            String sourceType=column.getType();
            String typevalue=column.getTalendType();
            String currentDbmsId=outputMeta.getDbms();
            if (!typevalue.equals("String_Node_Str") && currentDbmsId != null && !TypesManager.checkDBType(currentDbmsId,typevalue,sourceType)) {
              String errorMessage="String_Node_Str";
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
        }
      }
    }
 else {
      for (      IElementParameter param : this.getElementParameters()) {
        if (param.isShow(getElementParameters()) && param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE)) {
          IMetadataTable table=getMetadataFromConnector(param.getContext());
          IElementParameter connParam=param.getChildParameters().get(EParameterName.CONNECTION.getName());
          if (table != null && connParam != null && !StringUtils.isEmpty((String)connParam.getValue())) {
            for (            IConnection connection : inputs) {
              if (connection.isActivate() && connection.getName().equals(connParam.getValue())) {
                if (!table.sameMetadataAs(connection.getMetadataTable(),IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE)) {
                  schemaSynchronized=false;
                  String errorMessage=Messages.getString("String_Node_Str",connection.getName());
                  Problems.add(ProblemStatus.ERROR,this,errorMessage);
                }
              }
            }
          }
        }
      }
    }
  }
  if ((getComponent().getComponentType() == EComponentType.JOBLET)) {
    checkJobletSchema();
  }
  if (component.useMerge() && !this.getConnectorFromType(EConnectionType.FLOW_MERGE).isMergeAllowDifferentSchema()) {
    if (getMetadataList().get(0).getListColumns().size() == 0) {
      String errorMessage=Messages.getString("String_Node_Str");
      Problems.add(ProblemStatus.ERROR,this,errorMessage);
    }
 else {
      if (inputs.size() > 0) {
        boolean firstIsMerge=inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE);
        if (firstIsMerge) {
          IMetadataTable firstSchema=inputs.get(0).getMetadataTable();
          if (inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE)) {
            boolean isSame=firstSchema.sameMetadataAs(getMetadataList().get(0),IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME | IMetadataColumn.OPTIONS_IGNORE_DEFAULT | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_DBTYPE);
            if (!isSame) {
              String warningMessage=Messages.getString("String_Node_Str",getUniqueName());
              Problems.add(ProblemStatus.WARNING,this,warningMessage);
            }
          }
        }
      }
    }
    if (inputs.size() > 1) {
      boolean firstIsMerge=inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE);
      if (firstIsMerge) {
        IMetadataTable firstSchema=inputs.get(0).getMetadataTable();
        boolean isSame=true;
        for (int i=1; i < inputs.size(); i++) {
          if (!firstSchema.sameMetadataAs(inputs.get(i).getMetadataTable(),IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME | IMetadataColumn.OPTIONS_IGNORE_DEFAULT | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_DBTYPE)) {
            isSame=false;
            break;
          }
        }
        if (!isSame) {
          String warningMessage=Messages.getString("String_Node_Str",getUniqueName());
          Problems.add(ProblemStatus.WARNING,this,warningMessage);
        }
      }
    }
  }
  syncSpecialSchema();
}

Fixed version (ground truth):
private void checkSchema(){
  boolean canEditSchema=false;
  boolean noSchema=false;
  for (  IElementParameter param : this.getElementParameters()) {
    if (param.isShow(getElementParameters()) && (param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE))) {
      canEditSchema=true;
      break;
    }
  }
  INodeConnector mainConnector;
  if (isELTComponent()) {
    mainConnector=this.getConnectorFromType(EConnectionType.TABLE);
  }
 else {
    mainConnector=this.getConnectorFromType(EConnectionType.FLOW_MAIN);
  }
  List<INodeConnector> mainConnectors=this.getConnectorsFromType(EConnectionType.FLOW_MAIN);
  if (mainConnector != null && !isExternalNode()) {
    IMetadataTable table=getMetadataFromConnector(mainConnector.getName());
    if (canEditSchema && table != null) {
      if (LanguageManager.getCurrentLanguage() == ECodeLanguage.JAVA) {
        for (int i=0; i < table.getListColumns().size(); i++) {
          IMetadataColumn column=table.getListColumns().get(i);
          if (column.isCustom()) {
            continue;
          }
          String value=column.getPattern();
          String typevalue=column.getTalendType();
          if (JavaTypesManager.DATE.getId().equals(typevalue) || PerlTypesManager.DATE.equals(typevalue)) {
            if (value == null || "String_Node_Str".equals(value)) {
              String errorMessage=Messages.getString("String_Node_Str");
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
              noSchema=true;
            }
          }
        }
      }
      if ((mainConnector.getMaxLinkInput() == 0 || ("String_Node_Str".equals(getComponent().getName()) && (mainConnector.getMaxLinkInput() != 0) && getCurrentActiveLinksNbOutput(EConnectionType.FLOW_MAIN) > 0)) && (mainConnector.getMaxLinkOutput() != 0)) {
        if (table.getListColumns().size() == 0) {
          String errorMessage=Messages.getString("String_Node_Str");
          Problems.add(ProblemStatus.WARNING,this,errorMessage);
          noSchema=true;
        }
      }
    }
 else {
      if ((mainConnector.getMaxLinkInput() != 0) && (mainConnector.getMaxLinkOutput() != 0)) {
        if (table != null && table.getListColumns().size() == 0) {
          noSchema=true;
        }
      }
      if (getCurrentActiveLinksNbInput(EConnectionType.FLOW_MAIN) == 0 && noSchema) {
        if ((getCurrentActiveLinksNbOutput(EConnectionType.FLOW_MAIN) > 0) || (getCurrentActiveLinksNbOutput(EConnectionType.FLOW_REF) > 0)) {
          if (!this.getComponent().getName().equals("String_Node_Str")) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
        }
      }
    }
  }
  ICoreTisService service=null;
  if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreTisService.class)) {
    service=(ICoreTisService)GlobalServiceRegister.getDefault().getService(ICoreTisService.class);
  }
  if (mainConnector != null && !noSchema && canEditSchema) {
    if (getMetadataList() != null) {
      for (      IMetadataTable meta : getMetadataList()) {
        if (meta == null) {
          continue;
        }
        int nbDynamic=0;
        for (        IMetadataColumn col : meta.getListColumns()) {
          if (col.getTalendType() != null && col.getTalendType().equals("String_Node_Str")) {
            nbDynamic++;
          }
        }
        if (!isJoblet()) {
          if (nbDynamic > 1) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
          if (nbDynamic > 0 && service == null) {
            String errorMessage=Messages.getString("String_Node_Str");
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
          if (nbDynamic > 0 && service != null) {
            if (!service.isSupportDynamicType(this)) {
              String errorMessage=Messages.getString("String_Node_Str");
              Problems.add(ProblemStatus.ERROR,this,errorMessage);
            }
          }
        }
      }
    }
  }
  if (mainConnector != null && !noSchema && (!canEditSchema || isExternalNode())) {
    if (mainConnector.isMultiSchema()) {
      if (getMetadataList() != null) {
        for (        IMetadataTable meta : getMetadataList()) {
          String componentName=this.getComponent().getName();
          if (!componentName.equals("String_Node_Str") && meta.getListColumns().size() == 0 && !isCheckMultiSchemaForMSField() && checkSchemaForEBCDIC(meta)) {
            String tableLabel=meta.getTableName();
            if (meta.getLabel() != null) {
              tableLabel=meta.getLabel();
            }
            String errorMessage=Messages.getString("String_Node_Str",tableLabel);
            Problems.add(ProblemStatus.ERROR,this,errorMessage);
          }
        }
      }
    }
  }
  schemaSynchronized=true;
  if ((component.isSchemaAutoPropagated() && getComponent().getName().equals("String_Node_Str")) && (getMetadataList().size() != 0)) {
    for (    INodeConnector nodeConnector : mainConnectors) {
      INodeConnector actualConnector=nodeConnector;
      if (actualConnector != null) {
        int maxFlowInput=actualConnector.getMaxLinkInput();
        if (maxFlowInput <= 1 || getComponent().useLookup() || isELTComponent()) {
          IMetadataTable inputMeta=null, outputMeta=getMetadataList().get(0);
          if ((actualConnector.getMaxLinkInput() != 0) && (actualConnector.getMaxLinkOutput() != 0)) {
            IConnection inputConnecion=null;
            for (            IConnection connection : inputs) {
              if (connection.isActivate() && (connection.getLineStyle().equals(EConnectionType.FLOW_MAIN) || connection.getLineStyle().equals(EConnectionType.TABLE))) {
                inputMeta=connection.getMetadataTable();
                inputConnecion=connection;
              }
            }
            if (inputMeta != null) {
              if ((!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE))) {
                if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_NONE) && outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_LENGTH)) {
                  String warningMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
                  Problems.add(ProblemStatus.WARNING,this,warningMessage);
                }
 else {
                  schemaSynchronized=false;
                  String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
                  Problems.add(ProblemStatus.ERROR,this,errorMessage);
                }
              }
            }
          }
        }
      }
    }
  }
  if (component.isSchemaAutoPropagated() && (getMetadataList().size() != 0)) {
    IConnection inputConnecion=null;
    INodeConnector nodeConn=getConnectorFromName(EConnectionType.FLOW_MAIN.getName());
    if (nodeConn != null) {
      int maxFlowInput=nodeConn.getMaxLinkInput();
      if (maxFlowInput <= 1 || getComponent().useLookup() || isELTComponent()) {
        IMetadataTable inputMeta=null, outputMeta=getMetadataList().get(0);
        for (        IConnection connection : inputs) {
          if (connection.isActivate() && (connection.getLineStyle().equals(EConnectionType.FLOW_MAIN) || connection.getLineStyle().equals(EConnectionType.TABLE))) {
            inputMeta=connection.getMetadataTable();
            inputConnecion=connection;
          }
        }
        if (inputMeta != null) {
          INodeConnector connector=getConnectorFromName(outputMeta.getAttachedConnector());
          if (connector != null && ((connector.getMaxLinkInput() != 0 && connector.getMaxLinkOutput() != 0) || getComponent().getComponentType() == EComponentType.JOBLET_INPUT_OUTPUT) && (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE))) {
            if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_NONE) && outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_LENGTH)) {
              String warningMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,warningMessage);
            }
 else {
              schemaSynchronized=false;
              String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
 else           if (connector != null && connector.getMaxLinkInput() != 0 && connector.getMaxLinkOutput() == 0) {
            if (!outputMeta.sameMetadataAs(inputMeta,IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE)) {
              schemaSynchronized=false;
              String errorMessage=Messages.getString("String_Node_Str",inputConnecion.getName());
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
        }
        if (outputMeta != null) {
          for (int i=0; i < outputMeta.getListColumns().size(); i++) {
            IMetadataColumn column=outputMeta.getListColumns().get(i);
            String sourceType=column.getType();
            String typevalue=column.getTalendType();
            String currentDbmsId=outputMeta.getDbms();
            if (!typevalue.equals("String_Node_Str") && currentDbmsId != null && !TypesManager.checkDBType(currentDbmsId,typevalue,sourceType)) {
              String errorMessage="String_Node_Str";
              Problems.add(ProblemStatus.WARNING,this,errorMessage);
            }
          }
        }
      }
    }
 else {
      for (      IElementParameter param : this.getElementParameters()) {
        if (param.isShow(getElementParameters()) && param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE)) {
          IMetadataTable table=getMetadataFromConnector(param.getContext());
          IElementParameter connParam=param.getChildParameters().get(EParameterName.CONNECTION.getName());
          if (table != null && connParam != null && !StringUtils.isEmpty((String)connParam.getValue())) {
            for (            IConnection connection : inputs) {
              if (connection.isActivate() && connection.getName().equals(connParam.getValue())) {
                if (!table.sameMetadataAs(connection.getMetadataTable(),IMetadataColumn.OPTIONS_IGNORE_KEY | IMetadataColumn.OPTIONS_IGNORE_NULLABLE | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_PATTERN| IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME| IMetadataColumn.OPTIONS_IGNORE_DBTYPE| IMetadataColumn.OPTIONS_IGNORE_DEFAULT| IMetadataColumn.OPTIONS_IGNORE_BIGGER_SIZE)) {
                  schemaSynchronized=false;
                  String errorMessage=Messages.getString("String_Node_Str",connection.getName());
                  Problems.add(ProblemStatus.ERROR,this,errorMessage);
                }
              }
            }
          }
        }
      }
    }
  }
  if ((getComponent().getComponentType() == EComponentType.JOBLET)) {
    checkJobletSchema();
  }
  if (component.useMerge() && !this.getConnectorFromType(EConnectionType.FLOW_MERGE).isMergeAllowDifferentSchema()) {
    if (getMetadataList().get(0).getListColumns().size() == 0) {
      String errorMessage=Messages.getString("String_Node_Str");
      Problems.add(ProblemStatus.ERROR,this,errorMessage);
    }
 else {
      if (inputs.size() > 0) {
        boolean firstIsMerge=inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE);
        if (firstIsMerge) {
          IMetadataTable firstSchema=inputs.get(0).getMetadataTable();
          if (inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE)) {
            boolean isSame=firstSchema.sameMetadataAs(getMetadataList().get(0),IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME | IMetadataColumn.OPTIONS_IGNORE_DEFAULT | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_DBTYPE);
            if (!isSame) {
              String warningMessage=Messages.getString("String_Node_Str",getUniqueName());
              Problems.add(ProblemStatus.WARNING,this,warningMessage);
            }
          }
        }
      }
    }
    if (inputs.size() > 1) {
      boolean firstIsMerge=inputs.get(0).getLineStyle().equals(EConnectionType.FLOW_MERGE);
      if (firstIsMerge) {
        IMetadataTable firstSchema=inputs.get(0).getMetadataTable();
        boolean isSame=true;
        for (int i=1; i < inputs.size(); i++) {
          if (!firstSchema.sameMetadataAs(inputs.get(i).getMetadataTable(),IMetadataColumn.OPTIONS_IGNORE_DBCOLUMNNAME | IMetadataColumn.OPTIONS_IGNORE_DEFAULT | IMetadataColumn.OPTIONS_IGNORE_COMMENT| IMetadataColumn.OPTIONS_IGNORE_DBTYPE)) {
            isSame=false;
            break;
          }
        }
        if (!isSame) {
          String warningMessage=Messages.getString("String_Node_Str",getUniqueName());
          Problems.add(ProblemStatus.WARNING,this,warningMessage);
        }
      }
    }
  }
  syncSpecialSchema();
}