/******************************************************************************* * 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.configuration.editors; 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.RemoveCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.forms.widgets.FormToolkit; import org.jboss.tools.smooks.editor.ISmooksModelProvider; /** * @author Dart * */ public class ContainerChildrenTablePanelCreator extends ModelChildrenTablePanelCreator { private EStructuralFeature containerFeature = null; private EObject rootModel; public ContainerChildrenTablePanelCreator(ISmooksModelProvider smooksModelProvider, EObject rootModel, FormToolkit toolkit, IEditorPart editorPart) { super(smooksModelProvider, null, toolkit, editorPart); this.rootModel = rootModel; } public EStructuralFeature getContainerFeature() { return containerFeature; } public void setContainerFeature(EStructuralFeature containerFeature) { this.containerFeature = containerFeature; } public EObject getRootModel() { return rootModel; } public void setRootModel(EObject rootModel) { this.rootModel = rootModel; } @Override protected boolean performNewChild() { if (getRootModel() != null) { EObject rootModel = getRootModel(); EStructuralFeature feature = getContainerFeature(); if (feature != null) { Object container = rootModel.eGet(feature); if (container == null) { container = newContainerModel(); if (container != null){ rootModel.eSet(containerFeature, container); this.setParentModel((EObject) container); if(getChildrenTableViewer() != null){ getChildrenTableViewer().setInput(getParentModel()); } } }else{ this.setParentModel((EObject) container); if(getChildrenTableViewer() != null){ getChildrenTableViewer().setInput(getParentModel()); } } return true; } } return false; } protected EObject newContainerModel() { return null; } @Override protected void performRunRemoveCommand(CompoundCommand compoundCommand, EditingDomain editingDomain) { if (this.getParentModel() != null) { EObject h = getParentModel(); if (h.eContents().size() == 1) { Command command1 = RemoveCommand.create(editingDomain, h); compoundCommand.append(command1); this.setParentModel(null); } } super.performRunRemoveCommand(compoundCommand, editingDomain); } @Override protected void endRemoveChild() { super.endRemoveChild(); } }