org.apache.directory.studio.schemaeditor.controller.SchemaViewController.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.schemaeditor.controller.SchemaViewController.java

Source

/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
 * 
 *  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 org.apache.directory.studio.schemaeditor.controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.PluginUtils;
import org.apache.directory.studio.schemaeditor.controller.actions.CollapseAllAction;
import org.apache.directory.studio.schemaeditor.controller.actions.DeleteSchemaElementAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ExportSchemasAsOpenLdapAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ExportSchemasAsXmlAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ExportSchemasForADSAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ImportCoreSchemasAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ImportSchemasFromOpenLdapAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ImportSchemasFromXmlAction;
import org.apache.directory.studio.schemaeditor.controller.actions.LinkWithEditorSchemaViewAction;
import org.apache.directory.studio.schemaeditor.controller.actions.MergeSchemasAction;
import org.apache.directory.studio.schemaeditor.controller.actions.NewAttributeTypeAction;
import org.apache.directory.studio.schemaeditor.controller.actions.NewObjectClassAction;
import org.apache.directory.studio.schemaeditor.controller.actions.NewSchemaAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenElementAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenSchemaViewPreferenceAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenSchemaViewSortingDialogAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenTypeHierarchyAction;
import org.apache.directory.studio.schemaeditor.controller.actions.RenameSchemaElementAction;
import org.apache.directory.studio.schemaeditor.controller.actions.SwitchSchemaPresentationToFlatAction;
import org.apache.directory.studio.schemaeditor.controller.actions.SwitchSchemaPresentationToHierarchicalAction;
import org.apache.directory.studio.schemaeditor.model.Project;
import org.apache.directory.studio.schemaeditor.model.Schema;
import org.apache.directory.studio.schemaeditor.model.schemachecker.SchemaCheckerListener;
import org.apache.directory.studio.schemaeditor.view.ViewUtils;
import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditor;
import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditorInput;
import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditor;
import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditorInput;
import org.apache.directory.studio.schemaeditor.view.views.SchemaView;
import org.apache.directory.studio.schemaeditor.view.views.SchemaViewContentProvider;
import org.apache.directory.studio.schemaeditor.view.wrappers.AttributeTypeWrapper;
import org.apache.directory.studio.schemaeditor.view.wrappers.Folder;
import org.apache.directory.studio.schemaeditor.view.wrappers.ObjectClassWrapper;
import org.apache.directory.studio.schemaeditor.view.wrappers.SchemaWrapper;
import org.apache.directory.studio.schemaeditor.view.wrappers.TreeNode;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.commands.ActionHandler;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;

/**
 * This class implements the Controller for the SchemaView.
 *
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 */
public class SchemaViewController {
    /** The associated view */
    private SchemaView view;

    /** The TreeViewer */
    private TreeViewer viewer;

    /** The authorized Preferences keys*/
    private List<String> authorizedPrefs;

    /** The Context Menu */
    private MenuManager contextMenu;

    /** The selection */
    private ISelection selection;

    /** The SchemaHandlerListener */
    private SchemaHandlerListener schemaHandlerListener = new SchemaHandlerAdapter() {

        /**
         * {@inheritDoc}
         */
        public void attributeTypeAdded(AttributeType at) {
            SchemaViewContentProvider contentProvider = (SchemaViewContentProvider) viewer.getContentProvider();
            contentProvider.attributeTypeAdded(at);

            TreeNode wrapper = contentProvider.getWrapper(at);
            if (wrapper != null) {
                selection = new StructuredSelection(wrapper);
            }
        }

        /**
         * {@inheritDoc}
         */
        public void attributeTypeModified(AttributeType at) {
            ((SchemaViewContentProvider) viewer.getContentProvider()).attributeTypeModified(at);
        }

        /**
         * {@inheritDoc}
         */
        public void attributeTypeRemoved(AttributeType at) {
            ((SchemaViewContentProvider) viewer.getContentProvider()).attributeTypeRemoved(at);
        }

        /**
         * {@inheritDoc}
         */
        public void objectClassAdded(ObjectClass oc) {
            SchemaViewContentProvider contentProvider = (SchemaViewContentProvider) viewer.getContentProvider();
            contentProvider.objectClassAdded(oc);

            TreeNode wrapper = contentProvider.getWrapper(oc);
            if (wrapper != null) {
                selection = new StructuredSelection(wrapper);
            }
        }

        /**
         * {@inheritDoc}
         */
        public void objectClassModified(ObjectClass oc) {
            ((SchemaViewContentProvider) viewer.getContentProvider()).objectClassModified(oc);
        }

        /**
         * {@inheritDoc}
         */
        public void objectClassRemoved(ObjectClass oc) {
            ((SchemaViewContentProvider) viewer.getContentProvider()).objectClassRemoved(oc);
        }

        /**
         * {@inheritDoc}
         */
        public void schemaAdded(Schema schema) {
            SchemaViewContentProvider contentProvider = (SchemaViewContentProvider) viewer.getContentProvider();
            contentProvider.schemaAdded(schema);

            TreeNode wrapper = contentProvider.getWrapper(schema);
            if (wrapper != null) {
                selection = new StructuredSelection(wrapper);
            }
        }

        /**
         * {@inheritDoc}
         */
        public void schemaRemoved(Schema schema) {
            ((SchemaViewContentProvider) viewer.getContentProvider()).schemaRemoved(schema);
        }

        /**
         * {@inheritDoc}
         */
        public void schemaRenamed(Schema schema) {

            view.refresh();
        }

    };

    /** The SchemaCheckerListener */
    private SchemaCheckerListener schemaCheckerListener = new SchemaCheckerListener() {
        public void schemaCheckerUpdated() {
            Display.getDefault().asyncExec(new Runnable() {
                public void run() {
                    if (selection != null) {
                        view.refresh(selection);
                        selection = null;
                    } else {
                        view.refresh();
                    }
                }
            });
        }
    };

    /** Token used to activate and deactivate shortcuts in the view */
    private IContextActivation contextActivation;

    // The Actions
    private NewSchemaAction newSchema;
    private NewAttributeTypeAction newAttributeType;
    private NewObjectClassAction newObjectClass;
    private OpenElementAction openElement;
    private OpenTypeHierarchyAction openTypeHierarchy;
    private DeleteSchemaElementAction deleteSchemaElement;
    private RenameSchemaElementAction renameSchemaElement;
    private ImportCoreSchemasAction importCoreSchemas;
    private ImportSchemasFromOpenLdapAction importSchemasFromOpenLdap;
    private ImportSchemasFromXmlAction importSchemasFromXml;
    private ExportSchemasAsOpenLdapAction exportSchemasAsOpenLdap;
    private ExportSchemasAsXmlAction exportSchemasAsXml;
    private ExportSchemasForADSAction exportSchemasForADS;
    private CollapseAllAction collapseAll;
    private OpenSchemaViewSortingDialogAction openSchemaViewSortingDialog;
    private SwitchSchemaPresentationToFlatAction switchSchemaPresentationToFlat;
    private SwitchSchemaPresentationToHierarchicalAction switchSchemaPresentationToHierarchical;
    private OpenSchemaViewPreferenceAction openSchemaViewPreference;
    private LinkWithEditorSchemaViewAction linkWithEditor;
    private MergeSchemasAction mergeSchema;

    //    private CommitChangesAction commitChanges;

    /**
     * Creates a new instance of SchemasViewController.
     *
     * @param view
     *      the associated view
     */
    public SchemaViewController(SchemaView view) {
        this.view = view;
        viewer = view.getViewer();

        initActions();
        initToolbar();
        initMenu();
        initContextMenu();
        initProjectsHandlerListener();
        initSchemaCheckerListener();
        initDoubleClickListener();
        initAuthorizedPrefs();
        initPreferencesListener();
        initState();
        initPartListener();
    }

    /**
     * Initializes the Actions.
     */
    private void initActions() {
        newSchema = new NewSchemaAction();
        newAttributeType = new NewAttributeTypeAction(viewer);
        newObjectClass = new NewObjectClassAction(viewer);
        openElement = new OpenElementAction(viewer);
        openTypeHierarchy = new OpenTypeHierarchyAction(viewer);
        deleteSchemaElement = new DeleteSchemaElementAction(viewer);
        renameSchemaElement = new RenameSchemaElementAction(viewer);
        importCoreSchemas = new ImportCoreSchemasAction();
        importSchemasFromOpenLdap = new ImportSchemasFromOpenLdapAction();
        importSchemasFromXml = new ImportSchemasFromXmlAction();
        exportSchemasAsOpenLdap = new ExportSchemasAsOpenLdapAction(viewer);
        exportSchemasAsXml = new ExportSchemasAsXmlAction(viewer);
        exportSchemasForADS = new ExportSchemasForADSAction(viewer);
        collapseAll = new CollapseAllAction(viewer);
        openSchemaViewSortingDialog = new OpenSchemaViewSortingDialogAction();
        switchSchemaPresentationToFlat = new SwitchSchemaPresentationToFlatAction();
        switchSchemaPresentationToHierarchical = new SwitchSchemaPresentationToHierarchicalAction();
        openSchemaViewPreference = new OpenSchemaViewPreferenceAction();
        linkWithEditor = new LinkWithEditorSchemaViewAction(view);
        mergeSchema = new MergeSchemasAction();
        //        commitChanges = new CommitChangesAction();
    }

    /**
     * Initializes the Toolbar.
     */
    private void initToolbar() {
        IToolBarManager toolbar = view.getViewSite().getActionBars().getToolBarManager();
        toolbar.add(newSchema);
        toolbar.add(newAttributeType);
        toolbar.add(newObjectClass);
        //        toolbar.add( new Separator() );
        //        toolbar.add( commitChanges );
        toolbar.add(new Separator());
        toolbar.add(collapseAll);
        toolbar.add(linkWithEditor);
    }

    /**
     * Initializes the Menu.
     */
    private void initMenu() {
        IMenuManager menu = view.getViewSite().getActionBars().getMenuManager();
        menu.add(openSchemaViewSortingDialog);
        menu.add(new Separator());
        IMenuManager schemaPresentationMenu = new MenuManager(
                Messages.getString("SchemaViewController.SchemaPresentationAction")); //$NON-NLS-1$
        schemaPresentationMenu.add(switchSchemaPresentationToFlat);
        schemaPresentationMenu.add(switchSchemaPresentationToHierarchical);
        menu.add(schemaPresentationMenu);
        menu.add(new Separator());
        menu.add(linkWithEditor);
        menu.add(new Separator());
        menu.add(openSchemaViewPreference);
    }

    /**
     * Initializes the ContextMenu.
     */
    private void initContextMenu() {
        contextMenu = new MenuManager(""); //$NON-NLS-1$
        contextMenu.setRemoveAllWhenShown(true);
        contextMenu.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                MenuManager newManager = new MenuManager(Messages.getString("SchemaViewController.NewAction")); //$NON-NLS-1$
                MenuManager importManager = new MenuManager(
                        Messages.getString("SchemaViewController.ImportAction")); //$NON-NLS-1$
                MenuManager exportManager = new MenuManager(
                        Messages.getString("SchemaViewController.ExportAction")); //$NON-NLS-1$
                manager.add(newManager);
                newManager.add(newSchema);
                newManager.add(newAttributeType);
                newManager.add(newObjectClass);
                manager.add(new Separator());
                manager.add(openElement);
                manager.add(openTypeHierarchy);
                manager.add(new Separator());
                manager.add(deleteSchemaElement);
                manager.add(new Separator());
                manager.add(renameSchemaElement);
                manager.add(new Separator());
                manager.add(importManager);
                importManager.add(importCoreSchemas);
                importManager.add(new Separator());
                importManager.add(importSchemasFromOpenLdap);
                importManager.add(importSchemasFromXml);
                importManager.add(new Separator());
                importManager.add(mergeSchema);
                manager.add(exportManager);
                exportManager.add(exportSchemasAsOpenLdap);
                exportManager.add(exportSchemasAsXml);
                exportManager.add(new Separator());
                exportManager.add(exportSchemasForADS);

                manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
            }
        });

        // set the context menu to the table viewer
        viewer.getControl().setMenu(contextMenu.createContextMenu(viewer.getControl()));

        // register the context menu to enable extension actions
        view.getSite().registerContextMenu(contextMenu, viewer);
    }

    /**
     * Initializes the ProjectsHandlerListener.
     */
    private void initProjectsHandlerListener() {
        Activator.getDefault().getProjectsHandler().addListener(new ProjectsHandlerAdapter() {
            public void openProjectChanged(Project oldProject, Project newProject) {
                if (oldProject != null) {
                    removeSchemaHandlerListener(oldProject);
                }

                if (newProject != null) {
                    viewer.getTree().setEnabled(true);
                    newSchema.setEnabled(true);
                    newAttributeType.setEnabled(true);
                    newObjectClass.setEnabled(true);
                    collapseAll.setEnabled(true);
                    linkWithEditor.setEnabled(true);
                    openSchemaViewSortingDialog.setEnabled(true);
                    switchSchemaPresentationToFlat.setEnabled(true);
                    switchSchemaPresentationToHierarchical.setEnabled(true);
                    openSchemaViewPreference.setEnabled(true);
                    //                    commitChanges.setEnabled( true );

                    addSchemaHandlerListener(newProject);
                    view.reloadViewer();
                } else {
                    viewer.setInput(null);
                    viewer.getTree().setEnabled(false);
                    newSchema.setEnabled(false);
                    newAttributeType.setEnabled(false);
                    newObjectClass.setEnabled(false);
                    collapseAll.setEnabled(false);
                    linkWithEditor.setEnabled(false);
                    openSchemaViewSortingDialog.setEnabled(false);
                    switchSchemaPresentationToFlat.setEnabled(false);
                    switchSchemaPresentationToHierarchical.setEnabled(false);
                    openSchemaViewPreference.setEnabled(false);
                    //                    commitChanges.setEnabled( false );
                }
            }
        });
    }

    /**
     * Adds the SchemaHandlerListener.
     *
     * @param project
     *      the project
     */
    private void addSchemaHandlerListener(Project project) {
        SchemaHandler schemaHandler = project.getSchemaHandler();
        if (schemaHandler != null) {
            schemaHandler.addListener(schemaHandlerListener);
        }
    }

    /**
     * Removes the SchemaHandlerListener.
     *
     * @param project
     *      the project
     */
    private void removeSchemaHandlerListener(Project project) {
        SchemaHandler schemaHandler = project.getSchemaHandler();
        if (schemaHandler != null) {
            schemaHandler.removeListener(schemaHandlerListener);
        }
    }

    /**
     * Intializes the schema checker listener.
     */
    private void initSchemaCheckerListener() {
        Activator.getDefault().getSchemaChecker().addListener(schemaCheckerListener);
    }

    /**
     * Initializes the DoubleClickListener.
     */
    private void initDoubleClickListener() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

                TreeViewer viewer = view.getViewer();

                // What we get from the viewer is a StructuredSelection
                StructuredSelection selection = (StructuredSelection) event.getSelection();

                // Here's the real object (an AttributeTypeWrapper, ObjectClassWrapper or IntermediateNode)
                Object objectSelection = selection.getFirstElement();
                IEditorInput input = null;
                String editorId = null;

                // Selecting the right editor and input
                if (objectSelection instanceof AttributeTypeWrapper) {
                    input = new AttributeTypeEditorInput(
                            ((AttributeTypeWrapper) objectSelection).getAttributeType());
                    editorId = AttributeTypeEditor.ID;
                } else if (objectSelection instanceof ObjectClassWrapper) {
                    input = new ObjectClassEditorInput(((ObjectClassWrapper) objectSelection).getObjectClass());
                    editorId = ObjectClassEditor.ID;
                } else if ((objectSelection instanceof Folder) || (objectSelection instanceof SchemaWrapper)) {
                    // Here we don't open an editor, we just expand the node.
                    viewer.setExpandedState(objectSelection, !viewer.getExpandedState(objectSelection));
                }

                // Let's open the editor
                if (input != null) {
                    try {
                        page.openEditor(input, editorId);
                    } catch (PartInitException e) {
                        PluginUtils.logError(Messages.getString("SchemaViewController.ErrorOpeningEditor"), e); //$NON-NLS-1$
                        ViewUtils.displayErrorMessageDialog(Messages.getString("SchemaViewController.error"), //$NON-NLS-1$
                                Messages.getString("SchemaViewController.ErrorOpeningEditor")); //$NON-NLS-1$
                    }
                }
            }
        });
    }

    /**
     * Initializes the Authorized Prefs IDs.
     */
    private void initAuthorizedPrefs() {
        authorizedPrefs = new ArrayList<String>();
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_LABEL);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_ABBREVIATE);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_ABBREVIATE_MAX_LENGTH);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SECONDARY_LABEL_DISPLAY);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SECONDARY_LABEL);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SECONDARY_LABEL_ABBREVIATE);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SECONDARY_LABEL_ABBREVIATE_MAX_LENGTH);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_GROUPING);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SORTING_BY);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SORTING_ORDER);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SCHEMA_PRESENTATION);
        authorizedPrefs.add(PluginConstants.PREFS_SCHEMA_VIEW_SCHEMA_LABEL_DISPLAY);
    }

    /**
     * Initializes the listener on the preferences store
     */
    private void initPreferencesListener() {
        Activator.getDefault().getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {
            /**
             * {@inheritDoc}
             */
            public void propertyChange(PropertyChangeEvent event) {
                if (authorizedPrefs.contains(event.getProperty())) {
                    if (PluginConstants.PREFS_SCHEMA_VIEW_GROUPING.equals(event.getProperty())
                            || PluginConstants.PREFS_SCHEMA_VIEW_SCHEMA_PRESENTATION.equals(event.getProperty())) {
                        view.reloadViewer();
                    } else {
                        view.refresh();
                    }
                }
            }
        });
    }

    /**
     * Initializes the state of the View.
     */
    private void initState() {
        Project project = Activator.getDefault().getProjectsHandler().getOpenProject();
        if (project != null) {
            viewer.getTree().setEnabled(true);
            newSchema.setEnabled(true);
            newAttributeType.setEnabled(true);
            newObjectClass.setEnabled(true);
            collapseAll.setEnabled(true);
            linkWithEditor.setEnabled(true);
            openSchemaViewSortingDialog.setEnabled(true);
            switchSchemaPresentationToFlat.setEnabled(true);
            switchSchemaPresentationToHierarchical.setEnabled(true);
            openSchemaViewPreference.setEnabled(true);
            //            commitChanges.setEnabled( true );

            addSchemaHandlerListener(project);
            view.reloadViewer();
        } else {
            viewer.getTree().setEnabled(false);
            newSchema.setEnabled(false);
            newAttributeType.setEnabled(false);
            newObjectClass.setEnabled(false);
            collapseAll.setEnabled(false);
            linkWithEditor.setEnabled(false);
            openSchemaViewSortingDialog.setEnabled(false);
            switchSchemaPresentationToFlat.setEnabled(false);
            switchSchemaPresentationToHierarchical.setEnabled(false);
            openSchemaViewPreference.setEnabled(false);
            //            commitChanges.setEnabled( false );
        }
    }

    /**
     * Initializes the PartListener.
     */
    private void initPartListener() {
        view.getSite().getPage().addPartListener(new IPartListener2() {
            /**
              * This implementation deactivates the shortcuts when the part is deactivated.
              */
            public void partDeactivated(IWorkbenchPartReference partRef) {
                if (partRef.getPart(false) == view && contextActivation != null) {
                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getAdapter(ICommandService.class);
                    if (commandService != null) {
                        commandService.getCommand(newSchema.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(newAttributeType.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(newObjectClass.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(openElement.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(openTypeHierarchy.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(deleteSchemaElement.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(renameSchemaElement.getActionDefinitionId()).setHandler(null);
                    }

                    IContextService contextService = (IContextService) PlatformUI.getWorkbench()
                            .getAdapter(IContextService.class);
                    contextService.deactivateContext(contextActivation);
                    contextActivation = null;
                }
            }

            /**
             * This implementation activates the shortcuts when the part is activated.
             */
            public void partActivated(IWorkbenchPartReference partRef) {
                if (partRef.getPart(false) == view) {
                    IContextService contextService = (IContextService) PlatformUI.getWorkbench()
                            .getAdapter(IContextService.class);
                    contextActivation = contextService.activateContext(PluginConstants.CONTEXT_SCHEMA_VIEW);

                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getAdapter(ICommandService.class);
                    if (commandService != null) {
                        commandService.getCommand(newSchema.getActionDefinitionId())
                                .setHandler(new ActionHandler(newSchema));
                        commandService.getCommand(newAttributeType.getActionDefinitionId())
                                .setHandler(new ActionHandler(newAttributeType));
                        commandService.getCommand(newObjectClass.getActionDefinitionId())
                                .setHandler(new ActionHandler(newObjectClass));
                        commandService.getCommand(openElement.getActionDefinitionId())
                                .setHandler(new ActionHandler(openElement));
                        commandService.getCommand(openTypeHierarchy.getActionDefinitionId())
                                .setHandler(new ActionHandler(openTypeHierarchy));
                        commandService.getCommand(deleteSchemaElement.getActionDefinitionId())
                                .setHandler(new ActionHandler(deleteSchemaElement));
                        commandService.getCommand(renameSchemaElement.getActionDefinitionId())
                                .setHandler(new ActionHandler(renameSchemaElement));
                    }
                }
            }

            public void partBroughtToTop(IWorkbenchPartReference partRef) {
            }

            public void partClosed(IWorkbenchPartReference partRef) {
            }

            public void partHidden(IWorkbenchPartReference partRef) {
            }

            public void partInputChanged(IWorkbenchPartReference partRef) {
            }

            public void partOpened(IWorkbenchPartReference partRef) {
            }

            public void partVisible(IWorkbenchPartReference partRef) {
            }
        });
    }
}