/******************************************************************************* * 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.graphical.editors.editparts.javamapping; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.DirectEditRequest; import org.eclipse.ui.IEditorPart; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel; import org.jboss.tools.smooks.gef.tree.command.GEFAdapterCommand; import org.jboss.tools.smooks.graphical.editors.IGraphicalEditorPart; import org.jboss.tools.smooks.graphical.editors.editparts.AbstractResourceConfigChildNodeEditPart; import org.jboss.tools.smooks.graphical.editors.model.javamapping.JavaBeanChildGraphModel; import org.jboss.tools.smooks.graphical.editors.template.SmooksFreemarkerTemplateGraphicalEditor; import org.jboss.tools.smooks.model.javabean12.Javabean12Package; /** * @author Dart * */ public class JavaBeanChildNodeEditPart extends AbstractResourceConfigChildNodeEditPart { private List<Object> supportTypes = new ArrayList<Object>(); public JavaBeanChildNodeEditPart() { super(); supportTypes.add(org.jboss.tools.smooks.model.javabean12.ValueType.class); supportTypes.add(org.jboss.tools.smooks.model.javabean12.ExpressionType.class); supportTypes.add(org.jboss.tools.smooks.model.javabean12.WiringType.class); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.editparts. * AbstractResourceConfigChildNodeEditPart#isDragLink() */ @Override protected boolean isDragLink() { IGraphicalEditorPart part = (IGraphicalEditorPart) getEditorPart(); if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(part.getID())) { AbstractSmooksGraphicalModel model = (AbstractSmooksGraphicalModel) this.getModel(); Object data = model.getData(); data = AdapterFactoryEditingDomain.unwrap(data); if (data instanceof org.jboss.tools.smooks.model.javabean12.ValueType) { return true; } } return super.isDragLink(); } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart#canDirectEdit * () */ @Override protected boolean canDirectEdit() { IEditorPart editorPart = this.getEditorPart(); if (editorPart instanceof IGraphicalEditorPart) { if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(((IGraphicalEditorPart) editorPart).getID())) { return false; } } JavaBeanChildGraphModel graphModel = (JavaBeanChildGraphModel) getModel(); boolean isArray = graphModel.parentIsArray(); boolean isCollection = graphModel.parentIsCollection(); if (isArray || isCollection) { return super.canDirectEdit(); } return true; } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.gef.tree.editparts.TreeNodeEditPart# * createDirectEditCommand(org.eclipse.gef.requests.DirectEditRequest) */ @Override protected Command createDirectEditCommand(DirectEditRequest request) { Object value = request.getCellEditor().getValue(); ISmooksModelProvider smooksModelProvider = (ISmooksModelProvider) this.getEditorPart().getAdapter( ISmooksModelProvider.class); AbstractSmooksGraphicalModel graphModel = (AbstractSmooksGraphicalModel) this.getModel(); Object data = graphModel.getData(); data = AdapterFactoryEditingDomain.unwrap(data); EStructuralFeature feature = getFeature(data); if (value != null && value instanceof String && smooksModelProvider != null && feature != null) { org.eclipse.emf.common.command.Command setCommand = SetCommand.create(smooksModelProvider .getEditingDomain(), data, feature, value); if (setCommand.canExecute()) { GEFAdapterCommand gefCommand = new GEFAdapterCommand(smooksModelProvider.getEditingDomain(), setCommand); return gefCommand; } } return null; } private EStructuralFeature getFeature(Object data) { if (data instanceof org.jboss.tools.smooks.model.javabean12.ValueType) { return Javabean12Package.Literals.VALUE_TYPE__PROPERTY; } if (data instanceof org.jboss.tools.smooks.model.javabean12.WiringType) { return Javabean12Package.Literals.WIRING_TYPE__PROPERTY; } if (data instanceof org.jboss.tools.smooks.model.javabean12.ExpressionType) { return Javabean12Package.Literals.EXPRESSION_TYPE__PROPERTY; } return null; } @Override protected EStructuralFeature getFeature(EObject model) { IEditorPart editorPart = this.getEditorPart(); if (editorPart instanceof IGraphicalEditorPart) { if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(((IGraphicalEditorPart) editorPart).getID())) { return null; } } if (model instanceof org.jboss.tools.smooks.model.javabean12.WiringType) { return Javabean12Package.Literals.BEAN_TYPE__WIRING; } if (model instanceof org.jboss.tools.smooks.model.javabean12.ValueType) { return Javabean12Package.Literals.BEAN_TYPE__VALUE; } if (model instanceof org.jboss.tools.smooks.model.javabean12.ExpressionType) { return Javabean12Package.Literals.BEAN_TYPE__EXPRESSION; } return null; } }