// ============================================================================ // // 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.List; import org.eclipse.gef.commands.Command; import org.talend.core.model.metadata.IMetadataTable; import org.talend.core.model.process.IConnection; import org.talend.core.model.process.IConnectionCategory; import org.talend.core.model.process.INode; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.ui.editor.process.Process; /** * yzhang class global comment. Detailled comment */ public class ChangeOutputConnectionOrderCommand extends Command { private INode multipleOutputNode; private List<IConnection> connectionInNewOrder; private List<IConnection> connectionInOldOrder; /** * yzhang ChangeOutputConnectionOrderCommand constructor comment. */ public ChangeOutputConnectionOrderCommand(INode multipleOutputNode, List<IConnection> outputConnections) { this.multipleOutputNode = multipleOutputNode; this.connectionInNewOrder = outputConnections; this.connectionInOldOrder = (List<IConnection>) multipleOutputNode.getOutgoingConnections(); if (connectionInNewOrder.size() != connectionInOldOrder.size()) { throw new IllegalArgumentException("new connection list should have the same size as the old one"); //$NON-NLS-1$ } this.setLabel(Messages.getString("ChangeMergeOrderCommand.label")); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.gef.commands.Command#execute() */ @Override public void execute() { List<IMetadataTable> metadataList = new ArrayList<IMetadataTable>(); for (IConnection connection : connectionInNewOrder) { if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) { if (!metadataList.contains(connection.getMetadataTable())) { metadataList.add(connection.getMetadataTable()); } } } multipleOutputNode.setMetadataList(metadataList); multipleOutputNode.setOutgoingConnections(connectionInNewOrder); connectionInNewOrder.get(0).updateAllId(); ((Process) multipleOutputNode.getProcess()).checkStartNodes(); } /* * (non-Javadoc) * * @see org.eclipse.gef.commands.Command#undo() */ @Override public void undo() { List<IMetadataTable> metadataList = new ArrayList<IMetadataTable>(); // if (hasBuiltInConnector) { for (IConnection connection : connectionInOldOrder) { if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) { if (!metadataList.contains(connection.getMetadataTable())) { metadataList.add(connection.getMetadataTable()); } } } // } multipleOutputNode.setMetadataList(metadataList); multipleOutputNode.setOutgoingConnections(connectionInOldOrder); connectionInOldOrder.get(0).updateAllId(); ((Process) multipleOutputNode.getProcess()).checkStartNodes(); } }