/*
* CustomStsPaletteFactory.java
*
* This file is part of the STS-Tool project.
* Copyright (c) 2011-2012 "University of Trento - DISI" All rights reserved.
*
* Is strictly forbidden to remove this copyright notice from this source code.
*
* Disclaimer of Warranty:
* STS-Tool (this software) is provided "as-is" and without warranty of any kind,
* express, implied or otherwise, including without limitation, any warranty of
* merchantability or fitness for a particular purpose.
* In no event shall the copyright holder or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused and on
* any theory of liability, whether in contract, strict liability, or tort (including
* negligence or otherwise) arising in any way out of the use of this software, even
* if advised of the possibility of such damage.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation with the addition of the
* following permission added to Section 15 as permitted in Section 7(a):
* FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
* "University of Trento - DISI","University of Trento - DISI" DISCLAIMS THE
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, see http://www.gnu.org/licenses or write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA, 02110-1301 USA, or download the license from the following URL:
* http://www.sts-tool.eu/License.php
*
* For more information, please contact STS-Tool group at this
* address: ststool@disi.unitn.it
*
*/
package eu.aniketos.wp1.ststool.diagram.custom.palette;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.gef.Tool;
import org.eclipse.gef.commands.*;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteToolbar;
import org.eclipse.gef.palette.PanningSelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gmf.runtime.diagram.ui.tools.UnspecifiedTypeConnectionTool;
import org.eclipse.gmf.runtime.diagram.ui.tools.UnspecifiedTypeCreationTool;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.*;
import eu.aniketos.wp1.ststool.diagram.custom.constraint.STSElementIconDescriptor;
import eu.aniketos.wp1.ststool.diagram.custom.part.SelectionToolExEx;
import eu.aniketos.wp1.ststool.diagram.custom.view.ViewsManager;
import eu.aniketos.wp1.ststool.diagram.part.Messages;
import eu.aniketos.wp1.ststool.diagram.providers.StsToolElementTypes;
public class CustomStsPaletteFactory {
/**
* List of all tools inserted in the palette
*/
static private Map<ToolEntry, IElementType> paletteItems = new HashMap<ToolEntry, IElementType>(20);
/**
* Fill the palette with all the tools
*
* @param paletteRoot
* the paletteRoot that need to be filled with the tool
*/
public static void fillPalette(PaletteRoot paletteRoot){
//standardGroup/selectionTool
PaletteToolbar pt = (PaletteToolbar) paletteRoot.getChildren().get(0);
PanningSelectionToolEntry pe = (PanningSelectionToolEntry) pt.getChildren().get(1);
pe.setToolClass(SelectionToolExEx.class);
paletteRoot.add(createNodePalette());
paletteRoot.add(createRelationsPalette());
}
/**
* Create a Palette group containing all the tools used to create the Node Element
*
* @return a PaletteContainer filled with the tools
*/
private static PaletteContainer createNodePalette(){
PaletteDrawer paletteContainer = new PaletteDrawer("Elements");
paletteContainer.setUserModificationPermission(PaletteGroup.PERMISSION_NO_MODIFICATION);
//adding palette entry
paletteContainer.add(createToolEntry(StsToolElementTypes.Agent_2001,Messages.Agent1CreationTool_title, Messages.Agent1CreationTool_desc, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Role_2002,Messages.Role2CreationTool_title, Messages.Role2CreationTool_desc, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Goal_3001,Messages.Goal3CreationTool_title, Messages.Goal3CreationTool_desc, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.TResource_3002,Messages.Document4CreationTool_title, Messages.Document4CreationTool_desc, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.IResource_2005,Messages.Information5CreationTool_title, Messages.Information5CreationTool_desc, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Event_2006,Messages.Event6CreationTool_title, Messages.Event6CreationTool_desc, true));
return paletteContainer;
}
/*private static PaletteContainer createNodePalette() {
PaletteDrawer paletteContainer = new PaletteDrawer("Elements");
paletteContainer.setUserModificationPermission(PaletteGroup.PERMISSION_NO_MODIFICATION);
//adding palette entry
paletteContainer.add(createToolEntry(StsToolElementTypes.Agent_2001, "agent", Messages.Agent1CreationTool_title, Messages.Agent1CreationTool_title, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Role_2002, "role", Messages.Role2CreationTool_title, Messages.Role2CreationTool_title, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Goal_3001, "goal", Messages.Goal3CreationTool_title, Messages.Goal3CreationTool_title, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.TResource_3002, "tresource", Messages.TResource4CreationTool_title, Messages.TResource4CreationTool_title, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.IResource_2005, "iresource", Messages.IResource5CreationTool_title, Messages.IResource5CreationTool_title, true));
paletteContainer.add(createToolEntry(StsToolElementTypes.Event_2006, "event", Messages.Event6CreationTool_title, Messages.Event6CreationTool_desc, true));
return paletteContainer;
}*/
/**
* Create a Palette group containing all the tools used to create the Relations Element
*
* @return a PaletteContainer filled with the tools
*/
private static PaletteContainer createRelationsPalette(){
PaletteDrawer paletteContainer = new PaletteDrawer("Relations");
paletteContainer.setUserModificationPermission(PaletteGroup.PERMISSION_NO_MODIFICATION);
//adding palette entry
//paletteContainer.add(createToolEntry(StsToolElementTypes.Dependency_4018, Messages.Dependby18CreationTool_title, Messages.Dependby18CreationTool_desc, false));
//paletteContainer.add(createSeparator());
paletteContainer.add(createToolEntry(StsToolElementTypes.Delegation_4013, Messages.Delegate13CreationTool_title, Messages.Delegate13CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Provision_4012, Messages.Provide12CreationTool_title, Messages.Provide12CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Play_4011, Messages.Play11CreationTool_title, Messages.Play11CreationTool_desc, false));
paletteContainer.add(createSeparator());
paletteContainer.add(createToolEntry(StsToolElementTypes.GoalDecompositionAND_4007, Messages.AND7CreationTool_title, Messages.AND7CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.GoalDecompositionOR_4006, Messages.OR6CreationTool_title, Messages.OR6CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Need_4001, Messages.Need1CreationTool_title, Messages.Need1CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Produce_4002, Messages.Produce2CreationTool_title, Messages.Produce2CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Modify_4003, Messages.Modify3CreationTool_title, Messages.Modify3CreationTool_desc, false));
paletteContainer.add(createSeparator());
paletteContainer.add(createToolEntry(StsToolElementTypes.PositiveGoalContribution_4004, Messages.PositiveContribution4CreationTool_title, Messages.PositiveContribution4CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.NegativeGoalContribution_4005, Messages.NegativeContribution5CreationTool_title, Messages.NegativeContribution5CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Own_4008, Messages.Own8CreationTool_title, Messages.Own8CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.PartOf_4009, Messages.PartOf9CreationTool_title, Messages.PartOf9CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.TangibleBy_4010, Messages.TangibleBy10CreationTool_title, Messages.TangibleBy10CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Authorisation_4014, Messages.Authorisation14CreationTool_title, Messages.Authorisation14CreationTool_desc, false));
paletteContainer.add(createSeparator());
paletteContainer.add(createToolEntry(StsToolElementTypes.CompatibleDuties_4017, Messages.Compatible17CreationTool_title, Messages.Compatible17CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.IncompatibleDuties_4016, Messages.Incompatible16CreationTool_title, Messages.Incompatible16CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Threat_4015, Messages.Threat15CreationTool_title, Messages.Threat15CreationTool_desc, false));
return paletteContainer;
}
/*private static PaletteContainer createRelationsPalette() {
PaletteDrawer paletteContainer = new PaletteDrawer("Relations");
paletteContainer.setUserModificationPermission(PaletteGroup.PERMISSION_NO_MODIFICATION);
//adding palette entry
paletteContainer.add(createToolEntry(StsToolElementTypes.Delegation_4013, "delegation_trasferable", Messages.DelegateGoalTransferable15CreationTool_title, Messages.DelegateGoalTransferable15CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Provision_4012, "provision_trasferable", Messages.ProvideResourceTransferable13CreationTool_title, Messages.ProvideResourceTransferable13CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.GoalDecompositionAND_4007, "decomposition_and", Messages.ANDDecomposition7CreationTool_title, Messages.ANDDecomposition7CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.GoalDecompositionOR_4006, "decomposition_or", Messages.ORDecomposition6CreationTool_title, Messages.ORDecomposition6CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Need_4001, "need", Messages.Need1CreationTool_title, Messages.Need1CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Produce_4002, "produce", Messages.Produce2CreationTool_title, Messages.Produce2CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Modify_4003, "modify", Messages.Modify3CreationTool_title, Messages.Modify3CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Threat_4015, "threat", Messages.Threat19CreationTool_title, Messages.Threat19CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.PositiveGoalContribution_4004, "contribution_positive", Messages.PositiveContribution4CreationTool_title, Messages.PositiveContribution4CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.NegativeGoalContribution_4005, "contribution_negative", Messages.NegativeContribution5CreationTool_title, Messages.NegativeContribution5CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Play_4011, "arrow", Messages.Play12CreationTool_title, Messages.Play12CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Own_4008, "own", Messages.Own9CreationTool_title, Messages.Own9CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.PartOf_4009, "part_of", Messages.PartOfResource10CreationTool_title, Messages.PartOfResource10CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.TangibleBy_4010, "tangible_by", Messages.MadeTangibleBy11CreationTool_title, Messages.MadeTangibleBy11CreationTool_desc, false));
//paletteContainer.add(createToolEntry(StsToolElementTypes.LINK_DELEGATE, "delegation_non_trasferable", Messages.DelegateGoalNonTransferable16CreationTool_title, Messages.DelegateGoalNonTransferable16CreationTool_desc, false));
paletteContainer.add(createToolEntry(StsToolElementTypes.Authorisation_4014, "arrow", Messages.AuthorisationTransferable17CreationTool_title, Messages.AuthorisationTransferable17CreationTool_desc, false));
//paletteContainer.add(createToolEntry(StsToolElementTypes.LINK_AUTHORISATION, "dotted_arrow", Messages.AuthorisationNonTransferable18CreationTool_title, Messages.AuthorisationNonTransferable18CreationTool_desc, false));
return paletteContainer;
}*/
private static ToolEntry createSeparator(){
ToolEntry entry = new PaletteSeparatorTool();
paletteItems.put(entry, null);
return entry;
}
/**
* Method to create a tool entry
*
* @param types
* A list of IElementType describing which element the tool can create
* @param iconName
* the icon name - must be in gif format
* @param title
* Title of the tool
* @param description
* Description of the tool - Showed as tooltip
* @param node
* boolean if the tool is a NodeCreation tool /n flase if the tool is a LinkCreation Tool
*
* @return the tool entry
*/
private static ToolEntry createToolEntry(IElementType type,String title,String description,boolean node){
ToolEntry entry;
List<IElementType> types = new ArrayList<IElementType>();
types.add(type);
if (node)
entry = new NodeToolEntry(title, description, types);
else
entry = new LinkToolEntry(title, description, types);
entry.setId(title + "Tool");
ImageDescriptor smallImgd = STSElementIconDescriptor.getSmallImageDescriptord(type);
ImageDescriptor largeImgd = STSElementIconDescriptor.getLargeImageDescriptord(type);
if (smallImgd == null) {
entry.setSmallIcon(StsToolElementTypes.getImageDescriptor(types.get(0)));
entry.setLargeIcon(entry.getSmallIcon());
} else {
entry.setSmallIcon(smallImgd);
if (largeImgd == null)
entry.setLargeIcon(entry.getSmallIcon());
else
entry.setLargeIcon(largeImgd);
}
entry.setUserModificationPermission(NodeToolEntry.PERMISSION_NO_MODIFICATION);
paletteItems.put(entry, types.get(0));
return entry;
}
/**
* Hide the tool entry that are not visible in the current view
*
* @param view
* the view Manager of the current diagram
*/
public static void hideElements(ViewsManager view){
for (ToolEntry te : paletteItems.keySet()) {
if (te instanceof PaletteSeparatorTool) {
if (view.getCurrentIntView() != ViewsManager.SOCIAL_VIEW) {
te.setVisible(false);
} else {
te.setVisible(true);
}
} else {
if (view.isElementVisibleInPalette(paletteItems.get(te)))
te.setVisible(true);
else
te.setVisible(false);
}
}
}
/**
* Hide all the Creation tool from the palette
*
*/
public static void hideAll(){
for (ToolEntry te : paletteItems.keySet()) {
te.setVisible(false);
}
}
/**
* @generated NOT
*/
static class NodeToolEntry extends ToolEntry {
/**
* @generated
*/
private final List elementTypes;
/**
* @generated
*/
private NodeToolEntry(String title, String description, List elementTypes) {
super(title, description, null, null);
this.elementTypes = elementTypes;
}
/**
* @generated
*/
@Override
public Tool createTool(){
Tool tool = new UnspecifiedTypeCreationTool(elementTypes) {
@Override
protected void handleFinished(){
if (!getCurrentInput().isControlKeyDown()) {
super.handleFinished();
} else {
reactivate();
}
}
};
tool.setProperties(getToolProperties());
return tool;
}
}
/**
* @generated NOT
*/
static class LinkToolEntry extends ToolEntry {
/**
* @generated
*/
private final List relationshipTypes;
/**
* @generated
*/
private LinkToolEntry(String title, String description, List relationshipTypes) {
super(title, description, null, null);
this.relationshipTypes = relationshipTypes;
}
/**
* @generated
*/
@Override
public Tool createTool(){
Tool tool = new UnspecifiedTypeConnectionTool(relationshipTypes) {
@Override
protected void handleFinished(){
if (!getCurrentInput().isControlKeyDown()) {
super.handleFinished();
} else {
reactivate();
}
}
// protected Command getCommand() {
//
// Command c= null;
// if (getTargetEditPart() != null)
// c= getTargetEditPart().getCommand(getTargetRequest());
// if(c!=null)
// System.out.println("getCommand() "+c.getLabel());
// else{
// System.out.println("getTargetEditPart() "+getTargetEditPart());
// }
// return c;
// }
};
tool.setProperties(getToolProperties());
return tool;
}
}
}