/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.eclipse.flow.ruleflow.skin; import java.util.ArrayList; import java.util.List; import org.drools.eclipse.DroolsEclipsePlugin; import org.drools.eclipse.flow.common.editor.core.ElementConnectionFactory; import org.drools.eclipse.flow.common.editor.editpart.figure.ElementContainerFigure; import org.drools.eclipse.flow.ruleflow.core.ActionWrapper; import org.drools.eclipse.flow.ruleflow.core.CompositeContextNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper; import org.drools.eclipse.flow.ruleflow.core.ConnectionWrapperFactory; import org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.EventNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.FaultNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.ForEachNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.HumanTaskNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.JoinWrapper; import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.SplitWrapper; import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.StateNodeWrapper; import org.drools.eclipse.flow.ruleflow.core.SubProcessWrapper; import org.drools.eclipse.flow.ruleflow.core.TimerWrapper; import org.drools.eclipse.flow.ruleflow.editor.editpart.ActionEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.CompositeNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.EndNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.EventNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.FaultNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.JoinEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.MilestoneEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.RuleSetNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.SplitEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.StartNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.StateNodeEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.SubFlowEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.TimerEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.WorkItemEditPart; import org.drools.eclipse.flow.ruleflow.editor.editpart.JoinEditPart.JoinFigureInterface; import org.drools.eclipse.flow.ruleflow.editor.editpart.SplitEditPart.SplitFigureInterface; import org.drools.eclipse.flow.ruleflow.editor.editpart.WorkItemEditPart.WorkItemFigureInterface; import org.drools.eclipse.preferences.IDroolsConstants; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.palette.CombinedTemplateCreationEntry; import org.eclipse.gef.palette.ConnectionCreationToolEntry; import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.palette.PaletteDrawer; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.requests.CreationFactory; import org.eclipse.gef.requests.SimpleFactory; import org.eclipse.jface.resource.ImageDescriptor; public class DefaultSkinProvider implements SkinProvider { public PaletteContainer createComponentsDrawer() { String flowNodes = DroolsEclipsePlugin.getDefault().getPluginPreferences().getString(IDroolsConstants.FLOW_NODES); PaletteDrawer drawer = new PaletteDrawer("Components", null); List<PaletteEntry> entries = new ArrayList<PaletteEntry>(); CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry( "Start", "Create a new Start", StartNodeWrapper.class, new SimpleFactory(StartNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_start.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_start.gif")) ); entries.add(combined); combined = new CombinedTemplateCreationEntry( "End", "Create a new End", EndNodeWrapper.class, new SimpleFactory(EndNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")) ); entries.add(combined); if (flowNodes.charAt(0) == '1') { combined = new CombinedTemplateCreationEntry( "RuleFlowGroup", "Create a new RuleFlowGroup", RuleSetNodeWrapper.class, new SimpleFactory(RuleSetNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/activity.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/activity.gif")) ); entries.add(combined); } if (flowNodes.charAt(1) == '1') { combined = new CombinedTemplateCreationEntry( "Split", "Create a new Split", SplitWrapper.class, new SimpleFactory(SplitWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/split.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/split.gif")) ); entries.add(combined); } if (flowNodes.charAt(2) == '1') { combined = new CombinedTemplateCreationEntry( "Join", "Create a new Join", JoinWrapper.class, new SimpleFactory(JoinWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/join.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/join.gif")) ); entries.add(combined); } if (flowNodes.charAt(3) == '1') { combined = new CombinedTemplateCreationEntry( "Wait State", "Create a new Wait State", StateNodeWrapper.class, new SimpleFactory(StateNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")) ); entries.add(combined); } if (flowNodes.charAt(4) == '1') { combined = new CombinedTemplateCreationEntry( "SubFlow", "Create a new SubFlow", SubProcessWrapper.class, new SimpleFactory(SubProcessWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif")) ); entries.add(combined); } if (flowNodes.charAt(5) == '1') { combined = new CombinedTemplateCreationEntry( "Action", "Create a new Action", ActionWrapper.class, new SimpleFactory(ActionWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif")) ); entries.add(combined); } if (flowNodes.charAt(6) == '1') { combined = new CombinedTemplateCreationEntry( "Timer", "Create a new Timer", TimerWrapper.class, new SimpleFactory(TimerWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/timer.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/timer.gif")) ); entries.add(combined); } if (flowNodes.charAt(7) == '1') { combined = new CombinedTemplateCreationEntry( "Fault", "Create a new Fault", FaultNodeWrapper.class, new SimpleFactory(FaultNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/fault.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/fault.gif")) ); entries.add(combined); } if (flowNodes.charAt(8) == '1') { combined = new CombinedTemplateCreationEntry( "Event", "Create a new Event Node", EventNodeWrapper.class, new SimpleFactory(EventNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/event.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/event.gif")) ); entries.add(combined); } if (flowNodes.charAt(9) == '1') { combined = new CombinedTemplateCreationEntry( "Human Task", "Create a new Human Task", HumanTaskNodeWrapper.class, new SimpleFactory(HumanTaskNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/human_task.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/human_task.gif")) ); entries.add(combined); } if (flowNodes.charAt(10) == '1') { combined = new CombinedTemplateCreationEntry( "Composite", "Create a new Composite Node", CompositeContextNodeWrapper.class, new SimpleFactory(CompositeContextNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif")) ); entries.add(combined); } if (flowNodes.charAt(11) == '1') { combined = new CombinedTemplateCreationEntry( "For Each", "Create a new ForEach Node", ForEachNodeWrapper.class, new SimpleFactory(ForEachNodeWrapper.class), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif")) ); entries.add(combined); } drawer.addAll(entries); return drawer; } public PaletteEntry createConnectionEntry() { final ElementConnectionFactory normalConnectionFactory = new ConnectionWrapperFactory(); PaletteEntry tool = new ConnectionCreationToolEntry( "Connection Creation", "Creating connections", new CreationFactory() { public Object getNewObject() { return normalConnectionFactory.createElementConnection(); } public Object getObjectType() { return ConnectionWrapper.class; } }, ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/connection.gif")), ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/connection.gif")) ); return tool; } public IFigure createActionNodeFigure() { return new ActionEditPart.ActionNodeFigure(); } public IFigure createEndNodeFigure() { return new EndNodeEditPart.EndNodeFigure(); } public IFigure createEventNodeFigure() { return new EventNodeEditPart.EventNodeFigure(); } public IFigure createFaultNodeFigure() { return new FaultNodeEditPart.FaultNodeFigure(); } public JoinFigureInterface createJoinFigure() { return new JoinEditPart.JoinFigure(); } public SplitFigureInterface createSplitFigure() { return new SplitEditPart.SplitFigure(); } public IFigure createStartNodeFigure() { return new StartNodeEditPart.StartNodeFigure(); } public IFigure createTimerNodeFigure() { return new TimerEditPart.TimerNodeFigure(); } public IFigure createMilestoneFigure() { return new MilestoneEditPart.MilestoneFigure(); } public IFigure createRuleSetNodeFigure() { return new RuleSetNodeEditPart.RuleSetNodeFigure(); } public IFigure createSubFlowFigure() { return new SubFlowEditPart.SubFlowNodeFigure(); } public IFigure createStateFigure() { return new StateNodeEditPart.StateFigure(); } public WorkItemFigureInterface createWorkItemFigure() { return new WorkItemEditPart.WorkItemFigure(); } public IFigure createCompositeNodeFigure() { return new CompositeNodeEditPart.CompositeNodeFigure(); } public IFigure createForEachNodeFigure() { return new ElementContainerFigure(); } public String getWorkItemsName() { return "Work Items"; } }