blob: 19155198d544b17e13f4bb00104beab5aa83fc93 [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- 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);
}
}