Java tutorial
/* * 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) { } }); } }