| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| /** |
| * |
| */ |
| package org.eclipse.epf.diagram.core.util; |
| |
| import org.eclipse.emf.ecore.EModelElement; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.epf.common.ui.util.MsgDialog; |
| import org.eclipse.epf.diagram.core.DiagramCorePlugin; |
| import org.eclipse.epf.diagram.core.DiagramCoreResources; |
| import org.eclipse.epf.diagram.core.bridge.BridgeHelper; |
| import org.eclipse.epf.diagram.model.NamedNode; |
| import org.eclipse.epf.diagram.model.WorkBreakdownElementNode; |
| import org.eclipse.epf.library.edit.util.ProcessUtil; |
| import org.eclipse.epf.uma.Activity; |
| import org.eclipse.epf.uma.BreakdownElement; |
| import org.eclipse.gef.GraphicalEditPart; |
| import org.eclipse.gef.tools.CellEditorLocator; |
| import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; |
| import org.eclipse.gmf.runtime.notation.Node; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.uml2.uml.ActivityNode; |
| |
| /** |
| * Manages and validates the direct editing of editpart. Prompts accordingly. |
| * Should implement abstract methods when extends. |
| */ |
| public abstract class ValidatingTextDirectEditManager extends TextDirectEditManager { |
| |
| public ValidatingTextDirectEditManager(GraphicalEditPart source, Class editorType, CellEditorLocator locator) { |
| super(source, editorType, locator); |
| } |
| |
| /** |
| * @see org.eclipse.gef.tools.DirectEditManager#commit() |
| */ |
| protected void commit() { |
| String msg = validate((String) getCellEditor().getValue()); |
| if (msg != null) { |
| bringDown(false); |
| Display.getCurrent().asyncExec( |
| new PromptEdit(this, msg)); |
| return; |
| } |
| super.commit(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.tools.DirectEditManager#bringDown() |
| */ |
| protected void bringDown() { |
| bringDown(true); |
| } |
| |
| /** |
| * @see org.eclipse.gef.tools.DirectEditManager#bringDown() |
| */ |
| protected void bringDown(boolean check) { |
| super.bringDown(); |
| if (check) { |
| Node node = (Node) getEditPart().getModel(); |
| EObject aNode = node.getElement(); |
| String name = null; |
| if (aNode instanceof ActivityNode) { |
| name = ((ActivityNode)aNode).getName(); |
| Object wbelement = BridgeHelper.getMethodElement((EModelElement)aNode); |
| if (wbelement instanceof Activity |
| && ProcessUtil |
| .isExtendingOrLocallyContributing((BreakdownElement) wbelement)) { |
| name = ProcessUtil |
| .getPresentationName((BreakdownElement) wbelement); |
| } |
| |
| }else if(aNode instanceof NamedNode){ |
| NamedNode nameNode = (NamedNode) aNode; |
| name = nameNode.getName(); |
| if (node instanceof WorkBreakdownElementNode) { |
| Object wbelement = nameNode.getObject(); |
| if (wbelement instanceof Activity |
| && ProcessUtil |
| .isExtendingOrLocallyContributing((BreakdownElement) wbelement)) { |
| name = ProcessUtil |
| .getPresentationName((BreakdownElement) wbelement); |
| } |
| |
| } |
| } |
| |
| if (name == null || name.trim().length() == 0) { |
| Display.getCurrent().asyncExec( |
| new PromptEdit(this,DiagramCoreResources.err_name_empty)); //$NON-NLS-1$ |
| } |
| } |
| } |
| |
| |
| static class PromptEdit implements Runnable { |
| |
| private ValidatingTextDirectEditManager manager; |
| |
| private String msg; |
| |
| PromptEdit(ValidatingTextDirectEditManager manager, String msg) { |
| this.manager = manager; |
| this.msg = msg; |
| } |
| |
| /** |
| * @see java.lang.Runnable#run() |
| */ |
| public void run() { |
| String title = DiagramCoreResources.diagram_errorDialog_title; |
| MsgDialog dialog = DiagramCorePlugin.getDefault().getMsgDialog(); |
| dialog.displayError(title, msg); //$NON-NLS-1$ |
| manager.performDirectEdit(); |
| } |
| |
| } |
| |
| /** |
| * Checks if the given text is valid. Subclasses can override this method. |
| * |
| * @param txt |
| * @return null if the given text is valid, an error message otherwise |
| */ |
| protected abstract String validate(String txt); |
| |
| protected abstract void performDirectEdit(); |
| } |