Package com.zk.test.timeplot

Source Code of com.zk.test.timeplot.TestSuiteResultCtrl2

/*
*   Copyright (C) 2009 Huawei Tech. Co., Ltd. All rights reserved.
*
*   产品名:     PQM V100R002
*   模块名:     IP性能管理
*   文件名:     TimeplotModelCtrl.java
*   描述信息:
*   版本说明:
*   版权信息:    深圳华为技术有限公司
*   作者:       w62784
*   创建时间:    2009-10-7
*/
package com.zk.test.timeplot;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;

import org.zkforge.timeplot.Plotinfo;
import org.zkforge.timeplot.Timeplot;
import org.zkforge.timeplot.data.PlotDataSource;
import org.zkforge.timeplot.geometry.DefaultTimeGeometry;
import org.zkforge.timeplot.geometry.DefaultValueGeometry;
import org.zkforge.timeplot.geometry.TimeGeometry;
import org.zkforge.timeplot.geometry.ValueGeometry;
import org.zkoss.lang.Threads;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.DesktopUnavailableException;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Tabbox;

public class TestSuiteResultCtrl2 extends GenericForwardComposer
{
    Timeplot timeplot;

    Plotinfo dfPlot1;

    Plotinfo dfPlot2;

    Checkbox auto;

    Button bugBtn;

    int timeWindowSize = 240; // 时间窗数据点大小

    Tabbox tbbox;

    final static int interval = 30 * 1000; // 单位 毫秒

    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

    ArrayList<ArrayList<TimeplotData>> databuff;

    ArrayList<Plotinfo> plots = new ArrayList<Plotinfo>();

    @Override
    public void doAfterCompose(Component comp) throws Exception
    {
        super.doAfterCompose(comp);

        databuff = initDataMode();
        ListModelList dataModel1 = new ListModelList(databuff.get(0));
        ListModelList dataModel2 = new ListModelList(databuff.get(1));
        ValueGeometry vg = new DefaultValueGeometry();
        vg.setGridColor("#000000");
        vg.setMin(8);
        vg.setMax(23);
        TimeGeometry tg = new DefaultTimeGeometry();
        tg.setGridStep(2 * 60 * 60 * 1000);
        bugBtn.addEventListener("onClick", new EventListener()
        {

            @Override
            public void onEvent(Event event) throws Exception
            {
                Date begin = format.parse("2009/01/01 13:00:00");
                Date end = format.parse("2009/01/01 18:00:00");
                timeplot.invalidate();
                // new date reference
                dfPlot1.setDataModel(generateData(new Date(begin.getTime()), end));
                dfPlot2.setDataModel(generateData(new Date(begin.getTime()), end));

            }
        });
//        ValueGeometry vg2 = new DefaultValueGeometry();
//        vg2.setGridColor("#000000");
//        vg2.setMin(8);
//        vg2.setMax(23);
        // tg.setMax((int) (new Date().getTime()+2*60*60*1000));
        tg.setAxisLabelsPlacement("bottom");
        tg.setGridStepRange(30 * 60 * 1000);
        PlotDataSource pds = new PlotDataSource();
        pds.setSeparator(" ");
        dfPlot1.setRoundValues(false);
        dfPlot1.setPlotDataSource(pds);
        dfPlot1.setValueGeometry(vg);
        dfPlot1.setTimeGeometry(tg);
        dfPlot1.setDataModel(dataModel1);
        dfPlot2.setRoundValues(false);
        dfPlot2.setValueGeometry(vg);
        dfPlot2.setPlotDataSource(pds);
        dfPlot2.setDataModel(dataModel2);
        // miss TimeGeometry
        dfPlot2.setTimeGeometry(tg);
        //
        plots.add(dfPlot1);
        plots.add(dfPlot2);
        auto.setAttribute("push", false);
        auto.addEventListener("onCheck", new EventListener()
        {

            @Override
            public void onEvent(Event arg0) throws Exception
            {
                Boolean isPush = (Boolean) auto.getAttribute("push");
                Desktop desktop = Executions.getCurrent().getDesktop();
                if (!isPush)
                {
                    desktop.enableServerPush(true);

                    new WorkingThread(auto, dfPlot1, databuff.get(0), 5).start();
                    new WorkingThread(auto, dfPlot2, databuff.get(1), 10).start();
                }
                else
                {
                    desktop.enableServerPush(false);
                }
                auto.setAttribute("push", !isPush);

                // ListModelList dataModelNew=makeModel();
                //              
                // timplotModelTest.setDataModel(dataModelNew);
            }
        });
        tbbox.addEventListener("onSelect", new EventListener()
        {

            @Override
            public void onEvent(Event arg0) throws Exception
            {
                // TODO Auto-generated method stub
                for (Plotinfo plot : plots)
                {
                    plot.repaint();
                }
            }

        });

    }

    private ArrayList<ArrayList<TimeplotData>> initDataMode()
    {
        ArrayList<TimeplotData> datas1 = new ArrayList<TimeplotData>();
        ArrayList<TimeplotData> datas2 = new ArrayList<TimeplotData>();
        ArrayList<ArrayList<TimeplotData>> rets = new ArrayList<ArrayList<TimeplotData>>();
        rets.add(datas1);
        rets.add(datas2);
        Date date = new Date(new Date().getTime() - timeWindowSize * interval);
        for (int i = 0; i < timeWindowSize; i++)
        {
            TimeplotData pd1 = new TimeplotData();
            TimeplotData pd2 = new TimeplotData();
            pd1.setTime(date);
            pd2.setTime(date);
            float rd = (float) (Math.random() * 10);
            if (i < timeWindowSize * 1 / 3)
            {
                pd1.setValue(10f + rd % 1);
                pd2.setValue(10f + rd % 1 + rd / 10);
            }
            else if (i < timeWindowSize * 2 / 3)
            {
                pd1.setValue(15f + rd % 5);
                pd2.setValue(15f + rd % 5 + 1);
            }
            else
            {
                pd1.setValue(10f + rd % 2);
                pd2.setValue(10f + rd % 2 + rd / 10);
            }

            datas1.add(pd1);
            datas2.add(pd2);
            date = new Date(date.getTime() + interval);
        }
        return rets;
    }

    private ListModelList makeModel() throws ParseException
    {
        ListModelList dataModel = new ListModelList();
        Date begin = format.parse("2009/01/01 06:00:00");
        for (int i = 0; i < 10; i++)
        {
            TimeplotData pd = new TimeplotData();
            pd.setTime(begin);
            pd.setValue((float) Math.random() * 100);
            dataModel.add(pd);
            begin = new Date(begin.getTime() + 3600000);
        }
        return dataModel;
    }

    static class WorkingThread extends Thread
    {
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

        private final Desktop _desktop;

        private final Component _info;

        private final Plotinfo _plot;

        private ArrayList<TimeplotData> _datas;

        int _interval;
        private WorkingThread(Component info, Plotinfo plot, ArrayList<TimeplotData> datas, int interval)
        {
            _desktop = info.getDesktop();
            _info = info;
            _plot = plot;
            _datas = datas;
            _interval = interval;
        }

        @Override
        public void run()
        {
            try
            {
                while (true)
                {
                    if (_info.getDesktop() == null || !_desktop.isServerPushEnabled())
                    {
                        _desktop.enableServerPush(false);
                        return;
                    }
                    Executions.activate(_desktop);
                    try
                    {
                        ListModelList model = (ListModelList) _plot.getDataModel();
                        model.remove(0);
                        TimeplotData pd = new TimeplotData();
                        pd.setTime(new Date());
                        pd.setValue((float) Math.random() * 100);
                        model.add(pd);
                        System.out.println(new Date()+": "+ this.getId());

                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        Executions.deactivate(_desktop);
                    }
                    Threads.sleep(_interval * 1000);
                }
            }
            catch (DesktopUnavailableException ex)
            {
                System.out.println("The server push thread interrupted");
            }
            catch (InterruptedException ex)
            {
                System.out.println("The server push thread interrupted");
            }

        }

        private void shiftDatas(ArrayList<TimeplotData> datas)
        {
            if (datas != null && !datas.isEmpty())
            {
                TimeplotData firstdata = datas.get(0);
                TimeplotData lastdata = datas.get(datas.size() - 1);
                datas.remove(0);
                firstdata.setTime(new Date(lastdata.getTime().getTime() + interval));
                datas.add(firstdata);
            }
        }

        private ListModelList makeModel() throws ParseException
        {

            ListModelList dataModel = new ListModelList();
            Date begin = format.parse("2009/01/01 06:00:00");
            for (int i = 0; i < 300; i++)
            {
                TimeplotData pd = new TimeplotData();
                pd.setTime(begin);
                pd.setValue((float) Math.random() * 100);
                dataModel.add(pd);
                begin = new Date(begin.getTime() + 3600000);
            }
            return dataModel;
        }
    }

    public ListModelList generateData(Date begin, Date end)
    {
        Date curr = begin;
        ListModelList model = new ListModelList();
        while (curr.before(end))
        {
            TimeplotData data = new TimeplotData();
            // new date reference
            data.setTime(new Date(curr.getTime()));
            Random x = new Random();
            float radomValue = x.nextFloat() * 100;
            radomValue = (radomValue < 20) ? radomValue + 20 : radomValue;
            data.setValue(radomValue);
            model.add(data);
            curr.setTime(curr.getTime() + 15 * 60 * 1000);
        }
        return model;
    }
}
TOP

Related Classes of com.zk.test.timeplot.TestSuiteResultCtrl2

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.