/* Copyright 2012-2013 the original author or authors. * * 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.snaker.designer.palette; import java.util.ArrayList; import java.util.List; import org.eclipse.gef.palette.CombinedTemplateCreationEntry; import org.eclipse.gef.palette.ConnectionCreationToolEntry; import org.eclipse.gef.palette.MarqueeToolEntry; import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.palette.PaletteDrawer; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.palette.PaletteGroup; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.palette.PaletteSeparator; import org.eclipse.gef.palette.PanningSelectionToolEntry; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.jface.resource.ImageDescriptor; import org.snaker.designer.config.Component; import org.snaker.designer.config.ConfigManager; import org.snaker.designer.figures.TaskFigure; import org.snaker.designer.model.ModelCreationFactory; import org.snaker.designer.model.Simple; import org.snaker.designer.model.Transition; /** * 工具板工厂类 * * @author yuqs * @version 1.0 */ public class PaletteFactory { public PaletteRoot getPaletteRoot(String type) { PaletteRoot palette = new PaletteRoot(); palette.addAll(createCategories(palette, type)); return palette; } private List<PaletteEntry> createCategories(PaletteRoot root, String type) { List<PaletteEntry> categories = new ArrayList<PaletteEntry>(); categories.add(createControlGroup(root)); if (type.equalsIgnoreCase(ConfigManager.COMPONENT_TYPE_FIELD)) { categories.add(createFieldDrawer()); } else if (type.equalsIgnoreCase(ConfigManager.COMPONENT_TYPE_PROCESS)) { categories.add(createTaskDrawer(root)); } return categories; } private PaletteContainer createTaskDrawer(PaletteRoot root) { String group = "流程组件"; List<PaletteEntry> entries = new ArrayList<PaletteEntry>(); PaletteDrawer drawer = new PaletteDrawer(group, ImageDescriptor.createFromFile(TaskFigure.class, "icons/home.png")); ConnectionCreationToolEntry connectionToolEntry = new ConnectionCreationToolEntry( "transition", "创建连接", new ModelCreationFactory(null, Transition.class), ImageDescriptor.createFromFile( TaskFigure.class, "icons/flow_sequence.png"), ImageDescriptor.createFromFile(TaskFigure.class, "icons/flow_sequence.png")); drawer.add(connectionToolEntry); List<Component> listComp = ConfigManager.getComponents(); for (int i = 0; i < listComp.size(); i++) { Component comp = (Component) listComp.get(i); if (!validate(ConfigManager.COMPONENT_TYPE_PROCESS, comp)) { continue; } PaletteEntry paletteEntry = createCombinedEntry(comp); if (paletteEntry == null) { continue; } entries.add(paletteEntry); } drawer.addAll(entries); return drawer; } private PaletteContainer createControlGroup(PaletteRoot root) { PaletteGroup controlGroup = new PaletteGroup("Control Group"); List<PaletteEntry> entries = new ArrayList<PaletteEntry>(); ToolEntry tool = new PanningSelectionToolEntry(); entries.add(tool); root.setDefaultEntry(tool); tool = new MarqueeToolEntry(); entries.add(tool); PaletteSeparator sep = new PaletteSeparator( "org.snaker.designer.editor.separator"); sep.setUserModificationPermission(1); entries.add(sep); controlGroup.addAll(entries); return controlGroup; } private PaletteContainer createFieldDrawer() { List<PaletteEntry> entries = new ArrayList<PaletteEntry>(); String group = "表单控件"; PaletteDrawer drawer = new PaletteDrawer(group, ImageDescriptor.createFromFile(TaskFigure.class, "icons/home.png")); List<Component> listComp = ConfigManager.getComponents(); for (int i = 0; i < listComp.size(); i++) { Component comp = (Component) listComp.get(i); if (!validate(ConfigManager.COMPONENT_TYPE_FIELD, comp)) { continue; } PaletteEntry paletteEntry = createCombinedEntry(comp); if (paletteEntry == null) { continue; } entries.add(paletteEntry); } drawer.addAll(entries); drawer.setInitialState(2); return drawer; } private boolean validate(String groupName, Component comp) { if (comp.getGroup() == null || !comp.getGroup().equalsIgnoreCase(groupName)) { return false; } return (comp.getVisible() == null) || (!"false".equalsIgnoreCase(comp.getVisible())); } private CombinedTemplateCreationEntry createCombinedEntry( Component compponent) { Class<?> clazz = null; try { clazz = Class.forName(compponent.getClazz()); } catch (Exception e) { clazz = Simple.class; } if (clazz == null) return null; CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry( compponent.getDisplayName(), compponent.getDescript(), clazz, new ModelCreationFactory(compponent, clazz), ImageDescriptor.createFromFile(TaskFigure.class, compponent.getIconSmall()), ImageDescriptor.createFromFile(TaskFigure.class, compponent.getIconLarge())); return combined; } }