/******************************************************************************* * Copyright (c) 2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.edimap.editor; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.DeleteCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.editpolicies.ComponentEditPolicy; import org.eclipse.gef.requests.GroupRequest; import org.eclipse.ui.IEditorPart; import org.jboss.tools.smooks.edimap.actions.DeleteEDIModelCommand; import org.jboss.tools.smooks.edimap.editparts.AbstractEDIMappingEditPart; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart; import org.jboss.tools.smooks.gef.tree.model.TreeNodeModel; import org.jboss.tools.smooks.model.medi.MappingNode; /** * @author Dart (dpeng@redhat.com) * */ public class EDITreeNodeEditPart extends AbstractEDIMappingEditPart { /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.edimap.editor.AbstractEDIMappingEditPart#canDirectEdit * () */ @Override protected boolean canDirectEdit() { TreeNodeModel model = (TreeNodeModel) getModel(); if (model.getData() instanceof MappingNode) { return true; } return false; } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart#isDragLink() */ protected boolean isDragLink() { return true; } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart#createEditPolicies * () */ @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.COMPONENT_ROLE, new ComponentEditPolicy() { /* * (non-Javadoc) * * @see * org.eclipse.gef.editpolicies.ComponentEditPolicy#createDeleteCommand * (org.eclipse.gef.requests.GroupRequest) */ @Override protected Command createDeleteCommand(GroupRequest deleteRequest) { TreeNodeModel node = (TreeNodeModel) getHost().getModel(); if(!(node.getData() instanceof EObject)){ return null; } GraphicalViewer viewer = (GraphicalViewer) ((AbstractGraphicalEditPart) getHost()).getViewer(); DefaultEditDomain domain = (DefaultEditDomain) viewer.getEditDomain(); IEditorPart part = domain.getEditorPart(); if (part instanceof EDIMapFormPage) { part = ((EDIMapFormPage) part).getEditor(); } if (part instanceof ISmooksModelProvider) { EditingDomain ed = ((ISmooksModelProvider) part).getEditingDomain(); org.eclipse.emf.common.command.Command command = DeleteCommand.create(ed, node.getData()); if (command != null) { return new DeleteEDIModelCommand((TreeNodeEditPart) getHost(), ed, command); } } return super.createDeleteCommand(deleteRequest); } }); super.createEditPolicies(); } }