View Javadoc

1   package com.sri.emo.wizard.wizardgateway;
2   
3   import com.jcorporate.expresso.core.controller.*;
4   import com.jcorporate.expresso.core.db.DBException;
5   import com.sri.common.controller.StateHandler;
6   import com.sri.common.dbobj.ObjectNotFoundException;
7   import com.sri.emo.dbobj.WizDefinition;
8   import com.sri.emo.wizard.IWizardManager;
9   import com.sri.emo.wizard.WizDefinitionRepository;
10  import com.sri.emo.wizard.expressoimpl.WizardController;
11  import org.apache.log4j.Logger;
12  
13  /***
14   * Edits a wizard.  In reality it queries the Wizard Definition and redirects
15   * to the appropriate editing controller as specified in the definition.
16   *
17   * @author Michael Rimov
18   */
19  public class EditWizard extends WizardGatewayHandler implements StateHandler {
20  
21      /***
22       * Name of the State for which this handler deals with.
23       */
24      public static final String STATE_NAME = "editWizard";
25  
26  
27      /***
28       * Friendly description of this handler.
29       */
30      public static final String STATE_DESCRIPTION = "Edit A Wizard";
31  
32  
33      /***
34       * Constructs this particular state handler.
35       *
36       * @param handlerOwner Controller the controller that is the parent of this
37       *                     state handler.
38       * @param myRepository WizDefinitionRepository the repository to use
39       *                     for data access methods.
40       */
41      public EditWizard(final Controller handlerOwner, final WizDefinitionRepository myRepository) {
42          super(handlerOwner, myRepository);
43      }
44  
45  
46      /***
47       * Called to handle the request.
48       *
49       * @param request  ControllerRequest The Function's ControllerRequest
50       *                 object.
51       * @param response ControllerResponse The Function's ControllerResponse
52       *                 object.
53       * @throws DBException         upon underlying database exception error.
54       * @throws ControllerException upon underlying ControllerException error.
55       */
56      public void handleRequest(final ExpressoRequest request, final ExpressoResponse response) throws DBException,
57              ControllerException {
58          int id = Integer.parseInt(request.getParameter(WizardController.WIZ_PARAMETER_ID));
59  
60          WizDefinition definition = null;
61          try {
62              definition = getRepository().findById(id);
63          } catch (ObjectNotFoundException ex) {
64              Logger.getLogger(EditWizard.class).error("Unable to locate wizard by id", ex);
65              response.addError(
66                      "Unable to locate wizard by id: " + id + " please contact your system administrator for assistance.");
67              Transition returnToPrompt = new Transition("prompt", "", this.getOwner().getClass(),
68                      ListWizards.STATE_NAME);
69              returnToPrompt.redirectTransition(request, response);
70              return;
71          }
72  
73  
74          Controller targetController = definition.getManagingController();
75          if (!(targetController instanceof IWizardManager)) {
76              throw new ControllerException("Class: " + targetController.getClass().getName()
77                      + " must implement interface: IWizardManager");
78          }
79  
80          ((IWizardManager) targetController).edit(definition, request, response);
81  
82      }
83  }