Package org.apache.oozie.tools.workflowgenerator.client

Source Code of org.apache.oozie.tools.workflowgenerator.client.OozieWorkflowGenerator

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.apache.oozie.tools.workflowgenerator.client;

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;

import org.apache.oozie.tools.workflowgenerator.client.OozieDiagramController;
import org.apache.oozie.tools.workflowgenerator.client.property.PropertyTable;
import org.apache.oozie.tools.workflowgenerator.client.property.control.WrkflowPropertyTable;
import org.apache.oozie.tools.workflowgenerator.client.widget.NodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.EmailActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.FSActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.JavaActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.MapReduceActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.PigActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.PipesActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.SSHActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.ShellActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.StreamingActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.action.SubWFActionWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.DecisionNodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.EndNodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.ForkNodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.JoinNodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.KillNodeWidget;
import org.apache.oozie.tools.workflowgenerator.client.widget.control.StartNodeWidget;

import com.allen_sauer.gwt.dnd.client.PickupDragController;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Random;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.*;

/**
* Main class of application
* <p>
* implements EntryPoint class which defines <code>onModuleLoad()</code>.
*/
public class OozieWorkflowGenerator implements EntryPoint {

    private static final int ZINDEX_FRONT_OF_GRID = 10;

    private PickupDragController dragController;
    private OozieDiagramController controller;
    private Panel propPanel;
    private List<NodeWidget> widgets;
    private StartNodeWidget start;
    private EndNodeWidget end;
    private KillNodeWidget kill;
    private WrkflowPropertyTable wrkflowtable;
    private NodeWidget node;
    private EnumMap<NodeType, Integer> nodeCount;

    enum NodeType {
        START, END, KILL, FORK, JOIN, DECISION, MAPREDUCE, PIG, FS, JAVA, PIPES, STREAMING, SHELL, SSH, EMAIL, SUBWF
    };

    /**
     * Return a set of created node widgets in a workflow design panel
     *
     * @return
     */
    public List<NodeWidget> getWidgets() {
        return this.widgets;
    }

    /**
     * Set and display the property table of a selected node widget
     *
     * @param table
     */
    public void setPropertyTable(PropertyTable table) {
        propPanel.clear();
        propPanel.add(table);
    }

    /**
     * Return an instance of current diagram controller
     *
     * @return
     */
    public OozieDiagramController getDiagramController() {
        return this.controller;
    }

    /**
     * Return the currently selected node widget
     *
     * @return
     */
    public NodeWidget getNodeWidget() {
        return this.node;
    }

    /**
     * Set the current node widget
     *
     * @param n node widget
     */
    protected void setNodeWidget(NodeWidget n) {
        this.node = n;
    }

    /**
     * onModuleLoad is the entry point method.
     */
    @SuppressWarnings("deprecation")
    public void onModuleLoad() {

        widgets = new ArrayList<NodeWidget>();
        nodeCount = new EnumMap<OozieWorkflowGenerator.NodeType, Integer>(NodeType.class);

        // start DiagramController (gwt-links library)
        controller = new OozieDiagramController(1200, 600);
        controller.showGrid(true); // Display a background grid

        // start PickUpDragContoller (gwt-Drag-and-Drop library)
        dragController = new PickupDragController(controller.getView(), true);

        // register the dragController in GWT-Links
        controller.registerDragController(dragController);

        // panel for Property Table
        propPanel = new AbsolutePanel();

        // stack Layout for left-side tree-view
        StackLayoutPanel stack = new StackLayoutPanel(Unit.EM);

        // create left tree-view panel
        stack.add(initNodeTree(), new HTML("Nodes"), 2);
        stack.add(initWrkflowTree(), new HTML("Workflow"), 2);

        initWidget();

        // Create a three-pane layout with splitters.
        SplitLayoutPanel p = new SplitLayoutPanel();

        Panel east = new AbsolutePanel();

        // Create a top panel under menu to hold button (e.g, generate xml)
        AbsolutePanel btnpanl = new AbsolutePanel();
        Button btn = createXMLButton();
        btnpanl.add(btn);

        p.addNorth(initMenu(), 30);
        p.addEast(east, 250);
        p.addSouth(propPanel, 300);
        p.addWest(stack, 150);
        p.addNorth(btnpanl, 30);
        ((OozieDiagramController) controller).setXmlPanel(east);
        p.add(controller.getView());

        // Attach the LayoutPanel to the RootLayoutPanel.
        RootLayoutPanel rp = RootLayoutPanel.get();
        rp.add(p);

    }

    /**
     * Create a "Generate XML" button
     *
     * @return
     */
    public Button createXMLButton() {
        Button btn = new Button("Generate XML");
        btn.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                ((OozieDiagramController) controller).generateXml();
            }
        });
        return btn;
    }

    /**
     * Initialize a default set of node widgets shown in a workflow design
     * panel, such as start, end, kill nodes
     */
    public void initWidget() {

        if (wrkflowtable == null) {
            wrkflowtable = new WrkflowPropertyTable(null);
            ((OozieDiagramController) controller).setWrkflowPropertyTable(wrkflowtable);
        }

        // display Start/End/Kill Nodes as default
        if (start == null) {
            start = new StartNodeWidget(this);
            controller.addWidget(start, 30, 100);
            dragController.makeDraggable(start);
            widgets.add(start);
        }

        if (end == null) {
            end = new EndNodeWidget(this);
            end.setName("End");
            controller.addWidget(end, 600, 100);
            dragController.makeDraggable(end);
            widgets.add(end);
        }

        if (kill == null) {
            kill = new KillNodeWidget(this);
            kill.setName("Kill");
            controller.addWidget(kill, 700, 100);
            dragController.makeDraggable(kill);
            widgets.add(kill);
        }
    }

    /**
     * Initialize workflow tree-view menu on left side
     *
     * @return
     */
    public Tree initWrkflowTree() {
        Tree t = new Tree();
        TreeItem actionTree = new TreeItem("Property");
        t.addItem(actionTree);
        t.addSelectionHandler(new SelectionHandler<TreeItem>() {

            @Override
            public void onSelection(SelectionEvent<TreeItem> event) {
                TreeItem item = event.getSelectedItem();
                String name = item.getText();
                if (name.equals("Property") && wrkflowtable != null) {
                    setPropertyTable(wrkflowtable);
                }
            }
        });

        return t;
    }

    /**
     * Initialize node tree-view menu on left side
     *
     * @return
     */
    public Tree initNodeTree() {

        Tree t = new Tree();

        // Action Node Tree
        TreeItem actionTree = new TreeItem("Action Node");
        TreeItem mrTree = new TreeItem("MapReduce");
        mrTree.addItem("Streaming");
        mrTree.addItem("Pipes");
        actionTree.addItem(mrTree);
        actionTree.addItem("Pig");
        actionTree.addItem("Java");
        actionTree.addItem("FS");
        actionTree.addItem("Subworkflow");
        actionTree.addItem("SSH");
        actionTree.addItem("Shell");
        actionTree.addItem("Email");

        // Control Node Tree
        TreeItem controlTree = new TreeItem("Control Node");
        controlTree.addItem("Start");
        controlTree.addItem("End");
        controlTree.addItem("Kill");
        controlTree.addItem("Fork/Join");
        controlTree.addItem("Decision");

        t.addItem(actionTree);
        t.addItem(controlTree);

        // Event Handler
        t.addSelectionHandler(new SelectionHandler<TreeItem>() {

            @Override
            public void onSelection(SelectionEvent<TreeItem> event) {
                TreeItem item = event.getSelectedItem();
                String name = item.getText();
                if (name.equals("MapReduce")) {
                    MapReduceActionWidget w = new MapReduceActionWidget(OozieWorkflowGenerator.this);
                    w.setName("MR_".concat(nodeCount.get(NodeType.MAPREDUCE) != null ? nodeCount
                            .get(NodeType.MAPREDUCE).toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("Streaming")) {
                    StreamingActionWidget w = new StreamingActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Streaming_".concat(nodeCount.get(NodeType.STREAMING) != null ? nodeCount.get(
                            NodeType.STREAMING).toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("Pipes")) {
                    PipesActionWidget w = new PipesActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Pipes_".concat(nodeCount.get(NodeType.PIPES) != null ? nodeCount.get(NodeType.PIPES)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("Pig")) {
                    PigActionWidget w = new PigActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Pig_".concat(nodeCount.get(NodeType.PIG) != null ? nodeCount.get(NodeType.PIG)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("Java")) {
                    JavaActionWidget w = new JavaActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Java_".concat(nodeCount.get(NodeType.JAVA) != null ? nodeCount.get(NodeType.JAVA)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("FS")) {
                    FSActionWidget w = new FSActionWidget(OozieWorkflowGenerator.this);
                    w.setName("FS_".concat(nodeCount.get(NodeType.FS) != null ? nodeCount.get(NodeType.FS).toString()
                            : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
                else if (name.equals("SSH")) {
                    SSHActionWidget w = new SSHActionWidget(OozieWorkflowGenerator.this);
                    w.setName("SSH_".concat(nodeCount.get(NodeType.SSH) != null ? nodeCount.get(NodeType.SSH)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));

                }
                else if (name.equals("Email")) {
                    EmailActionWidget w = new EmailActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Email_".concat(nodeCount.get(NodeType.EMAIL) != null ? nodeCount.get(NodeType.EMAIL)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));

                }
                else if (name.equals("Shell")) {
                    ShellActionWidget w = new ShellActionWidget(OozieWorkflowGenerator.this);
                    w.setName("Shell_".concat(nodeCount.get(NodeType.SHELL) != null ? nodeCount.get(NodeType.SHELL)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));

                }
                else if (name.equals("Subworkflow")) {
                    SubWFActionWidget w = new SubWFActionWidget(OozieWorkflowGenerator.this);
                    w.setName("SubWF_".concat(nodeCount.get(NodeType.SUBWF) != null ? nodeCount.get(NodeType.SUBWF)
                            .toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));

                }
                else if (name.equals("Start")) {
                    if (start == null) {
                        StartNodeWidget w = new StartNodeWidget(OozieWorkflowGenerator.this);
                        start = w;
                        addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                    }
                }
                else if (name.equals("End")) {
                    if (end == null) {
                        EndNodeWidget w = new EndNodeWidget(OozieWorkflowGenerator.this);
                        w.setName("End");
                        end = w;
                        addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                    }
                }
                else if (name.equals("Kill")) {
                    if (kill == null) {
                        KillNodeWidget w = new KillNodeWidget(OozieWorkflowGenerator.this);
                        w.setName("Kill");
                        kill = w;
                        addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                    }
                }
                else if (name.equals("Fork/Join")) {
                    ForkNodeWidget fork = new ForkNodeWidget(OozieWorkflowGenerator.this);
                    fork.setName("Fork_".concat(nodeCount.get(NodeType.FORK) != null ? nodeCount.get(NodeType.FORK)
                            .toString() : "0"));
                    addWidget(fork, 30 + Random.nextInt(30), 30 + Random.nextInt(30));

                    JoinNodeWidget join = new JoinNodeWidget(OozieWorkflowGenerator.this);
                    join.setName("Join_".concat(nodeCount.get(NodeType.JOIN) != null ? nodeCount.get(NodeType.JOIN)
                            .toString() : "0"));
                    addWidget(join, 90 + Random.nextInt(30), 30 + Random.nextInt(30));

                }
                else if (name.equals("Decision")) {
                    DecisionNodeWidget w = new DecisionNodeWidget(OozieWorkflowGenerator.this);
                    w.setName("Decision_".concat(nodeCount.get(NodeType.DECISION) != null ? nodeCount.get(
                            NodeType.DECISION).toString() : "0"));
                    addWidget(w, 30 + Random.nextInt(30), 30 + Random.nextInt(30));
                }
            }
        });

        return t;
    }

    /**
     * Initialize menu panel on top
     *
     * @return
     */
    public MenuBar initMenu() {

        // Menu bar
        Command cmd = new Command() {
            public void execute() {
                Window.alert("To be implemented soon");
            }
        };

        Command mr_cmd = new Command() {
            public void execute() {
                initWidget();
                MapReduceActionWidget mr = new MapReduceActionWidget(OozieWorkflowGenerator.this);
                mr.setName("MR_0");
                addWidget(mr, 300, 100);
                ((OozieDiagramController) controller).addConnection(start, mr);
                ((OozieDiagramController) controller).addConnection(mr, end);
                mr.updateOnSelection();
            }
        };

        Command pig_cmd = new Command() {

            public void execute() {
                clear();
                initWidget();
                PigActionWidget pig = new PigActionWidget(OozieWorkflowGenerator.this);
                pig.setName("Pig_0");
                addWidget(pig, 300, 100);
                ((OozieDiagramController) controller).addConnection(start, pig);
                ((OozieDiagramController) controller).addConnection(pig, end);
                pig.updateOnSelection();
            }
        };

        Command java_cmd = new Command() {

            public void execute() {
                clear();
                initWidget();
                JavaActionWidget java = new JavaActionWidget(OozieWorkflowGenerator.this);
                java.setName("Java_0");
                addWidget(java, 300, 100);
                ((OozieDiagramController) controller).addConnection(start, java);
                ((OozieDiagramController) controller).addConnection(java, end);
                java.updateOnSelection();
            }
        };

        Command forkjoin_cmd = new Command() {

            public void execute() {
                clear();
                initWidget();
                ForkNodeWidget fork = new ForkNodeWidget(OozieWorkflowGenerator.this);
                fork.setName("Fork_0");
                addWidget(fork, 150, 100);
                ((OozieDiagramController) controller).addConnection(start, fork);

                MapReduceActionWidget mr = new MapReduceActionWidget(OozieWorkflowGenerator.this);
                mr.setName("MR_0");
                addWidget(mr, 300, 30);
                ((OozieDiagramController) controller).addMultiConnection(fork, mr);

                PigActionWidget pig = new PigActionWidget(OozieWorkflowGenerator.this);
                pig.setName("Pig_0");
                addWidget(pig, 300, 200);
                ((OozieDiagramController) controller).addMultiConnection(fork, pig);

                JoinNodeWidget join = new JoinNodeWidget(OozieWorkflowGenerator.this);
                join.setName("Join_0");
                addWidget(join, 450, 100);
                ((OozieDiagramController) controller).addConnection(mr, join);
                ((OozieDiagramController) controller).addConnection(pig, join);
                ((OozieDiagramController) controller).addConnection(join, end);

                fork.updateOnSelection();
                join.updateOnSelection();
                mr.updateOnSelection();
                pig.updateOnSelection();
            }
        };

        Command clear_cmd = new Command() {

            public void execute() {
                clear();
            }

        };

        MenuBar fileMenu = new MenuBar(true);
        fileMenu.setAutoOpen(true);
        fileMenu.setAnimationEnabled(true);
        fileMenu.addItem("New", cmd);
        fileMenu.addItem("Open", cmd);
        fileMenu.addItem("Load XML", cmd);
        fileMenu.addItem("Save", cmd);
        fileMenu.addItem("Save As..", cmd);
        fileMenu.addItem("Generate XML", cmd);
        fileMenu.addItem("Print", cmd);
        fileMenu.addItem("Quit", cmd);

        MenuBar editMenu = new MenuBar(true);
        editMenu.setAutoOpen(true);
        editMenu.setAnimationEnabled(true);
        editMenu.addItem("Undo", cmd);
        editMenu.addItem("Redo", cmd);
        editMenu.addItem("Copy", cmd);
        editMenu.addItem("Cut", cmd);
        editMenu.addItem("Paste", cmd);
        editMenu.addItem("Duplicate", cmd);
        editMenu.addItem("Delete", cmd);
        editMenu.addItem("Clear Diagram", clear_cmd);

        MenuBar examples = new MenuBar(true);
        examples.setAutoOpen(true);
        examples.setAnimationEnabled(true);
        examples.addItem("wrkflow with MR action", mr_cmd);
        examples.addItem("wrkflow with Pig action", pig_cmd);
        examples.addItem("wrkflow with Java action", java_cmd);
        examples.addItem("wrkflow with Fork/Join ", forkjoin_cmd);

        MenuBar helpMenu = new MenuBar(true);
        helpMenu.setAutoOpen(true);
        helpMenu.setAnimationEnabled(true);

        // TODO this should point to a workflowgenerator's maven site, however there is no maven site available. (Not even in
        // Workspace of the jenkins job at https://builds.apache.org/job/oozie-trunk-precommit-build/ws/workflowgenerator/target/)
        // where client, for example, has target/site/apidocs
        // The ideal place is somewhere under http://oozie.apache.org/docs/ once it is generated.
        Command openOozieTopPageComman = new Command() {
            @Override
            public void execute() {
                Window.open("http://oozie.apache.org/", "_blank", "");
            }
        };
        helpMenu.addItem("Documentation", openOozieTopPageComman);
        helpMenu.addItem("Online Help", openOozieTopPageComman);


        Command aboutCommand = new Command() {
            @Override
            public void execute() {
                // Dialogbox
                final DialogBox d = new DialogBox(false, true);
                d.setGlassEnabled(true);
                d.setText("About Oozie Workflow Generator");
                d.center();

                // Set this to workaround the grid z-index issue https://issues.apache.org/jira/browse/OOZIE-1081
                d.getElement().getStyle().setZIndex(ZINDEX_FRONT_OF_GRID);

                // About text
                VerticalPanel vpanel = new VerticalPanel();
                vpanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
                vpanel.setSpacing(10);
                vpanel.setWidth("150");
                vpanel.add(new Label("Oozie Workflow Generator"));
                vpanel.add(new Label("Version 3.4.0-SNAPSHOT")); // TODO how to get a version number from pom?

                // OK button to close
                Button ok = new Button("OK");
                ok.addClickHandler(new ClickHandler(){
                    @Override
                    public void onClick(ClickEvent event) {
                        d.hide();
                    }

                });

                vpanel.add(ok);
                d.setWidget(vpanel);
                d.show();

            }
        };
        helpMenu.addItem("About", aboutCommand);

        MenuBar menu = new MenuBar();
        menu.addItem("File", fileMenu);
        menu.addItem("Edit", editMenu);
        menu.addItem("Example", examples);
        menu.addItem("Help", helpMenu);

        return menu;
    }

    /**
     * Add a new node widget
     *
     * @param w node widget
     * @param x x-coordinate
     * @param y y-coordinate
     */
    public void addWidget(NodeWidget w, int x, int y) {
        controller.addWidget(w, x, y);
        changeNodeCount(w, true);
        dragController.makeDraggable(w);
        widgets.add(w);
    }

    /**
     * Remove a node widget
     *
     * @param w node widget
     */
    public void removeWidget(NodeWidget w) {
        controller.deleteWidget(w);
        widgets.remove(w);
        if (w instanceof StartNodeWidget) {
            start = null;
        }
        else if (w instanceof EndNodeWidget) {
            end = null;
        }
        else if (w instanceof KillNodeWidget) {
            kill = null;
        }
        changeNodeCount(w, false);
    }

    /**
     * Increment/Decrement count of node widget type
     *
     * @param w nodeWidget
     * @param increment true: increment, false: decrement
     */
    protected void changeNodeCount(NodeWidget w, boolean increment) {
        int i = 0;
        if (w instanceof MapReduceActionWidget) {
            if (nodeCount.containsKey(NodeType.MAPREDUCE)) {
                i = nodeCount.get(NodeType.MAPREDUCE);
            }
            updateNodeCountMap(NodeType.MAPREDUCE, increment, i);
        }
        else if (w instanceof PigActionWidget) {
            if (nodeCount.containsKey(NodeType.PIG)) {
                i = nodeCount.get(NodeType.PIG);
            }
            updateNodeCountMap(NodeType.PIG, increment, i);
        }
        else if (w instanceof JavaActionWidget) {
            if (nodeCount.containsKey(NodeType.JAVA)) {
                i = nodeCount.get(NodeType.JAVA);
            }
            updateNodeCountMap(NodeType.JAVA, increment, i);
        }
        else if (w instanceof FSActionWidget) {
            if (nodeCount.containsKey(NodeType.FS)) {
                i = nodeCount.get(NodeType.FS);
            }
            updateNodeCountMap(NodeType.FS, increment, i);
        }
        else if (w instanceof PipesActionWidget) {
            if (nodeCount.containsKey(NodeType.PIPES)) {
                i = nodeCount.get(NodeType.PIPES);
            }
            updateNodeCountMap(NodeType.PIPES, increment, i);
        }
        else if (w instanceof StreamingActionWidget) {
            if (nodeCount.containsKey(NodeType.STREAMING)) {
                i = nodeCount.get(NodeType.STREAMING);
            }
            updateNodeCountMap(NodeType.STREAMING, increment, i);
        }
        else if (w instanceof ShellActionWidget) {
            if (nodeCount.containsKey(NodeType.SHELL)) {
                i = nodeCount.get(NodeType.SHELL);
            }
            updateNodeCountMap(NodeType.SHELL, increment, i);
        }
        else if (w instanceof SSHActionWidget) {
            if (nodeCount.containsKey(NodeType.SSH)) {
                i = nodeCount.get(NodeType.SSH);
            }
            updateNodeCountMap(NodeType.SSH, increment, i);
        }
        else if (w instanceof EmailActionWidget) {
            if (nodeCount.containsKey(NodeType.EMAIL)) {
                i = nodeCount.get(NodeType.EMAIL);
            }
            updateNodeCountMap(NodeType.EMAIL, increment, i);
        }
        else if (w instanceof SubWFActionWidget) {
            if (nodeCount.containsKey(NodeType.SUBWF)) {
                i = nodeCount.get(NodeType.SUBWF);
            }
            updateNodeCountMap(NodeType.SUBWF, increment, i);
        }
        else if (w instanceof StartNodeWidget) {
            if (nodeCount.containsKey(NodeType.START)) {
                i = nodeCount.get(NodeType.START);
            }
            updateNodeCountMap(NodeType.START, increment, i);
        }
        else if (w instanceof EndNodeWidget) {
            if (nodeCount.containsKey(NodeType.END)) {
                i = nodeCount.get(NodeType.END);
            }
            updateNodeCountMap(NodeType.END, increment, i);
        }
        else if (w instanceof KillNodeWidget) {
            if (nodeCount.containsKey(NodeType.KILL)) {
                i = nodeCount.get(NodeType.KILL);
            }
            updateNodeCountMap(NodeType.KILL, increment, i);
        }
        else if (w instanceof ForkNodeWidget) {
            if (nodeCount.containsKey(NodeType.FORK)) {
                i = nodeCount.get(NodeType.FORK);
            }
            updateNodeCountMap(NodeType.FORK, increment, i);
        }
        else if (w instanceof JoinNodeWidget) {
            if (nodeCount.containsKey(NodeType.JOIN)) {
                i = nodeCount.get(NodeType.JOIN);
            }
            updateNodeCountMap(NodeType.JOIN, increment, i);
        }
        else if (w instanceof DecisionNodeWidget) {
            if (nodeCount.containsKey(NodeType.DECISION)) {
                i = nodeCount.get(NodeType.DECISION);
            }
            updateNodeCountMap(NodeType.DECISION, increment, i);
        }
    }

    private void updateNodeCountMap(NodeType type, boolean increment, int i) {
        if (increment) {
            nodeCount.put(type, i + 1);
        }
        else {
            nodeCount.put(type, i - 1);
        }
    }

    /**
     * Remove all node widgets in a workflow design panel
     */
    public void clear() {
        controller.clearDiagram();
        widgets.clear();
        nodeCount.clear();
        start = null;
        end = null;
        kill = null;
    }
}
TOP

Related Classes of org.apache.oozie.tools.workflowgenerator.client.OozieWorkflowGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.