alarmdemo.java

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

JAVA
215
字号
/*
 * 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.awt.BorderLayout;
import java.util.Date;
import java.util.Random;
import java.util.Vector;

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

import twaver.Alarm;
import twaver.AlarmProbableCause;
import twaver.AlarmSeverity;
import twaver.AlarmTrendIndication;
import twaver.AlarmType;
import twaver.AlarmUI;
import twaver.Dummy;
import twaver.Element;
import twaver.Link;
import twaver.Node;
import twaver.TAlarmOverview;
import twaver.TDataBox;
import twaver.TaskAdapter;
import twaver.TaskScheduler;
import twaver.base.LinkType;
import twaver.network.TNetwork;
import twaver.network.layout.FlexionLinkLayouter;
import twaver.table.TAlarmTable;
import twaver.table.TTableAdapter;
import twaver.table.TTableColumn;
import twaver.table.TTableNavigator;
import twaver.tree.TTree;
import demo.DemoPane;

public class AlarmDemo extends DemoPane {
    int counter = 0;
    TDataBox box = new TDataBox("My Box");
    TNetwork network = new TNetwork(box);
    TTree tree = new TTree(box);
    TAlarmOverview overview = new TAlarmOverview(box);
    JSplitPane rootSplit = new JSplitPane();
    JSplitPane leftSplit = new JSplitPane();
    JSplitPane rigthSplit = new JSplitPane();
    TAlarmTable alarmTable = new TAlarmTable(box);

    Object[] causes = AlarmProbableCause.BACK_PLANE_FAILURE.getValues();
    Object[] types = AlarmType.COMMUNICATIONS_ALARM.getValues();
    Object[] trends = AlarmTrendIndication.LESS_SEVERE.getValues();

    public AlarmDemo() {
        this.add(rootSplit, BorderLayout.CENTER);

        rootSplit.setContinuousLayout(true);
        rootSplit.add(rigthSplit, JSplitPane.RIGHT);
        rootSplit.add(leftSplit, JSplitPane.LEFT);

        leftSplit.setOrientation(JSplitPane.VERTICAL_SPLIT);
        leftSplit.setActionMap(null);
        leftSplit.setContinuousLayout(true);
        leftSplit.add(new JScrollPane(tree), JSplitPane.TOP);
        leftSplit.add(overview, JSplitPane.BOTTOM);

        JPanel tablePanel = new JPanel(new BorderLayout());
        alarmTable.getTableModel().setPageRowSize(20);
        tablePanel.add(new TTableNavigator(alarmTable.getTableModel(), new int[] {20, 30, 50, 0}), BorderLayout.NORTH);
        tablePanel.add(new JScrollPane(alarmTable), BorderLayout.CENTER);

        rigthSplit.setOrientation(JSplitPane.VERTICAL_SPLIT);
        rigthSplit.add(network, JSplitPane.TOP);
        rigthSplit.add(tablePanel, JSplitPane.BOTTOM);

        tree.setElementMakedVisibleOnSelected(true);

        network.setLinkLayout(new FlexionLinkLayouter(network));
        network.setElementDeletable(true);

        rootSplit.setDividerLocation(200);
        leftSplit.setDividerLocation(300);
        rigthSplit.setDividerLocation(250);

        alarmTable.addColumn(new TTableColumn("key1").setEditable(true));
        alarmTable.addColumn(new TTableColumn("key2"));
        alarmTable.addColumn(new TTableColumn("key3"));
        alarmTable.addColumn(new TTableColumn("counter").setEditable(true).setJavaClass(Integer.class));

        alarmTable.getTableModel().addTableListener(new TTableAdapter() {
            public void rowClicked(int clickCount, Vector rowData, int columnIndex) {
                if (clickCount == 1) {
                    Object elementID = rowData.get(5);
                    Element element = box.getElementByID(elementID);
                    box.getSelectionModel().setSelection(element);
                } else if (clickCount == 2) {
                    Object oid = rowData.get(0);
                    Alarm alarm = alarmTable.getAlarmByOID(oid);
                    AlarmUI.createFrameAlarmUI(alarm).show();
                }
            }
        });

        initData();
        start();
    }

    private void initData() {
        Node center = new Node("center");
        center.setName("center");
        center.setLocation(200, 200);
        center.setImage("/demo/resource/cloud.png");
        box.addElement(center);
        Dummy nodes = new Dummy("My Nodes");
        nodes.setName("My Nodes");
        box.addElement(nodes);
        Dummy links = new Dummy("My Links");
        links.setName("My Links");
        box.addElement(links);

        int count = 10;
        int r = 150;
        for (int i = 0; i < count; i++) {
            Node node = new Node("NODE" + i);
            node.setName("Computer" + i);
            node.setParent(nodes);
            double angle = Math.PI * 2 / count * i;
            int x = center.getLocation().x + center.getWidth() / 2;
            x = x + (int) (r * Math.cos(angle));
            x = x - node.getWidth() / 2;
            int y = center.getLocation().y + center.getHeight() / 2;
            y = y + (int) (r * Math.sin(angle));
            y = y - node.getHeight() / 2;
            node.setLocation(x, y);
            box.addElement(node);
            Link link = new Link("C_TO_" + node.getID(), center, node);
            link.setParent(links);
            link.putClientProperty("link.width", new Integer(6));
            link.putClientProperty("link.3d", Boolean.TRUE);
            link.setType(LinkType.CNET);
            box.addElement(link);
        }
    }

    private void start() {
        TaskScheduler.getInstance().register(new TaskAdapter() {
            Vector severities = new Vector(AlarmSeverity.getAllSeverity());
            Random random = new Random();
            public void run(long clock) {
            	
            	if(box.getAlarmModel().size() >= 50){
            		box.getAlarmModel().removeAllAlarms();
            	}
            	
                Element element = box.getElement(random.nextInt(box.size()));
                final AlarmSeverity severity = (AlarmSeverity) severities.get(random.nextInt(severities.size() - 1));
                box.getAlarmModel().setAutoSyncAlarmState(true);

                Alarm alarm = new Alarm(new Integer(counter++), element.getID(), severity);

                alarm.setAcked(random.nextBoolean());
                alarm.setAckTime(new Date());
                alarm.setAckUserID("sailing8036");
                alarm.setAdditionalText("additionalText");
                alarm.setProbableCause( (AlarmProbableCause) causes[random.nextInt(causes.length)]);
                alarm.setAlarmType( (AlarmType) types[random.nextInt(types.length)]);
                alarm.setCleared(false);
                alarm.setTrendIndication( (AlarmTrendIndication) trends[random.nextInt(trends.length)]);
                alarm.setLastChangedTime(new Date());
                alarm.setClearedTime(new Date());
                alarm.setRaisedTime(new Date());
                alarm.setClearUserID("Clear user name");
                alarm.addComment("first comment");
                alarm.addComment("second comment");
                alarm.addCorrelatedAlarmID("ALM0008");
                alarm.addCorrelatedAlarmID("ALM0009");
                alarm.setProposedRepairAction("Junk it now");
                alarm.setSpecificProblem("no specific problem");
                alarm.putClientProperty("key1", "This is key1 value.");
                alarm.putClientProperty("key2", new Date());
                alarm.putClientProperty("key3", "test value.");
                alarm.putClientProperty("counter", new Integer(counter));

                box.getAlarmModel().addAlarm(alarm);

                alarm = alarmTable.getAlarmByOID(new Integer(1));
                if (alarm != null) {
                    alarm.setAlarmSeverity(severity);
                    alarm.putClientProperty("counter", new Integer(counter));
                }
            }

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

    public String getHelp() {
        return "This demo demonstrate you how to create alarm objects, " +
            "and present the alarm state by Tree, Network, Table and AlarmOverview components." +
            "<p>This demo generate alarms randomly, all alarms will list " +
            "in the alarm table. In the same time, the alarm state on other componentswill " +
            "update coincidently.";
    }

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

⌨️ 快捷键说明

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