// ============================================================================
//
// 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.cmd;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.gef.commands.Command;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.PluginChecker;
import org.talend.core.model.components.EComponentType;
import org.talend.core.model.components.IComponent;
import org.talend.core.model.metadata.IMetadataColumn;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.process.EParameterFieldType;
import org.talend.core.model.process.IContext;
import org.talend.core.model.process.IElement;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.model.process.IElementParameterDefaultValue;
import org.talend.core.model.process.IGraphicalNode;
import org.talend.core.model.process.INode;
import org.talend.core.model.process.IProcess;
import org.talend.core.model.process.IProcess2;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.ui.IJobletProviderService;
import org.talend.designer.core.i18n.Messages;
import org.talend.designer.core.model.components.EParameterName;
import org.talend.designer.core.model.components.EmfComponent;
import org.talend.designer.core.model.process.jobsettings.JobSettingsConstants;
import org.talend.designer.core.ui.editor.connections.Connection;
import org.talend.designer.core.ui.editor.nodes.Node;
import org.talend.designer.core.ui.preferences.StatsAndLogsConstants;
import org.talend.designer.core.ui.views.CodeView;
import org.talend.designer.core.ui.views.jobsettings.JobSettings;
import org.talend.designer.core.ui.views.properties.ComponentSettings;
import org.talend.designer.core.utils.DesignerUtilities;
import org.talend.designer.core.utils.ValidationRulesUtil;
import org.talend.designer.runprocess.ItemCacheManager;
/**
* Command that changes a given property. It will call the set or get property value in an element. This element can be
* either a node, a connection or a process. <br/>
*
* $Id: PropertyChangeCommand.java 77427 2012-01-31 10:41:55Z ldong $
*
*/
public class PropertyChangeCommand extends Command {
private final IElement elem;
private final String propName;
private Object newValue;
private Object oldValue;
private boolean repositoryValueWasUsed;
private boolean toUpdate;
private final Map<IElementParameter, Object> oldElementValues;
private ChangeMetadataCommand changeMetadataCommand;
private String propertyTypeName;
private final String updataComponentParamName;
/**
* The property is defined in an element, which can be either a node or a connection.
*
* @param elem
* @param propName
* @param propValue
*/
public PropertyChangeCommand(IElement elem, String propName, Object propValue) {
this.elem = elem;
this.propName = propName;
newValue = propValue;
toUpdate = false;
oldElementValues = new HashMap<IElementParameter, Object>();
setLabel(Messages.getString("PropertyChangeCommand.Label")); //$NON-NLS-1$
// for job settings extra (feature 2710)
// if (JobSettingsConstants.isExtraParameter(propName) ||
// propName.equals(EParameterName.IMPLICIT_TCONTEXTLOAD.getName())) {
// propertyTypeName = JobSettingsConstants.getExtraParameterName(EParameterName.PROPERTY_TYPE.getName());
// updataComponentParamName =
// JobSettingsConstants.getExtraParameterName(EParameterName.UPDATE_COMPONENTS.getName());
// } else {
IElementParameter currentParam = elem.getElementParameter(propName);
propertyTypeName = EParameterName.PROPERTY_TYPE.getName();
for (IElementParameter param : elem.getElementParameters()) {
if (param.getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)
&& param.getCategory().equals(currentParam.getCategory())) {
propertyTypeName = param.getName() + ":" + EParameterName.PROPERTY_TYPE.getName(); //$NON-NLS-1$
break;
}
}
updataComponentParamName = EParameterName.UPDATE_COMPONENTS.getName();
// }
}
@Override
public void execute() {
IElementParameter currentParam = elem.getElementParameter(propName);
oldElementValues.clear();
if (currentParam == null) {
return;
}
if (currentParam.isRepositoryValueUsed()) {
if (currentParam.getFieldType() == EParameterFieldType.MEMO_SQL) {
Object queryStoreValue = elem.getPropertyValue(EParameterName.QUERYSTORE_TYPE.getName());
if (!EmfComponent.BUILTIN.equals(queryStoreValue) || !EmfComponent.TNS_FILE.equals(queryStoreValue)) {
elem.setPropertyValue(EParameterName.QUERYSTORE_TYPE.getName(), EmfComponent.BUILTIN);
}
currentParam.setRepositoryValueUsed(false);
} else {
toUpdate = true;
String oldValueString = elem.getPropertyValue(propName).toString();
if (!oldValueString.endsWith("xsd") && !oldValueString.endsWith("xsd\"")) {
elem.setPropertyValue(propertyTypeName, EmfComponent.BUILTIN);
}
for (IElementParameter param : elem.getElementParameters()) {
if (param.getCategory().equals(currentParam.getCategory())) {
param.setRepositoryValueUsed(false);
}
}
}
repositoryValueWasUsed = true;
} else {
repositoryValueWasUsed = false;
}
oldValue = elem.getPropertyValue(propName);
elem.setPropertyValue(propName, newValue);
// feature 19312
if (propName.contains(EParameterName.USE_DYNAMIC_JOB.getName()) && newValue.equals(false)) {
IElementParameter processParam = elem.getElementParameter(EParameterName.PROCESS.getName());
IElementParameter processTypeParameter = elem.getElementParameter(EParameterName.PROCESS_TYPE_PROCESS.getName());
final String parentName = processParam.getName() + ":"; //$NON-NLS-1$
elem.setPropertyValue(parentName + processTypeParameter.getName(), ""); //$NON-NLS-1$
elem.setPropertyValue(processParam.getName(), ""); //$NON-NLS-1$
}
if (propName.contains(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
boolean isSelectUseDynamic = false;
IElementParameter useDynamicJobParameter = elem.getElementParameter(EParameterName.USE_DYNAMIC_JOB.getName());
if (useDynamicJobParameter != null && useDynamicJobParameter instanceof IElementParameter) {
Object useDynamicJobValue = (Object) useDynamicJobParameter.getValue();
if (useDynamicJobValue != null && useDynamicJobValue instanceof Boolean) {
isSelectUseDynamic = (Boolean) useDynamicJobValue;
}
}
if (isSelectUseDynamic) {
StringBuffer labels = new StringBuffer("");
if (newValue != null) {
String[] strValues = newValue.toString().split(";");
for (int i = 0; i < strValues.length; i++) {
String strValue = strValues[i];
// newValue is the id of the job
ProcessItem processItem = ItemCacheManager.getProcessItem((String) strValue);
if (processItem != null) {
String label = processItem.getProperty().getLabel();
if (i > 0) {
labels.append(";");
}
labels.append(label);
}
}
}
currentParam.getParentParameter().setValue(labels.toString());
} else {
// newValue is the id of the job
ProcessItem processItem = ItemCacheManager.getProcessItem((String) newValue);
if (processItem != null) {
currentParam.getParentParameter().setValue(processItem.getProperty().getLabel());
}
}
}
if (propName.contains(EParameterName.PROCESS_TYPE_VERSION.getName())) {
// newValue is the id of the job
// hywang add for feature 6549
// 1.to see current component if is a jobletComponent by "elem"
boolean isJobletComponent = false;
// Node jobletNode = null;
IJobletProviderService service = null;
if (PluginChecker.isJobLetPluginLoaded()) {
service = (IJobletProviderService) GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
}
if (elem instanceof Node) {
// jobletNode = (Node) elem;
if (service != null) {
isJobletComponent = service.isJobletComponent((Node) elem);
}
}
if (isJobletComponent) {
// 2.if it is a jobletcomponent,reload the component by the version
String id = service.getJobletComponentItem((Node) elem).getId();
String version = (String) newValue;
IComponent newComponent = service.setPropertyForJobletComponent(id, version);
reloadNode((Node) elem, newComponent);
} else {
IElementParameter processIdParam = currentParam.getParentParameter().getChildParameters()
.get(EParameterName.PROCESS_TYPE_PROCESS.getName());
ProcessItem processItem = ItemCacheManager.getProcessItem((String) processIdParam.getValue(), (String) newValue);
if (processItem != null) {
currentParam.getParentParameter().setValue(processItem.getProperty().getLabel());
}
}
}
if (propName.contains(EParameterName.PROCESS_TYPE_CONTEXT.getName())) {
if (elem instanceof Node) {
Node node = (Node) elem;
List<IContext> listContext = node.getProcess().getContextManager().getListContext();
List<String> values = new ArrayList<String>();
for (IContext context : listContext) {
values.add(context.getName());
}
currentParam.setListItemsDisplayName(values.toArray(new String[0]));
currentParam.setListItemsValue(values.toArray(new String[0]));
currentParam.setValue(newValue);
}
}
if (propName.equals(EParameterName.VALIDATION_RULES.getName())) {
if (elem instanceof INode) {
ValidationRulesUtil.createRejectConnector((INode) elem);
ValidationRulesUtil.updateRejectMetatable((INode) elem, null);
if (newValue != null && (!(Boolean) newValue)) {
ValidationRulesUtil.removeRejectConnector((INode) elem);
ValidationRulesUtil.removeRejectConnection((INode) elem);
}
}
}
String dbType = "";
if (newValue instanceof String) {
dbType = (String) newValue;
}
if (propName.equals(EParameterName.DB_TYPE.getName())) {
IElementParameter elementParameter = elem.getElementParameter(EParameterName.DB_VERSION.getName());
IElementParameter elementParameter2 = elem.getElementParameter(EParameterName.SCHEMA_DB.getName());
setDbVersion(elementParameter, dbType);
DesignerUtilities.setSchemaDB(elementParameter2, newValue);
} else if (propName.equals(JobSettingsConstants.getExtraParameterName(EParameterName.DB_TYPE.getName()))) {//$NON-NLS-1$
IElementParameter elementParameter = elem.getElementParameter(JobSettingsConstants
.getExtraParameterName(EParameterName.DB_VERSION.getName()));
IElementParameter elementParameter2 = elem.getElementParameter(JobSettingsConstants
.getExtraParameterName(EParameterName.SCHEMA_DB.getName()));
setDbVersion(elementParameter, dbType);
DesignerUtilities.setSchemaDB(elementParameter2, newValue);
}
if (!toUpdate
&& (currentParam.getFieldType().equals(EParameterFieldType.RADIO)
|| currentParam.getFieldType().equals(EParameterFieldType.CLOSED_LIST)
|| currentParam.getFieldType().equals(EParameterFieldType.CHECK) || currentParam.getFieldType().equals(
EParameterFieldType.AS400_CHECK))) {
toUpdate = false;
for (int i = 0; i < elem.getElementParameters().size(); i++) {
IElementParameter testedParam = elem.getElementParameters().get(i);
String showIf = testedParam.getShowIf();
String notShowIf = testedParam.getNotShowIf();
if (showIf != null) {
if (showIf.contains(currentParam.getName())) {
toUpdate = true;
}
} else {
if (notShowIf != null) {
if (notShowIf.contains(currentParam.getName())) {
toUpdate = true;
}
}
}
if (testedParam.getFieldType() == EParameterFieldType.TABLE) {
String[] tmpShowIfs = testedParam.getListItemsShowIf();
if (tmpShowIfs != null) {
for (String show : tmpShowIfs) {
if (show != null && show.contains(currentParam.getName())) {
toUpdate = true;
}
}
}
tmpShowIfs = testedParam.getListItemsNotShowIf();
if (tmpShowIfs != null) {
for (String show : tmpShowIfs) {
if (show != null && show.contains(currentParam.getName())) {
toUpdate = true;
}
}
}
}
if (currentParam.getFieldType().equals(EParameterFieldType.CLOSED_LIST)) {
if (testedParam.getListItemsShowIf() != null) {
for (int j = 0; j < testedParam.getListItemsShowIf().length && !toUpdate; j++) {
showIf = testedParam.getListItemsShowIf()[j];
notShowIf = testedParam.getListItemsNotShowIf()[j];
if (showIf != null) {
if (showIf.contains(currentParam.getName())) {
toUpdate = true;
}
} else {
if (notShowIf != null) {
if (notShowIf.contains(currentParam.getName())) {
toUpdate = true;
}
}
}
}
}
}
setDefaultValues(currentParam, testedParam);
}
}
if (currentParam.getName().equals(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
toUpdate = true;
}
if (toUpdate) {
elem.setPropertyValue(updataComponentParamName, new Boolean(true));
}
// see bug 9151:100% CPU when typing text.
boolean updateCode = false;
if (getNewValue() instanceof String && elem instanceof INode) {
INode curNode = (INode) elem;
String uniqueName = curNode.getUniqueName();
IProcess process = curNode.getProcess();
if (process != null && process instanceof IProcess2) {
IProcess2 process2 = (IProcess2) process;
List<? extends INode> generatingNodes = null;
if (process2.isProcessModified()) {
process2.setProcessModified(false);
generatingNodes = process2.getGeneratingNodes();
if (generatingNodes != null) {
for (INode genNode : generatingNodes) {
if (genNode.getUniqueName().equals(uniqueName)) {
IElementParameter genParam = genNode.getElementParameter(propName);
if (genParam != null) {
genParam.setValue(newValue);
break;
}
}
}
}
CodeView.refreshCodeView(elem);
process2.setProcessModified(true);
updateCode = true;
}
}
}
// if (!updateCode) {
// CodeView.refreshCodeView(elem);
// }
//
if (elem instanceof IGraphicalNode) {
((IGraphicalNode) elem).checkAndRefreshNode();
}
// See feature 3902
if (needUpdateMonitorConnection()) {
((Connection) elem).setMonitorConnection((Boolean) currentParam.getValue());
}
}
private void setDbVersion(IElementParameter elementParameter, String value) {
if (value.indexOf("Access") != -1) {//$NON-NLS-1$
elementParameter.setValue(StatsAndLogsConstants.ACCESS_VERSION_DRIVER[1]);
elementParameter.setListItemsDisplayName(StatsAndLogsConstants.ACCESS_VERSION_DISPLAY);
elementParameter.setListItemsValue(StatsAndLogsConstants.ACCESS_VERSION_DRIVER);
} else if (value.indexOf("Oracle") != -1) {//$NON-NLS-1$
elementParameter.setValue(StatsAndLogsConstants.ORACLE_VERSION_DRIVER[1]);
elementParameter.setListItemsDisplayName(StatsAndLogsConstants.ORACLE_VERSION_DISPLAY);
elementParameter.setListItemsValue(StatsAndLogsConstants.ORACLE_VERSION_DRIVER);
} else if (value.indexOf("AS400") != -1) {//$NON-NLS-1$
elementParameter.setValue(StatsAndLogsConstants.AS400_VERSION_DRIVER[1]);
elementParameter.setListItemsDisplayName(StatsAndLogsConstants.AS400_VERSION_DISPLAY);
elementParameter.setListItemsValue(StatsAndLogsConstants.AS400_VERSION_DRIVER);
} else if (value.indexOf("Mysql") != -1) {//$NON-NLS-1$
elementParameter.setValue(StatsAndLogsConstants.MYSQL_VERSION_DRIVER[1]);
elementParameter.setListItemsDisplayName(StatsAndLogsConstants.MYSQL_VERSION_DISPLAY);
elementParameter.setListItemsValue(StatsAndLogsConstants.MYSQL_VERSION_DRIVER);
}
}
private boolean needUpdateMonitorConnection() {
if (elem instanceof Connection) {
if (propName.equals(EParameterName.MONITOR_CONNECTION.getName())) {
return true;
}
}
return false;
}
public void setUpdate(boolean update) {
toUpdate = update;
}
/**
* Set the values to default if needed.
*
* @param currentParam Current parameter that has been modified in the interface
* @param testedParam Tested parameter, to know if there is a link for the default values between this parameter and
* the current.
*/
private void setDefaultValues(IElementParameter currentParam, IElementParameter testedParam) {
boolean contains = false;
// zli
for (IElementParameterDefaultValue value : testedParam.getDefaultValues()) {
if (value.getIfCondition() != null) {
if (value.getIfCondition().contains(currentParam.getName())) {
contains = true;
break;
}
}
if (value.getNotIfCondition() != null) {
if (value.getNotIfCondition().contains(currentParam.getName())) {
contains = true;
break;
}
}
}
if (testedParam.getDefaultValues().size() > 0 && contains) {
oldElementValues.put(testedParam, testedParam.getValue());
// if the field is not a schema type, then use standard "set value".
if (!testedParam.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE)) {
String oldMapping = ""; //$NON-NLS-1$
if (!testedParam.getFieldType().equals(EParameterFieldType.CHECK)
&& !testedParam.getFieldType().equals(EParameterFieldType.RADIO)) {
oldMapping = (String) testedParam.getValue();
}
testedParam.setValueToDefault(elem.getElementParameters());
if (testedParam.getFieldType().equals(EParameterFieldType.MAPPING_TYPE)) {
String newMapping = (String) testedParam.getValue();
if (!oldMapping.equals(newMapping)) {
Node node = (Node) elem;
if (node.getMetadataList().size() > 0) {
// to change with:
// IMetadataTable metadataTable = node.getMetadataFromConnector(testedParam.getContext());
IMetadataTable metadataTable = node.getMetadataList().get(0);
metadataTable.setDbms(newMapping);
}
}
}
} else {
// See issue 975, update the schema.
Node node = (Node) elem;
if (node.getMetadataList().size() > 0) {
IMetadataTable metadataTable = null;
IMetadataTable newMetadataTable = null;
if (node.getComponent() != null && "tSalesforceOutput".equals(node.getComponent().getName())) {
// for feature 0014652
boolean isBuiltIn = false;
final IElementParameter elementParameter = node.getElementParameter(EParameterName.PROPERTY_TYPE
.getName());
if (elementParameter != null) {
Object value = elementParameter.getValue();
if ("BUILT_IN".equals(value.toString())) {//$NON-NLS-1$
isBuiltIn = true;
}
}
if (isBuiltIn) {
metadataTable = node.getMetadataFromConnector(testedParam.getContext());
testedParam.setValueToDefault(node.getElementParameters());
IMetadataTable defaultMetadataTable = (IMetadataTable) testedParam.getValue();
if (testedParam.getName().equals("SCHEMA")) {//$NON-NLS-1$
newMetadataTable = defaultMetadataTable;
}
} else {
metadataTable = node.getMetadataFromConnector(testedParam.getContext());
if (testedParam.getName().equals("SCHEMA")) {//$NON-NLS-1$
newMetadataTable = metadataTable;
}
}
IMetadataTable defaultMetadataTable = (IMetadataTable) testedParam.getValue();
if (testedParam.getName().equals("SCHEMA_FLOW")) {//$NON-NLS-1$
IElementParameter param = node.getElementParameter(EParameterName.SCHEMA.getName());
IMetadataTable meta = node.getMetadataFromConnector(param.getContext());
newMetadataTable = meta.clone(true);
List<IMetadataColumn> toAdd = new ArrayList<IMetadataColumn>();
for (IMetadataColumn column : defaultMetadataTable.clone(true).getListColumns()) {
boolean found = false;
for (IMetadataColumn existingColumn : newMetadataTable.getListColumns()) {
if (existingColumn.getLabel().equals(column.getLabel())) {
found = true;
break;
}
}
if (!found) {
toAdd.add(column);
}
newMetadataTable.getListColumns().addAll(toAdd);
}
}
} else {
metadataTable = node.getMetadataFromConnector(testedParam.getContext());
testedParam.setValueToDefault(node.getElementParameters());
newMetadataTable = (IMetadataTable) testedParam.getValue();
}
if (metadataTable != null && newMetadataTable != null) {
newMetadataTable.setTableName(metadataTable.getTableName());
newMetadataTable.setAttachedConnector(metadataTable.getAttachedConnector());
// remove all custom columns first, since new custom columns from default table will be added
// automatically
List<IMetadataColumn> columnsToRemove = new ArrayList<IMetadataColumn>();
for (IMetadataColumn column : metadataTable.getListColumns()) {
if (column.isCustom()) {
columnsToRemove.add(column);
}
}
metadataTable.getListColumns().removeAll(columnsToRemove);
boolean onlyHaveCustomInDefault = true;
List<IMetadataColumn> customColumnsFromDefault = new ArrayList<IMetadataColumn>();
for (IMetadataColumn column : newMetadataTable.getListColumns()) {
if (!column.isCustom()) {
onlyHaveCustomInDefault = false;
} else {
customColumnsFromDefault.add(column);
}
}
metadataTable.getListColumns().addAll(customColumnsFromDefault);
if (onlyHaveCustomInDefault) {
newMetadataTable = metadataTable;
}
changeMetadataCommand = new ChangeMetadataCommand(node, null, null, newMetadataTable);
changeMetadataCommand.execute(true);
}
}
}
}
}
@Override
public void undo() {
IElementParameter currentParam = elem.getElementParameter(propName);
if (repositoryValueWasUsed) {
if (currentParam.getFieldType() == EParameterFieldType.MEMO_SQL) {
elem.setPropertyValue(EParameterName.QUERYSTORE_TYPE.getName(), EmfComponent.REPOSITORY);
} else {
elem.setPropertyValue(propertyTypeName, EmfComponent.REPOSITORY);
}
for (IElementParameter param : elem.getElementParameters()) {
String repositoryValue = param.getRepositoryValue();
if (param.isShow(elem.getElementParameters()) && (repositoryValue != null)
&& param.getCategory().equals(currentParam.getCategory())) {
param.setRepositoryValueUsed(true);
}
}
}
elem.setPropertyValue(propName, oldValue);
if (propName.contains(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
// oldValue is the id of the job
ProcessItem processItem = ItemCacheManager.getProcessItem((String) oldValue);
if (processItem != null) {
currentParam.getParentParameter().setValue(processItem.getProperty().getLabel());
}
}
for (IElementParameter param : oldElementValues.keySet()) {
param.setValue(oldElementValues.get(param));
}
if (toUpdate) {
elem.setPropertyValue(updataComponentParamName, new Boolean(true));
}
if (changeMetadataCommand != null) {
changeMetadataCommand.undo();
}
CodeView.refreshCodeView(elem);
ComponentSettings.switchToCurComponentSettingsView();
JobSettings.switchToCurJobSettingsView();
refreshTraceConnections();
refreshResumingConnections();
if (elem instanceof Node) {
((Node) elem).checkAndRefreshNode();
}
}
@Override
public void redo() {
IElementParameter currentParam = elem.getElementParameter(propName);
if (repositoryValueWasUsed) {
if (currentParam.getFieldType() == EParameterFieldType.MEMO_SQL) {
elem.setPropertyValue(EParameterName.QUERYSTORE_TYPE.getName(), EmfComponent.BUILTIN);
} else {
elem.setPropertyValue(propertyTypeName, EmfComponent.BUILTIN);
}
for (IElementParameter param : elem.getElementParameters()) {
boolean paramFlag = JobSettingsConstants.isExtraParameter(param.getName());
boolean extraFlag = JobSettingsConstants.isExtraParameter(propertyTypeName);
if (paramFlag == extraFlag) {
// for job settings extra.(feature 2710)
param.setRepositoryValueUsed(false);
}
}
}
elem.setPropertyValue(propName, newValue);
if (propName.contains(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
// newValue is the id of the job
ProcessItem processItem = ItemCacheManager.getProcessItem((String) newValue);
if (processItem != null) {
currentParam.getParentParameter().setValue(processItem.getProperty().getLabel());
}
}
if (currentParam.getFieldType().equals(EParameterFieldType.CLOSED_LIST)) {
for (int i = 0; i < elem.getElementParameters().size(); i++) {
IElementParameter param = elem.getElementParameters().get(i);
if (param.getDefaultValues().size() > 0) {
param.setValueToDefault(elem.getElementParameters());
}
}
}
if (toUpdate) {
elem.setPropertyValue(updataComponentParamName, new Boolean(true));
}
if (changeMetadataCommand != null) {
changeMetadataCommand.redo();
}
CodeView.refreshCodeView(elem);
ComponentSettings.switchToCurComponentSettingsView();
JobSettings.switchToCurJobSettingsView();
refreshTraceConnections();
refreshResumingConnections();
if (elem instanceof Node) {
((Node) elem).checkAndRefreshNode();
}
}
private void refreshTraceConnections() {
if (propName.equals(EParameterName.TRACES_CONNECTION_ENABLE.getName()) || this.elem instanceof Connection) {
// TDI-8003:if the connection's style is RunIf,its trace should be null here
if (((Connection) this.elem).getConnectionTrace() != null && !propName.equals(EParameterName.CONDITION))
((Connection) this.elem).getConnectionTrace().setPropertyValue(EParameterName.TRACES_SHOW_ENABLE.getName(), true);
}
}
private void refreshResumingConnections() {
if (propName.equals(EParameterName.RESUMING_CHECKPOINT.getName()) || this.elem instanceof Connection) {
if (((Connection) this.elem).getConnectionTrace() != null && !propName.equals(EParameterName.CONDITION))
((Connection) this.elem).getConnectionTrace()
.setPropertyValue(EParameterName.RESUMING_CHECKPOINT.getName(), true);
}
}
public String getPropName() {
return this.propName;
}
public IElement getElement() {
return this.elem;
}
public Object getOldValue() {
return this.oldValue;
}
public Object getNewValue() {
return this.newValue;
}
private Map<String, Object> createParameters(Node node) {
if (node == null) {
Collections.emptyMap();
}
Map<String, Object> parameters = new HashMap<String, Object>();
if (node.getComponent().getComponentType() != EComponentType.JOBLET) {
if (node.getExternalData() != null) {
parameters.put(INode.RELOAD_PARAMETER_EXTERNAL_BYTES_DATA, node.getExternalData());
}
parameters.put(INode.RELOAD_PARAMETER_METADATA_LIST, node.getMetadataList());
}
parameters.put(INode.RELOAD_PARAMETER_ELEMENT_PARAMETERS, node.getElementParameters());
parameters.put(INode.RELOAD_PARAMETER_CONNECTORS, node.getListConnector());
return parameters;
}
private void reloadNode(Node node, IComponent newComponent) {
if (node == null || newComponent == null) {
return;
}
Map<String, Object> parameters = createParameters(node);
if (!parameters.isEmpty()) {
node.reloadComponent(newComponent, parameters);
}
}
}