/******************************************************************************* * Copyright (c) 2011 Wind River Systems, 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: * William Chen (Wind River) [354578] Add support for working sets *******************************************************************************/ package org.eclipse.tm.te.ui.views.workingsets.pages; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.tm.te.runtime.interfaces.workingsets.IWorkingSetElement; import org.eclipse.tm.te.ui.trees.TreeArrayContentProvider; import org.eclipse.tm.te.ui.views.ViewsUtil; import org.eclipse.tm.te.ui.views.activator.UIPlugin; import org.eclipse.tm.te.ui.views.interfaces.IUIConstants; import org.eclipse.tm.te.ui.views.interfaces.ImageConsts; import org.eclipse.tm.te.ui.views.internal.ViewRoot; import org.eclipse.tm.te.ui.views.nls.Messages; import org.eclipse.tm.te.ui.views.workingsets.WorkingSetElementHolder; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.navigator.CommonNavigator; import org.eclipse.ui.navigator.INavigatorContentService; /** * A target working set page is a wizard page used to configure a custom defined * working set. This wizard is used in the configure working set action to edit * the working sets used in the working set viewer. */ public class TargetWorkingSetPage extends AbstractWorkingSetWizardPage { // The target explorer view content service (Never dispose it in here!) private INavigatorContentService contentService; // The initial selection private IStructuredSelection initialSelection; /** * Default constructor. */ public TargetWorkingSetPage() { super("targetWorkingSetPage", Messages.TargetWorkingSetPage_title, UIPlugin.getImageDescriptor(ImageConsts.WORKING_SET)); //$NON-NLS-1$ setDescription(Messages.TargetWorkingSetPage_workingSet_description); } /** * Set the initial selection. * @param selection The initial selection */ public void setInitialSelection(IStructuredSelection selection) { initialSelection = selection; } /* (non-Javadoc) * @see org.eclipse.tm.te.tcf.ui.internal.workingsets.AbstractWorkingSetWizardPage#getPageId() */ @Override protected String getPageId() { return "org.eclipse.tm.te.tcf.ui.TargetWorkingSetPage"; //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.tm.te.tcf.ui.internal.workingsets.AbstractWorkingSetWizardPage#configureTree(org.eclipse.jface.viewers.TreeViewer) */ @Override protected void configureTree(TreeViewer tree) { // Get the content service from the Target Explorer view. IWorkbenchPart part = ViewsUtil.getPart(IUIConstants.ID_EXPLORER); if (part instanceof CommonNavigator) { contentService = ((CommonNavigator)part).getNavigatorContentService(); tree.setContentProvider(TreeArrayContentProvider.getInstance()); tree.setLabelProvider(contentService.createCommonLabelProvider()); // Filter out everything not implementing IWorkingSetElement tree.addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { return element instanceof IWorkingSetElement; } }); // Initialize the tree input tree.setInput(contentService.createCommonContentProvider().getElements(ViewRoot.getInstance())); } } /* (non-Javadoc) * @see org.eclipse.tm.te.tcf.ui.internal.workingsets.AbstractWorkingSetWizardPage#configureTable(org.eclipse.jface.viewers.TableViewer) */ @Override protected void configureTable(TableViewer table) { table.setLabelProvider(contentService.createCommonLabelProvider()); } /* (non-Javadoc) * @see org.eclipse.tm.te.tcf.ui.internal.workingsets.AbstractWorkingSetWizardPage#getInitialWorkingSetElements(org.eclipse.ui.IWorkingSet) */ @Override protected Object[] getInitialWorkingSetElements(IWorkingSet workingSet) { Object[] elements; if (workingSet == null) { if (initialSelection == null) return new IAdaptable[0]; elements = initialSelection.toArray(); } else { List<IWorkingSetElement> result = new ArrayList<IWorkingSetElement>(); for (IAdaptable adaptable : workingSet.getElements()) { if (!(adaptable instanceof WorkingSetElementHolder)) continue; WorkingSetElementHolder holder = (WorkingSetElementHolder) adaptable; Assert.isNotNull(holder); IWorkingSetElement element = holder.getElement(); // If the element is null, try to look up the element through the content provider if (element == null) { ITreeContentProvider contentProvider = (ITreeContentProvider)tree.getContentProvider(); for (Object candidate : contentProvider.getElements(tree.getInput())) { if (candidate instanceof IWorkingSetElement && ((IWorkingSetElement)candidate).getElementId().equals(holder.getElementId())) { holder.setElement((IWorkingSetElement)candidate); element = holder.getElement(); break; } } } if (element != null) result.add(element); } elements = result.toArray(); } return elements; } }