org.d3s.alricg.editor.views.charElemente.RefreshableHerkunftViewPart.java Source code

Java tutorial

Introduction

Here is the source code for org.d3s.alricg.editor.views.charElemente.RefreshableHerkunftViewPart.java

Source

/*
 * Created 04.09.2007
 *
 * This file is part of the project Alricg. The file is copyright
 * protected and under the GNU General Public License.
 * For more information see "http://www.alricg.de/".
 */
package org.d3s.alricg.editor.views.charElemente;

import java.util.logging.Level;

import org.d3s.alricg.common.icons.ControlIconsLibrary;
import org.d3s.alricg.editor.Activator;
import org.d3s.alricg.editor.common.ViewUtils;
import org.d3s.alricg.editor.common.ViewUtils.TreeObject;
import org.d3s.alricg.editor.common.ViewUtils.TreeOrTableObject;
import org.d3s.alricg.editor.editors.composits.HerkunftVarianteEditorInput;
import org.d3s.alricg.editor.utils.ViewEditorIdManager;
import org.d3s.alricg.editor.utils.CustomActions.BuildNewCharElementAction;
import org.d3s.alricg.editor.utils.CustomActions.DeleteCharElementAction;
import org.d3s.alricg.editor.utils.EditorViewUtils.EditorTreeOrTableObject;
import org.d3s.alricg.store.access.CharElementFactory;
import org.d3s.alricg.store.access.XmlAccessor;
import org.d3s.alricg.store.charElemente.CharElement;
import org.d3s.alricg.store.charElemente.Herkunft;
import org.d3s.alricg.store.charElemente.HerkunftVariante;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;

/**
 * @author Vincent
 */
public abstract class RefreshableHerkunftViewPart extends RefreshableViewPartImpl {

    protected Action buildNewVariante;

    /**
     * Erstellt die Actions
     */
    @Override
    protected void makeActions() {
        super.makeActions();

        buildNewVariante = new Action() {
            @Override
            public void run() {
                EditorTreeOrTableObject newObjParent = (EditorTreeOrTableObject) getSelectedElement();

                XmlAccessor xmlAccessor = newObjParent.getAccessor();
                HerkunftVariante newCharElem = (HerkunftVariante) CharElementFactory.getInstance()
                        .buildHerkunftVariante(newObjParent.getValue().getClass(),
                                (Herkunft) newObjParent.getValue());

                // ffnen Editor mit neuem CharElement
                final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                //final IEditorInput editorInput2 = new CharElementEditorInput(newCharElem, xmlAccessor, true);
                final IEditorInput editorInput = new HerkunftVarianteEditorInput(newCharElem,
                        (Herkunft) newObjParent.getValue(), xmlAccessor, true);
                try {
                    page.openEditor(editorInput, ViewEditorIdManager.getEditorID(newCharElem.getClass()), true);
                } catch (PartInitException e) {
                    Activator.logger.log(Level.SEVERE,
                            "Konnte Editor nicht ffnen. Editor ID: " //$NON-NLS-1$
                                    + ViewEditorIdManager.getEditorID(newCharElem.getClass()), e);
                }
            }
        };
        buildNewVariante.setText("Neue Variante");
        buildNewVariante.setImageDescriptor(ControlIconsLibrary.add.getImageDescriptor());

        // Neues Element Action 
        buildNew = new BuildNewCharElementAction(this, getViewedClass(), getRegulator()) {
            @Override
            protected void runForTreeView(CharElement newCharElem, TreeObject treeObj) {
                if (treeObj.getValue() instanceof CharElement) {
                    runForTreeView(newCharElem, (TreeObject) treeObj.getParent());
                } else if (treeObj.getValue().getClass() == regulator.getFirstCategoryClass()) {
                    regulator.setFirstCategory(newCharElem, treeObj.getValue());
                } else if (treeObj.getValue() instanceof String) {
                    if (treeObj.getParent() == null)
                        return; // Dies ist der Root
                    newCharElem.setSammelbegriff(treeObj.getValue().toString());
                    runForTreeView(newCharElem, (TreeObject) treeObj.getParent());
                }
            }
        };

        // Element lschen Action
        deleteSelected = new DeleteCharElementAction(this, getViewedClass());
    }

    // Das Context Menu beim Rechts-klick
    @Override
    protected void fillContextMenu(IMenuManager manager) {
        manager.add(this.showInfos);
        manager.add(new Separator());
        manager.add(this.buildNew);
        manager.add(this.buildNewVariante);
        manager.add(this.editSelected);
        manager.add(this.deleteSelected);
        /* Um die Warnung
         * Context menu missing standard group 'org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS'
         * im Log zu verhindern */
        manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    /**
     * Setzt das Context-menu
     */
    @Override
    protected void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                RefreshableHerkunftViewPart.this.fillContextMenu(manager);
            }
        });

        menuMgr.addMenuListener(new IMenuListener() {

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                boolean isEnabled = true;
                final TreeOrTableObject treeTableObj = getSelectedElement();

                if (treeTableObj != null && treeTableObj.getValue() instanceof CharElement) {
                    isEnabled = true;
                } else {
                    isEnabled = false;
                }
                showInfos.setEnabled(isEnabled);
                editSelected.setEnabled(isEnabled);
                deleteSelected.setEnabled(isEnabled);
                showInfos.setEnabled(isEnabled);
                showInfos.setEnabled(isEnabled);

                if (treeTableObj != null && treeTableObj.getValue() instanceof Herkunft) {
                    buildNewVariante.setEnabled(true);
                } else {
                    buildNewVariante.setEnabled(false);
                }
                if (treeTableObj != null && treeTableObj.getValue() instanceof Herkunft
                        && ((Herkunft) treeTableObj.getValue()).getVarianten() != null
                        && ((Herkunft) treeTableObj.getValue()).getVarianten().length > 0) {
                    deleteSelected.setEnabled(false);
                } else {
                    deleteSelected.setEnabled(isEnabled);
                }
            }
        });

        // For Tree
        Menu menu = menuMgr.createContextMenu(viewerTree.getControl());
        viewerTree.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTree);

        // For Table
        menu = menuMgr.createContextMenu(viewerTable.getControl());
        viewerTable.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTable);
    }
}