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.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; } }