/* * 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.ldapbrowser.ui.actions; import java.util.Collection; import org.apache.directory.studio.entryeditors.EntryEditorExtension; import org.apache.directory.studio.entryeditors.EntryEditorManager; import org.apache.directory.studio.ldapbrowser.common.actions.BrowserSelectionUtils; import org.apache.directory.studio.ldapbrowser.core.model.IBookmark; import org.apache.directory.studio.ldapbrowser.core.model.IEntry; import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult; import org.apache.directory.studio.ldapbrowser.ui.BrowserUIPlugin; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.StructuredSelection; public class EntryEditorMenuManager extends MenuManager implements IMenuListener { /** The selection provider */ private ISelectionProvider selectionProvider; /** The OpenEntryEditorsPreferencePageAction */ private OpenEntryEditorsPreferencePageAction openEntryEditorsPreferencePageAction; /** * Creates a menu manager. The text and id are <code>null</code>. * Typically used for creating a context menu, where it doesn't need to be referred to by id. */ public EntryEditorMenuManager( ISelectionProvider selectionProvider ) { super( Messages.getString( "EntryEditorMenuManager.OpenWith" ) ); //$NON-NLS-1$ this.selectionProvider = selectionProvider; openEntryEditorsPreferencePageAction = new OpenEntryEditorsPreferencePageAction(); addMenuListener( this ); } /** * {@inheritDoc} */ public void menuAboutToShow( IMenuManager manager ) { // As the Menu Manager is dynamic, we need to // remove all the previously added actions removeAll(); // Getting the currently selected entry IEntry selectedEntry = getCurrentSelection(); if ( selectedEntry != null ) { // Getting the entry editors and creating an action for each one // that can handle the entry Collection<EntryEditorExtension> entryEditors = BrowserUIPlugin.getDefault().getEntryEditorManager() .getSortedEntryEditorExtensions(); for ( EntryEditorExtension entryEditor : entryEditors ) { // Verifying that the editor can handle the entry if ( entryEditor.getEditorInstance().canHandle( selectedEntry ) ) { // Creating the action associated with the entry editor add( createAction( entryEditor ) ); } } } // Separator add( new Separator() ); // Preferences Action add( openEntryEditorsPreferencePageAction ); } /** * Gets the currently selected entry. * * @return * the currently selected entry */ private IEntry getCurrentSelection() { StructuredSelection structuredSelection = ( StructuredSelection ) selectionProvider.getSelection(); if ( !structuredSelection.isEmpty() ) { Object selection = structuredSelection.getFirstElement(); if ( selection instanceof IEntry ) { return ( IEntry ) selection; } else if ( selection instanceof ISearchResult ) { return ( ( ISearchResult ) selection ).getEntry(); } else if ( selection instanceof IBookmark ) { return ( ( IBookmark ) selection ).getEntry(); } } return null; } /** * Creates an action for the given entry editor. * * @param entryEditorExtension * the entry editor * @return * an action associated with the entry editor */ private IAction createAction( final EntryEditorExtension entryEditorExtension ) { Action action = new Action( entryEditorExtension.getName(), entryEditorExtension.getIcon() ) { public void run() { EntryEditorManager entryEditorManager = BrowserUIPlugin.getDefault().getEntryEditorManager(); ISelection selection = selectionProvider.getSelection(); IEntry[] selectedEntries = BrowserSelectionUtils.getEntries( selection ); ISearchResult[] selectedSearchResults = BrowserSelectionUtils.getSearchResults( selection ); IBookmark[] selectedBookMarks = BrowserSelectionUtils.getBookmarks( selection ); entryEditorManager.openEntryEditor( entryEditorExtension, selectedEntries, selectedSearchResults, selectedBookMarks ); } }; return action; } /** * {@inheritDoc} */ public boolean isVisible() { ISelection selection = selectionProvider.getSelection(); IBookmark[] selectedBookMarks = BrowserSelectionUtils.getBookmarks( selection ); IEntry[] selectedEntries = BrowserSelectionUtils.getEntries( selection ); ISearchResult[] selectedSearchResults = BrowserSelectionUtils.getSearchResults( selection ); return ( selectedSearchResults.length + selectedBookMarks.length + selectedEntries.length == 1 ); } /** * {@inheritDoc} */ public boolean isDynamic() { return true; } }