Merge "Add new exception class"
[holmes/common.git] / holmes-actions / src / main / java / org / openo / holmes / common / api / stat / Alarm.java
1 /**\r
2  * Copyright 2017 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.openo.holmes.common.api.stat;\r
18 \r
19 import java.io.Serializable;\r
20 import java.io.StringReader;\r
21 import java.lang.reflect.Field;\r
22 import java.util.Date;\r
23 import java.util.HashMap;\r
24 import java.util.HashSet;\r
25 import java.util.List;\r
26 import java.util.Map;\r
27 import java.util.Set;\r
28 import lombok.Getter;\r
29 import lombok.Setter;\r
30 import org.jdom.Attribute;\r
31 import org.jdom.Element;\r
32 import org.jdom.input.SAXBuilder;\r
33 import org.jdom.output.XMLOutputter;\r
34 \r
35 \r
36 @Getter\r
37 @Setter\r
38 public class Alarm implements AplusData, Cloneable, Serializable {\r
39 \r
40     public static final byte EVENT_CLEARED_ALARM = 3;\r
41 \r
42     public static final byte EVENT_CHANGED = 2;\r
43 \r
44     public static final byte EVENT_CLEARED = 1;\r
45 \r
46     public static final byte EVENT_RAISED = 0;\r
47 \r
48     private static final long serialVersionUID = 4520003737132012000L;\r
49 \r
50     private byte eventType = EVENT_RAISED;\r
51 \r
52     private long id = 0L;\r
53 \r
54     private String alarmKey = "";\r
55 \r
56     private String network = "";\r
57 \r
58     private String neType = "";\r
59 \r
60     private String equipType = "";\r
61 \r
62     private String position1 = "";\r
63 \r
64     private String subPosition1 = null;\r
65 \r
66     private String position2 = null;\r
67 \r
68     private String subPosition2 = null;\r
69 \r
70     private byte severity = -1;\r
71 \r
72     private byte alarmType = -1;\r
73 \r
74     private long probableCause = -1;\r
75 \r
76     private String specificProblem = null;\r
77 \r
78     private String additionalText = null;\r
79 \r
80     private Date raisedTime = new Date();\r
81 \r
82     private Date raisedServerTime = new Date();\r
83 \r
84     private Date clearedTime = null;\r
85 \r
86     private final Date clearedServerTime = null;\r
87 \r
88     private String region = null;\r
89 \r
90     private String site = null;\r
91 \r
92     private String aid = null;\r
93 \r
94     private short systemType = -1;\r
95 \r
96     private boolean rootAlarmFlag = false;\r
97 \r
98     private int linkId = -1;\r
99 \r
100     private int nodeIdx = -1;\r
101 \r
102     private Set<Integer> linkIds = new HashSet<Integer>();\r
103 \r
104     private HashMap<String, Integer> priorityMap = new HashMap<String, Integer>();\r
105 \r
106     private HashMap<String, Integer> rootAlarmTypeMap = new HashMap<String, Integer>();\r
107 \r
108     private int rootAlarmType = -1;\r
109 \r
110     private boolean keyAlarmFlag = false;\r
111 \r
112     private int keyAlarmType = -1;\r
113 \r
114     private int networkLevel = -1;\r
115 \r
116     private int linkType = -1;\r
117 \r
118     private int centerType;\r
119 \r
120     private final Map<Integer, Integer> linkIdNodeIdxMap = new HashMap<Integer, Integer>();\r
121 \r
122     public void addLinkIdNodeIdx(int linkId, int index) {\r
123         linkIdNodeIdxMap.put(linkId, index);\r
124     }\r
125 \r
126     /**\r
127      * Comparison of the location of different links: 999 the same link: the location of the node\r
128      * number less than otherIdIdx in the location of the number (in the otherIdIdx upstream):-1,\r
129      * the same link: the node position number is equal to the number of position in the otherIdIdx\r
130      * (in the same site otherIdIdx):0, the same link: the node location number is greater than the\r
131      * number of locations in otherIdIdx (otherIdIdx) with the site):1,\r
132      */\r
133     public int CompareLinkPosition(Map<Integer, Integer> otherIdIdx) {\r
134         Set<Integer> myIdSet = new HashSet<Integer>();\r
135         myIdSet.addAll(this.linkIdNodeIdxMap.keySet());\r
136         myIdSet.retainAll(otherIdIdx.keySet());\r
137 \r
138         if (myIdSet.isEmpty()) {\r
139             return 999;\r
140         }\r
141 \r
142         for (int tempLinkId : myIdSet) {\r
143             return this.linkIdNodeIdxMap.get(tempLinkId) - otherIdIdx.get(tempLinkId);\r
144         }\r
145         return 999;\r
146     }\r
147 \r
148     public Map<Integer, Integer> getLinkIdNodeIdx() {\r
149         return this.linkIdNodeIdxMap;\r
150     }\r
151 \r
152     public boolean containNode(int linkId, int index) {\r
153         if (linkIdNodeIdxMap.containsKey(linkId) && linkIdNodeIdxMap.get(linkId) == index) {\r
154             return true;\r
155         } else {\r
156             return false;\r
157         }\r
158     }\r
159 \r
160     @Override\r
161     public byte getDataType() {\r
162         return APLUS_EVENT;\r
163     }\r
164 \r
165     @Override\r
166     public String toString() {\r
167         final String nullStr = "<null>";\r
168 \r
169         Element el = new Element("Alarm");\r
170         el.setAttribute("id", String.valueOf(id));\r
171         el.setAttribute("aid", String.valueOf(aid));\r
172         el.setAttribute("alarmKey", String.valueOf(alarmKey));\r
173         el.setAttribute("eventType", String.valueOf(eventType));\r
174         el.setAttribute("region", region == null ? nullStr : region);\r
175         el.setAttribute("site", site == null ? nullStr : site);\r
176         el.setAttribute("network", network);\r
177         el.setAttribute("neType", neType);\r
178         el.setAttribute("equipType", equipType);\r
179         el.setAttribute("position1", position1);\r
180         el.setAttribute("subPosition1", subPosition1 == null ? nullStr : subPosition1);\r
181         el.setAttribute("position2", position2 == null ? nullStr : position2);\r
182         el.setAttribute("subPosition2", subPosition2 == null ? nullStr : subPosition2);\r
183         el.setAttribute("severity", String.valueOf(severity));\r
184         el.setAttribute("alarmType", String.valueOf(alarmType));\r
185         el.setAttribute("probableCause", String.valueOf(probableCause));\r
186         el.setAttribute("specificProblem", specificProblem == null ? nullStr : specificProblem);\r
187         el.setAttribute("additionalText", additionalText == null ? nullStr : additionalText);\r
188         el.setAttribute("raisedTime", String.valueOf(raisedTime.getTime()));\r
189         el.setAttribute("raisedServerTime", String.valueOf(raisedServerTime.getTime()));\r
190         if (clearedTime != null) {\r
191             el.setAttribute("clearedTime", String.valueOf(clearedTime.getTime()));\r
192         }\r
193         if (clearedServerTime != null) {\r
194             el.setAttribute("clearedServerTime", String.valueOf(clearedServerTime.getTime()));\r
195         }\r
196 \r
197         return new XMLOutputter().outputString(el);\r
198     }\r
199 \r
200     public static Alarm valueOf(String xmlString) {\r
201         Element element = null;\r
202         try {\r
203             StringReader sb = new StringReader(xmlString);\r
204             element = new SAXBuilder().build(sb).getRootElement();\r
205             sb.close();\r
206         } catch (Exception e) {\r
207             throw new RuntimeException(e);\r
208         }\r
209 \r
210         Alarm alarm = new Alarm();\r
211         @SuppressWarnings("unchecked")\r
212         List<Attribute> list = element.getAttributes();\r
213         for (Attribute attr : list) {\r
214             String attrName = attr.getName();\r
215             try {\r
216                 Field field = Alarm.class.getDeclaredField(attrName);\r
217                 if (!attrName.endsWith("Time")) {\r
218                     String type = field.getType().getSimpleName();\r
219                     if (type.equals("byte")) {\r
220                         field.set(alarm, Byte.parseByte(attr.getValue()));\r
221                     } else if (type.equals("long")) {\r
222                         field.set(alarm, Long.parseLong(attr.getValue()));\r
223                     } else if (type.equals("String")) {\r
224                         field.set(alarm, attr.getValue());\r
225                     } else {\r
226                         throw new RuntimeException("unknow attr type: " + type.toString());\r
227                     }\r
228                 } else {\r
229                     Date date = new Date();\r
230                     date.setTime(Long.parseLong(attr.getValue()));\r
231                     field.set(alarm, date);\r
232                 }\r
233             } catch (Exception e) {\r
234                 throw new RuntimeException(e);\r
235             }\r
236         }\r
237 \r
238         return alarm;\r
239     }\r
240 \r
241     @Override\r
242     public int hashCode() {\r
243         return this.getAlarmKey().hashCode();\r
244     }\r
245 \r
246     @Override\r
247     public boolean equals(Object arg0) {\r
248         if (arg0 == null) {\r
249             return false;\r
250         }\r
251         return this.alarmKey.equals(((Alarm) arg0).getAlarmKey());\r
252     }\r
253 \r
254     @Override\r
255     public Object clone() throws CloneNotSupportedException {\r
256         super.clone();\r
257 \r
258         Alarm alarm = new Alarm();\r
259 \r
260         alarm.setEventType(this.getEventType());\r
261 \r
262         alarm.setAid(this.getAid());\r
263         alarm.setId(this.getId());\r
264         alarm.setAlarmKey(this.getAlarmKey());\r
265 \r
266         alarm.setNetwork(this.getNetwork());\r
267         alarm.setEquipType(this.getEquipType());\r
268         alarm.setNeType(this.getNeType());\r
269         alarm.setPosition1(this.getPosition1());\r
270         alarm.setSubPosition1(this.getSubPosition1());\r
271         alarm.setPosition2(this.getPosition2());\r
272         alarm.setSubPosition2(this.getSubPosition2());\r
273         alarm.setRegion(this.getRegion());\r
274         alarm.setSite(this.getSite());\r
275 \r
276         alarm.setSeverity(this.getSeverity());\r
277         alarm.setAlarmType(this.getAlarmType());\r
278         alarm.setSystemType(this.getSystemType());\r
279         alarm.setSpecificProblem(this.getSpecificProblem());\r
280         alarm.setAdditionalText(this.getAdditionalText());\r
281         alarm.setProbableCause(this.getProbableCause());\r
282 \r
283         alarm.setRaisedTime(this.getRaisedTime());\r
284         alarm.setRaisedServerTime(this.getRaisedServerTime());\r
285         alarm.setClearedTime(this.getClearedTime());\r
286 \r
287         return alarm;\r
288     }\r
289 \r
290     @Override\r
291     public String getObjectId() {\r
292         return String.valueOf(id);\r
293     }\r
294 \r
295     public void addLinkIds(int linkId) {\r
296         linkIds.add(linkId);\r
297     }\r
298 \r
299 \r
300     public boolean containsPriority(String ruleId) {\r
301         if (priorityMap.keySet().contains(ruleId)) {\r
302             return true;\r
303         }\r
304         return false;\r
305     }\r
306 \r
307     public int getPriority(String ruleId) {\r
308         Integer priority = this.priorityMap.get(ruleId);\r
309         if (priority == null) {\r
310             priority = 0;\r
311         }\r
312         return priority;\r
313     }\r
314 \r
315     public int getRootAlarmType(String ruleId) {\r
316         Integer rootAlarmType = this.rootAlarmTypeMap.get(ruleId);\r
317         if (rootAlarmType == null) {\r
318             rootAlarmType = -1;\r
319         }\r
320         return rootAlarmType;\r
321     }\r
322 \r
323 }\r