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

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.schemaeditor.controller.ProjectsViewController.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 org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.controller.actions.CloseProjectAction;
import org.apache.directory.studio.schemaeditor.controller.actions.DeleteProjectAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ExportProjectsAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ImportProjectsAction;
import org.apache.directory.studio.schemaeditor.controller.actions.NewProjectAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenProjectAction;
import org.apache.directory.studio.schemaeditor.controller.actions.RenameProjectAction;
import org.apache.directory.studio.schemaeditor.model.Project;
import org.apache.directory.studio.schemaeditor.model.Project.ProjectState;
import org.apache.directory.studio.schemaeditor.view.views.ProjectsView;
import org.apache.directory.studio.schemaeditor.view.wrappers.ProjectWrapper;
import org.apache.directory.studio.schemaeditor.view.wrappers.ProjectsViewRoot;
import org.eclipse.jface.action.Action;
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.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPartReference;
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 ProjectsViewController {
    /** The associated view */
    private ProjectsView view;

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

    /** The TableViewer */
    private TableViewer viewer;

    /** The ProjectsHandler */
    private ProjectsHandler projectsHandler;

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

    // The Actions
    private NewProjectAction newProject;
    private OpenProjectAction openProject;
    private CloseProjectAction closeProject;
    private RenameProjectAction renameProject;
    private DeleteProjectAction deleteProject;
    private ImportProjectsAction importProjects;
    private ExportProjectsAction exportProjects;

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

        projectsHandler = Activator.getDefault().getProjectsHandler();

        initActions();
        initToolbar();
        initContextMenu();
        initViewer();
        initDoubleClickListener();
        initPartListener();
    }

    /**
     * Initializes the Actions.
     */
    private void initActions() {
        newProject = new NewProjectAction();
        openProject = new OpenProjectAction(view.getViewer());
        closeProject = new CloseProjectAction(view.getViewer());
        renameProject = new RenameProjectAction(view.getViewer());
        deleteProject = new DeleteProjectAction(view.getViewer());
        importProjects = new ImportProjectsAction();
        exportProjects = new ExportProjectsAction(view.getViewer());
    }

    /**
     * Initializes the Toolbar.
     */
    private void initToolbar() {
        IToolBarManager toolbar = view.getViewSite().getActionBars().getToolBarManager();
        toolbar.add(newProject);
    }

    /**
     * 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 importManager = new MenuManager(
                        Messages.getString("ProjectsViewController.ImportAction")); //$NON-NLS-1$
                MenuManager exportManager = new MenuManager(
                        Messages.getString("ProjectsViewController.ExportAction")); //$NON-NLS-1$
                manager.add(newProject);
                manager.add(new Separator());
                manager.add(openProject);
                manager.add(closeProject);
                manager.add(new Separator());
                manager.add(renameProject);
                manager.add(new Separator());
                manager.add(deleteProject);
                manager.add(new Separator());
                manager.add(importManager);
                importManager.add(importProjects);
                manager.add(exportManager);
                exportManager.add(exportProjects);

                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 Viewer.
     */
    private void initViewer() {
        viewer.setInput(new ProjectsViewRoot(viewer));
        viewer.getTable().addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if ((e.keyCode == Action.findKeyCode("BACKSPACE")) //$NON-NLS-1$
                        || (e.keyCode == Action.findKeyCode("DELETE"))) //$NON-NLS-1$
                {
                    deleteProject.run();
                }
            }
        });
    }

    /**
     * Initializes the DoubleClickListener.
     */
    private void initDoubleClickListener() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                StructuredSelection selection = (StructuredSelection) viewer.getSelection();

                if ((!selection.isEmpty()) && (selection.size() == 1)) {
                    Project project = ((ProjectWrapper) selection.getFirstElement()).getProject();
                    if (project.getState().equals(ProjectState.CLOSED)) {
                        projectsHandler.openProject(project);
                    }
                }
            }
        });
    }

    /**
     * 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(newProject.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(renameProject.getActionDefinitionId()).setHandler(null);
                        commandService.getCommand(deleteProject.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_PROJECTS_VIEW);

                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getAdapter(ICommandService.class);
                    if (commandService != null) {
                        commandService.getCommand(newProject.getActionDefinitionId())
                                .setHandler(new ActionHandler(newProject));
                        commandService.getCommand(renameProject.getActionDefinitionId())
                                .setHandler(new ActionHandler(renameProject));
                        commandService.getCommand(deleteProject.getActionDefinitionId())
                                .setHandler(new ActionHandler(deleteProject));
                    }
                }
            }

            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) {
            }

        });
    }
}