KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > rero > bridges > event > FilterChatListener


1 package rero.bridges.event;
2
3 import java.util.regex.*;
4 import java.util.*;
5 import rero.util.*;
6 import sleep.engine.atoms.*;
7 import sleep.runtime.*;
8
9 import rero.script.*;
10
11 public class FilterChatListener extends EventChatListener
12 {
13    protected ScriptEnvironment env;
14    protected String JavaDoc[] filter;
15    protected String JavaDoc event;
16    protected CodeSnippet code;
17    protected int isPublic; // 0 we don't care, 1 public only, 2 private only
18

19    private static final Pattern filterPattern = Pattern.compile("(.*?) (.*?) (.*)");
20
21    public FilterChatListener(ScriptEnvironment _env, String JavaDoc _event, String JavaDoc _filter, CodeSnippet _code)
22    {
23       env = _env;
24       event = _event.toUpperCase();
25
26       if (event.equals("PUBLIC"))
27       {
28          isPublic = 1;
29          event = "PRIVMSG";
30       }
31       else if (event.equals("PUBLIC_ACTION"))
32       {
33          isPublic = 1;
34          event = "ACTION";
35       }
36       else if (event.equals("PRIVATE_ACTION"))
37       {
38          isPublic = 2;
39          event = "ACTION";
40       }
41       else if (event.equals("MSG"))
42       {
43          isPublic = 2;
44          event = "MSG";
45       }
46       else if (event.length() > 6 && event.substring(0, 5).equals("REPL_"))
47       {
48          isPublic = 0;
49          event = event.substring(5, event.length());
50       }
51       else
52       {
53          isPublic = 0;
54       }
55
56       code = _code;
57
58       //
59
// evaluate the specified filter and then split up the result into something we can use...
60
//
61
filter = new String JavaDoc[3];
62       _filter = (env.evaluateExpression(_filter) + "");
63
64       Matcher matcher = filterPattern.matcher(_filter.toUpperCase());
65
66       if (matcher.matches())
67       {
68          filter[0] = matcher.group(1);
69          filter[1] = matcher.group(2);
70          filter[2] = matcher.group(3);
71          addListener(_code);
72       }
73       else
74       {
75          _env.getScriptInstance().fireWarning("Invalid format for event " + _event + " filter: " + _filter, _code.getLineNumber());
76       }
77    }
78
79    private boolean isMatch(HashMap eventDescription)
80    {
81       String JavaDoc target, parms, from;
82       target = (eventDescription.get("$target") + "").toUpperCase();
83       from = (eventDescription.get("$source") + "").toUpperCase();
84       parms = (eventDescription.get("$parms") + "").toUpperCase();
85
86       if (target.equals("")) { target = "<none>"; }
87       if (from.equals("")) { target = "<none>"; }
88
89       boolean check = true;
90
91       if (isPublic > 0 && ClientUtils.isChannel(target))
92       {
93          check = isPublic == 1;
94       }
95
96       return check && StringUtils.iswm(filter[0], from) &&
97                       StringUtils.iswm(filter[1], target) &&
98                       StringUtils.iswm(filter[2], parms);
99    }
100
101    public boolean isChatEvent(String JavaDoc eventId, HashMap eventDescription)
102    {
103       if (!code.isValid())
104       {
105          return false;
106       }
107
108       return (eventId.toUpperCase().equals(event) && isMatch(eventDescription));
109    }
110 }
111
Popular Tags