alarmmodeldemo.java

来自「全面实现ilog地功能,没有使用第三方lib.」· Java 代码 · 共 236 行

JAVA
236
字号
/*
 * This source code is part of TWaver 1.3.1
 *
 * SERVA Software PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * Copyright 2000-2005 SERVA Software, Inc. All rights reserved.
 */

package demo.alarm;

import java.lang.reflect.Method;
import java.util.Iterator;

import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

import twaver.Alarm;
import twaver.AlarmSeverity;
import twaver.Node;
import twaver.TAlarmOverview;
import twaver.TDataBox;
import twaver.TaskAdapter;
import twaver.TaskScheduler;
import twaver.network.TNetwork;
import twaver.table.TAlarmTable;
import demo.DemoPane;

public class AlarmModelDemo extends DemoPane {
    private TDataBox box = new TDataBox();
    private Node node1 = new Node("NODE_1");
    private Node node2 = new Node("NODE_2");
    private Node node3 = new Node("NODE_3");
    private Node node4 = new Node("NODE_4");
    private Node node5 = new Node("NODE_5");
    private TAlarmTable alarmTable = new TAlarmTable(box);
    private TAlarmOverview overview = new TAlarmOverview(box);
    private TNetwork network = new TNetwork(box);

    public AlarmModelDemo() {
        alarmTable.setTableBodyPopupMenuFactory(null);
        overview.setPanel(TAlarmOverview.BAR_PANEL);
        JSplitPane bottomSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(alarmTable), overview);
        bottomSplit.setDividerLocation(300);
        JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, network, bottomSplit);
        split.setDividerLocation(200);
        this.add(split);

        node1.setLocation(100, 80);
        node1.setName(node1.getID().toString());
        box.addElement(node1);

        node2.setLocation(200, 80);
        node2.setName(node2.getID().toString());
        box.addElement(node2);

        node3.setLocation(300, 80);
        node3.setName(node3.getID().toString());
        box.addElement(node3);

        node4.setLocation(400, 80);
        node4.setName(node4.getID().toString());
        box.addElement(node4);

        node5.setLocation(500, 80);
        node5.setName(node5.getID().toString());
        box.addElement(node5);

        network.setElementDeletable(true);

        // create a task to change element's alarm state
        TaskScheduler.getInstance().register(new TaskAdapter() {
            int step = 0;
            public void run(long clock) {
                step++;
                try {
                    // invoke method
                    Method method = AlarmModelDemo.class.getDeclaredMethod("step" + step, null);
                    method.invoke(AlarmModelDemo.this, null);
                }
                catch (Exception ex) {
                    if (!NoSuchMethodException.class.isInstance(ex)) {
                        ex.printStackTrace();
                    }
                    clear();
                    step = 0;
                }
            }

            public int getInterval() {
                return 1000;
            }
        });

    }

    private void changeNode5() {
        // remove node5 from box
        if (box.contains(node5)) {
            box.removeElement(node5);
        }
        // add node5 to box and add some alarm state
        else {
            node5.getAlarmState().clear();
            box.addElement(node5);
            AlarmSeverity severity = AlarmSeverity.getNonClearedRandomSeverity();
            for (int i = 0; i < 8; i++) {
                Alarm alarm = new Alarm(new Integer(50 + i), node5.getID(), severity);
                box.getAlarmModel().addAlarm(alarm);
            }
        }
    }

    public void step1() {
        Alarm alarm = null;

        // set alarm state of node2 bypass alarm model
        node2.getAlarmState().setAcknowledgedAlarmCount(AlarmSeverity.INDETERMINATE, 5);

        // add alarm to node1
        alarm = new Alarm(new Integer(1), node1.getID(), AlarmSeverity.CRITICAL);
        box.getAlarmModel().addAlarm(alarm);

        // add alarm to node2
        alarm = new Alarm(new Integer(2), node2.getID(), AlarmSeverity.MINOR);
        alarm.setAcked(true);
        box.getAlarmModel().addAlarm(alarm);

        // add alarm to node3
        alarm = new Alarm(new Integer(3), node3.getID(), AlarmSeverity.MAJOR);
        box.getAlarmModel().addAlarm(alarm);
        alarm = new Alarm(new Integer(4), node3.getID(), AlarmSeverity.MAJOR);
        box.getAlarmModel().addAlarm(alarm);
        alarm = new Alarm(new Integer(5), node3.getID(), AlarmSeverity.MAJOR);
        box.getAlarmModel().addAlarm(alarm);
        alarm = new Alarm(new Integer(6), node3.getID(), AlarmSeverity.MAJOR);
        box.getAlarmModel().addAlarm(alarm);
        alarm = new Alarm(new Integer(7), node3.getID(), AlarmSeverity.MAJOR);
        box.getAlarmModel().addAlarm(alarm);

        // add alarm to node4
        alarm = new Alarm(new Integer(8), node4.getID(), AlarmSeverity.CRITICAL);
        box.getAlarmModel().addAlarm(alarm);

        // change node5
        this.changeNode5();
    }

    public void step2() {
        box.getAlarmModel().getAlarmByID(new Integer(1)).setAlarmSeverity(AlarmSeverity.MAJOR);
        box.getAlarmModel().getAlarmByID(new Integer(2)).setAcked(false);
        box.getAlarmModel().removeAlarmByID(new Integer(3));
        box.getAlarmModel().addAlarm(new Alarm(new Integer(9), node4.getID(), AlarmSeverity.CRITICAL));
        this.changeNode5();
    }

    public void step3() {
        box.getAlarmModel().getAlarmByID(new Integer(1)).setAlarmSeverity(AlarmSeverity.MINOR);
        box.getAlarmModel().getAlarmByID(new Integer(2)).setAcked(true);
        box.getAlarmModel().removeAlarmByID(new Integer(4));
        box.getAlarmModel().addAlarm(new Alarm(new Integer(10), node4.getID(), AlarmSeverity.CRITICAL));
        this.changeNode5();
    }

    public void step4() {
        box.getAlarmModel().getAlarmByID(new Integer(1)).setAlarmSeverity(AlarmSeverity.WARNING);
        box.getAlarmModel().getAlarmByID(new Integer(2)).setAcked(false);
        box.getAlarmModel().removeAlarmByID(new Integer(5));
        box.getAlarmModel().addAlarm(new Alarm(new Integer(11), node4.getID(), AlarmSeverity.CRITICAL));
        this.changeNode5();
    }

    public void step5() {
        box.getAlarmModel().getAlarmByID(new Integer(1)).setAlarmSeverity(AlarmSeverity.INDETERMINATE);
        box.getAlarmModel().getAlarmByID(new Integer(2)).setAcked(true);
        box.getAlarmModel().removeAlarmByID(new Integer(6));
        box.getAlarmModel().addAlarm(new Alarm(new Integer(12), node4.getID(), AlarmSeverity.CRITICAL));
        this.changeNode5();
    }

    public void step6() {
        box.getAlarmModel().getAlarmByID(new Integer(1)).setAlarmSeverity(AlarmSeverity.CLEARED);
        box.getAlarmModel().getAlarmByID(new Integer(2)).setAlarmSeverity(AlarmSeverity.CLEARED);
        box.getAlarmModel().removeAlarmByID(new Integer(7));

        Iterator it = box.getAlarmModel().getAlarmsByElement(node4).iterator();
        while (it.hasNext()) {
            Alarm alarm = (Alarm) it.next();
            alarm.setAcked(true);
        }
        this.changeNode5();
    }

    public void step7() {
        box.getAlarmModel().removeAlarmsByElement(node1);
        this.changeNode5();
    }

    public void step8() {
        box.getAlarmModel().removeAlarmsByElement(node2);
        this.changeNode5();
    }

    public void step9() {
        box.getAlarmModel().removeAlarmsByElement(node3);
        this.changeNode5();
    }

    public void step10() {
        box.getAlarmModel().removeAlarmsByElement(node4);
        this.changeNode5();
    }

    public void step11() {
        // clear all alarms in alarm model, but this
        // can't clear alarm state that is setted bypass alarm model
        box.getAlarmModel().removeAllAlarms();
        this.changeNode5();
    }

    public void clear() {
        // clear all alarm state of node2
        node2.getAlarmState().clear();
        this.changeNode5();
    }

    public String getTitle() {
        return "Using Alarm Model";
    }

    public String getHelp() {
        return "This demo shows the usage of alarm model." +
            "<p>In TWaver, <em>AlarmModel</em> contains all " +
            "alarm objects. When alarms changed, alarm model will synchronize the alarm state " +
            "for each element.";
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?