org.snaker.designer.palette.PaletteFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.snaker.designer.palette.PaletteFactory.java

Source

/* 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;
    }
}