ext.org.eclipse.jdt.internal.ui.navigator.JavaNavigatorViewActionProvider.java Source code

Java tutorial

Introduction

Here is the source code for ext.org.eclipse.jdt.internal.ui.navigator.JavaNavigatorViewActionProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2003, 2011 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * IBM Corporation - initial API and implementation
 *******************************************************************************/
package ext.org.eclipse.jdt.internal.ui.navigator;

import java.util.Arrays;

import org.eclipse.jface.preference.IPreferenceStore;

import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.IExtensionActivationListener;
import org.eclipse.ui.navigator.IExtensionStateModel;
import org.eclipse.ui.navigator.INavigatorActivationService;

import patch.org.eclipse.jdt.internal.ui.JavaPlugin;

import ext.org.eclipse.jdt.internal.ui.navigator.IExtensionStateConstants.Values;

/**
 * Contributes the following actions to the menu on behalf of the JDT content
 * extension.
 *
 * <ul>
 * <li>{@link CommonLayoutActionGroup}. Contributes the "Package Presentation>" submenu in the View's drop down menu (not right-click).</li>
 * </ul>
 */
public class JavaNavigatorViewActionProvider extends CommonActionProvider {

    private static final int HIERARCHICAL_LAYOUT = 0x1;

    private static final int FLAT_LAYOUT = 0x2;

    private static final String TAG_LAYOUT = "org.eclipse.jdt.internal.ui.navigator.layout"; //$NON-NLS-1$

    private IExtensionStateModel fStateModel;

    private CommonLayoutActionGroup fLayoutActionGroup;

    private ICommonActionExtensionSite fExtensionSite;

    private String fExtensionId;

    private IActionBars fActionBars;

    private boolean fEnabled = false;

    private IExtensionActivationListener fMenuUpdater = new IExtensionActivationListener() {

        public void onExtensionActivation(String viewerId, String[] theNavigatorExtensionIds,
                boolean isCurrentlyActive) {

            if (fExtensionSite != null && fActionBars != null) {

                int search = Arrays.binarySearch(theNavigatorExtensionIds, fExtensionId);
                if (search > -1) {
                    if (isMyViewer(viewerId)) {
                        if (wasEnabled(isCurrentlyActive))
                            fLayoutActionGroup.fillActionBars(fActionBars);

                        else if (wasDisabled(isCurrentlyActive))
                            fLayoutActionGroup.unfillActionBars(fActionBars);
                        // else no change
                    }
                    fEnabled = isCurrentlyActive;
                }
            }

        }

        private boolean isMyViewer(String viewerId) {
            String myViewerId = fExtensionSite.getViewSite().getId();
            return myViewerId != null && myViewerId.equals(viewerId);
        }

        private boolean wasDisabled(boolean isActive) {
            return fEnabled && !isActive;
        }

        private boolean wasEnabled(boolean isActive) {
            return !fEnabled && isActive;
        }
    };

    @Override
    public void fillActionBars(IActionBars actionBars) {
        fActionBars = actionBars;
        fLayoutActionGroup.fillActionBars(actionBars);
    }

    @Override
    public void init(ICommonActionExtensionSite site) {

        fExtensionSite = site;

        fStateModel = fExtensionSite.getExtensionStateModel();
        fLayoutActionGroup = new CommonLayoutActionGroup(fExtensionSite.getStructuredViewer(), fStateModel);

        INavigatorActivationService activationService = fExtensionSite.getContentService().getActivationService();
        activationService.addExtensionActivationListener(fMenuUpdater);

        fExtensionId = fExtensionSite.getExtensionId();

        fEnabled = true;

    }

    @Override
    public void dispose() {
        fLayoutActionGroup.dispose();
        fExtensionSite.getContentService().getActivationService().removeExtensionActivationListener(fMenuUpdater);
        super.dispose();
    }

    @Override
    public void setContext(ActionContext context) {
        super.setContext(context);
    }

    @Override
    public void restoreState(IMemento memento) {
        boolean isCurrentLayoutFlat = true;
        Integer state = null;
        if (memento != null)
            state = memento.getInteger(TAG_LAYOUT);

        // If no memento try an restore from preference store
        if (state == null) {
            IPreferenceStore store = JavaPlugin.getDefault().getPreferenceStore();
            state = new Integer(store.getInt(TAG_LAYOUT));
        }

        if (state.intValue() == FLAT_LAYOUT)
            isCurrentLayoutFlat = true;
        else if (state.intValue() == HIERARCHICAL_LAYOUT)
            isCurrentLayoutFlat = false;

        fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, isCurrentLayoutFlat);
        fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat);
    }

    @Override
    public void saveState(IMemento aMemento) {
        super.saveState(aMemento);
        IPreferenceStore store = JavaPlugin.getDefault().getPreferenceStore();
        if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT))
            store.setValue(TAG_LAYOUT, FLAT_LAYOUT);
        else
            store.setValue(TAG_LAYOUT, HIERARCHICAL_LAYOUT);

    }
}