/*******************************************************************************
* 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.Iterator;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
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.emf.edit.domain.EditingDomain;
import org.eclipse.ui.IEditorPart;
import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils;
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
import org.jboss.tools.smooks.graphical.editors.IGraphicalEditorPart;
import org.jboss.tools.smooks.graphical.editors.editparts.AbstractResourceConfigEditPart;
import org.jboss.tools.smooks.graphical.editors.template.SmooksFreemarkerTemplateGraphicalEditor;
import org.jboss.tools.smooks.model.javabean12.BeanType;
import org.jboss.tools.smooks.model.javabean12.Javabean12Package;
import org.jboss.tools.smooks.model.javabean12.WiringType;
import org.jboss.tools.smooks.model.smooks.SmooksResourceListType;
/**
* @author Dart
*
*/
public class JavaBeanEditPart extends AbstractResourceConfigEditPart {
private List<Object> supportTypes = new ArrayList<Object>();
public JavaBeanEditPart() {
super();
supportTypes.add(BeanType.class);
}
@Override
protected EStructuralFeature getHostFeature(EObject model) {
IEditorPart editorPart = this.getEditorPart();
if (editorPart instanceof IGraphicalEditorPart) {
if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(((IGraphicalEditorPart) editorPart).getID())) {
return null;
}
}
if (model instanceof BeanType) {
return Javabean12Package.Literals.JAVABEAN12_DOCUMENT_ROOT__BEAN;
}
return null;
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.editparts.
* AbstractResourceConfigEditPart
* #getDeleteCommand(org.eclipse.emf.edit.domain.EditingDomain,
* java.lang.Object, org.eclipse.emf.ecore.EStructuralFeature)
*/
@Override
protected Command getDeleteEMFCommand(EditingDomain domain, Object data, EStructuralFeature feature) {
CompoundCommand compoundCommand = new CompoundCommand();
Command deleteCommand = super.getDeleteEMFCommand(domain, data, feature);
if (data instanceof BeanType) {
String beanId = ((BeanType) data).getBeanId();
Object container = ((BeanType) data).eContainer();
if (beanId != null && container != null && container instanceof SmooksResourceListType) {
List<?> children = ((SmooksResourceListType) container).getAbstractResourceConfig();
for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) {
Object child = (Object) iterator.next();
child = AdapterFactoryEditingDomain.unwrap(child);
if (child instanceof BeanType && child != data) {
List<?> wirings = ((BeanType) child).getWiring();
for (Iterator<?> iterator2 = wirings.iterator(); iterator2.hasNext();) {
WiringType wiring = (WiringType) iterator2.next();
String refId = wiring.getBeanIdRef();
if (refId != null)
refId = refId.trim();
if (beanId.equals(refId)) {
Command setCommand = SetCommand.create(domain, wiring,
Javabean12Package.Literals.WIRING_TYPE__BEAN_ID_REF, null);
compoundCommand.append(setCommand);
}
}
}
}
}
}
if(compoundCommand.isEmpty()){
return deleteCommand;
}else{
compoundCommand.append(deleteCommand);
return compoundCommand;
}
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.editparts.TreeContainerEditPart#createFigure
* ()
*/
@Override
protected IFigure createFigure() {
return super.createFigure();
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.editparts.
* AbstractResourceConfigEditPart#isSource()
*/
@Override
protected boolean isSource() {
IEditorPart part = this.getEditorPart();
if (part instanceof IGraphicalEditorPart) {
if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(((IGraphicalEditorPart) part).getID())) {
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.editparts.
* AbstractResourceConfigEditPart
* #createModelCreationEMFCommand(org.eclipse.emf.edit.domain.EditingDomain,
* java.lang.Object, java.lang.Object, java.lang.Object)
*/
@Override
protected Command createModelCreationEMFCommand(EditingDomain domain, Object owner, Object type, Object collections) {
Object model = ((AbstractSmooksGraphicalModel) getModel()).getData();
model = AdapterFactoryEditingDomain.unwrap(model);
if (model instanceof EObject) {
boolean isArray = SmooksUIUtils.isArrayJavaGraphModel((EObject) model);
boolean isCollection = SmooksUIUtils.isCollectionJavaGraphModel((EObject) model);
if (isArray || isCollection) {
return null;
}
}
return super.createModelCreationEMFCommand(domain, owner, type, collections);
}
}