/*
* 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>
* @version $Rev$, $Date$
*/
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 )
{
}
} );
}
}