| /******************************************************************************* |
| * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH 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: |
| * Otto von Wesendonk - initial implementation and API |
| * Edgar Mueller - Bug 476839 |
| ******************************************************************************/ |
| package org.eclipse.emf.emfstore.internal.client.ui.util; |
| |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.emf.emfstore.internal.client.ui.exceptions.RequiredSelectionException; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.ui.handlers.HandlerUtil; |
| |
| /** |
| * This class provides helper methods that can determine the currently selected element. |
| * |
| * @author ovonwesen |
| * |
| */ |
| public final class EMFStoreHandlerUtil { |
| |
| /** |
| * Private constructor. |
| */ |
| private EMFStoreHandlerUtil() { |
| |
| } |
| |
| /** |
| * Extracts element from event. |
| * |
| * @param event the event |
| * @param clazz class type of the object to extract |
| * @param <T> the type of the object to extract |
| * @return the object |
| */ |
| @SuppressWarnings("unchecked") |
| public static <T> T getSelection(ExecutionEvent event, Class<T> clazz) { |
| ISelection sel = HandlerUtil.getCurrentSelection(event); |
| if (sel == null) { |
| sel = HandlerUtil.getActiveMenuSelection(event); |
| } |
| if (!(sel instanceof IStructuredSelection)) { |
| return null; |
| } |
| |
| final IStructuredSelection structuredSelection = (IStructuredSelection) sel; |
| if (structuredSelection.isEmpty()) { |
| return null; |
| } |
| |
| final Object selectedElement = structuredSelection.getFirstElement(); |
| if (!clazz.isInstance(selectedElement)) { |
| return null; |
| } |
| return (T) selectedElement; |
| } |
| |
| /** |
| * Returns an object of the given <code>clazz</code> if it can be extracted from |
| * the current selection. |
| * |
| * @param event |
| * the event from which to extract the selection |
| * @param clazz |
| * the type of the object that is requested to be extracted from the current selection |
| * @return an object of type <b>T</b> that is contained within the current selection |
| * |
| * @throws RequiredSelectionException |
| * if the selection is invalid, i.e. if no object of the given type is contained in the selection |
| * or if the selection is <code>null</code> |
| * |
| * @param <T> the type of the object to be extracted from the current selection |
| */ |
| public static <T> T requireSelection(ExecutionEvent event, Class<T> clazz) throws RequiredSelectionException { |
| final T selection = getSelection(event, clazz); |
| if (selection == null) { |
| throw new RequiredSelectionException(); |
| } |
| return selection; |
| } |
| |
| /** |
| * Returns whether an object of the given <code>clazz</code> can be extracted from |
| * the current selection. |
| * |
| * @param event |
| * the event from which to extract the selection |
| * @param clazz |
| * the type of the object that is requested to be extracted from the current selection |
| * @return {@code true} if an object of type <b>T</b> is contained within the current selection, |
| * {@code false} otherwise |
| * |
| * @param <T> the type of the object to be extracted from the current selection |
| */ |
| public static <T> boolean hasSelection(ExecutionEvent event, Class<T> clazz) { |
| final T selection = getSelection(event, clazz); |
| return selection != null; |
| } |
| } |