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

Source Code of org.apache.oozie.tools.workflowgenerator.client.widget.NodeWidget

/**
* 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.widget;

import org.apache.oozie.tools.workflowgenerator.client.OozieDiagramController;
import org.apache.oozie.tools.workflowgenerator.client.OozieWorkflowGenerator;
import org.apache.oozie.tools.workflowgenerator.client.property.PropertyTable;
import org.apache.oozie.tools.workflowgenerator.client.property.PropertyTableFactory;

import com.google.gwt.event.dom.client.HasAllTouchHandlers;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.TouchCancelEvent;
import com.google.gwt.event.dom.client.TouchCancelHandler;
import com.google.gwt.event.dom.client.TouchEndEvent;
import com.google.gwt.event.dom.client.TouchEndHandler;
import com.google.gwt.event.dom.client.TouchMoveEvent;
import com.google.gwt.event.dom.client.TouchMoveHandler;
import com.google.gwt.event.dom.client.TouchStartEvent;
import com.google.gwt.event.dom.client.TouchStartHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Element;
import com.orange.links.client.menu.ContextMenu;
import com.orange.links.client.menu.HasContextMenu;
import com.orange.links.client.save.IsDiagramSerializable;

/**
* Abstract class used as base for node widget
*/
public abstract class NodeWidget extends Label implements HasContextMenu, HasAllTouchHandlers, IsDiagramSerializable {

    protected ContextMenu contextMenu;
    protected OozieWorkflowGenerator generator;
    protected OozieDiagramController controller;
    protected PropertyTable table;
    protected boolean visited = false;
    protected String identifier = "nodewidget"; // for serialization to be
                                                // implemented
    protected String content = ""; // for serialization to be implemented

    public NodeWidget() {
        super("");
        initMenu();
        initEvent();
    }

    /**
     * Constructor which records OozieWorkflowGenerator
     *
     * @param gen OozieWorkflowGenerator
     */
    public NodeWidget(OozieWorkflowGenerator gen, String style) {
        this();
        generator = gen;
        controller = gen.getDiagramController();
        setStyleName(style);
        initPropertyTable();
    }

    /**
     * Initialize property table
     */
    protected void initPropertyTable() {
        PropertyTableFactory factory = PropertyTableFactory.getInstance();
        table = factory.createPropertyTable(this);
        generator.setPropertyTable(table);
    }

    /**
     * Initialize right-click context menu
     */
    protected void initMenu() {
        contextMenu = new ContextMenu();
        contextMenu.addItem(new MenuItem("Delete", new Command() {
            @Override
            public void execute() {
                generator.removeWidget(NodeWidget.this);
            }
        }));
    }

    /**
     * Initialize event handler
     */
    protected void initEvent() {

        // Register MouseDown Event to update property table of the selected
        // action
        this.addMouseDownHandler(new MouseDownHandler() {

            @Override
            public void onMouseDown(MouseDownEvent event) {
                generator.setPropertyTable(table);
                updateOnSelection();
            }
        });
    }

    /**
     * Update information when clicked in workflow design panel
     */
    protected abstract void updateOnSelection();

    /**
     * Return an instance of OozieWorkflowGenerator
     *
     * @return
     */
    public OozieWorkflowGenerator getGenerator() {
        return this.generator;
    }

    /**
     * Return an instance of property table
     *
     * @return Property Tab
     */
    public PropertyTable getPropertyTable() {
        return this.table;
    }

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

    /**
     * Return a name of node widget
     *
     * @return
     */
    public String getName() {
        return table.getName();
    }

    /**
     * Set a name of node widget
     *
     * @param n name
     */
    public void setName(String n) {
        table.setName(n);
    }

    /**
     * Generate xml elements of this node widget and attach them to xml doc
     *
     * @param doc xml document
     * @param root xml element under which elements of this node widget are
     *        added
     * @param next next node widget to be executed after this in workflow
     */
    public void generateXML(Document doc, Element root, NodeWidget next) {
        table.generateXML(doc, root, next);
    }

    /**
     * Add TouchStartHandler
     */
    @Override
    public HandlerRegistration addTouchStartHandler(TouchStartHandler handler) {
        return addDomHandler(handler, TouchStartEvent.getType());
    }

    /**
     * Add TouchEndHandler
     */
    @Override
    public HandlerRegistration addTouchEndHandler(TouchEndHandler handler) {
        return addDomHandler(handler, TouchEndEvent.getType());
    }

    /**
     * Add TouchMoveHandler
     */
    @Override
    public HandlerRegistration addTouchMoveHandler(TouchMoveHandler handler) {
        return addDomHandler(handler, TouchMoveEvent.getType());
    }

    /**
     * Add TouchCancelHandler
     */
    @Override
    public HandlerRegistration addTouchCancelHandler(TouchCancelHandler handler) {
        return addDomHandler(handler, TouchCancelEvent.getType());
    }

    /**
     * Return a type of node widget (used for serialization not yet implemented)
     */
    @Override
    public String getType() {
        return this.identifier;
    }

    /**
     * Return content representation of node widget (used for serialization not
     * yet implemented)
     */
    @Override
    public String getContentRepresentation() {
        return this.content;
    }

    /**
     * Set content representation of node widget (used for serialization not yet
     * implemented)
     */
    @Override
    public void setContentRepresentation(String contentRepresentation) {
        this.content = contentRepresentation;
    }

    /**
     * Return right-click context menu
     */
    @Override
    public ContextMenu getContextMenu() {
        return this.contextMenu;
    }

    /**
     * Return if node widget is already visited in tree-traversal algorithm
     * which generates xml
     *
     * @return
     */
    public boolean isVisited() {
        return this.visited;
    }

    /**
     * Set flag when node widget is visited in tree-traversal algorithm which
     * generates xml
     */
    public void visit() {
        this.visited = true;
    }

    /**
     * Initialize visited flag
     */
    public void unvisit() {
        this.visited = false;
    }

}
TOP

Related Classes of org.apache.oozie.tools.workflowgenerator.client.widget.NodeWidget

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.