Skip to main content
summaryrefslogblamecommitdiffstats
blob: 4e5ed30475ad9cfc1b873afc9dbf494f408c9ef2 (plain) (tree)
























                                                                               








                                                                                 

























































































































































                                                                                                                                                                                                 
/*****************************************************************************
 * Copyright (c) 2013 CEA LIST.
 *
 *
 * 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:
 *  CEA LIST - Initial API and implementation
 *
 *****************************************************************************/
package org.eclipse.papyrus.uml.search.ui.pages;

import java.util.Set;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject;
import org.eclipse.papyrus.infra.services.navigation.service.NavigationService;
import org.eclipse.papyrus.infra.services.openelement.service.OpenElementService;
import org.eclipse.papyrus.uml.search.ui.Activator;
import org.eclipse.papyrus.uml.search.ui.Messages;
import org.eclipse.papyrus.uml.search.ui.actions.FilterTypesAction;
import org.eclipse.papyrus.uml.search.ui.providers.ResultContentProvider;
import org.eclipse.papyrus.uml.search.ui.providers.ResultLabelProvider;
import org.eclipse.papyrus.views.search.results.AbstractResultEntry;
import org.eclipse.papyrus.views.search.scope.ScopeEntry;
import org.eclipse.papyrus.views.search.utils.MatchUtils;
import org.eclipse.search.ui.IContextMenuConstants;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.search.ui.text.Match;
import org.eclipse.ui.PartInitException;
import org.eclipse.uml2.uml.Element;

/**
 *
 * Papyrus specific search results page
 * @since 2.0
 *
 */
public class PapyrusSearchResultPage extends AbstractTextSearchViewPage {

	ResultContentProvider fContentProvider = null;

	private IAction fFiltertypesAction = null;

	private static final int DEFAULT_ELEMENT_LIMIT = 1000;

	public PapyrusSearchResultPage() {

		super(FLAG_LAYOUT_TREE);
		setElementLimit(new Integer(DEFAULT_ELEMENT_LIMIT));
		fFiltertypesAction = new FilterTypesAction(this);
	}



	@Override
	public Match[] getDisplayedMatches(Object element) {
		
		Set<AbstractResultEntry> results = MatchUtils.getMatches(this.getInput(), true);

		if (element instanceof AbstractResultEntry) {
			AbstractResultEntry resultEntry = (AbstractResultEntry) element;

			if (results.contains(resultEntry)) {

				return new Match[] { resultEntry };

			}
			return new Match[0];
		} else {
			return super.getDisplayedMatches(element);
		}
	}

	@Override
	public int getDisplayedMatchCount(Object element) {

		if (element instanceof AbstractResultEntry) {
			AbstractResultEntry resultEntry = (AbstractResultEntry) element;

			Set<AbstractResultEntry> results = MatchUtils.getMatches(this.getInput(), true);
			if (results.contains(resultEntry)) {
				return 1;
			}

			return 0;
		} else {
			return super.getDisplayedMatchCount(element);
		}
	}

	@Override
	protected void fillToolbar(IToolBarManager tbm) {
		super.fillToolbar(tbm);
		tbm.appendToGroup(IContextMenuConstants.GROUP_REMOVE_MATCHES, fFiltertypesAction);
	}

	@Override
	protected void handleOpen(OpenEvent event) {
		ISelection selection = event.getSelection();
		if (!selection.isEmpty()) {
			if (selection instanceof IStructuredSelection) {
				Object firstElement = ((IStructuredSelection) selection).getFirstElement();

				if (firstElement instanceof AbstractResultEntry) {
					AbstractResultEntry resultEntry = (AbstractResultEntry) firstElement;
					ScopeEntry scopeEntry = (ScopeEntry) resultEntry.getElement();
					if (scopeEntry != null && scopeEntry.getServicesRegistry() != null) {
						Object source = resultEntry.getSource();
						if (source instanceof Element) { // UML element => use NavigationService to navigate to Model Explorer
							try {
								NavigationService navigationService = ServiceUtilsForEObject.getInstance().getService(NavigationService.class, (Element) source);
								navigationService.navigate((Element) source, "org.eclipse.papyrus.views.modelexplorer.navigation.target");
							} catch (ServiceException e) {
								Activator.log.error(e);
							}
						} else { // Anything else => Let the OpenElementService handle it
							try {
								OpenElementService service = scopeEntry.getServicesRegistry().getService(OpenElementService.class);
								resultEntry.openElement(service);
							} catch (ServiceException e) {
								// Activator.log.error(Messages.PapyrusSearchResultPage_0 + resultEntry.elementToOpen(), e);
							} catch (PartInitException e) {
								Activator.log.error(Messages.PapyrusSearchResultPage_1, e);
							}
						}
					}

				}

			}

		}

		// super.handleOpen(event);
	}

	@Override
	protected void elementsChanged(Object[] objects) {
		if (fContentProvider != null) {
			fContentProvider.elementsChanged(objects);
		}
	}


	@SuppressWarnings("unchecked")
	@Override
	protected void evaluateChangedElements(Match[] matches, @SuppressWarnings("rawtypes") Set changedElements) {
		for (int i = 0; i < matches.length; i++) {
			changedElements.add(matches[i]);
		}
	}

	@Override
	protected void clear() {
		if (fContentProvider != null) {
			fContentProvider.clear();
		}
	}

	@Override
	protected void configureTreeViewer(TreeViewer viewer) {
		viewer.setContentProvider(new ResultContentProvider(this, viewer));
		viewer.setLabelProvider(new ResultLabelProvider());
		fContentProvider = (ResultContentProvider) viewer.getContentProvider();

	}

	@Override
	protected void configureTableViewer(TableViewer viewer) {

	}

	@Override
	public void dispose() {
		super.dispose();
	}
}

Back to the top