/* * 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.connection.ui.widgets; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.directory.studio.connection.ui.ConnectionUIConstants; import org.apache.directory.studio.connection.ui.actions.ActionHandlerManager; import org.apache.directory.studio.connection.ui.actions.CloseConnectionAction; import org.apache.directory.studio.connection.ui.actions.CollapseAllAction; import org.apache.directory.studio.connection.ui.actions.ConnectionViewActionProxy; import org.apache.directory.studio.connection.ui.actions.CopyAction; import org.apache.directory.studio.connection.ui.actions.DeleteAction; import org.apache.directory.studio.connection.ui.actions.ExpandAllAction; import org.apache.directory.studio.connection.ui.actions.NewConnectionAction; import org.apache.directory.studio.connection.ui.actions.NewConnectionFolderAction; import org.apache.directory.studio.connection.ui.actions.OpenConnectionAction; import org.apache.directory.studio.connection.ui.actions.PasteAction; import org.apache.directory.studio.connection.ui.actions.PropertiesAction; import org.apache.directory.studio.connection.ui.actions.RenameAction; import org.apache.directory.studio.connection.ui.actions.StudioActionProxy; import org.apache.directory.studio.connection.ui.dnd.ConnectionTransfer; import org.apache.directory.studio.connection.ui.dnd.DragConnectionListener; import org.apache.directory.studio.connection.ui.dnd.DropConnectionListener; import org.apache.directory.studio.utils.ActionUtils; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.actions.ActionFactory; /** * This class manages all the actions of the connection widget. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class ConnectionActionGroup implements ActionHandlerManager, IMenuListener { /** The collapse all action. */ private CollapseAllAction collapseAllAction; /** The expand all action. */ private ExpandAllAction expandAllAction; /** The Constant newConnectionAction. */ protected static final String NEW_CONNECTION_ACTION = "newConnectionAction"; //$NON-NLS-1$ /** The Constant newConnectionFolderAction. */ protected static final String NEW_CONNECTION_FOLDER_ACTION = "newConnectionFolderAction"; //$NON-NLS-1$ /** The Constant openConnectionAction. */ protected static final String OPEN_CONNECTION_ACTION = "openConnectionAction"; //$NON-NLS-1$ /** The Constant closeConnectionAction. */ protected static final String CLOSE_CONNECTION_ACTION = "closeConnectionAction"; //$NON-NLS-1$ /** The Constant copyConnectionAction. */ protected static final String COPY_CONNECTION_ACTION = "copyConnectionAction"; //$NON-NLS-1$ /** The Constant pasteConnectionAction. */ protected static final String PASTE_CONNECTION_ACTION = "pasteConnectionAction"; //$NON-NLS-1$ /** The Constant deleteConnectionAction. */ protected static final String DELETE_CONNECTION_ACTION = "deleteConnectionAction"; //$NON-NLS-1$ /** The Constant renameConnectionAction. */ protected static final String RENAME_CONNECTION_ACTION = "renameConnectionAction"; //$NON-NLS-1$ /** The Constant propertyDialogAction. */ protected static final String PROPERTY_DIALOG_ACTION = "propertyDialogAction"; //$NON-NLS-1$ /** The drag connection listener. */ private DragConnectionListener dragConnectionListener; /** The drop connection listener. */ private DropConnectionListener dropConnectionListener; /** The action map. */ protected Map<String, ConnectionViewActionProxy> connectionActionMap; /** The action bars. */ protected IActionBars actionBars; /** The connection main widget. */ protected ConnectionWidget mainWidget; /** * Creates a new instance of ConnectionActionGroup. * * @param mainWidget the connection main widget * @param configuration the connection widget configuration */ public ConnectionActionGroup( ConnectionWidget mainWidget, ConnectionConfiguration configuration ) { this.mainWidget = mainWidget; TreeViewer viewer = mainWidget.getViewer(); collapseAllAction = new CollapseAllAction( viewer ); expandAllAction = new ExpandAllAction( viewer ); connectionActionMap = new HashMap<String, ConnectionViewActionProxy>(); connectionActionMap.put( NEW_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new NewConnectionAction() ) ); connectionActionMap.put( NEW_CONNECTION_FOLDER_ACTION, new ConnectionViewActionProxy( viewer, this, new NewConnectionFolderAction() ) ); connectionActionMap.put( OPEN_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new OpenConnectionAction() ) ); connectionActionMap.put( CLOSE_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new CloseConnectionAction() ) ); connectionActionMap .put( PASTE_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new PasteAction() ) ); connectionActionMap.put( COPY_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new CopyAction( ( StudioActionProxy ) connectionActionMap.get( PASTE_CONNECTION_ACTION ) ) ) ); connectionActionMap.put( DELETE_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new DeleteAction() ) ); connectionActionMap.put( RENAME_CONNECTION_ACTION, new ConnectionViewActionProxy( viewer, this, new RenameAction() ) ); connectionActionMap.put( PROPERTY_DIALOG_ACTION, new ConnectionViewActionProxy( viewer, this, new PropertiesAction() ) ); // DND support dropConnectionListener = new DropConnectionListener(); dragConnectionListener = new DragConnectionListener( viewer ); int ops = DND.DROP_COPY | DND.DROP_MOVE; Transfer[] transfers = new Transfer[] { ConnectionTransfer.getInstance() }; viewer.addDragSupport( ops, transfers, dragConnectionListener ); viewer.addDropSupport( ops, transfers, dropConnectionListener ); } /** * Disposes this action group. */ public void dispose() { if ( mainWidget != null ) { for ( Iterator<String> it = connectionActionMap.keySet().iterator(); it.hasNext(); ) { String key = it.next(); ConnectionViewActionProxy action = ( ConnectionViewActionProxy ) this.connectionActionMap.get( key ); action.dispose(); action = null; it.remove(); } collapseAllAction.dispose(); collapseAllAction = null; expandAllAction.dispose(); expandAllAction = null; connectionActionMap.clear(); connectionActionMap = null; actionBars = null; mainWidget = null; dragConnectionListener = null; dropConnectionListener = null; } } /** * Enables the action handlers. * * @param actionBars the action bars */ public void enableGlobalActionHandlers( IActionBars actionBars ) { this.actionBars = actionBars; activateGlobalActionHandlers(); } /** * Fills the tool bar. * * @param toolBarManager the tool bar manager */ public void fillToolBar( IToolBarManager toolBarManager ) { toolBarManager.add( ( IAction ) this.connectionActionMap.get( NEW_CONNECTION_ACTION ) ); toolBarManager.add( new Separator() ); toolBarManager.add( ( IAction ) this.connectionActionMap.get( OPEN_CONNECTION_ACTION ) ); toolBarManager.add( ( IAction ) this.connectionActionMap.get( CLOSE_CONNECTION_ACTION ) ); toolBarManager.add( new Separator() ); toolBarManager.add( expandAllAction ); toolBarManager.add( collapseAllAction ); toolBarManager.update( true ); } /** * Fills the local menu. * * @param menuManager the local menu manager */ public void fillMenu( IMenuManager menuManager ) { } /** * Fills the context menu. * * @param menuManager the context menu manager */ public void fillContextMenu( IMenuManager menuManager ) { menuManager.setRemoveAllWhenShown( true ); menuManager.addMenuListener( this ); } /** * {@inheritDoc} * * This implementation fills the context menu. */ public void menuAboutToShow( IMenuManager menuManager ) { // add menuManager.add( ( IAction ) connectionActionMap.get( NEW_CONNECTION_ACTION ) ); menuManager.add( ( IAction ) connectionActionMap.get( NEW_CONNECTION_FOLDER_ACTION ) ); menuManager.add( new Separator() ); // open/close if ( ( ( IAction ) connectionActionMap.get( CLOSE_CONNECTION_ACTION ) ).isEnabled() ) { menuManager.add( ( IAction ) connectionActionMap.get( CLOSE_CONNECTION_ACTION ) ); } else if ( ( ( IAction ) connectionActionMap.get( OPEN_CONNECTION_ACTION ) ).isEnabled() ) { menuManager.add( ( IAction ) connectionActionMap.get( OPEN_CONNECTION_ACTION ) ); } menuManager.add( new Separator() ); // copy/paste/... menuManager.add( ( IAction ) connectionActionMap.get( COPY_CONNECTION_ACTION ) ); menuManager.add( ( IAction ) connectionActionMap.get( PASTE_CONNECTION_ACTION ) ); menuManager.add( ( IAction ) connectionActionMap.get( DELETE_CONNECTION_ACTION ) ); menuManager.add( ( IAction ) connectionActionMap.get( RENAME_CONNECTION_ACTION ) ); menuManager.add( new Separator() ); // additions menuManager.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); menuManager.add( new Separator() ); // properties menuManager.add( ( IAction ) connectionActionMap.get( PROPERTY_DIALOG_ACTION ) ); } /** * Activates the action handlers. */ public void activateGlobalActionHandlers() { if ( actionBars == null ) { IAction copyConnectionAction = ( IAction ) connectionActionMap.get( COPY_CONNECTION_ACTION ); copyConnectionAction.setActionDefinitionId( ConnectionUIConstants.CMD_COPY ); ActionUtils.activateActionHandler( copyConnectionAction ); IAction pasteConnectionAction = ( IAction ) connectionActionMap.get( PASTE_CONNECTION_ACTION ); pasteConnectionAction.setActionDefinitionId( ConnectionUIConstants.CMD_PASTE ); ActionUtils.activateActionHandler( pasteConnectionAction ); IAction deleteConnectionAction = ( IAction ) connectionActionMap.get( DELETE_CONNECTION_ACTION ); deleteConnectionAction.setActionDefinitionId( ConnectionUIConstants.CMD_DELETE ); ActionUtils.activateActionHandler( deleteConnectionAction ); IAction propertyDialogAction = ( IAction ) connectionActionMap.get( PROPERTY_DIALOG_ACTION ); propertyDialogAction.setActionDefinitionId( ConnectionUIConstants.CMD_PROPERTIES ); ActionUtils.activateActionHandler( propertyDialogAction ); } else { actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), ( IAction ) connectionActionMap .get( COPY_CONNECTION_ACTION ) ); actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), ( IAction ) connectionActionMap .get( PASTE_CONNECTION_ACTION ) ); actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), ( IAction ) connectionActionMap .get( DELETE_CONNECTION_ACTION ) ); actionBars.setGlobalActionHandler( ActionFactory.RENAME.getId(), ( IAction ) connectionActionMap .get( RENAME_CONNECTION_ACTION ) ); actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), ( IAction ) connectionActionMap .get( PROPERTY_DIALOG_ACTION ) ); actionBars.updateActionBars(); } } /** * Deactivates the action handlers. */ public void deactivateGlobalActionHandlers() { if ( actionBars == null ) { IAction copyConnectionAction = ( IAction ) connectionActionMap.get( COPY_CONNECTION_ACTION ); ActionUtils.deactivateActionHandler( copyConnectionAction ); IAction pasteConnectionAction = ( IAction ) connectionActionMap.get( PASTE_CONNECTION_ACTION ); ActionUtils.deactivateActionHandler( pasteConnectionAction ); IAction deleteConnectionAction = ( IAction ) connectionActionMap.get( DELETE_CONNECTION_ACTION ); ActionUtils.deactivateActionHandler( deleteConnectionAction ); IAction propertyDialogAction = ( IAction ) connectionActionMap.get( PROPERTY_DIALOG_ACTION ); ActionUtils.deactivateActionHandler( propertyDialogAction ); } else { actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), null ); actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), null ); actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), null ); actionBars.setGlobalActionHandler( ActionFactory.RENAME.getId(), null ); actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), null ); actionBars.updateActionBars(); } } }