KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quikj > application > communicator > applications > webtalk > controller > FeatureManagementAction


1
2 package com.quikj.application.communicator.applications.webtalk.controller;
3
4 import javax.servlet.http.*;
5 import org.apache.struts.action.*;
6 import java.sql.*;
7
8 import com.quikj.application.communicator.admin.model.*;
9 import com.quikj.application.communicator.admin.controller.*;
10 import com.quikj.application.communicator.applications.webtalk.model.*;
11 import com.quikj.server.framework.*;
12 import com.quikj.client.raccess.*;
13
14 /**
15  *
16  * @author bhm
17  */

18 public class FeatureManagementAction extends Action
19 {
20     
21     /** Creates a new instance of CustomerManagementAction */
22     public FeatureManagementAction()
23     {
24     }
25     
26     public ActionForward execute(ActionMapping mapping,
27     ActionForm form,
28     HttpServletRequest request,
29     HttpServletResponse response)
30     {
31         FeatureManagementForm fform = (FeatureManagementForm)form;
32         
33         ActionErrors errors = new ActionErrors();
34         
35         Connection c = (Connection)request.getSession().getAttribute("connection");
36         if (c == null)
37         {
38             errors.add(ActionErrors.GLOBAL_ERROR,
39             new ActionError("error.not.logged.in"));
40             saveErrors(request, errors);
41             return mapping.findForward("logon");
42         }
43         
44         AccountElement element = (AccountElement)request.getSession().getAttribute("userInfo");
45         if (element.isAdminLevel() == false)
46         {
47             errors.add(ActionErrors.GLOBAL_ERROR,
48             new ActionError("error.insufficient.privilege"));
49             saveErrors(request, errors);
50             
51             return mapping.findForward("main_menu");
52         }
53         
54         if (fform.getSubmit().equals("Find") == true)
55         {
56             FeatureTable tbl = new FeatureTable();
57             tbl.setConnection(c);
58             
59             FeatureTableElement e = tbl.query(fform.getName());
60             
61             if (e == null)
62             {
63                 errors.add(ActionErrors.GLOBAL_ERROR,
64                 new ActionError("error.feature.not.exist"));
65                 
66                 if (tbl.getErrorMessage() != null)
67                 {
68                     AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
69                     "FeatureManagementAction.execute()/Find/by-"
70                     + element.getName()
71                     + ": "
72                     + tbl.getErrorMessage());
73                 }
74             }
75             else
76             {
77                 fform.setActive(e.isActive());
78                 fform.setClassName(e.getClassName());
79                 fform.setName(e.getName());
80                 fform.setParamsList(e.getParams());
81                 
82                 if (e.isActive() == true)
83                 {
84                     request.setAttribute("featureStatus", new String JavaDoc("Active"));
85                 }
86                 else
87                 {
88                     request.setAttribute("featureStatus", new String JavaDoc("Inactive"));
89                 }
90             }
91         }
92         else if (fform.getSubmit().equals("Modify") == true)
93         {
94             FeatureTable tbl = new FeatureTable();
95             tbl.setConnection(c);
96             
97             FeatureTableElement e = new FeatureTableElement();
98             
99             e.setClassName(fform.getClassName());
100             e.setName(fform.getName());
101             e.setParams(fform.getParamsList());
102             
103             if (tbl.modify(e) == false)
104             {
105                 if (tbl.getErrorMessage() == null)
106                 {
107                     errors.add(ActionErrors.GLOBAL_ERROR,
108                     new ActionError("error.feature.not.exist"));
109                 }
110                 else
111                 {
112                     errors.add(ActionErrors.GLOBAL_ERROR,
113                     new ActionError("error.db.failure"));
114                     
115                     AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
116                     "FeatureManagementAction.execute()/Modify/by-"
117                     + element.getName()
118                     + ": "
119                     + tbl.getErrorMessage());
120                 }
121             }
122             else
123             {
124                 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.USER_LOG,
125                 "User " + element.getName() + " modified feature " +
126                 fform.getName());
127                 
128                 ActionMessages messages = new ActionMessages();
129                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.modified"));
130                 
131                 // notify app server via RMI
132
if (tbl.isFeatureActive(e.getName()) == true)
133                 {
134                     if (notifyAppServer(request, e.getName(), "synch", errors, "Modify/by-" + element.getName()) == true)
135                     {
136                         messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.appserver.updated"));
137                     }
138                 }
139                 
140                 // forward control to the webtalk main menu
141
if (errors.isEmpty() == false)
142                 {
143                     saveErrors(request, errors);
144                 }
145                 saveMessages(request, messages);
146                 return mapping.findForward("webtalk_main_menu");
147             }
148         }
149         else if (fform.getSubmit().equals("Create") == true)
150         {
151             FeatureTable tbl = new FeatureTable();
152             tbl.setConnection(c);
153             
154             FeatureTableElement e = new FeatureTableElement();
155             
156             e.setActive(fform.isActive());
157             e.setClassName(fform.getClassName());
158             e.setName(fform.getName());
159             e.setParams(fform.getParamsList());
160             
161             if (tbl.create(e) == false)
162             {
163                 errors.add(ActionErrors.GLOBAL_ERROR,
164                 new ActionError("error.feature.create.failure"));
165                 
166                 AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
167                 "FeatureManagementAction.execute()/Create/by-"
168                 + element.getName()
169                 + ": "
170                 + tbl.getErrorMessage());
171             }
172             else
173             {
174                 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.USER_LOG,
175                 "User " + element.getName() + " created feature " +
176                 fform.getName());
177                 
178                 // forward control to the webtalk main menu
179
ActionMessages messages = new ActionMessages();
180                 messages.add(ActionMessages.GLOBAL_MESSAGE,
181                 new ActionMessage("message.feature.created"));
182                 saveMessages(request, messages);
183                 return mapping.findForward("webtalk_main_menu");
184             }
185         }
186         else if (fform.getSubmit().equals("Delete") == true)
187         {
188             FeatureTable tbl = new FeatureTable();
189             tbl.setConnection(c);
190             
191             if (tbl.delete(fform.getName()) == false)
192             {
193                 if (tbl.getErrorMessage() == null)
194                 {
195                     errors.add(ActionErrors.GLOBAL_ERROR,
196                     new ActionError("error.feature.not.exist"));
197                 }
198                 else
199                 {
200                     errors.add(ActionErrors.GLOBAL_ERROR,
201                     new ActionError("error.db.failure"));
202                     
203                     AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
204                     "FeatureManagementAction.execute()/Delete/by-"
205                     + element.getName()
206                     + ": "
207                     + tbl.getErrorMessage());
208                 }
209             }
210             else
211             {
212                 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.USER_LOG,
213                 "User " + element.getName() + " deleted feature " +
214                 fform.getName());
215                 
216                 ActionMessages messages = new ActionMessages();
217                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.deleted"));
218                 
219                 // notify app server via RMI
220
if (notifyAppServer(request, fform.getName(), "deactivate", errors, "Delete/by-" + element.getName()) == true)
221                 {
222                     messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.appserver.updated"));
223                 }
224                 
225                 // forward control to the webtalk main menu
226
if (errors.isEmpty() == false)
227                 {
228                     saveErrors(request, errors);
229                 }
230                 saveMessages(request, messages);
231                 return mapping.findForward("webtalk_main_menu");
232             }
233         }
234         else if (fform.getSubmit().equals("Activate") == true)
235         {
236             FeatureTable tbl = new FeatureTable();
237             tbl.setConnection(c);
238             
239             if (tbl.activate(fform.getName()) == false)
240             {
241                 if (tbl.getErrorMessage() == null)
242                 {
243                     errors.add(ActionErrors.GLOBAL_ERROR,
244                     new ActionError("error.feature.not.exist"));
245                 }
246                 else
247                 {
248                     errors.add(ActionErrors.GLOBAL_ERROR,
249                     new ActionError("error.db.failure"));
250                     
251                     AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
252                     "FeatureManagementAction.execute()/Activate/by-"
253                     + element.getName()
254                     + ": "
255                     + tbl.getErrorMessage());
256                 }
257             }
258             else
259             {
260                 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.USER_LOG,
261                 "User " + element.getName() + " activated feature " +
262                 fform.getName());
263                 
264                 ActionMessages messages = new ActionMessages();
265                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.modified"));
266                 
267                 // notify app server via RMI
268
if (notifyAppServer(request, fform.getName(), "activate", errors, "Activate/by-" + element.getName()) == true)
269                 {
270                     messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.appserver.updated"));
271                 }
272                 
273                 // forward control to the webtalk main menu
274
if (errors.isEmpty() == false)
275                 {
276                     saveErrors(request, errors);
277                 }
278                 saveMessages(request, messages);
279                 return mapping.findForward("webtalk_main_menu");
280             }
281         }
282         else if (fform.getSubmit().equals("Deactivate") == true)
283         {
284             FeatureTable tbl = new FeatureTable();
285             tbl.setConnection(c);
286             
287             if (tbl.deactivate(fform.getName()) == false)
288             {
289                 if (tbl.getErrorMessage() == null)
290                 {
291                     errors.add(ActionErrors.GLOBAL_ERROR,
292                     new ActionError("error.feature.not.exist"));
293                 }
294                 else
295                 {
296                     errors.add(ActionErrors.GLOBAL_ERROR,
297                     new ActionError("error.db.failure"));
298                     
299                     AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
300                     "FeatureManagementAction.execute()/Deactivate/by-"
301                     + element.getName()
302                     + ": "
303                     + tbl.getErrorMessage());
304                 }
305             }
306             else
307             {
308                 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.USER_LOG,
309                 "User " + element.getName() + " deactivated feature " +
310                 fform.getName());
311                 
312                 ActionMessages messages = new ActionMessages();
313                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.modified"));
314                 
315                 // notify app server via RMI
316
if (notifyAppServer(request, fform.getName(), "deactivate", errors, "Deactivate/by-" + element.getName()) == true)
317                 {
318                     messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.feature.appserver.updated"));
319                 }
320                 
321                 // forward control to the webtalk main menu
322
if (errors.isEmpty() == false)
323                 {
324                     saveErrors(request, errors);
325                 }
326                 saveMessages(request, messages);
327                 return mapping.findForward("webtalk_main_menu");
328             }
329         }
330         
331         if (errors.isEmpty() == false)
332         {
333             saveErrors(request, errors);
334         }
335         
336         // add related tasks to the navigation bar
337
WebTalkRelatedTasks menu = new WebTalkRelatedTasks();
338         menu.addLink(new LinkAttribute("Search users", "display_user_search"));
339         menu.addLink(new LinkAttribute("Administer users", "display_user_management"));
340         menu.addLink(new LinkAttribute("List all features", "list_features"));
341         request.setAttribute("menu", menu);
342         
343         return mapping.getInputForward();
344     }
345     
346     public static boolean notifyAppServer(HttpServletRequest request, String JavaDoc feature_name, String JavaDoc cmd, ActionErrors errors, String JavaDoc log_prefix)
347     {
348         RemoteAccessClient cl = (RemoteAccessClient)request.getSession().getServletContext().getAttribute("remoteAccess");
349         if (cl == null)
350         {
351             if (errors != null)
352             {
353                 errors.add(ActionErrors.GLOBAL_ERROR,
354                 new ActionError("error.rmi.error"));
355             }
356             
357             AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
358             "FeatureManagementAction.notifyAppServer()/"
359             + log_prefix
360             + ": Could not obtain RMI client object");
361             
362             return false;
363         }
364         
365         try
366         {
367             boolean result = cl.getRemoteAccess().setParam("com.quikj.application.web.talk.plugin.FeatureFactory",
368             "feature:" + feature_name, cmd);
369             if (result == false)
370             {
371                 if (errors != null)
372                 {
373                     errors.add(ActionErrors.GLOBAL_ERROR,
374                     new ActionError("error.rmi.feature.error"));
375                 }
376                 
377                 AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
378                 "FeatureManagementAction.notifyAppServer()/"
379                 + log_prefix
380                 + ": Operation " + cmd + " was not applied to feature " + feature_name + " at the application server");
381                 
382                 return false;
383             }
384         }
385         catch (Exception JavaDoc ex)
386         {
387             if (errors != null)
388             {
389                 errors.add(ActionErrors.GLOBAL_ERROR,
390                 new ActionError("error.rmi.error"));
391             }
392             
393             AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
394             "FeatureManagementAction.notifyAppServer()/"
395             + log_prefix + " Error - "
396             + ex.getClass().getName() + ": " + ex.getMessage());
397             
398             return false;
399         }
400         
401         return true;
402     }
403     
404 }
405
Popular Tags