com.nokia.tools.variant.editor.actions.AddSequenceItemAction.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.variant.editor.actions.AddSequenceItemAction.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 * 
 * Initial Contributors:
 * Nokia Corporation - Initial contribution
 * 
 * Contributors:
 * 
 * Description: This file is part of com.nokia.tools.variant.editor component.
 */

package com.nokia.tools.variant.editor.actions;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;

import com.nokia.tools.variant.content.confml.SequenceItem;
import com.nokia.tools.variant.content.confml.SequenceSetting;
import com.nokia.tools.variant.content.confml.Setting;
import com.nokia.tools.variant.editor.commands.AddSequenceItemCommand;
import com.nokia.tools.variant.editor.editors.CPFEditor;
import com.nokia.tools.variant.editor.editors.PluginImages;
import com.nokia.tools.variant.editor.model.UISetting;
import com.nokia.tools.variant.viewer.actions.EditorAction;
import com.nokia.tools.variant.viewer.widgets.SequenceWidget;

/**
 * Action creates new sequence item, according to template, default data, or
 * setting item declaration. Item is added to position of selected item or at
 * the end of the sequence.
 */
public class AddSequenceItemAction extends EditorAction {

    /**
     * Constructor creates label and image for the action. 
     */
    public AddSequenceItemAction() {
        setText("Add new sequence item");
        setImageDescriptor(PluginImages.ADD);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.action.Action#run()
     */
    @Override
    public void run() {

        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        if (page != null) {
            IEditorPart activeEditor = page.getActiveEditor();
            CPFEditor editor = null;
            if (activeEditor != null && activeEditor instanceof CPFEditor) {
                editor = (CPFEditor) activeEditor;
                CommandStack commandStack = editor.getCommandStack();
                ISelection selection = editor.getSelection();
                int position = -1;
                if (selection instanceof StructuredSelection) {
                    StructuredSelection structuredSelection = (StructuredSelection) selection;
                    Object[] selections = structuredSelection.toArray();
                    for (int i = 0; i < selections.length; i++) {
                        Object next = selections[i];
                        if (next instanceof Setting) {
                            Setting setting = (Setting) next;
                            EObject container = setting.eContainer();
                            if (container instanceof SequenceItem) {
                                SequenceItem si = (SequenceItem) setting.eContainer();

                                SequenceSetting sqSetting = (SequenceSetting) si.eContainer();
                                int index = sqSetting.getSequenceItem().indexOf(si);
                                if (position < index) {
                                    position = index;
                                }
                            }
                        }
                    }

                }
                Object data = widget.getData();
                ((SequenceWidget) widget).setCollapsed(false);
                if (data instanceof UISetting) {
                    UISetting uiSetting = (UISetting) data;
                    Setting setting = uiSetting.getSetting();
                    int realPosition = 0;
                    if (setting instanceof SequenceSetting) {
                        SequenceSetting ss = (SequenceSetting) setting;
                        SequenceItem template = ss.getTemplate();
                        if (template == null && ss.getSequenceItem().size() > 0) {
                            template = ss.getSequenceItem().get(0);
                        }
                        if (template == null && ss.getDefaultStructure().size() > 0) {
                            template = ss.getDefaultStructure().get(0);
                        }
                        if (template != null) {
                            SequenceItem copy = (SequenceItem) EcoreUtil.copy(template);

                            realPosition = (position == -1) ? ss.getSequenceItem().size() : position + 1;
                            Command addCommand = new AddSequenceItemCommand(ss, copy, realPosition);
                            commandStack.execute(addCommand);
                        } else {
                            MessageDialog.openWarning(widget.getShell(), "Warning",
                                    "Sequence setting doesn't have tepmlate or any data.");

                        }
                        Setting settingToSelect = ss.getSequenceItem().get(realPosition).getSetting().get(0);
                        StructuredSelection structuredSelection = new StructuredSelection(settingToSelect);
                        editor.setSelection(structuredSelection);
                    }
                }
            }

        }
    }

    /*
     * (non-Javadoc)
     * @see com.nokia.tools.variant.viewer.actions.EditorAction#initSelectionListener()
     */
    @Override
    public void initSelectionListener() {
        // do nothing
    }

}