Appendix A Alarms
The approach taken to defining the alarms is to make a vector of
alarms. Each alarm is simplified to having only three attributes.
The severity attribute is made to be multiple choice, rather than
a text string.
To display the alarms alongside the correlator it seemed best to
launch another window. The swing components that come with jdk1.2
were chosen over the jdk1.1.8 awt for their ease of use. A plug
in was used for running under jdk1.1.8 and the code was also
tested under jdk1.2 and jdk1.3 beta version. It worked every
time.
A.1 Alarm.java
The class for an individual alarm.
import java.util.*;
import java.lang.*;
/** The alarm is simplified to 3 attributes,
* Object ID, Severity and Description
* @author Veronica Clark
* @see AlarmSet
* @see AlarmState
*/
public class Alarm {
private int alarmId;
//The alarmId is a value used by the correlator to pick out
//alarms. It should be a value unique in the AlarmSet
//so its best allocated by the AlarmSet
private AlarmState state = AlarmState.CLE;
private String objectId = new String();
private String description = new String();
public void Alarm(){
}
public void setAlarm(AlarmState newState){
state = newState;
}
public void clearAlarm(){
state = AlarmState.CLE;
}
public AlarmState getStatus(){
return(state);
}
public void setAlarmId(int newId){
alarmId = newId;
}
public int getAlarmId(){
return(alarmId);
}
public void setObjectId(String id){
objectId = id;
}
public String getObjectId(){
return(objectId);
}
public void setDescription(String des){
description=des;
}
public String getDescription(){
return(description);
}
public String toString() {
return("Object Id: "+objectId+
"\nDescription of alarm: "+description+
"\nSeverity: "+state);
}
}
A.2 AlarmSet.java
The class for a vector of alarms.
import java.util.*;
/** A set of Alarms.
* @author Veronica Clark
* @see Alarm
* @see AlarmState
* @since jdk1.2
*/
public class AlarmSet {
private int sizeOf;
private Vector allAlarms = new Vector();
private int setNumber;
public AlarmSet(){
}
public AlarmSet(int number){
setNumber=number;
}
public Enumeration getAlarms(){
return(allAlarms.elements());
}
public int getNumber(){
return(setNumber);
}
public void addAlarm(Alarm a){
// try{
allAlarms.addElement(a);
// }catch(NullPointerException e){
// System.out.println("addAlarm() makes a null pointer exception");}
sizeOf++;
}
/** Prints the alarms to standard output */
public void printAlarms(){
System.out.println("The Alarm Set");
Enumeration theAlarms = allAlarms.elements();
Alarm currAlarm = new Alarm();
if(!theAlarms.hasMoreElements()){
System.out.println(" is empty");
}
while(theAlarms.hasMoreElements()){
currAlarm = (Alarm)theAlarms.nextElement();
System.out.println(currAlarm);
}
}
/** Displays the alarms in a table */
public void displayAlarms(){
AlarmsTable table = new AlarmsTable(this);
table.pack();
table.setVisible(true);
}
public Object[][] makeArray(){
Object[][] data = new Object[sizeOf][3];
for(int i=0;i<sizeOf;i++){
Alarm currAlarm = (Alarm)allAlarms.elementAt(i);
data[i][0]=currAlarm.getObjectId();
data[i][1]=currAlarm.getStatus();
data[i][2]=currAlarm.getDescription();
}
return(data);
}
}
A.3 AlarmState.java
The class for the multiple choice severity attribute of an alarm.
import java.lang.*;
/** The special class to define alarm states
* This code tries to imitate an enum data structure in C
* @author Veronica Clark
* @since jdk1.1.8
*/
public final class AlarmState {
/** Gives six states that an alarm can occupy:
<ul>
<li> Critical [CRI]
<li> Major [MAJ]
<li> Minor [MIN]
<li> Indeterminate [IND]
<li> Warning [WAR]
<li> Pending [PEN]
<li> Clear [CLE]
</ul>*/
private String name;
private int number;
private AlarmState(String nm, int n) {
name = nm;
number = n;
}
private AlarmState(int n) {
name = alarmState[n].toString();
number = n;
}
public String toString() { return name; }
public final static AlarmState
CRI = new AlarmState("Critical",0),
MAJ = new AlarmState("Major",1),
MIN = new AlarmState("Minor",2),
IND = new AlarmState("Indeterminate",3),
WAR = new AlarmState("Warning",4),
CLE = new AlarmState("Clear",5),
PEN = new AlarmState("Pending",6);
public final static AlarmState[] alarmState = {
CRI, MAJ, MIN, IND, WAR, CLE, PEN
};
public int intValue() {
return(number);
}
/*
public static void main(String[] args) {
AlarmState m = AlarmState.CRI;
System.out.println(m);
m = AlarmState.alarmState[5];
System.out.println(m);
System.out.println(m == AlarmState.CLE);
System.out.println(m.equals(AlarmState.PEN));
}
*/
public void lowerState(){
/** Reduces the severity of an alarm. Does not do anything
for states: Warning, Clear and Pending */
int i;
if(name.compareTo("Warning")!=0&&name.compareTo("Clear")!=0&&
name.compareTo("Pending")!=0){
number = number - 1;
name = alarmState[number-1].toString();
}
}
public void higherState(){
/** Raises the severity of the alarm by one. Does not do anything
for states Pending, Clear and Critical */
int i;
if(name.compareTo("Critical")!=0&&name.compareTo("Clear")!=0&&
name.compareTo("Pending")!=0){
number = number + 1;
name = alarmState[number+1].toString();
}
}
}
A.4 AlarmsTable.java
The class for displaying a table of alarms.
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
/** For displaying tables of alarms. This uses
* the swing functions. There is a jar file
* that can be downloaded for using swing in java
* implementations earlier than java2.
* @author Veronica Clark
* @see Alarm
* @see AlarmState
* @since jdk1.2
*/
public class AlarmsTable extends JFrame {
private boolean DEBUG = true;
public AlarmsTable(AlarmSet theAlarms) {
//int alarmNumber = theAlarms.getNumber();
super("Alarm Set #"+theAlarms.getNumber());
Object[][] data = theAlarms.makeArray();
String[] columnNames = {"Object ID",
"Severity",
"Description"};
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
if (DEBUG) {
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
printDebugData(table);
}
});
}
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this window.
getContentPane().add(scrollPane, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void printDebugData(JTable table) {
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel();
System.out.println("Value of data: ");
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + model.getValueAt(i, j));
}
System.out.println();
}
System.out.println("--------------------------");
}
/*
public static void main(String[] args) {
SimpleTableDemo frame = new SimpleTableDemo();
frame.pack();
frame.setVisible(true);
}
*/
}