001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049:
050: package org.jaffa.components.lookup;
051:
052: import java.lang.reflect.Method;
053: import java.util.*;
054: import org.apache.log4j.Logger;
055: import org.apache.struts.action.ActionErrors;
056: import org.jaffa.components.finder.FinderAction;
057: import org.jaffa.presentation.portlet.FormKey;
058: import org.jaffa.presentation.portlet.widgets.model.CheckBoxModel;
059: import org.jaffa.presentation.portlet.widgets.model.GridModel;
060: import org.jaffa.presentation.portlet.widgets.model.GridModelRow;
061:
062: /** This is the base class for all LookupComponent Actions. It extends the FinderAction.
063: * @author GautamJ
064: */
065: public class LookupAction extends FinderAction {
066:
067: private static final Logger log = Logger
068: .getLogger(LookupAction.class);
069:
070: /** Quits the component and closes the browser window.
071: * This method overrides the 'Close' handler of the base class.
072: * @return The FormKey object for the generic lookup jsp.
073: */
074: public FormKey do_Close_Clicked() {
075: LookupForm myForm = (LookupForm) form;
076: LookupComponent2 myComp = (LookupComponent2) myForm
077: .getComponent();
078: return myComp.quitLookup(request);
079: }
080:
081: /** Invokes the do_Rows_Select_Clicked() method.
082: * @param rowNum The selected row on the Results screen.
083: * @return The FormKey for the generic lookup jsp.
084: */
085: public FormKey do_Rows_Clicked(String rowNum) {
086: return do_Rows_Select_Clicked(rowNum);
087: }
088:
089: /** This will add the 'lookup' attribute on the request stream, with a Map containing the fieldnames (from the targetFields property) and values (from the selectedRow).
090: * It will then invoke the quit() method on the component.
091: * Finally it will return a FormKey object for the generic lookup jsp.
092: * @param rowNum The selected row on the Results screen.
093: * @return The FormKey for the generic lookup jsp.
094: */
095: public FormKey do_Rows_Select_Clicked(String rowNum) {
096: LookupForm myForm = (LookupForm) form;
097: LookupComponent2 myComp = (LookupComponent2) myForm
098: .getComponent();
099:
100: GridModel model = myForm.getRowsWM();
101: GridModelRow selectedRow = model.getRow(Integer
102: .parseInt(rowNum));
103:
104: return myComp.performLookup(request, selectedRow);
105: }
106:
107: /** This will generate the MultiSelectLookupEvent object comprising the DTOs for the selected rows.
108: * It will then invoke the performMultiSelectLookup() method on the component.
109: * @return The FormKey for the calling screen.
110: */
111: public FormKey do_MultiSelect_Clicked() {
112: FormKey fk = null;
113: LookupForm myForm = (LookupForm) form;
114: LookupComponent2 myComp = (LookupComponent2) myForm
115: .getComponent();
116:
117: try {
118: // Create a collection of 'selectedRows'
119: // It will assume that each row in the GridModel in the form has a CheckBoxModel keyed by LookupComponent2.MULTI_SELECT_CHECKBOX
120: // Additionally, it'll assume that the FinderOutDto returned by the component has the method: 'public SomeDtoClass getRows(int i)'
121: Collection selectedRows = new LinkedList();
122: GridModel model = myForm.getRowsWM();
123: Object finderOutDto = myComp.getFinderOutDto();
124: if (finderOutDto != null && model != null
125: && model.getRows() != null) {
126: Class finderOutDtoClass = finderOutDto.getClass();
127: Method method = finderOutDtoClass.getMethod("getRows",
128: new Class[] { Integer.TYPE });
129: for (Iterator itr = model.getRows().iterator(); itr
130: .hasNext();) {
131: GridModelRow row = (GridModelRow) itr.next();
132: CheckBoxModel checkBoxModel = (CheckBoxModel) row
133: .get(LookupComponent2.MULTI_SELECT_CHECKBOX);
134: if (checkBoxModel != null
135: && checkBoxModel.getState()) {
136: Object selectedRow = method.invoke(
137: finderOutDto,
138: new Object[] { new Integer(row
139: .getRowId()) });
140: selectedRows.add(selectedRow);
141: }
142: }
143: }
144: MultiSelectLookupEvent event = new MultiSelectLookupEvent(
145: myComp, selectedRows.toArray());
146: fk = myComp.performMultiSelectLookup(request, event);
147: } catch (Exception e) {
148: log.error(null, e);
149: myForm.raiseError(request, ActionErrors.GLOBAL_ERROR,
150: "error.framework.general");
151: }
152: if (fk == null)
153: fk = myComp.getResultsFormKey();
154: return fk;
155: }
156:
157: }
|