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 18 public class FeatureManagementAction extends Action 19 { 20 21 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 ("Active")); 85 } 86 else 87 { 88 request.setAttribute("featureStatus", new String ("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 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 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 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 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 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 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 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 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 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 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 feature_name, String cmd, ActionErrors errors, String 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 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 |