001: /*******************************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *******************************************************************************/package org.ofbiz.minilang.method.ifops;
019:
020: import java.util.List;
021: import java.util.LinkedList;
022: import java.util.Map;
023:
024: import org.ofbiz.minilang.method.MethodOperation;
025: import org.ofbiz.minilang.method.MethodContext;
026: import org.ofbiz.minilang.method.ContextAccessor;
027: import org.ofbiz.minilang.SimpleMethod;
028: import org.ofbiz.base.util.Debug;
029: import org.ofbiz.base.util.ObjectType;
030: import org.ofbiz.base.util.UtilXml;
031:
032: import org.w3c.dom.Element;
033:
034: public class IfInstanceOf extends MethodOperation {
035:
036: public static final String module = IfInstanceOf.class.getName();
037:
038: protected List subOps = new LinkedList();
039: protected List elseSubOps = null;
040:
041: protected ContextAccessor mapAcsr = null;
042: protected ContextAccessor fieldAcsr = null;
043: protected String className = null;
044:
045: public IfInstanceOf(Element element, SimpleMethod simpleMethod) {
046: super (element, simpleMethod);
047: this .mapAcsr = new ContextAccessor(element
048: .getAttribute("map-name"));
049: this .fieldAcsr = new ContextAccessor(element
050: .getAttribute("field-name"));
051: this .className = element.getAttribute("class");
052:
053: SimpleMethod.readOperations(element, subOps, simpleMethod);
054:
055: Element elseElement = UtilXml
056: .firstChildElement(element, "else");
057: if (elseElement != null) {
058: elseSubOps = new LinkedList();
059: SimpleMethod.readOperations(elseElement, elseSubOps,
060: simpleMethod);
061: }
062: }
063:
064: public boolean exec(MethodContext methodContext) {
065: // only run subOps if element is instanceOf
066: boolean runSubOps = false;
067: Object fieldVal = null;
068:
069: if (!mapAcsr.isEmpty()) {
070: Map fromMap = (Map) mapAcsr.get(methodContext);
071: if (fromMap == null) {
072: if (Debug.infoOn())
073: Debug.logInfo("Map not found with name " + mapAcsr
074: + ", running operations", module);
075: } else {
076: fieldVal = fieldAcsr.get(fromMap, methodContext);
077: }
078: } else {
079: // no map name, try the env
080: fieldVal = fieldAcsr.get(methodContext);
081: }
082:
083: runSubOps = ObjectType.instanceOf(fieldVal, className);
084:
085: if (runSubOps) {
086: return SimpleMethod.runSubOps(subOps, methodContext);
087: } else {
088: if (elseSubOps != null) {
089: return SimpleMethod
090: .runSubOps(elseSubOps, methodContext);
091: } else {
092: return true;
093: }
094: }
095: }
096:
097: public String rawString() {
098: // TODO: add all attributes and other info
099: return "<if-instance-of field-name=\"" + this .fieldAcsr
100: + "\" map-name=\"" + this .mapAcsr + "\"/>";
101: }
102:
103: public String expandedString(MethodContext methodContext) {
104: // TODO: something more than a stub/dummy
105: return this.rawString();
106: }
107: }
|