/*******************************************************************************
* Copyright (c) 2014, 2015 Red Hat Inc., 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:
* Mickael Istria (Red Hat Inc.) - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal.navigator.resources.nested;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.ICommonFilterDescriptor;
import org.eclipse.ui.navigator.INavigatorFilterService;
public class ProjectPresentationHandler extends AbstractHandler {
public static final String COMMAND_ID = "org.eclipse.ui.navigator.resources.nested.changeProjectPresentation"; //$NON-NLS-1$
private static final String NEST_PARAMETER = WorkbenchNavigatorPlugin.PLUGIN_ID + ".nested.enabled"; //$NON-NLS-1$
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchPart part = HandlerUtil.getActivePart(event);
if (part instanceof CommonNavigator) {
CommonNavigator navigator = (CommonNavigator)part;
boolean previousNest = navigator.getNavigatorContentService().getActivationService().isNavigatorExtensionActive(NestedProjectsContentProvider.EXTENSION_ID);
String newNestParam = event.getParameter(ProjectPresentationHandler.NEST_PARAMETER);
boolean newNest = false;
if (newNestParam != null) {
newNest = Boolean.parseBoolean(newNestParam);
}
if (newNest != previousNest) {
ISelection initialSelection = navigator.getCommonViewer().getSelection();
INavigatorFilterService filterService = navigator.getNavigatorContentService().getFilterService();
Set<String> filters = new HashSet<String>();
for (ICommonFilterDescriptor desc : filterService.getVisibleFilterDescriptors()) {
if (filterService.isActive(desc.getId())) {
filters.add(desc.getId());
}
}
if (newNest) {
navigator.getNavigatorContentService().getActivationService().activateExtensions(new String[] { NestedProjectsContentProvider.EXTENSION_ID }, false);
filters.add(HideTopLevelProjectIfNested.EXTENSION_ID);
filters.add(HideFolderWhenProjectIsShownAsNested.EXTENTSION_ID);
} else {
navigator.getNavigatorContentService().getActivationService().deactivateExtensions(new String[] { NestedProjectsContentProvider.EXTENSION_ID }, false);
filters.remove(HideTopLevelProjectIfNested.EXTENSION_ID);
filters.remove(HideFolderWhenProjectIsShownAsNested.EXTENTSION_ID);
}
filterService.activateFilterIdsAndUpdateViewer(filters.toArray(new String[filters.size()]));
navigator.getNavigatorContentService().getActivationService().persistExtensionActivations();
navigator.getCommonViewer().refresh();
navigator.getCommonViewer().setSelection(initialSelection);
}
HandlerUtil.updateRadioState(event.getCommand(), Boolean.toString(newNest));
return Boolean.valueOf(newNest);
}
return false;
}
@Override
public boolean isEnabled() {
return true;
}
}