// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.designer.core.ui.editor.update.cmd; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.collections.map.HashedMap; import org.eclipse.gef.commands.Command; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.xml.XmlUtil; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.IESBService; import org.talend.core.PluginChecker; import org.talend.core.model.metadata.IEbcdicConstant; import org.talend.core.model.metadata.IMetadataColumn; import org.talend.core.model.metadata.IMetadataTable; import org.talend.core.model.metadata.MetadataToolHelper; import org.talend.core.model.metadata.QueryUtil; import org.talend.core.model.metadata.builder.ConvertionHelper; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.core.model.metadata.builder.connection.Query; import org.talend.core.model.metadata.builder.connection.SAPFunctionUnit; import org.talend.core.model.metadata.builder.connection.SAPIDocUnit; import org.talend.core.model.metadata.builder.connection.ValidationRulesConnection; import org.talend.core.model.metadata.builder.connection.impl.XmlFileConnectionImpl; import org.talend.core.model.metadata.designerproperties.RepositoryToComponentProperty; import org.talend.core.model.process.EConnectionType; import org.talend.core.model.process.EParameterFieldType; import org.talend.core.model.process.IConnection; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.IExternalData; import org.talend.core.model.process.IExternalNode; import org.talend.core.model.process.INode; import org.talend.core.model.process.INodeConnector; import org.talend.core.model.process.IProcess2; import org.talend.core.model.process.node.IExternalMapTable; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.DatabaseConnectionItem; import org.talend.core.model.properties.Item; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.update.EUpdateResult; import org.talend.core.model.update.UpdateResult; import org.talend.core.model.update.UpdatesConstants; import org.talend.core.model.utils.TalendTextUtils; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.service.IDesignerMapperService; import org.talend.core.ui.ICDCProviderService; import org.talend.core.ui.IEBCDICProviderService; import org.talend.core.ui.IJobletProviderService; import org.talend.cwm.helper.ConnectionHelper; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.model.components.EmfComponent; import org.talend.designer.core.ui.editor.cmd.ChangeMetadataCommand; import org.talend.designer.core.ui.editor.cmd.PropertyChangeCommand; import org.talend.designer.core.ui.editor.nodes.Node; import org.talend.designer.core.ui.editor.update.UpdateManagerUtils; import org.talend.designer.core.utils.SAPParametersUtils; import org.talend.repository.UpdateRepositoryUtils; import org.talend.repository.model.ProjectNodeHelper; /** * ggu class global comment. Detailled comment * */ public class UpdateNodeParameterCommand extends Command { private UpdateResult result; public UpdateNodeParameterCommand(UpdateResult result) { super(); this.result = result; } @Override public void execute() { if (result == null) { return; } Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } switch (result.getUpdateType()) { case NODE_PROPERTY: updateProperty(); break; case NODE_SCHEMA: updateSchema(); break; case NODE_QUERY: updateQuery(); break; case NODE_SAP_FUNCTION: updateSAPParameters(); break; case NODE_SAP_IDOC: updateSAPIDocParameters(); break; case NODE_VALIDATION_RULE: updateValidationRule(); break; default: return; } if (updateObject instanceof Node) { Node node = (Node) updateObject; if (node.getProcess() instanceof IProcess2) { PropertyChangeCommand pcc = new PropertyChangeCommand(node, EParameterName.UPDATE_COMPONENTS.getName(), Boolean.TRUE); ((IProcess2) node.getProcess()).getCommandStack().execute(pcc); } } } private void updateSAPIDocParameters() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } boolean builtin = true; if (updateObject instanceof Node) { Node node = (Node) updateObject; if (result.getResultType() == EUpdateResult.UPDATE) { if (result.isChecked()) { if (result.getParameter() instanceof SAPIDocUnit) { SAPIDocUnit unit = (SAPIDocUnit) result.getParameter(); for (IElementParameter param : node.getElementParameters()) { SAPParametersUtils.getSAPIDocParams(node, unit.getConnection(), param, unit.getName()); } builtin = false; } } } if (builtin) { // built-in node.setPropertyValue(EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); for (IElementParameter param : node.getElementParameters()) { SAPParametersUtils.setNoRepositoryIDocParams(param); } } } } /** * DOC YeXiaowei Comment method "updateSAPParameters". */ private void updateSAPParameters() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } boolean builtin = true; if (updateObject instanceof Node) { Node node = (Node) updateObject; if (result.getResultType() == EUpdateResult.UPDATE) { if (result.isChecked()) { if (result.getParameter() instanceof SAPFunctionUnit) { SAPFunctionUnit unit = (SAPFunctionUnit) result.getParameter(); for (IElementParameter param : node.getElementParameters()) { SAPParametersUtils.retrieveSAPParams(node, unit.getConnection(), param, unit.getLabel()); } builtin = false; } } } if (builtin) { // built-in node.setPropertyValue(EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); for (IElementParameter param : node.getElementParameters()) { SAPParametersUtils.setNoRepositoryParams(param); } } } } private void updateValidationRule() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } if (updateObject instanceof Node) { Node node = (Node) updateObject; if (result.getResultType() == EUpdateResult.UPDATE) { if (result.isChecked()) { if (result.getParameter() instanceof ValidationRulesConnection) { ValidationRulesConnection connection = (ValidationRulesConnection) result.getParameter(); if (connection != null) { node.setPropertyValue(EParameterName.VALIDATION_RULE_TYPE.getName(), EmfComponent.REPOSITORY); } } } } } } @SuppressWarnings("unchecked") private void updateProperty() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } if (updateObject instanceof Node) { // opened job Node node = (Node) updateObject; boolean update = false; // added by wzhang for bug 9302 boolean isXsdPath = false; Object parameter = result.getParameter(); if (parameter instanceof XmlFileConnectionImpl) { String filePath = ((XmlFileConnectionImpl) parameter).getXmlFilePath(); if (filePath != null) { if (XmlUtil.isXSDFile(filePath)) { isXsdPath = true; } } } if (result.getResultType() == EUpdateResult.UPDATE) { // upgrade from repository if (result.isChecked()) { for (IElementParameter param : node.getElementParameters()) { String repositoryValue = param.getRepositoryValue(); if ((repositoryValue != null) && (param.isShow(node.getElementParameters()) || (node instanceof INode && ((INode) node).getComponent().getName() .equals("tAdvancedFileOutputXML")) || (node instanceof INode && ((INode) node) .getComponent().getName().equals("tESBProviderRequest")))) { //$NON-NLS-1$ if (param.getName().equals(EParameterName.PROPERTY_TYPE.getName()) || param.getFieldType() == EParameterFieldType.MEMO_SQL) { continue; } if (param.getFieldType().equals(EParameterFieldType.FILE) && isXsdPath) { continue; } IMetadataTable table = null; if (!node.getMetadataList().isEmpty()) { table = node.getMetadataList().get(0); } Object objectValue = RepositoryToComponentProperty.getValue( (org.talend.core.model.metadata.builder.connection.Connection) result.getParameter(), repositoryValue, table); if (objectValue == null || "".equals(objectValue)) { if (GlobalServiceRegister.getDefault().isServiceRegistered(IESBService.class)) { IESBService service = (IESBService) GlobalServiceRegister.getDefault().getService( IESBService.class); if (service != null) { String propertyValue = (String) node .getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); if (node.getComponent().getName().startsWith("tESB")) { if (propertyValue.contains(" - ")) { propertyValue = propertyValue.split(" - ")[0]; } } IRepositoryViewObject lastVersion = UpdateRepositoryUtils .getRepositoryObjectById(propertyValue); if (lastVersion != null) { Item item = lastVersion.getProperty().getItem(); if (item != null) { objectValue = service.getValue(item, repositoryValue, node); } } } } } if (param.getName().equals(EParameterName.CDC_TYPE_MODE.getName())) { // String propertyValue = (String) node.getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE .getName()); Item item = null; IRepositoryViewObject lastVersion = UpdateRepositoryUtils.getRepositoryObjectById(propertyValue); if (lastVersion != null) { item = lastVersion.getProperty().getItem(); } if (item != null && PluginChecker.isCDCPluginLoaded()) { ICDCProviderService service = (ICDCProviderService) GlobalServiceRegister.getDefault() .getService(ICDCProviderService.class); if (service != null) { try { List<IRepositoryViewObject> all; all = CorePlugin.getDefault().getProxyRepositoryFactory() .getAll(ERepositoryObjectType.METADATA_CONNECTIONS); for (IRepositoryViewObject obj : all) { Item tempItem = obj.getProperty().getItem(); if (tempItem instanceof DatabaseConnectionItem) { String cdcLinkId = service .getCDCConnectionLinkId((DatabaseConnectionItem) tempItem); if (cdcLinkId != null && item.getProperty().getId().equals(cdcLinkId)) { objectValue = RepositoryToComponentProperty.getValue( ((DatabaseConnectionItem) tempItem).getConnection(), repositoryValue, node.getMetadataList().get(0)); } } } } catch (PersistenceException e) { ExceptionHandler.process(e); } } } } if (objectValue != null) { if (param.getFieldType().equals(EParameterFieldType.CLOSED_LIST) && repositoryValue.equals(UpdatesConstants.TYPE)) { boolean found = false; String[] items = param.getListRepositoryItems(); for (int i = 0; (i < items.length) && (!found); i++) { if (objectValue.equals(items[i])) { found = true; node.setPropertyValue(param.getName(), param.getListItemsValue()[i]); } } } else { // update tFileInputExcel job if (param.getFieldType().equals(EParameterFieldType.TABLE)) { String name = param.getName(); if (name.equals("ROOT") || name.equals("LOOP") || name.equals("GROUP") && objectValue instanceof List) { param.setValue(objectValue); } else if (param.getName().equals("SHEETLIST") && objectValue instanceof List) { List<Map<String, Object>> paramMaps = (List<Map<String, Object>>) param.getValue(); if (paramMaps == null) { paramMaps = new ArrayList<Map<String, Object>>(); node.setPropertyValue(param.getName(), paramMaps); } else { // hywang add for 9537 List<Map<String, Object>> objectValueList = (List<Map<String, Object>>) objectValue; if (paramMaps.size() < objectValueList.size()) { paramMaps.clear(); for (int i = 0; i < objectValueList.size(); i++) { Map<String, Object> map = objectValueList.get(i); paramMaps.add(map); } } else { String value = null; List<String> repNames = new ArrayList<String>(); for (int i = 0; i < objectValueList.size(); i++) { repNames.add(objectValueList.get(i).get("SHEETNAME").toString()); } for (int j = 0; j < paramMaps.size(); j++) { Map<String, Object> map = paramMaps.get(j); value = map.get("SHEETNAME").toString(); if (!repNames.contains(value)) { paramMaps.remove(j); } } } } } else // fix 18011 :after change the jars in wizard, the update manager can't detect // it in jobs if (param.getName().equals("DRIVER_JAR") && objectValue instanceof List) { param.setValue(objectValue); } } else { node.setPropertyValue(param.getName(), objectValue); } } } else if (param.getFieldType().equals(EParameterFieldType.TABLE) && UpdatesConstants.XML_MAPPING.equals(repositoryValue)) { RepositoryToComponentProperty.getTableXMLMappingValue( (org.talend.core.model.metadata.builder.connection.Connection) result.getParameter(), (List<Map<String, Object>>) param.getValue(), node); } else if (param.getFieldType().equals(EParameterFieldType.TABLE) && param.getName().equals("PARAMS")) { objectValue = RepositoryToComponentProperty.getValue( (org.talend.core.model.metadata.builder.connection.Connection) result.getParameter(), "PARAMS", node.getMetadataList().get(0)); List<Map<String, Object>> paramMaps = (List<Map<String, Object>>) param.getValue(); if (paramMaps == null) { paramMaps = new ArrayList<Map<String, Object>>(); } else { paramMaps.clear(); } if (objectValue != null) { List<String> objectValueList = (List<String>) objectValue; for (int i = 0; i < objectValueList.size(); i++) { Map<String, Object> map = new HashedMap(); map.put("VALUE", TalendTextUtils.addQuotes(objectValueList.get(i))); paramMaps.add(map); } } } if (!("tMDMReceive".equals(node.getComponent().getName()) && "XPATH_PREFIX".equals(param //$NON-NLS-1$ //$NON-NLS-2$ .getRepositoryValue()))) { param.setRepositoryValueUsed(true); param.setReadOnly(true); update = true; } } } } } if (!update) { // bult-in node.setPropertyValue(EParameterName.PROPERTY_TYPE.getName(), EmfComponent.BUILTIN); for (IElementParameter param : node.getElementParameters()) { String repositoryValue = param.getRepositoryValue(); if (param.isShow(node.getElementParameters()) && (repositoryValue != null)) { if (param.getName().equals(EParameterName.PROPERTY_TYPE.getName()) || param.getFieldType() == EParameterFieldType.MEMO_SQL) { continue; } param.setRepositoryValueUsed(false); param.setReadOnly(false); } } } } } @SuppressWarnings("unchecked") private void updateSchema() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } if (updateObject instanceof Node) { // opened job Node node = (Node) updateObject; boolean builtIn = true; final IExternalNode externalNode = node.getExternalNode(); if (result.getResultType() == EUpdateResult.UPDATE) { if (result.isChecked()) { if (result.getParameter() instanceof List) { // for ebcdic if (PluginChecker.isEBCDICPluginLoaded()) { IEBCDICProviderService service = (IEBCDICProviderService) GlobalServiceRegister.getDefault() .getService(IEBCDICProviderService.class); if (service != null) { if (service.isEbcdicNode(node)) { List<Object> parameter = (List<Object>) result.getParameter(); if (parameter.size() >= 2) { IMetadataTable newTable = (IMetadataTable) parameter.get(0); String schemaName = (String) parameter.get(1); IMetadataTable metadataTable = MetadataToolHelper.getMetadataTableFromNode(node, schemaName); if (metadataTable != null) { MetadataToolHelper.copyTable(newTable, metadataTable); } syncSchemaForEBCDIC(node, metadataTable); } return; } } } // for tMap if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerMapperService.class)) { IDesignerMapperService service = (IDesignerMapperService) GlobalServiceRegister.getDefault() .getService(IDesignerMapperService.class); if (service == null || externalNode == null || externalNode.getExternalData() == null) { return; } List<Object> parameter = (List<Object>) result.getParameter(); if (parameter.size() == 2) { if (node.getComponent() != null && "tMap".equals(node.getComponent().getName())) { //$NON-NLS-1$ IMetadataTable newTable = (IMetadataTable) parameter.get(0); String schemaId = (String) parameter.get(1); service.updateMapperTableEntries(externalNode, schemaId, newTable); node.setMetadataList(externalNode.getMetadataList()); syncSchemaForTMap(node); // update metadataList,or it will cause bug 21080 for (IExternalMapTable latestTable : externalNode.getExternalData().getOutputTables()) { for (IMetadataTable tableExsit : node.getMetadataList()) { // find table,and update the table if (latestTable.getName().equals(tableExsit.getTableName())) { List<IMetadataColumn> newColumns = newTable.getListColumns(); for (IMetadataColumn column : tableExsit.getListColumns()) { for (IMetadataColumn newColumn : newColumns) { if (newColumn.getLabel().equals(column.getLabel())) { column.setTalendType(newColumn.getTalendType()); column.setNullable(newColumn.isNullable()); column.setComment(newColumn.getComment()); column.setDefault(newColumn.getDefault()); column.setLength(newColumn.getLength()); column.setType(newColumn.getType()); column.setKey(newColumn.isKey()); column.setPrecision(newColumn.getPrecision()); break; } } } break; } } } } } return; } } else if (result.getParameter() instanceof IMetadataTable) { IMetadataTable newTable = (IMetadataTable) result.getParameter(); // node.getMetadataFromConnector(newTable.getAttachedConnector()).setListColumns(newTable. // getListColumns()); if (newTable != null) { for (INodeConnector nodeConnector : node.getListConnector()) { if (nodeConnector.getBaseSchema().equals(newTable.getAttachedConnector())) { List<IElementParameter> params = node .getElementParametersFromField(EParameterFieldType.SCHEMA_TYPE); // IElementParameter param = // node.getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE); if (params != null) { for (IElementParameter param : params) { ChangeMetadataCommand cmd = null; if (param.getChildParameters() != null && param.getChildParameters().get("REPOSITORY_SCHEMA_TYPE") != null && result.getContextModeConnectionItem() != null) { final Object value = param.getChildParameters().get("REPOSITORY_SCHEMA_TYPE") .getValue(); String idAndName = result.getContextModeConnectionItem().getProperty().getId() + UpdatesConstants.SEGMENT_LINE + newTable.getLabel(); if (idAndName.equals(value)) { cmd = new ChangeMetadataCommand(node, param, null, newTable); } } else { cmd = new ChangeMetadataCommand(node, param, null, newTable); } if (cmd != null) { // wzhang added to fix 9251. get the current connection. String propertyValue = (String) node .getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); IRepositoryViewObject lastVersion = UpdateRepositoryUtils .getRepositoryObjectById(propertyValue); Connection repositoryConn = null; if (lastVersion != null) { final Item item = lastVersion.getProperty().getItem(); if (item != null && item instanceof ConnectionItem) { repositoryConn = ((ConnectionItem) item).getConnection(); } } cmd.setConnection(repositoryConn); cmd.setRepositoryMode(true); cmd.execute(true); } } } else { MetadataToolHelper.copyTable(newTable, node.getMetadataFromConnector(nodeConnector.getName())); } } } builtIn = false; } } } } else if (result.getResultType() == EUpdateResult.RENAME) { List<Object> parameter = (List<Object>) result.getParameter(); if (parameter.size() >= 3) { IMetadataTable newTable = (IMetadataTable) parameter.get(0); String oldSourceId = (String) parameter.get(1); String newSourceId = (String) parameter.get(2); // for ebcdic if (PluginChecker.isEBCDICPluginLoaded()) { IEBCDICProviderService service = (IEBCDICProviderService) GlobalServiceRegister.getDefault().getService( IEBCDICProviderService.class); if (service != null) { if (service.isEbcdicNode(node)) { String[] sourceIdAndChildName = UpdateManagerUtils.getSourceIdAndChildName(oldSourceId); final String oldSchemaName = sourceIdAndChildName[1]; sourceIdAndChildName = UpdateManagerUtils.getSourceIdAndChildName(newSourceId); final String newSchemaName = sourceIdAndChildName[1]; Map<String, Object> lineValue = (Map<String, Object>) parameter.get(3); if (lineValue != null) { IMetadataTable metadataTable = MetadataToolHelper.getMetadataTableFromNode(node, oldSchemaName); Object schemaName = lineValue.get(IEbcdicConstant.FIELD_SCHEMA); if (metadataTable != null && schemaName != null) { lineValue.put(IEbcdicConstant.FIELD_SCHEMA, newSchemaName); MetadataToolHelper.copyTable(newTable, metadataTable); syncSchemaForEBCDIC(node, metadataTable); metadataTable.setLabel(newSchemaName); } } return; } } } // for tmap if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerMapperService.class)) { IDesignerMapperService service = (IDesignerMapperService) GlobalServiceRegister.getDefault().getService( IDesignerMapperService.class); if (service == null || externalNode == null || externalNode.getExternalData() == null) { return; } IExternalData externalData = externalNode.getExternalData(); parameter = (List<Object>) result.getParameter(); if (parameter.size() == 3) { if (node.getComponent() != null && "tMap".equals(node.getComponent().getName())) { //$NON-NLS-1$ newTable = (IMetadataTable) parameter.get(0); String schemaId = (String) parameter.get(1); String newSchemaId = (String) parameter.get(2); service.renameMapperTable(externalNode, schemaId, newSchemaId, newTable); node.setMetadataList(externalNode.getMetadataList()); syncSchemaForTMap(node); } } return; } String schemaParamName = UpdatesConstants.SCHEMA + UpdatesConstants.COLON + EParameterName.REPOSITORY_SCHEMA_TYPE.getName(); IElementParameter repositoryParam = node.getElementParameter(schemaParamName); if (repositoryParam != null && oldSourceId.equals(repositoryParam.getValue())) { node.setPropertyValue(schemaParamName, newSourceId); if (newTable != null) { for (INodeConnector nodeConnector : node.getListConnector()) { if (nodeConnector.getBaseSchema().equals(newTable.getAttachedConnector())) { MetadataToolHelper .copyTable(newTable, node.getMetadataFromConnector(nodeConnector.getName())); } } } builtIn = false; } // for tELTAggregate schemaParamName = UpdatesConstants.SCHEMA_TARGET + UpdatesConstants.COLON + EParameterName.REPOSITORY_SCHEMA_TYPE.getName(); repositoryParam = node.getElementParameter(schemaParamName); if (repositoryParam != null && oldSourceId.equals(repositoryParam.getValue())) { node.setPropertyValue(schemaParamName, newSourceId); if (newTable != null) { for (INodeConnector nodeConnector : node.getListConnector()) { if (nodeConnector.getBaseSchema().equals(repositoryParam.getContext())) { MetadataToolHelper .copyTable(newTable, node.getMetadataFromConnector(nodeConnector.getName())); } } } builtIn = false; } } } else if (result.getResultType() == EUpdateResult.BUIL_IN) { // for tELTAgrregate if (UpdatesConstants.SCHEMA_TARGET.equals(result.getParameter())) { node.setPropertyValue(UpdatesConstants.SCHEMA_TARGET + ":" + EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); } else { // for ebcdic if (PluginChecker.isEBCDICPluginLoaded()) { IEBCDICProviderService service = (IEBCDICProviderService) GlobalServiceRegister.getDefault().getService( IEBCDICProviderService.class); if (service != null) { if (service.isEbcdicNode(node)) { Object parameter = result.getParameter(); if (parameter instanceof Map) { Map<String, Object> lineValue = (Map<String, Object>) parameter; lineValue.remove(IEbcdicConstant.FIELD_SCHEMA + IEbcdicConstant.REF_TYPE); } return; } } } if (PluginChecker.isJobLetPluginLoaded()) { IJobletProviderService service = (IJobletProviderService) GlobalServiceRegister.getDefault().getService( IJobletProviderService.class); if (service != null && service.isJobletInOutComponent(node)) { node.setPropertyValue( EParameterName.SCHEMA_TYPE.getName() + ":" + EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); } } node.setPropertyValue(EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); for (IElementParameter param : node.getElementParameters()) { SAPParametersUtils.setNoRepositoryParams(param); } } } else if (result.getResultType() == EUpdateResult.DELETE) { node.setPropertyValue(EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); } else if (result.getResultType() == EUpdateResult.RELOAD) { List<Object> parameter = (List<Object>) result.getParameter(); String connectionId = null; String tableLabel = null; IRepositoryViewObject toReload = null; IMetadataTable tableToReload = null; if (parameter instanceof List) { List listParameter = parameter; connectionId = (String) node.getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); tableLabel = ((String) listParameter.get(0)).split(UpdatesConstants.SEGMENT_LINE)[0]; } if (connectionId != null) { try { toReload = ProxyRepositoryFactory.getInstance().getLastVersion(connectionId); } catch (PersistenceException e) { ExceptionHandler.process(e); } } if (toReload != null) { Item item = toReload.getProperty().getItem(); if (item != null && item instanceof DatabaseConnectionItem) { DatabaseConnectionItem dbItem = (DatabaseConnectionItem) item; Connection connection = dbItem.getConnection(); if (connection instanceof DatabaseConnection) { DatabaseConnection dbConn = (DatabaseConnection) connection; Set<MetadataTable> tables = ProjectNodeHelper.getTablesFromSpecifiedDataPackage(dbConn); if (tables != null && !tables.isEmpty()) { Iterator it = tables.iterator(); while (it.hasNext() && tableToReload == null) { MetadataTable table = (MetadataTable) it.next(); String label = table.getLabel(); if (tableLabel != null) { if (label != null && label.equals(tableLabel)) { tableToReload = ConvertionHelper.convert(table); break; } } } } Set<org.talend.core.model.metadata.builder.connection.MetadataTable> newTables = ConnectionHelper .getTables(connection); if (newTables != null && !newTables.isEmpty() && tableToReload == null) { Iterator it = newTables.iterator(); while (it.hasNext() && tableToReload == null) { MetadataTable table = (MetadataTable) it.next(); String label = table.getLabel(); if (tableLabel != null) { if (label != null && label.equals(tableLabel)) { tableToReload = ConvertionHelper.convert(table); break; } } } } } } if (tableToReload != null) { int index = -1; List<IMetadataTable> tablesInNode = node.getMetadataList(); for (IMetadataTable table : tablesInNode) { if (table.getLabel().equals(tableToReload.getLabel())) { index = tablesInNode.indexOf(table); break; } } if (index >= 0) { IMetadataTable oldTable = tablesInNode.get(index); /* dbms and Connector should be transfer when reloaded the table,20024 */ tableToReload.setAttachedConnector(oldTable.getAttachedConnector()); tableToReload.setDbms(oldTable.getDbms()); tablesInNode.remove(index); tablesInNode.add(index, tableToReload); builtIn = false; } } } } // bug 23326 if (builtIn) { // bult-in node.setPropertyValue(EParameterName.SCHEMA_TYPE.getName(), EmfComponent.BUILTIN); } } } /** * nrousseau Comment method "synchSchemaForEBCDIC". */ private void syncSchemaForEBCDIC(Node node, IMetadataTable metadataTable) { for (IConnection conn : node.getOutgoingConnections()) { if (conn.getLineStyle() == EConnectionType.FLOW_MAIN && metadataTable.getTableName().equals(conn.getMetadataTable().getTableName())) { Node target = (Node) conn.getTarget(); IElementParameter schemaTypeParam = target.getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE); if (schemaTypeParam != null) { ChangeMetadataCommand cmd = new ChangeMetadataCommand(target, schemaTypeParam, null, metadataTable); cmd.setRepositoryMode(true); cmd.execute(true); } } } } private void syncSchemaForTMap(Node node) { for (IConnection conn : node.getOutgoingConnections()) { if (conn.getLineStyle() == EConnectionType.FLOW_MAIN) { IMetadataTable metadataTable = null; for (IMetadataTable table : node.getMetadataList()) { if (table.getTableName() != null && table.getTableName().equals(conn.getMetadataTable().getTableName())) { metadataTable = table; } } if (metadataTable != null) { Node target = (Node) conn.getTarget(); IElementParameter schemaTypeParam = target.getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE); if (schemaTypeParam != null) { ChangeMetadataCommand cmd = new ChangeMetadataCommand(target, schemaTypeParam, null, metadataTable); cmd.setRepositoryMode(true); cmd.execute(true); } } } } } private void updateQuery() { Object updateObject = result.getUpdateObject(); if (updateObject == null) { return; } if (updateObject instanceof Node) { // opened job Node node = (Node) updateObject; boolean update = false; if (result.getResultType() == EUpdateResult.UPDATE) { if (result.isChecked()) { Query query = (Query) result.getParameter(); if (query != null) { for (IElementParameter param : node.getElementParameters()) { if (param.getFieldType() == EParameterFieldType.MEMO_SQL && UpdatesConstants.QUERY.equals(param.getName())) { // modefied by hyWang String value = query.getValue(); if (!query.isContextMode()) { value = QueryUtil.checkAndAddQuotes(value); } param.setValue(value); param.setRepositoryValueUsed(true); param.setReadOnly(true); update = true; } } } } } if (!update) { node.setPropertyValue(EParameterName.QUERYSTORE_TYPE.getName(), EmfComponent.BUILTIN); IElementParameter sqlParam = node.getElementParameterFromField(EParameterFieldType.MEMO_SQL); if (sqlParam != null) { sqlParam.setRepositoryValueUsed(false); sqlParam.setReadOnly(false); } } } } }