// ============================================================================ // // 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.List; import org.eclipse.draw2d.geometry.Point; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.ui.PlatformUI; import org.talend.core.model.components.EComponentType; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.IGraphicalNode; import org.talend.core.model.update.EUpdateItemType; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.model.process.AbstractProcessProvider; import org.talend.designer.core.ui.editor.nodecontainer.NodeContainer; import org.talend.designer.core.ui.editor.process.Process; import org.talend.designer.core.ui.views.problems.Problems; /** * Command that create a new node. <br/> * * $Id: CreateNodeContainerCommand.java 83067 2012-05-08 09:56:53Z zwzhao $ * */ public class CreateNodeContainerCommand extends CreateCommand { private final NodeContainer nodeContainer; /** * Create the node on the given diagram. * * @param diagram * @param node * @param location */ public CreateNodeContainerCommand(Process process, NodeContainer nodeContainer, Point location) { super(Messages.getString("CreateNodeCommand.Label"), process, location); //$NON-NLS-1$ this.nodeContainer = nodeContainer; } @SuppressWarnings("unchecked")//$NON-NLS-1$ @Override public boolean canExecute() { for (IGraphicalNode currentNode : (List<IGraphicalNode>) process.getGraphicalNodes()) { if ((currentNode.getLocation().x == location.x) && (currentNode.getLocation().y == location.y)) { return false; } // check if the component is sigleton // see bug 3903 if (currentNode.getComponent() == nodeContainer.getNode().getComponent() && nodeContainer.getNode().getComponent().isSingleton()) { return false; } } AbstractProcessProvider provider = AbstractProcessProvider.findProcessProviderFromPID(nodeContainer.getNode() .getComponent().getPluginExtension()); if (provider != null) { if (!provider.canCreateNode(nodeContainer.getNode())) { return false; } } return true; } @Override public void execute() { if (this.location != null) { this.nodeContainer.getNode().setLocation(this.location); } AbstractProcessProvider provider = AbstractProcessProvider.findProcessProviderFromPID(nodeContainer.getNode() .getComponent().getPluginExtension()); IElementParameter ep = nodeContainer.getNode().getElementParameter(EParameterName.UNIQUE_NAME.getName()); process.addUniqueNodeName(ep.getValue().toString()); if (provider == null || (provider != null && provider.containNodeInMemoryNotProcess())) { this.process.addNodeContainer(this.nodeContainer); process.checkStartNodes(); nodeContainer.getNode().checkAndRefreshNode(); // update joblet context. // AbstractProcessProvider provider = // AbstractProcessProvider.findProcessProviderFromPID(nodeContainer.getNode() // .getComponent().getPluginFullName()); // if (provider != null) { // provider.updateJobletContext(nodeContainer.getNode()); // } if (nodeContainer.getNode().getComponent().getComponentType() == EComponentType.JOBLET) { process.getUpdateManager().update(EUpdateItemType.JOBLET_CONTEXT); } } else { String name = provider.getComponentProcess().getName() + " " + provider.getComponentProcess().getVersion(); MessageDialog warningMessageDialog = new MessageDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell(), "Can't create node", null, "Joblet process " + name + " is not saved. Please save it first", MessageDialog.OK, new String[] { "OK" }, 0); warningMessageDialog.open(); } } @Override public void undo() { this.process.removeNodeContainer(this.nodeContainer); // process.checkProcess(); process.checkStartNodes(); Problems.clearAll(nodeContainer.getNode()); Problems.refreshProblemTreeView(); } @Override public void redo() { this.execute(); } }