Package test.core

Source Code of test.core.TestTimer

/*
* TestSelectComboBoxListener.java
*
* Created on 26 de octubre de 2006, 16:59
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package test.core;

import java.io.Serializable;
import java.util.Date;
import org.itsnat.core.ItsNatTimer;
import org.itsnat.core.event.ItsNatDOMStdEvent;
import org.itsnat.core.event.ItsNatTimerHandle;
import org.itsnat.core.html.ItsNatHTMLDocument;
import java.util.LinkedList;
import org.itsnat.core.ClientDocument;
import org.itsnat.core.event.ItsNatTimerEvent;
import org.itsnat.core.event.NodePropertyTransport;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.EventTarget;
import org.w3c.dom.html.HTMLButtonElement;
import org.w3c.dom.html.HTMLDocument;
import org.w3c.dom.html.HTMLInputElement;

/**
*
* @author jmarranz
*/
public class TestTimer implements EventListener,Serializable
{
    protected ItsNatHTMLDocument itsNatDoc;
    protected LinkedList<ItsNatTimerHandle> timerHandleList = new LinkedList<ItsNatTimerHandle>();
    protected ItsNatTimer timerMgr;
    protected HTMLButtonElement addTimerElem;
    protected HTMLInputElement checkBoxElem;
    protected HTMLButtonElement removeTimerElem;
   
    /**
     * Creates a new instance of TestSelectComboBoxListener
     */
    public TestTimer(ItsNatHTMLDocument itsNatDoc)
    {
        this.itsNatDoc = itsNatDoc;

        load();
    }

    public void load()
    {
        Document doc = itsNatDoc.getDocument();
        this.addTimerElem = (HTMLButtonElement)doc.getElementById("addTimerId");
        ((EventTarget)addTimerElem).addEventListener("click",this,false);

        this.checkBoxElem = (HTMLInputElement)doc.getElementById("fixedRateTimerId");
        itsNatDoc.addEventListener((EventTarget)checkBoxElem,"click",null,false,new NodePropertyTransport("checked",boolean.class));

        ClientDocument clientDoc = itsNatDoc.getClientDocumentOwner();
        this.timerMgr = clientDoc.createItsNatTimer();

        this.removeTimerElem = (HTMLButtonElement)doc.getElementById("removeTimerId");
        ((EventTarget)removeTimerElem).addEventListener("click",this,false);
    }

    public void handleEvent(Event evt)
    {
        EventTarget currentTarget = (EventTarget)evt.getCurrentTarget();
        if (currentTarget == addTimerElem)
        {
            ItsNatDOMStdEvent itsNatEvent = (ItsNatDOMStdEvent)evt;
            ItsNatHTMLDocument itsNatDoc = (ItsNatHTMLDocument)itsNatEvent.getItsNatDocument();

            outText("OK timer started "); // Para que se vea

            boolean fixedRate = checkBoxElem.getChecked();

            ItsNatTimerHandle timerHandle;
            if (!fixedRate)
                timerHandle = timerMgr.schedule(null,this,3000,2000);
            else
                timerHandle = timerMgr.scheduleAtFixedRate(null,this,3000,200);
            timerHandleList.add(timerHandle);
        }
        else if (currentTarget == removeTimerElem)
        {
            ItsNatTimerHandle timerHandle = getFirstTimerHandle();
            if (timerHandle != null)
            {
                boolean res = timerHandle.cancel();
                if (res)
                    outText("OK timer canceled "); // Para que se vea
                removeFirstTimerHandle();
            }
        }
        else
        {
            ItsNatTimerEvent timerEvt = (ItsNatTimerEvent)evt;
            ItsNatTimerHandle handle = timerEvt.getItsNatTimerHandle();
            long firstTime = handle.getFirstTime();
            if ((new Date().getTime() - firstTime) > 10000) // to avoid never ending ticks
            {
                handle.cancel();
                outText("Timer canceled (timeout)");
            }
            else
            {
                long delay = System.currentTimeMillis() - timerEvt.getItsNatTimerHandle().scheduledExecutionTime();
                long period = handle.getPeriod();
                // El delay es para ver lo que ha tardado en procesarse el evento respecto al instante previsto
                // En el caso de fixedRate el periodo de test es peque�o pero la t�cnica permite "acelerar"
                // el delay podr� superar el periodo alguna vez pero se recuperar� (si no es demasiado peque�o)
                String msg = "OK timer, delay: " + delay + " ";
                if (delay >= period) // el retraso choca el instante siguiente evento
                    msg += "(delayed) ";
                outText(msg); // Para que se vea
            }
        }
    }

    public ItsNatTimerHandle getFirstTimerHandle()
    {
        if (timerHandleList.isEmpty()) return null;
        return timerHandleList.getFirst();
    }

    public void removeFirstTimerHandle()
    {
        if (timerHandleList.isEmpty()) return;
        timerHandleList.removeFirst();
    }
   
    public void outText(String msg)
    {
        HTMLDocument doc = (HTMLDocument)itsNatDoc.getDocument();
        Element parent = doc.getElementById("timerLogId");
        parent.appendChild(doc.createTextNode(msg)); // Para que se vea
    }
}
TOP

Related Classes of test.core.TestTimer

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.