era.foss.objecteditor.specobject.SpecObjectHandler.java Source code

Java tutorial

Introduction

Here is the source code for era.foss.objecteditor.specobject.SpecObjectHandler.java

Source

/**************************************************************************
 * ERA - Eclipse Requirements Analysis
 * ==============================================
 * Copyright (C) 2009-2013 by Georg Blaschke, Christoph P. Neumann
 * and Bernd Haberstumpf (http://era.origo.ethz.ch)
 **************************************************************************
 * Licensed under the Eclipse Public License - v 1.0 (the "License");
 * you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.eclipse.org/org/documents/epl-v10.html
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **************************************************************************
 */
package era.foss.objecteditor.specobject;

import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.DeleteCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.StructuredSelection;

import era.foss.erf.Content;
import era.foss.erf.ErfFactory;
import era.foss.erf.ErfPackage;
import era.foss.erf.SpecHierarchy;
import era.foss.erf.SpecObject;
import era.foss.erf.SpecType;
import era.foss.erf.Specification;
import era.foss.objecteditor.ErfObjectsEditorPlugin;

/**
 * This class holds methods for a handling {@link SpecObject}s like
 * <ul>
 * <li>creating a {@link SpecObject} in the desired hierarchy level</li>
 * <li>deleting a {@link SpecObject} and all elements in the hirarchy below</li>
 * </ul>
 * 
 */
public class SpecObjectHandler {

    public SpecObjectHandler() {

    }

    /**
     * Remove specObject and associated hierarchy element in {@link SpecHierarchy}
     * 
     * @param specObject specObject to be deleted
     * */
    public static void deleteSpecObject(EditingDomain editingDomain, SpecObject specObject) {
        CompoundCommand compoundCommand = new CompoundCommand();
        compoundCommand.setLabel(ErfObjectsEditorPlugin.INSTANCE.getString("_UI_DeleteSpecObject_label"));
        compoundCommand
                .setDescription(ErfObjectsEditorPlugin.INSTANCE.getString("_UI_DeleteSpecObject_description"));

        // delete SpecHierarachy
        StructuredSelection specHierarchySelection = new StructuredSelection(specObject.getSpecHierarchy());
        if (!specHierarchySelection.isEmpty()) {
            Command deleteSpecHierarachyCommand = new DeleteCommand(editingDomain, specHierarchySelection.toList());
            compoundCommand.append(deleteSpecHierarachyCommand);
        }

        // delete SpecObject
        Command deleteSpecObjectCommand = new DeleteCommand(editingDomain,
                new StructuredSelection(specObject).toList());
        compoundCommand.append(deleteSpecObjectCommand);

        editingDomain.getCommandStack().execute(compoundCommand);
    }

    /**
     * Create a new SpecObject and a new SpecHierarchy which refers to the SpecObject
     * 
     * The SpecHierachy is be created beneath the Specification
     * 
     * @param specType the type of the SpecObject to create
     */
    public static void createNewSpecObject(EditingDomain editingDomain, Content content, SpecType specType,
            Specification specification) {
        createNewSpecObject(editingDomain, content, specType, specification, ErfPackage.SPECIFICATION__CHILDREN);
    }

    /**
     * Create a new SpecObject and a new SpecHierarchy which refers to the SpecObject
     * 
     * The SpecHierachy is be created beneath the Specification
     * 
     * @param specType the type of the SpecObject to create
     */
    public static void createNewSpecObject(EditingDomain editingDomain, Content content, SpecType specType,
            SpecHierarchy specHierarchyParent) {
        createNewSpecObject(editingDomain, content, specType, specHierarchyParent,
                ErfPackage.SPEC_HIERARCHY__CHILDREN);
    }

    /**
     * Create a new SpecObject and a new SpecHierarchy which refers to the SpecObject
     * 
     * The SpecHierachy is be created beneath the Specification
     * 
     * @param specType the type of the SpecObject to create
     */
    private static void createNewSpecObject(EditingDomain editingDomain, Content content, SpecType specType,
            EObject specHierachyParent, Object feature) {
        SpecObject newSpecObject = ErfFactory.eINSTANCE.createSpecObject();
        newSpecObject.setType(specType);

        CompoundCommand compoundCommand = new CompoundCommand();
        compoundCommand.setLabel(ErfObjectsEditorPlugin.INSTANCE.getString("_UI_AddSpecObject_label"));
        compoundCommand.setDescription(ErfObjectsEditorPlugin.INSTANCE.getString("_UI_AddSpecObject_description"));

        // command for creating a SpecObject
        Command addSpecObjectCommand = AddCommand.create(editingDomain, content, ErfPackage.CONTENT__SPEC_OBJECTS,
                newSpecObject);
        compoundCommand.append(addSpecObjectCommand);

        // command for creating a SpecHierarchy

        SpecHierarchy newSpecHierarchy = ErfFactory.eINSTANCE.createSpecHierarchy();
        newSpecHierarchy.setObject(newSpecObject);
        Command addSpecHierarchyCommand = AddCommand.create(editingDomain, specHierachyParent, feature,
                newSpecHierarchy);
        compoundCommand.append(addSpecHierarchyCommand);

        // execute compoundCommand
        CommandStack commandStack = editingDomain.getCommandStack();
        commandStack.execute(compoundCommand);
    }

    public static void createCommonMenuItems(IMenuManager manager, EditingDomain editingDomain,
            SpecObject specObject) {
        // menu entries for adding a specObject
        Action addAction = new AddSpecObjectAction(editingDomain, specObject, true);
        Action addBelowAction = new AddSpecObjectAction(editingDomain, specObject, false);

        // Add menu entry for removal of SpecObject
        Action removeAction = new RemoveSpecObjectAction(editingDomain, specObject);
        if (specObject == null) {
            addAction.setEnabled(false);
            addBelowAction.setEnabled(false);
            removeAction.setEnabled(false);
        }
        manager.add(addAction);
        manager.add(addBelowAction);
        manager.add(removeAction);

    }

}