| /* |
| ----------------------------------------------------------------------- |
| -- CHESS editor plugin -- |
| -- -- |
| -- Copyright (C) 2011-2012 -- |
| -- University of Padova, ITALY -- |
| -- -- |
| -- Author: Alessandro Zovi azovi@math.unipd.it -- |
| -- -- |
| -- 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-v20.html -- |
| ----------------------------------------------------------------------- |
| */ |
| |
| package org.polarsys.chess.service.internal.commands.switchers; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor; |
| import org.eclipse.papyrus.infra.ui.editor.CoreMultiDiagramEditor; |
| import org.eclipse.ui.AbstractSourceProvider; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.ISources; |
| import org.eclipse.ui.commands.ICommandService; |
| import org.eclipse.uml2.uml.Model; |
| import org.eclipse.uml2.uml.Stereotype; |
| import org.polarsys.chess.core.util.uml.ResourceUtils; |
| import org.polarsys.chess.core.views.DiagramStatus; |
| import org.polarsys.chess.core.views.DiagramStatus.DesignView; |
| import org.polarsys.chess.service.gui.utils.CHESSEditorUtils; |
| import org.polarsys.chess.core.views.ViewUtils; |
| import org.polarsys.chess.chessmlprofile.Core.CHESS; |
| import org.polarsys.chess.chessmlprofile.Core.Domain; |
| import org.polarsys.chess.chessmlprofile.util.Constants; |
| |
| /** |
| * @since 0.10 |
| */ |
| public class SwitchSourceProvider extends AbstractSourceProvider { |
| |
| public final static String SWITCH = "org.polarsys.chess.service.commands.switchState"; |
| |
| // for Domain dependent management of Menu contributions |
| public final static String DOMAIN = "org.polarsys.chess.service.commands.domain"; |
| private final static String defaultDomain = Domain.CROSS_DOMAIN.name(); |
| private String currentDomain = defaultDomain; |
| |
| |
| private final static String DISABLED = "disabled"; |
| |
| private String currentState = DISABLED; |
| |
| |
| public static List<String> commandsToRefresh = new ArrayList<String>(); |
| |
| public void dispose() { |
| } |
| |
| @SuppressWarnings({ "rawtypes", "unchecked" }) |
| public Map getCurrentState() { |
| Map currentSt = new HashMap(2); |
| currentSt.put(SWITCH, currentState); |
| currentSt.put(DOMAIN, currentDomain); |
| return currentSt; |
| } |
| |
| public String[] getProvidedSourceNames() { |
| return new String[] { SWITCH }; |
| } |
| |
| private void setEnabledValue(String v) { |
| currentState = v; |
| fireSourceChanged(ISources.WORKBENCH, SWITCH, v); |
| } |
| |
| private void setEnabledValueDomain(String d) { |
| currentDomain = d; |
| fireSourceChanged(ISources.WORKBENCH, DOMAIN, d); |
| } |
| |
| /** |
| * Updates the variables used to guide the menu/toolbar population: |
| * - Variable SWITCH (org.polarsys.chess.service.commands.switchState) is used for the change View toggle buttons |
| * - Variable DOMAIN (org.polarsys.chess.service.commands.domain) is used for identifying AVIONICS models to visualize IMA commands |
| * @param activeEditor |
| */ |
| public void updateStatus(IEditorPart activeEditor) { |
| try { |
| if (!CHESSEditorUtils.isCHESSProject(activeEditor)) { |
| setEnabledValue(DISABLED); |
| setEnabledValueDomain(defaultDomain); |
| } else { |
| |
| DiagramStatus ds = CHESSEditorUtils.getDiagramStatus((PapyrusMultiDiagramEditor) activeEditor); |
| if (ds == null) { |
| setEnabledValue(DISABLED); |
| setEnabledValueDomain(defaultDomain); |
| }else { |
| DesignView currentView = ds.getCurrentView(); |
| |
| // Read the model's domain and assign it to the variable DOMAIN (org.polarsys.chess.service.commands.domain) |
| Resource res = ResourceUtils.getUMLResource(((org.eclipse.papyrus.infra.ui.editor.CoreMultiDiagramEditor) activeEditor).getServicesRegistry()); |
| Model umlModel = ResourceUtils.getModel(res); |
| if (umlModel == null) { |
| setEnabledValueDomain(defaultDomain); |
| } |
| else { |
| if (umlModel.getAppliedStereotype(Constants.CHESS_MODEL_STEREOTYPE) != null) { |
| Stereotype chessModelStereo = umlModel.getAppliedStereotype(Constants.CHESS_MODEL_STEREOTYPE); |
| CHESS chessModel = (CHESS) umlModel.getStereotypeApplication(chessModelStereo); |
| Domain theDomain = chessModel.getDomain(); |
| setEnabledValueDomain(theDomain.name()); |
| } |
| else { |
| setEnabledValueDomain(defaultDomain); |
| } |
| } |
| |
| if (currentView != null && (ViewUtils.hasConcurrentViews(currentView) || ViewUtils.isConcurrentView(currentView))){ |
| String name = ViewUtils.getBaseViewName(currentView); |
| setEnabledValue(name); |
| } |
| |
| else |
| setEnabledValue(DISABLED); |
| } |
| } |
| refreshElements(activeEditor); |
| } catch (Exception e) { |
| return; |
| } |
| } |
| |
| private void refreshElements(IEditorPart activeEditor) { |
| ICommandService service = (ICommandService) activeEditor.getSite().getWorkbenchWindow().getService(ICommandService.class); |
| |
| for (String commandId : commandsToRefresh) { |
| service.refreshElements(commandId, null); |
| } |
| |
| // service.refreshElements(CurrentViewStatus.COMMAND_ID, null); |
| // service.refreshElements(SwitchToExtraFunctional.COMMAND_ID, null); |
| // service.refreshElements(SwitchToDependability.COMMAND_ID, null); |
| } |
| } |