001: /*
002: * $Id: ValidateMethod.java,v 1.1 2003/08/17 06:06:11 ajzeneski Exp $
003: *
004: * Copyright (c) 2001, 2002 The Open For Business Project - www.ofbiz.org
005: *
006: * Permission is hereby granted, free of charge, to any person obtaining a
007: * copy of this software and associated documentation files (the "Software"),
008: * to deal in the Software without restriction, including without limitation
009: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
010: * and/or sell copies of the Software, and to permit persons to whom the
011: * Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included
014: * in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
017: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
019: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
020: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
021: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
022: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: */
024: package org.ofbiz.minilang.operation;
025:
026: import java.util.*;
027: import java.lang.reflect.*;
028:
029: import org.w3c.dom.*;
030:
031: import org.ofbiz.base.util.*;
032:
033: /**
034: * A string operation that calls a validation method
035: *
036: * @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
037: * @version $Revision: 1.1 $
038: * @since 2.0
039: */
040: public class ValidateMethod extends SimpleMapOperation {
041:
042: public static final String module = ValidateMethod.class.getName();
043:
044: String methodName;
045: String className;
046:
047: public ValidateMethod(Element element,
048: SimpleMapProcess simpleMapProcess) {
049: super (element, simpleMapProcess);
050: this .methodName = element.getAttribute("method");
051: this .className = element.getAttribute("class");
052: }
053:
054: public void exec(Map inMap, Map results, List messages,
055: Locale locale, ClassLoader loader) {
056: Object obj = inMap.get(fieldName);
057:
058: String fieldValue = null;
059:
060: try {
061: fieldValue = (String) ObjectType.simpleTypeConvert(obj,
062: "String", null, locale);
063: } catch (GeneralException e) {
064: messages
065: .add("Could not convert field value for comparison: "
066: + e.getMessage());
067: return;
068: }
069:
070: if (loader == null) {
071: loader = Thread.currentThread().getContextClassLoader();
072: }
073:
074: Class[] paramTypes = new Class[] { String.class };
075: Object[] params = new Object[] { fieldValue };
076:
077: Class valClass;
078:
079: try {
080: valClass = loader.loadClass(className);
081: } catch (ClassNotFoundException cnfe) {
082: String msg = "Could not find validation class: "
083: + className;
084:
085: messages.add(msg);
086: Debug.logError("[ValidateMethod.exec] " + msg, module);
087: return;
088: }
089:
090: Method valMethod;
091:
092: try {
093: valMethod = valClass.getMethod(methodName, paramTypes);
094: } catch (NoSuchMethodException cnfe) {
095: String msg = "Could not find validation method: "
096: + methodName + " of class " + className;
097:
098: messages.add(msg);
099: Debug.logError("[ValidateMethod.exec] " + msg, module);
100: return;
101: }
102:
103: Boolean resultBool = Boolean.FALSE;
104:
105: try {
106: resultBool = (Boolean) valMethod.invoke(null, params);
107: } catch (Exception e) {
108: String msg = "Error in validation method " + methodName
109: + " of class " + className + ": " + e.getMessage();
110:
111: messages.add(msg);
112: Debug.logError("[ValidateMethod.exec] " + msg, module);
113: return;
114: }
115:
116: if (!resultBool.booleanValue()) {
117: addMessage(messages, loader);
118: }
119: }
120: }
|