/*******************************************************************************
* 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.editparts;
import java.beans.PropertyChangeEvent;
import org.eclipse.draw2d.Label;
import org.eclipse.emf.edit.command.SetCommand;
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.DirectEditPolicy;
import org.eclipse.gef.requests.DirectEditRequest;
import org.eclipse.gef.tools.DirectEditManager;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.ui.IEditorPart;
import org.jboss.tools.smooks.configuration.editors.xml.TagObject;
import org.jboss.tools.smooks.edimap.actions.RenameXmlTagNameCommand;
import org.jboss.tools.smooks.edimap.editor.EDIEdiPartDirectEditManager;
import org.jboss.tools.smooks.edimap.editor.EDILabelCellEditorLocator;
import org.jboss.tools.smooks.edimap.editor.EDIMapFormPage;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
import org.jboss.tools.smooks.gef.tree.editparts.TreeContainerEditPart;
import org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart;
import org.jboss.tools.smooks.gef.tree.figures.TreeContainerFigure;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeModel;
import org.jboss.tools.smooks.model.medi.MEdiPackage;
import org.jboss.tools.smooks.model.medi.MappingNode;
import org.jboss.tools.smooks.model.medi.Segments;
/**
* @author Dart (dpeng@redhat.com)
*
*/
public class EDITreeContainerEditPart extends TreeContainerEditPart {
private DirectEditManager manager;
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart#performDirectEdit
* ()
*/
@Override
protected void performDirectEdit() {
if (canDirectEdit()) {
if (manager == null) {
Label l = ((TreeContainerFigure) getFigure()).getLabel();
manager = new EDIEdiPartDirectEditManager(this, TextCellEditor.class, new EDILabelCellEditorLocator(l),
l);
}
manager.show();
}
}
protected boolean canDirectEdit() {
TreeNodeModel model = (TreeNodeModel) getModel();
if (model.getData() instanceof MappingNode) {
return true;
}
return false;
}
public void propertyChange(PropertyChangeEvent evt) {
super.propertyChange(evt);
// if (IMoveableModel.PRO_BOUNDS_CHANGED.equals(evt.getPropertyName())) {
// DefaultEditDomain domain = (DefaultEditDomain) getViewer().getEditDomain();
// IEditorPart editor = domain.getEditorPart();
// if((editor instanceof FormPage)){
// editor = ((FormPage)editor).getEditor();
// }
//
// if(editor instanceof ISmooksModelProvider && getModel() instanceof IMoveableModel){
// SmooksGraphicsExtType graph = ((ISmooksModelProvider)editor).getSmooksGraphicsExt();
// Rectangle rect = ((IMoveableModel)getModel()).getBounds();
// recordBounds(graph,rect);
// }
// }
}
// /* (non-Javadoc)
// * @see org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart#recordFigureBounds(org.jboss.tools.smooks.model.graphics.ext.FigureType, org.eclipse.draw2d.geometry.Rectangle)
// */
// @Override
// protected void recordFigureBounds(FigureType figureType, Rectangle bounds) {
// figureType.setX(String.valueOf(bounds.getLocation().x));
// figureType.setY(String.valueOf(bounds.getLocation().y));
// }
public static String generateFigureId(Object data){
if(data instanceof Segments){
// String xml = ((MappingNode)data).getXmltag();
// return "segments_" + xml;
return "segments"; //$NON-NLS-1$
}
if(data instanceof TagObject){
return "edi_" + ((TagObject)data).getName(); //$NON-NLS-1$
}
return null;
}
/* (non-Javadoc)
* @see org.jboss.tools.smooks.gef.tree.editparts.TreeContainerEditPart#createEditPolicies()
*/
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new DirectEditPolicy() {
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.editpolicies.DirectEditPolicy#getDirectEditCommand
* (org.eclipse.gef.requests.DirectEditRequest)
*/
@Override
protected Command getDirectEditCommand(DirectEditRequest request) {
TreeNodeModel node = (TreeNodeModel) getHost().getModel();
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();
Object feature = null;
Object owner = node.getData();
if (owner instanceof MappingNode) {
feature = MEdiPackage.Literals.MAPPING_NODE__XMLTAG;
}
org.eclipse.emf.common.command.Command command = SetCommand.create(ed, node.getData(), feature,
request.getCellEditor().getValue());
if (command != null) {
return new RenameXmlTagNameCommand((TreeNodeEditPart) getHost(), ed, command);
}
}
return null;
// RenameActivityCommand cmd = new RenameActivityCommand();
// cmd.setSource((Activity)getHost().getModel());
// cmd.setOldName(((Activity)getHost().getModel()).getName());
// cmd.setName((String)request.getCellEditor().getValue());
// return cmd;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.editpolicies.DirectEditPolicy#showCurrentEditValue
* (org.eclipse.gef.requests.DirectEditRequest)
*/
@Override
protected void showCurrentEditValue(DirectEditRequest request) {
}
});
super.createEditPolicies();
}
protected String generateFigureID(){
TreeNodeModel model = (TreeNodeModel) getModel();
Object data = model.getData();
return generateFigureId(data);
}
}