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: /*
051: * EventHandler.java
052: *
053: * Created on November 21, 2001, 10:50 AM
054: */
055:
056: package org.jaffa.util;
057:
058: import java.util.*;
059:
060: /** This class determines how an event posted by a browser is to be handled.
061: */
062: public class EventHandler {
063:
064: /**
065: * This method will generate an array of EventHandler.Method objects.
066: * Each object will have a Name, the signature & the parameters
067: * For eg: if eventId="grid1=4;partLookup;clicked"
068: * The following methods will be generated:
069: * do_grid1_4_partLookup_clicked
070: * do_grid1_partLookup_clicked(String v1), v1="4"
071: * do_grid1_clicked(String v1, String v2), v1="4" & v2="partLookup"
072: * @param eventId The event.
073: * @return an array of EventHandler.Method objects.
074: */
075: public static EventHandler.Method[] getEventMethods(String eventId) {
076: List methods = new ArrayList();
077: if (eventId != null) {
078: String fieldName = null;
079: List arguments = new ArrayList();
080: String eventName = null;
081:
082: // Build the arguments list
083: StringTokenizer stz = new StringTokenizer(eventId, " =;");
084: while (stz.hasMoreTokens())
085: arguments.add(stz.nextToken());
086:
087: // the 1st element in the argument list is the fieldName
088: if (arguments.size() > 0)
089: fieldName = (String) arguments.remove(0);
090:
091: // the last element in the argument list is the eventName
092: if (arguments.size() > 0)
093: eventName = (String) arguments
094: .remove(arguments.size() - 1);
095:
096: if (arguments.size() == 0) {
097: Method method = new Method(fieldName);
098: if (eventName != null)
099: method.appendName(eventName);
100: methods.add(method);
101: } else {
102: for (int i = 0; i <= arguments.size(); i++) {
103: Method method = new Method(fieldName);
104:
105: // Append arguments to the method-signature
106: int j = 0;
107: for (; j < i; j++)
108: method.appendArgument(String.class,
109: (String) arguments.get(j));
110:
111: // Append the remaining arguments to the method-name
112: int k = j;
113: for (; k < arguments.size(); k++)
114: method.appendName((String) arguments.get(k));
115:
116: method.appendName(eventName);
117: methods.add(method);
118: }
119: }
120:
121: }
122: return (EventHandler.Method[]) methods
123: .toArray(new EventHandler.Method[0]);
124: }
125:
126: /** This class respresents an EventHandler method. It has the method name,
127: * the argument types and the argument values.
128: */
129: public static class Method {
130: private StringBuffer m_name = new StringBuffer("do");
131: private List m_argumentTypes = new ArrayList();
132: private List m_argumentValues = new ArrayList();
133:
134: /** Constructor.
135: * @param name The name of the event handler method.
136: */
137: public Method(String name) {
138: appendName(name);
139: }
140:
141: /** Getter for property name.
142: * @return Value of property name.
143: */
144: public String getName() {
145: return m_name.toString();
146: }
147:
148: /** Getter for property argumentTypes.
149: * @return Value of property argumentTypes.
150: */
151: public Class[] getArgumentTypes() {
152: return (Class[]) m_argumentTypes.toArray(new Class[0]);
153: }
154:
155: /** Getter for property argumentValues.
156: * @return Value of property argumentValues.
157: */
158: public Object[] getArgumentValues() {
159: return m_argumentValues.toArray();
160: }
161:
162: /** Returns diagnostic information.
163: * @return diagnostic information.
164: */
165: public String toString() {
166: StringBuffer buf = new StringBuffer(getName());
167: buf.append('(');
168: for (int i = 0; i < m_argumentTypes.size(); i++) {
169: if (i > 0) {
170: buf.append(',');
171: buf.append(' ');
172: }
173: buf.append(((Class) m_argumentTypes.get(i)).getName());
174: buf.append('=');
175: buf.append(m_argumentValues.get(i));
176: }
177: buf.append(')');
178: return buf.toString();
179: }
180:
181: private void appendName(String name) {
182: if (name != null) {
183: m_name.append('_');
184: m_name.append(name);
185: }
186: }
187:
188: private void appendArgument(Class argumentType,
189: Object argumentValue) {
190: if (argumentType != null && argumentValue != null) {
191: m_argumentTypes.add(argumentType);
192: m_argumentValues.add(argumentValue);
193: }
194: }
195: }
196:
197: // /**
198: // * @param args the command line arguments
199: // */
200: // public static void main(String args[]) {
201: // try {
202: // print(null);
203: // print("");
204: // print("g1=12;partNo;validate");
205: // print("g1=12;partNo;P1;segCode;clicked");
206: // } catch (Exception e) {
207: // e.printStackTrace();
208: // }
209: // }
210: //
211: // private static void print(String in) {
212: // System.out.println("Input EventId: " + in);
213: // EventHandler.Method[] methods = EventHandler.getEventMethods(in);
214: // for (int i = 0; i < methods.length; i++)
215: // System.out.println(methods[i]);
216: // System.out.println();
217: //
218: // }
219: //
220:
221: }
|