appsgate.lig.eude.interpreter.langage.nodes.NodeEventsSequence.java Source code

Java tutorial

Introduction

Here is the source code for appsgate.lig.eude.interpreter.langage.nodes.NodeEventsSequence.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package appsgate.lig.eude.interpreter.langage.nodes;

import appsgate.lig.eude.interpreter.langage.components.EndEvent;
import appsgate.lig.eude.interpreter.langage.exceptions.SpokExecutionException;
import appsgate.lig.eude.interpreter.langage.exceptions.SpokNodeException;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author jr
 */
public class NodeEventsSequence extends NodeEvents {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(NodeEventsSequence.class);

    /**
     * 
     */
    private NodeEvent clockEvent = null;

    /**
     * 
     */
    private int nextEvent = 0;

    /**
     * Private constructor to allow copy
     *
     * @param parent
     */
    private NodeEventsSequence(Node parent) {
        super(parent);
    }

    /**
     * Constructor
     *
     * @param o
     * @param parent
     * @throws SpokNodeException
     */
    public NodeEventsSequence(JSONObject o, Node parent) throws SpokNodeException {
        super(o, parent);
    }

    @Override
    JSONObject specificDesc(JSONObject ret) throws JSONException {
        ret.put("type", "eventsSequence");
        return ret;
    }

    @Override
    protected void specificCall() {
        clockEvent = null;
        nextEvent = 0;
        callEvent();
    }

    @Override
    public String getExpertProgramScript() {
        return "[" + StringUtils.join(listOfEvent, " THEN ") + "]";

    }

    @Override
    protected Node copy(Node parent) {
        NodeEventsSequence ret = new NodeEventsSequence(parent);
        return commonCopy(ret);
    }

    @Override
    void dealWithClockEvent(NodeEvent e) throws SpokExecutionException {
        stop();
        call();
    }

    @Override
    void dealWithNormalEvent(NodeEvent e) throws SpokExecutionException {
        if (nextEvent >= listOfEvent.size()) {
            stop();
            fireEndEvent(new EndEvent(this));
            return;
        } else {
            callEvent();
        }
        if (clockEvent == null) {
            clockEvent = startClockEvent(getDuration());
        }
    }

    private void callEvent() {
        Node e = listOfEvent.get(nextEvent);
        e.addEndEventListener(this);
        e.call();
        nextEvent++;
    }

    @Override
    public String getTypeSpec() {
        return "EVENTS Seq";
    }

}