View Javadoc
1   /**
2    * Copyright (C) 2010-14 pvmanager developers. See COPYRIGHT.TXT
3    * All rights reserved. Use is subject to license terms. See LICENSE.TXT
4    */
5   package org.epics.vtype;
6   
7   import java.util.AbstractList;
8   import java.util.List;
9   
10  /**
11   * Severity of an alarm.
12   * <p>
13   * Values are provided in order of increasing severity, so you can rely on
14   * {@link #ordinal() } and {@link #compareTo(java.lang.Enum) } for comparison
15   * and ordering. In case additional AlarmSeverity values are added in the future,
16   * which is very unlikely, they will be added in order as well.
17   * <p>
18   * One should always bear in mind that the alarm severity of the IOC is set on
19   * the record, and not on the individual channel. If  one is not connecting
20   * to the value field of the record, the severity does not reflect the state
21   * of that field.
22   * <p>
23   * For example: a record may be INVALID meaning that the value of the field
24   * was not correctly read by the hardware; if one connects to the display limit
25   * field, the value of that field will still be ok, but the alarm severity (if
26   * requested) would say INVALID.
27   *
28   * @author carcassi
29   */
30  public enum AlarmSeverity {
31      
32      /**
33       * The current value is valid, and there is no alarm.
34       */
35      NONE,
36      
37      /**
38       * There is a minor problem with the value: the exact meaning is defined
39       * by the channel, but typically this means that the value is valid and is
40       * outside some working range.
41       */
42      MINOR,
43  
44      /**
45       * There is a major problem with the value: the exact meaning is defined
46       * by the channel, but typically this means that the value is valid and is
47       * outside some working range.
48       */
49      MAJOR,
50      
51      /**
52       * There is a major problem with the value itself: the exact meaning is defined
53       * by the channel, but typically this means that the returned value is not a
54       * real representation of the actual value.
55       */
56      INVALID,
57  
58      /**
59       * The channel cannot be read and its state is undefined: the exact meaning is defined
60       * by the channel, but typically this means that the client is either disconnected
61       * or connected with no read access. The value is either stale or invalid.
62       */
63      UNDEFINED;
64      
65      private static final List<String> labels = new AbstractList<String>() {
66          @Override
67          public String get(int index) {
68              return AlarmSeverity.values()[index].name();
69          }
70  
71          @Override
72          public int size() {
73              return AlarmSeverity.values().length;
74          }
75      };
76      
77      /**
78       * Returns the list of labels for the severity.
79       * <p>
80       * This is useful to create VEnums containing severities.
81       * 
82       * @return an immutable list with the labels
83       */
84      public static List<String> labels() {
85          return labels;
86      }
87  }