1 package com.sri.emo.controller;
2
3 import com.jcorporate.expresso.core.controller.ControllerException;
4 import com.jcorporate.expresso.core.controller.ExpressoRequest;
5 import com.jcorporate.expresso.core.controller.ExpressoResponse;
6 import com.jcorporate.expresso.core.controller.Transition;
7 import com.jcorporate.expresso.core.db.DBException;
8 import com.sri.emo.dbobj.Node;
9 import com.sri.emo.wizard.Wizard;
10 import com.sri.emo.wizard.WizardException;
11 import com.sri.emo.wizard.WizardMementoConverter;
12 import com.sri.emo.wizard.WizardPage;
13 import com.sri.emo.wizard.completion.CustomPartHandlerPage;
14 import com.sri.emo.wizard.completion.EmoCompletionWizard;
15 import com.sri.emo.wizard.completion.RelationWizardPage;
16 import com.sri.emo.wizard.expressoimpl.WizardController;
17 import com.sri.emo.wizard.wizardgateway.ListWizards;
18 import com.sri.emo.wizard.wizardgateway.WizardGatewayController;
19 import org.apache.log4j.Logger;
20
21 import java.io.Serializable;
22
23 /***
24 * Controller that runs the completion controller.
25 *
26 * @author Michael Rimov
27 * @version 1.0
28 */
29 public class CompletionWizardAction extends WizardController {
30
31
32 /***
33 *
34 */
35 private static final long serialVersionUID = 1L;
36 public static final String PARAM_TARGET_ID = "targetId";
37
38 /***
39 * Default constructor -- no added state.s
40 */
41 public CompletionWizardAction() {
42 super();
43 }
44
45 /***
46 * Override to provide backlink to list wizards page in EMO.
47 *
48 * @return Transition.
49 */
50 protected Transition getCancelTransition() {
51 return new Transition("cancel", "cancel", WizardGatewayController.class, ListWizards.STATE_NAME);
52 }
53
54 /***
55 * Override of WizardController to provide for the unique capabilities
56 * and requirements of an ExpressoAwareWizardRepository as defined in
57 * the Schema.
58 *
59 * @param request The <code>ExpressoRequest</code>Object
60 * @return Wizard instance
61 * @throws com.sri.emo.wizard.WizardException
62 * upon
63 * wizard related construction error
64 * @throws com.jcorporate.expresso.core.controller.ControllerException
65 * upon
66 * parameter retrieval error.
67 */
68 protected Wizard newWizard(final ExpressoRequest request) throws WizardException, ControllerException {
69 EmoCompletionWizard theNewWizard = (EmoCompletionWizard) super.newWizard(request);
70 if (request.getParameter(PARAM_TARGET_ID) != null && request.getParameter(PARAM_TARGET_ID).length() > 0) {
71 theNewWizard.setTargetNodeId(request.getParameter(PARAM_TARGET_ID));
72 }
73
74 return theNewWizard;
75 }
76
77
78 /***
79 * <tt>Template Method</tt>. Retrieves/Constructs the WizardMementoConverter
80 * appropriate for the current run.
81 *
82 * @return WizardMementoConverter or null if none is defined.
83 */
84 protected WizardMementoConverter getMementoConverter() {
85 return (WizardMementoConverter) this.locate("CompletionMementoConverter");
86 }
87
88 /***
89 * For relation pages, this version extracts the entire request paramter
90 * map because the relation wizard needs all that nasty hard-to-read checkbox
91 * data. Otherwise, we hand it up to the default behavior.
92 *
93 * @param request ExpressoRequest
94 * @return Serializable may be null if the data is not found or
95 * incomplete.
96 */
97 protected Serializable extractPostedWizardData(ExpressoRequest request) {
98 try {
99 WizardPage currentPage = this.getCurrentPage(request, this.getCurrentWizard(request));
100 assert currentPage != null;
101
102 if (currentPage instanceof RelationWizardPage) {
103 return (Serializable) request.getAllParameters();
104 } else if (currentPage instanceof CustomPartHandlerPage) {
105 return (Serializable) request.getAllParameters();
106 } else {
107 return super.extractPostedWizardData(request);
108 }
109 } catch (ControllerException ex) {
110 Logger.getLogger(CompletionWizardAction.class).error(
111 "Error extracting wizard and page from requested session.", ex);
112 throw new IllegalStateException(
113 "Error extracting wizard and page from requested session. (Details have been logged) Message: " + ex.getMessage());
114 }
115
116 }
117
118 /***
119 * Template method.
120 *
121 * @param request ExpressoRequest Expresso Request object
122 * @param response ExpressoResponse ExpressoResponse object
123 * @throws ControllerException upon errors.
124 * @todo Implement this com.sri.emo.wizard.expressoimpl.WizardController
125 * method
126 */
127 protected void afterFinishState(ExpressoRequest request, ExpressoResponse response) throws ControllerException {
128 try {
129 Node finalNode = (Node) request.getSession().getAttribute(WIZ_RESULT_ID);
130 Transition editTransition = new Transition();
131 editTransition.setControllerObject(AddNodeAction.class);
132 editTransition.setState(AddNodeAction.VIEW_NODE);
133 editTransition.addParam(Node.NODE_ID, finalNode.getNodeId());
134 editTransition.redirectTransition(request, response);
135 } catch (DBException ex) {
136 throw new ControllerException(ex);
137 }
138
139 }
140
141
142 }