blob: fcc1ff2ba1e5c1c388d9479f4513dfa687a86ad4 [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.palette;
import java.util.List;
import javax.rmi.CORBA.Util;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditDomain;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor;
import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagramImpl;
import org.eclipse.ui.IEditorPart;
import org.eclipse.uml2.uml.internal.impl.StateMachineImpl;
import org.polarsys.chess.chessmlprofile.util.Constants;
import org.polarsys.chess.core.constraint.PreferenceProperties;
import org.polarsys.chess.core.profiles.CHESSProfileManager;
import org.polarsys.chess.core.views.DiagramStatus;
import org.polarsys.chess.core.views.ViewDiagramAssociations;
import org.polarsys.chess.service.gui.utils.CHESSEditorUtils;
public class PaletteManager {
protected static List<Object> lookupSelectedElements(ISelection selection) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
return structuredSelection.toList();
} else if (selection instanceof TreeSelection) {
TreeSelection treeSelection = (TreeSelection) selection;
return treeSelection.toList();
}
return null;
}
public static void setPaletteVisibility(PapyrusMultiDiagramEditor editor, DiagramStatus ds) {
Boolean checkPalette =
org.polarsys.chess.core.Activator.getDefault().getPreferenceStore().getBoolean(PreferenceProperties.PALETTES_IN_VIEW);
if (!checkPalette)
return;
try {
IEditorPart ep = editor.getActiveEditor();
ISelection selection = ep.getSite().getSelectionProvider().getSelection();
List<Object> selections = lookupSelectedElements(selection);
GraphicalEditPart a = (GraphicalEditPart) selections.get(0);
DiagramEditDomain de = (DiagramEditDomain) a.getDiagramEditDomain();
PaletteViewer pv = de.getPaletteViewer();
String viewName = ds.getActiveView();
String diagramName = ds.getCurrentView().getCurrentDiagramName();
for (Object o : pv.getPaletteRoot().getChildren()){
if (o instanceof PaletteDrawer){
PaletteDrawer d = (PaletteDrawer) o;
setPaletteVisibility(d, viewName, diagramName);
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//TODO this code is temporary needs refactoring
private static void setPaletteVisibility(PaletteDrawer paletteDrawer, String viewName,
String diagramName) {
String paletteId = paletteDrawer.getId();
if (viewName.equals(CHESSProfileManager.SYSTEM_VIEW) ) {
//paletteDrawer.setVisible(false);
if (diagramName.compareTo("PapyrusUMLStateMachineDiagram")==0){
paletteDrawer.setVisible(true);
boolean isErrorModel = false;
try{
StateMachineImpl obj = (StateMachineImpl) ((CSSDiagramImpl) CHESSEditorUtils.getDiagramEditPart().getModel()).getElement();
if (obj != null){
if (obj.getAppliedStereotype(Constants.ERROR_MODEL)!= null){
isErrorModel = true;
}
}
}
catch(Exception ex){
ex.printStackTrace();
}
if (paletteId.compareTo("SM_ErrorModelDrawer__1317126136270")==0){
if (isErrorModel)
paletteDrawer.setVisible(true);
else
paletteDrawer.setVisible(false);
}
if (paletteId.compareTo("SM_FunctionalDrawer__1317124986519")==0)
if (!isErrorModel)
paletteDrawer.setVisible(true);
else
paletteDrawer.setVisible(false);
}
return;
}
if (diagramName.equals(ViewDiagramAssociations.ANYDIAGRAM)) {
paletteDrawer.setVisible(false);
return;
}
paletteDrawer.setVisible(true);
String label = paletteDrawer.getLabel();
;
if (viewName.equals(CHESSProfileManager.COMPONENT_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
//set visibility only for the palette's functional tools
paletteDrawer.setVisible(false);
if (paletteId.compareTo("CHESSNodesFunctionalViewDrawerID")==0 ||
paletteId.compareTo("CHESSEdgeFunctionalViewDrawerID")==0 ||
paletteId.compareTo("ContractsClassDiagramDrawer")==0) //TODO here we should re-engineer the code to allow a more flexible management of additional profile palettes
paletteDrawer.setVisible(true);
}
if (diagramName.equals(ViewDiagramAssociations.compositeDiagram)){
//set visibility only for the palette's functional tools
paletteDrawer.setVisible(false);
if (paletteId.compareTo("CompositeDiagramFunctionalViewDrawerID")==0 ||
paletteId.compareTo("CompositeFunctionalViewContractDrawerID")==0) //TODO here we should re-engineer the code to allow a more flexible management of additional profile palettes
paletteDrawer.setVisible(true);
}
if (diagramName.equals(ViewDiagramAssociations.activityDiagram)){
paletteDrawer.setVisible(false);
if (label.equals("CHESS/Activity"))
paletteDrawer.setVisible(true);
}
if (diagramName.equals(ViewDiagramAssociations.stateMachineDiagram)){
paletteDrawer.setVisible(true);
String id = paletteDrawer.getId();
if (id.compareTo("SM_FunctionalDrawer__1317124986519")!=0)
paletteDrawer.setVisible(false);
}
if (diagramName.equals(ViewDiagramAssociations.sequenceDiagram)){
paletteDrawer.setVisible(true);
String id = paletteDrawer.getId();
if (id.compareTo("CHESSSequenceDiagramPalette_Nodes")!=0 && id.compareTo("CHESSSequenceDiagramPalette_Edges")!=0)
paletteDrawer.setVisible(false);
}
}
if (viewName.equals(CHESSProfileManager.EXTRAFUNCTIONAL_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.stateMachineDiagram)){
paletteDrawer.setVisible(true);
if (paletteId.compareTo("SM_ErrorModelDrawer__1317126136270")!=0)
paletteDrawer.setVisible(false);
}
if (diagramName.equals(ViewDiagramAssociations.compositeDiagram)){
//hide the palette's functional tools
paletteDrawer.setVisible(true);
if (paletteId.compareTo("CSD_RTDrawer__1302019186026")!=0 && paletteId.compareTo("CSD_FPTC_Drawer__1317635175167")!=0)
paletteDrawer.setVisible(false);
}
if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
paletteDrawer.setVisible(false);
}
if (diagramName.equals(ViewDiagramAssociations.activityDiagram)){
paletteDrawer.setVisible(false);
}
if (diagramName.equals(ViewDiagramAssociations.sequenceDiagram)){
paletteDrawer.setVisible(true);
if (paletteId.compareTo("drawer_1329924117088")!=0 && paletteId.compareTo("Drawer__1329924033356")!=0)
paletteDrawer.setVisible(false);
}
}
if (viewName.equals(CHESSProfileManager.DEPLOYMENT_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
//hide the palette's functional tools
paletteDrawer.setVisible(false);
if (paletteId.compareTo("DeploymentClassDrawerID")==0 || paletteId.compareTo("DeploymentContractClassDrawerID")==0)
paletteDrawer.setVisible(true);
}
if (diagramName.equals(ViewDiagramAssociations.compositeDiagram)){
//hide the palette's functional tools
paletteDrawer.setVisible(false);
if (paletteId.compareTo("DeploymentCSDDrawerID")==0 || paletteId.compareTo("CompositeFunctionalViewContractDrawerID")==0)
paletteDrawer.setVisible(true);
}
if (diagramName.equals(ViewDiagramAssociations.stateMachineDiagram)){
paletteDrawer.setVisible(true);
if (paletteId.compareTo("SM_FunctionalDrawer__1317124986519")!=0)
paletteDrawer.setVisible(false);
}
}
if (viewName.equals(CHESSProfileManager.DEPENDABILITY_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.stateMachineDiagram)){
paletteDrawer.setVisible(true);
if (paletteId.compareTo("SM_ErrorModelDrawer__1317126136270")!=0)
paletteDrawer.setVisible(false);
}
else if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
paletteDrawer.setVisible(false);
}
else if (diagramName.equals(ViewDiagramAssociations.compositeDiagram)){
paletteDrawer.setVisible(true);
if (paletteId.compareTo("CSD_FPTC_Drawer__1317635175167")!=0)
paletteDrawer.setVisible(false);
}
}
if (viewName.equals(CHESSProfileManager.DEPENDABILITY_ANALYSIS_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
//paletteDrawer.setVisible(true);
if (paletteId.compareTo("DepAnalysisViewDrawer__1317300165546")!=0 && !paletteId.startsWith("chess"))
paletteDrawer.setVisible(false);
else
paletteDrawer.setVisible(true);
}
}
if (viewName.equals(CHESSProfileManager.RT_ANALYSIS_VIEW)){
if (diagramName.equals(ViewDiagramAssociations.classDiagram)){
if (paletteId.compareTo("CHESS-TimingAnalysisDrawer")!=0)
paletteDrawer.setVisible(false);
else
paletteDrawer.setVisible(true);
}else if (diagramName.equals(ViewDiagramAssociations.activityDiagram)){
if (paletteId.compareTo("RTActivityDiagramDrawerID")!=0)
paletteDrawer.setVisible(false);
else
paletteDrawer.setVisible(true);
}
}
if (viewName.equals(CHESSProfileManager.RAILWAY_VIEW)){
paletteDrawer.setVisible(false);
if (diagramName.equals(ViewDiagramAssociations.compositeDiagram)){
//show only the railway palette
if (paletteId.compareTo("Drawer__1301934597253")==0)
paletteDrawer.setVisible(true);
}
}
}
}