📄 eventimpl.java
字号:
public String toString() { String s = "e="+eventqid+" d="+deviceid+" n="+netboxid+" t="+eventtypeid+" s="+getStateSql(); boolean first=true; for (Iterator i = varMap.entrySet().iterator(); i.hasNext();) { Map.Entry me = (Map.Entry)i.next(); String var = (String)me.getKey(); String val = (String)me.getValue(); //if (first) { first = false; s += "\n"; } s += " ["+var+"="+val+"]"; } return s; }}class AlertmsgParser{ private static File alertmsgFile; private static long alertmsgLastModified; private static Map eventtypeidMap; public static boolean setAlertmsgFile(String s) throws ParseException { File f = new File(s); if (!f.exists()) { Log.w("ALERTMSG_PARSER", "SET_ALERTMSG_FILE", "File " + f + " does not exist!"); return false; } if (alertmsgFile != null && alertmsgFile.equals(f)) return true; alertmsgFile = f; alertmsgLastModified = 0; try { parseAlertmsg(); } catch (IOException e) { Log.w("ALERTMSG_PARSER", "SET_ALERTMSG_FILE", "IOException when parsing alertmsg file: " + e.getMessage()); } return true; } public static Iterator formatMsgs(String eventtypeid, String alerttype, int state, Map varMap) { Log.setDefaultSubsystem("ALTERTMSG_PARSER"); List l = new ArrayList(); try { parseAlertmsg(); if (eventtypeidMap == null) { // This happens when alertmsgFile does not exist return l.iterator(); } } catch (ParseException e) { Log.w("FORMAT_MSGS", "ParseException when parsing alertmsg file: " + e.getMessage()); return l.iterator(); } catch (IOException e) { Log.w("FORMAT_MSGS", "IOException when parsing alertmsg file: " + e.getMessage()); return l.iterator(); } Map m = (Map)eventtypeidMap.get(eventtypeid); if (m == null) { Log.d("FORMAT_MSGS", "Eventtypeid: " + eventtypeid + " not found in alertmsg file!"); return l.iterator(); } if (alerttype == null) alerttype = ""; List msgList = (List)m.get(alerttype); if (msgList == null) { String s = state==Event.STATE_NONE?"":state==Event.STATE_START?"Start":"End"; Log.d("FORMAT_MSGS", "Alerttype: " + alerttype + " not found in alertmsg file! Trying default"+s); msgList = (List)m.get("default"+s); if (msgList == null) { Log.d("FORMAT_MSGS", "Alerttype: default"+s+" not found in alertmsg file! Giving up. " + m); return l.iterator(); } } for (Iterator it=msgList.iterator(); it.hasNext();) { String[] s = (String[])it.next(); StringBuffer msg = new StringBuffer(s[2]); int i = 0; while ( (i=msg.indexOf("$", i)) != -1) { if (++i == msg.length()) break; int e = i; while (e < msg.length() && (Character.isLetterOrDigit(msg.charAt(e)) || msg.charAt(e) == ';' || msg.charAt(e) == '_') ) e++; String var = msg.substring(i, e).trim(); if (var.length() == 0) continue; if (varMap.containsKey(var) || varMap.containsKey(var.toLowerCase())) { String val = (String)varMap.get(var); if (val == null) val = (String)varMap.get(var.toLowerCase()); if (val == null) val = "[empty]"; msg.replace(i-1, e, val); } else { System.err.println("Could not expand " + var + ", vars: " + varMap + ", msg: " + msg); } } l.add(new String[] { s[0], s[1], msg.toString() }); } return l.iterator(); } private static final int EXP_EVENTTYPEID = 0; private static final int EXP_ALERTTYPE = 1; private static final int EXP_MEDIA = 2; private static final int EXP_LANG = 3; private static final int EXP_MSG = 4; private static void parseAlertmsg() throws ParseException, IOException { if (alertmsgFile == null || alertmsgFile.lastModified() == alertmsgLastModified) return; alertmsgLastModified = alertmsgFile.lastModified(); BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(alertmsgFile), "UTF-8")); int lineno = 0; int state = EXP_EVENTTYPEID; boolean exp_begin_block = false; boolean allow_colon_block = false; boolean is_colon_block = false; Map etMap = new HashMap(); Map atMap = null; List msgList = null; String eventtypeid = null; String alerttype = null; String media = null; String lang = null; while (in.ready()) { lineno++; String line = in.readLine(); String lineT = line.trim(); if (lineT.length() == 0) continue; switch (lineT.charAt(0)) { case ';': case '#': break; default: StringTokenizer st = new StringTokenizer(line); while (st.hasMoreTokens()) { String t = (state == EXP_MSG ? st.nextToken("") : st.nextToken()); if (exp_begin_block) { if (allow_colon_block) { allow_colon_block = false; if (t.equals(":")) is_colon_block = true; } if (!is_colon_block && !t.equals("{")) { throw new ParseException("Parse error on line " + lineno + ": Expected {, got " + t, 0); } exp_begin_block = false; state++; continue; } if (t.equals("}")) { state--; continue; } switch (state) { case EXP_EVENTTYPEID: eventtypeid = t; if ( (atMap=(Map)etMap.get(t)) == null) etMap.put(t, atMap = new HashMap()); exp_begin_block = true; break; case EXP_ALERTTYPE: alerttype = t; if ( (msgList=(List)atMap.get(t)) == null) atMap.put(t, msgList = new ArrayList()); exp_begin_block = true; break; case EXP_MEDIA: media = t; exp_begin_block = true; break; case EXP_LANG: lang = t; if (lang.endsWith(":")) { lang = lang.substring(0, lang.length()-1); state++; is_colon_block = true; continue; } else { exp_begin_block = true; allow_colon_block = true; } break; case EXP_MSG: String msg; if (is_colon_block) { msg = t.trim(); is_colon_block = false; } else { List l = new ArrayList(); int margin=Integer.MAX_VALUE; { int m = line.lastIndexOf(t); StringBuffer sb = new StringBuffer(); for (int i=0; i < m; i++) sb.append(" "); sb.append(t); t = sb.toString(); } int i; while ( (i=t.indexOf("}")) == -1) { l.add(t); margin = Math.min(blanksAtStart(t), margin); t = in.readLine(); lineno++; } String s = t.substring(0, i); l.add(s); margin = Math.min(blanksAtStart(s), margin); st = new StringTokenizer(t.length()>i+1 ? t.substring(i+1, t.length()) : ""); StringBuffer sb = new StringBuffer(); for (Iterator it = l.iterator(); it.hasNext();) { s = (String)it.next(); sb.append((s.length() > margin ? s.substring(margin, s.length()) : "")+"\n"); } sb.deleteCharAt(sb.length()-1); if (sb.length() > 0 && sb.charAt(sb.length()-1) == '\n') { sb.deleteCharAt(sb.length()-1); } msg = sb.toString(); } state--; Log.d("PARSE_ALERTMSG", "Eventtypeid: " + eventtypeid + " Alerttype: " + alerttype + " Media: " + media + " Lang: " + lang + " Msg:"); Log.d("PARSE_ALERTMSG", msg); Log.d("PARSE_ALERTMSG", "---"); msgList.add(new String[] { media, lang, msg } ); break; } } } } if (state != 0) { throw new ParseException("Parse error on line " + lineno + ": " + state + " unterminated blocks.", 0); } eventtypeidMap = etMap; } private static int blanksAtStart(String s) { String ss = s.trim(); if (ss.length() == 0) return Integer.MAX_VALUE; return s.indexOf(ss); } /* private static void outd(Object o) { System.out.print(o); } private static void outld() { System.out.println(); } private static void outld(Object o) { System.out.println(o); } private static void err(Object o) { System.err.print(o); } private static void errl(Object o) { System.err.println(o); } */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -