/** * Copyright (c) 2013 committers of YAKINDU 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: * committers of YAKINDU - initial API and implementation (http://www.statecharts.org) * */ package org.yakindu.sct.ui.editor.commands; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.OperationHistoryFactory; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart; import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand; import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; import org.eclipse.gmf.runtime.notation.NotationFactory; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.StringValueStyle; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; import org.yakindu.base.base.BasePackage; import org.yakindu.sct.model.sgraph.SGraphPackage; import org.yakindu.sct.ui.editor.utils.GMFNotationUtil; /** * * @author andreas muelder - Initial contribution and API * */ public class ToggleShowDocumentationCommand extends AbstractHandler { public static final String FEATURE_TO_SHOW = "featureToShow"; public Object execute(ExecutionEvent event) throws ExecutionException { List<View> views = unwrap(HandlerUtil.getCurrentSelection(event)); toggleDocumentation(views); return null; } public static void toggleDocumentation(List<View> views) { CompositeCommand command = new CompositeCommand("toggle documentation"); for (View view : views) { StringValueStyle style = GMFNotationUtil.getStringValueStyle(view, FEATURE_TO_SHOW); if (style == null) { style = createInitialStyle(view); } String featureName = style.getStringValue().equals( SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION.getName()) ? BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION .getName() : SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION.getName(); command.add(new SetValueCommand(new SetRequest(style, NotationPackage.Literals.STRING_VALUE_STYLE__STRING_VALUE, featureName))); } executeCommand(command); } public static StringValueStyle createInitialStyle(View view) { StringValueStyle style = NotationFactory.eINSTANCE.createStringValueStyle(); style.setName(FEATURE_TO_SHOW); style.setStringValue(SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION.getName()); SetValueCommand cmd = new SetValueCommand(new SetRequest(view, NotationPackage.Literals.VIEW__STYLES, style)); executeCommand(cmd); return style; } public static void executeCommand(ICommand cmd) { try { OperationHistoryFactory.getOperationHistory().execute(cmd, new NullProgressMonitor(), null); } catch (ExecutionException e) { e.printStackTrace(); } } protected List<View> unwrap(ISelection selection) { List<View> result = new ArrayList<View>(); IStructuredSelection structuredSelection = (IStructuredSelection) selection; for (@SuppressWarnings("unchecked") Iterator<IGraphicalEditPart> iter = structuredSelection.iterator(); iter.hasNext();) { IGraphicalEditPart next = iter.next(); while(next != null && !(next instanceof IPrimaryEditPart)){ next = (IGraphicalEditPart) next.getParent(); } result.add(next.getNotationView()); } return result; } }