KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > freecs > external > UserlistRequestHandler


1 package freecs.external;
2
3 import freecs.content.ContentContainer;
4 import freecs.core.Group;
5 import freecs.core.GroupManager;
6 import freecs.core.User;
7 import freecs.core.UserManager;
8 import freecs.interfaces.IUserStates;
9 import freecs.interfaces.IGroupState;
10 import freecs.interfaces.IRequest;
11 import freecs.util.HtmlEncoder;
12
13 public class UserlistRequestHandler extends AbstractRequestHandler {
14     
15     public UserlistRequestHandler(String JavaDoc handlerName) {
16         super(handlerName);
17     }
18
19
20     /**
21      * class rendering who's online lists
22      */

23     
24     public void handle(IRequest req, ContentContainer c) throws AccessForbiddenException {
25         checkAccessIp(req, c);
26         
27         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
28         String JavaDoc show = req.getValue("show");
29         String JavaDoc as = req.getValue("as");
30         boolean xml = ("xml".equalsIgnoreCase(as)) ? true : false;
31         
32         if (xml) {
33             c.setContentType("text/xml");
34             sb.append (xmlHeader);
35         } else {
36             c.setContentType("text/plain");
37         }
38
39         if ("allusers".equalsIgnoreCase(show)) {
40             Group[] groups = GroupManager.mgr.currentGroupList();
41             for (int i=0; i<groups.length; i++) {
42                 if (xml) {
43                     renderGroupAsXml(sb, groups[i]);
44                     renderGroupUsersAsXml(sb, groups[i]);
45                     sb.append ("</room>\n");
46                 } else {
47                     renderGroupAsText(sb, groups[i]);
48                     renderGroupUsersAsText(sb, groups[i]);
49                     sb.append ("\n");
50                 }
51             }
52         } else if ("allgroups".equalsIgnoreCase(show)) {
53             Group[] groups = GroupManager.mgr.currentGroupList();
54             for (int i=0; i<groups.length; i++) {
55                 if (xml) {
56                     renderGroupAsXml(sb, groups[i]);
57                     sb.append ("</room>\n");
58                 } else {
59                     renderGroupAsText(sb, groups[i]);
60                     sb.append("\n");
61                 }
62             }
63         } else if (req.getValue("group") != null) {
64             Group g = GroupManager.mgr.getGroup(req.getValue("group"));
65             if (g != null && xml) {
66                 renderGroupAsXml(sb, g);
67                 renderGroupUsersAsXml(sb, g);
68                 sb.append ("</room>");
69             } else if (g != null) {
70                 renderGroupAsText(sb, g);
71                 renderGroupUsersAsText(sb, g);
72             }
73         } else if (req.getValue("user") != null) {
74             User u = UserManager.mgr.getUserByName(req.getValue("user"));
75             if (u != null && xml) {
76                 renderUserAsXml(sb, u);
77             } else if (u != null) {
78                 renderUserAsText(sb, u);
79             }
80         } else {
81             int activeUsers = UserManager.mgr.getActiveUserCount();
82             int openGroups = GroupManager.mgr.openGroupsCount();
83             if (xml) {
84                 sb.append ("<users>");
85                 sb.append (activeUsers);
86                 sb.append ("</users>\n");
87                 sb.append ("<rooms>");
88                 sb.append (openGroups);
89                 sb.append ("</rooms>\n");
90             } else {
91                 sb.append (activeUsers);
92                 sb.append ("\n");
93                 sb.append (openGroups);
94                 sb.append ("\n");
95             }
96         }
97         if (xml) {
98             sb.append (xmlFooter);
99         }
100         c.wrap(sb.toString());
101     }
102     
103     
104     private void renderGroupAsText(StringBuffer JavaDoc sb, Group g) {
105         if (g.hasState(IGroupState.OPEN)) {
106             sb.append("open: ");
107         } else {
108             sb.append("closed: ");
109         }
110         sb.append (g.getRawName());
111         sb.append ("\n");
112         String JavaDoc theme = g.getTheme();
113         if (theme != null && !"".equals(theme.trim())) {
114             sb.append ("theme: " + theme);
115             sb.append ("\n");
116         }
117         
118     }
119     
120     private void renderGroupAsXml(StringBuffer JavaDoc sb, Group g) {
121         sb.append ("<room name=\"");
122         HtmlEncoder.encodeXml(g.getRawName(), sb);
123         sb.append ("\"");
124         sb.append (" theme=\"");
125         if (g.getTheme() != null) {
126             HtmlEncoder.encodeXml(g.getTheme(), sb);
127         }
128         sb.append ("\"");
129         sb.append(" open=\"");
130         sb.append (g.hasState(IGroupState.OPEN));
131         sb.append ("\">");
132     }
133
134     private void renderUserAsText(StringBuffer JavaDoc sb, User u) {
135         sb.append (u.getName());
136         if (u.hasRole(IUserStates.ROLE_VIP)) {
137             sb.append (" (vip) ");
138         } else if (u.hasRole(IUserStates.ROLE_GOD)) {
139             sb.append (" (admin) ");
140         } else if (u.getGroup().usrIsSu(u)) {
141             sb.append (" (su) ");
142         } else {
143             sb.append (" (user) ");
144         }
145         sb.append (u.getChattime());
146         sb.append (" ");
147         sb.append (u.getGroup().getRawName());
148         sb.append (" ");
149         if (u.isAway()) {
150             sb.append ("away(");
151             sb.append (u.getAwayMessage());
152             sb.append (")");
153         }
154         sb.append ("\n");
155     }
156     
157     private void renderUserAsXml(StringBuffer JavaDoc sb, User u) {
158         sb.append ("<user name=\"");
159         HtmlEncoder.encodeXml(u.getName(), sb);
160         sb.append ("\" id=\"");
161         sb.append (u.getID());
162         sb.append ("\" roomname=\"");
163         HtmlEncoder.encodeXml(u.getGroup().getRawName(), sb);
164         sb.append ("\" lastActive=\"");
165         sb.append (u.lastActive());
166         sb.append ("\" away=\"");
167         sb.append (u.isAway());
168         if (u.isAway()) {
169             sb.append ("\" awaymessage=\"");
170             HtmlEncoder.encodeXml(u.getAwayMessage(), sb);
171         }
172         sb.append ("\" chattime=\"");
173         sb.append (u.getChattime());
174         sb.append ("\" punished=\"");
175         sb.append (u.isPunished());
176         if (u.hasRole(IUserStates.ROLE_VIP)) {
177             sb.append ("\" vip=\"true");
178         } else if (u.hasRole(IUserStates.ROLE_GOD)) {
179             sb.append ("\" admin=\"true");
180         } else if (u.getGroup().usrIsSu(u)) {
181             sb.append ("\" superuser=\"true");
182         }
183         if (u.getGroup() != null && u.getGroup().hasState(IGroupState.MODERATED)) {
184             if (u.hasRight(IUserStates.IS_GUEST)) {
185                 sb.append ("\" guest=\"true");
186             }
187             if (u.hasRight(IUserStates.IS_MODERATOR)) {
188                 sb.append ("\" moderator=\"true");
189             }
190         }
191         sb.append ("\" color=\"");
192         sb.append (u.getColCode());
193         sb.append ("\" />\n");
194     }
195     
196     private void renderGroupUsersAsText(StringBuffer JavaDoc sb, Group g) {
197         User[] users = g.getUserArray();
198         for (int i=0; i<users.length; i++) {
199             renderUserAsText(sb, users[i]);
200         }
201     }
202     
203     
204     private void renderGroupUsersAsXml(StringBuffer JavaDoc sb, Group g) {
205         User[] users = g.getUserArray();
206         for (int i=0; i<users.length; i++) {
207             renderUserAsXml(sb, users[i]);
208         }
209     }
210     
211     public static String JavaDoc xmlHeader = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<lxml>\n";
212     public static String JavaDoc xmlFooter = "\n</lxml>\n\n";
213     
214 }
215
Popular Tags