org.apache.directory.studio.ldapbrowser.ui.actions.EntryEditorMenuManager.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.ldapbrowser.ui.actions.EntryEditorMenuManager.java

Source

/*
 *  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;
    }
}