001: /*
002: * $Id: CallSimpleMapProcessor.java,v 1.1 2003/08/17 06:06:13 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.method.callops;
025:
026: import java.util.*;
027:
028: import org.w3c.dom.*;
029: import org.ofbiz.base.util.*;
030: import org.ofbiz.minilang.*;
031: import org.ofbiz.minilang.method.*;
032: import org.ofbiz.minilang.operation.*;
033:
034: /**
035: * An event operation that calls a simple map processor inlined or from a separate file
036: *
037: * @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
038: * @version $Revision: 1.1 $
039: * @since 2.0
040: */
041: public class CallSimpleMapProcessor extends MethodOperation {
042:
043: String xmlResource;
044: String processorName;
045: ContextAccessor inMapAcsr;
046: ContextAccessor outMapAcsr;
047: ContextAccessor errorListAcsr;
048:
049: MapProcessor inlineMapProcessor = null;
050:
051: public CallSimpleMapProcessor(Element element,
052: SimpleMethod simpleMethod) {
053: super (element, simpleMethod);
054: xmlResource = element.getAttribute("xml-resource");
055: processorName = element.getAttribute("processor-name");
056: inMapAcsr = new ContextAccessor(element
057: .getAttribute("in-map-name"));
058: outMapAcsr = new ContextAccessor(element
059: .getAttribute("out-map-name"));
060: errorListAcsr = new ContextAccessor(element
061: .getAttribute("error-list-name"), "error_list");
062:
063: Element simpleMapProcessorElement = UtilXml.firstChildElement(
064: element, "simple-map-processor");
065: if (simpleMapProcessorElement != null) {
066: inlineMapProcessor = new MapProcessor(
067: simpleMapProcessorElement);
068: }
069: }
070:
071: public boolean exec(MethodContext methodContext) {
072: List messages = (List) errorListAcsr.get(methodContext);
073: if (messages == null) {
074: messages = new LinkedList();
075: errorListAcsr.put(methodContext, messages);
076: }
077:
078: Map inMap = (Map) inMapAcsr.get(methodContext);
079: if (inMap == null) {
080: inMap = new HashMap();
081: inMapAcsr.put(methodContext, inMap);
082: }
083:
084: Map outMap = (Map) outMapAcsr.get(methodContext);
085: if (outMap == null) {
086: outMap = new HashMap();
087: outMapAcsr.put(methodContext, outMap);
088: }
089:
090: // run external map processor first
091: if (this .xmlResource != null && this .xmlResource.length() > 0
092: && this .processorName != null
093: && this .processorName.length() > 0) {
094: String xmlResource = methodContext
095: .expandString(this .xmlResource);
096: String processorName = methodContext
097: .expandString(this .processorName);
098: try {
099: org.ofbiz.minilang.SimpleMapProcessor
100: .runSimpleMapProcessor(
101: xmlResource,
102: processorName,
103: inMap,
104: outMap,
105: messages,
106: (methodContext.getRequest() != null ? methodContext
107: .getRequest().getLocale()
108: : null), methodContext
109: .getLoader());
110: } catch (MiniLangException e) {
111: messages
112: .add("Error running SimpleMapProcessor in XML file \""
113: + xmlResource + "\": " + e.toString());
114: }
115: }
116:
117: // run inlined map processor last so it can override the external map processor
118: if (inlineMapProcessor != null) {
119: inlineMapProcessor.exec(inMap, outMap, messages,
120: (methodContext.getRequest() != null ? methodContext
121: .getRequest().getLocale() : null),
122: methodContext.getLoader());
123: }
124:
125: return true;
126: }
127: }
|