You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2012/04/19 17:09:08 UTC
svn commit: r1327981 [2/9] - in
/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang: ./ method/
method/callops/ method/conditional/ method/entityops/ method/envops/
method/eventops/ method/ifops/ method/otherops/ method/serviceops/ operation/
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java?rev=1327981&r1=1327980&r2=1327981&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java Thu Apr 19 15:09:03 2012
@@ -58,14 +58,14 @@ import org.ofbiz.minilang.method.callops
import org.ofbiz.minilang.method.callops.SetServiceFields;
import org.ofbiz.minilang.method.conditional.MasterIf;
import org.ofbiz.minilang.method.conditional.While;
-import org.ofbiz.minilang.method.entityops.GetRelated;
-import org.ofbiz.minilang.method.entityops.GetRelatedOne;
import org.ofbiz.minilang.method.entityops.EntityAnd;
import org.ofbiz.minilang.method.entityops.EntityCondition;
import org.ofbiz.minilang.method.entityops.EntityCount;
import org.ofbiz.minilang.method.entityops.EntityOne;
import org.ofbiz.minilang.method.entityops.FindByAnd;
import org.ofbiz.minilang.method.entityops.FindByPrimaryKey;
+import org.ofbiz.minilang.method.entityops.GetRelated;
+import org.ofbiz.minilang.method.entityops.GetRelatedOne;
import org.ofbiz.minilang.method.entityops.MakeValue;
import org.ofbiz.minilang.method.envops.Iterate;
import org.ofbiz.minilang.method.envops.IterateMap;
@@ -87,9 +87,16 @@ import org.w3c.dom.Element;
* SimpleMethod Mini Language Core Object
*/
public class SimpleMethod {
- private static final Map<String, MethodOperation.Factory<MethodOperation>> methodOperationFactories;
+
+ public static final String module = SimpleMethod.class.getName();
+ public static final String err_resource = "MiniLangErrorUiLabels";
// never read locally: private static final Method simpleMethodExecMethod;
private static final Method methodOperationExecMethod;
+ private static final Map<String, MethodOperation.Factory<MethodOperation>> methodOperationFactories;
+ protected static UtilCache<String, Map<String, SimpleMethod>> simpleMethodsDirectCache = UtilCache.createUtilCache("minilang.SimpleMethodsDirect", 0, 0);
+ protected static UtilCache<String, Map<String, SimpleMethod>> simpleMethodsResourceCache = UtilCache.createUtilCache("minilang.SimpleMethodsResource", 0, 0);
+ protected static UtilCache<URL, Map<String, SimpleMethod>> simpleMethodsURLCache = UtilCache.createUtilCache("minilang.SimpleMethodsURL", 0, 0);
+
static {
Map<String, MethodOperation.Factory<MethodOperation>> mapFactories = new HashMap<String, MethodOperation.Factory<MethodOperation>>();
Iterator<MethodOperation.Factory<MethodOperation>> it = UtilGenerics.cast(ServiceLoader.load(MethodOperation.Factory.class, SimpleMethod.class.getClassLoader()).iterator());
@@ -99,72 +106,221 @@ public class SimpleMethod {
}
methodOperationFactories = Collections.unmodifiableMap(mapFactories);
try {
- // never read locally: simpleMethodExecMethod = SimpleMethod.class.getDeclaredMethod("exec", MethodContext.class);
methodOperationExecMethod = MethodOperation.class.getDeclaredMethod("exec", MethodContext.class);
} catch (NoSuchMethodException e) {
throw UtilMisc.initCause(new InternalError(e.getMessage()), e);
}
}
- public static final String module = SimpleMethod.class.getName();
- public static final String err_resource = "MiniLangErrorUiLabels";
-
- protected static UtilCache<String, Map<String, SimpleMethod>> simpleMethodsDirectCache = UtilCache.createUtilCache("minilang.SimpleMethodsDirect", 0, 0);
- protected static UtilCache<String, Map<String, SimpleMethod>> simpleMethodsResourceCache = UtilCache.createUtilCache("minilang.SimpleMethodsResource", 0, 0);
- protected static UtilCache<URL, Map<String, SimpleMethod>> simpleMethodsURLCache = UtilCache.createUtilCache("minilang.SimpleMethodsURL", 0, 0);
-
- // ----- Event Context Invokers -----
-
- public static String runSimpleEvent(String xmlResource, String methodName, HttpServletRequest request, HttpServletResponse response) throws MiniLangException {
- return runSimpleMethod(xmlResource, methodName, new MethodContext(request, response, null));
- }
-
- public static String runSimpleEvent(String xmlResource, String methodName, HttpServletRequest request, HttpServletResponse response, ClassLoader loader) throws MiniLangException {
- return runSimpleMethod(xmlResource, methodName, new MethodContext(request, response, loader));
- }
-
- public static String runSimpleEvent(URL xmlURL, String methodName, HttpServletRequest request, HttpServletResponse response, ClassLoader loader) throws MiniLangException {
- return runSimpleMethod(xmlURL, methodName, new MethodContext(request, response, loader));
+ protected static SimpleMethod compileSimpleMethod(Element simpleMethodElement, Map<String, SimpleMethod> simpleMethods, String location) {
+ return new SimpleMethod(simpleMethodElement, simpleMethods, location);
}
- // ----- Service Context Invokers -----
-
- public static Map<String, Object> runSimpleService(String xmlResource, String methodName, DispatchContext ctx, Map<String, ? extends Object> context) throws MiniLangException {
- MethodContext methodContext = new MethodContext(ctx, context, null);
- runSimpleMethod(xmlResource, methodName, methodContext);
- return methodContext.getResults();
+ protected static void findEntityNamesUsed(List<MethodOperation> methodOperations, Set<String> allEntityNames, Set<String> simpleMethodsVisited) throws MiniLangException {
+ for (MethodOperation methodOperation : methodOperations) {
+ if (methodOperation instanceof FindByPrimaryKey) {
+ String entName = ((FindByPrimaryKey) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof FindByAnd) {
+ String entName = ((FindByAnd) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof EntityOne) {
+ String entName = ((EntityOne) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof EntityAnd) {
+ String entName = ((EntityAnd) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof EntityCondition) {
+ String entName = ((EntityCondition) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof EntityCount) {
+ String entName = ((EntityCount) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof MakeValue) {
+ String entName = ((MakeValue) methodOperation).getEntityName();
+ if (UtilValidate.isNotEmpty(entName))
+ allEntityNames.add(entName);
+ } else if (methodOperation instanceof GetRelated) {
+ String relationName = ((GetRelated) methodOperation).getRelationName();
+ if (UtilValidate.isNotEmpty(relationName))
+ allEntityNames.add(relationName);
+ } else if (methodOperation instanceof GetRelatedOne) {
+ String relationName = ((GetRelatedOne) methodOperation).getRelationName();
+ if (UtilValidate.isNotEmpty(relationName))
+ allEntityNames.add(relationName);
+ } else if (methodOperation instanceof CallSimpleMethod) {
+ CallSimpleMethod csm = (CallSimpleMethod) methodOperation;
+ try {
+ SimpleMethod calledMethod = csm.getSimpleMethodToCall(null);
+ if (calledMethod == null) {
+ Debug.logWarning("Could not find simple-method [" + csm.getMethodName() + "] in [" + csm.getXmlResource() + "] from the SimpleMethod [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]", module);
+ } else {
+ if (!simpleMethodsVisited.contains(calledMethod.getLocationAndName())) {
+ simpleMethodsVisited.add(calledMethod.getLocationAndName());
+ findEntityNamesUsed(calledMethod.methodOperations, allEntityNames, simpleMethodsVisited);
+ }
+ }
+ } catch (MiniLangException e) {
+ Debug.logWarning("Error getting simple-method info in the [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]: " + e.toString(), module);
+ }
+ } else if (methodOperation instanceof Iterate) {
+ findEntityNamesUsed(((Iterate) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IterateMap) {
+ findEntityNamesUsed(((IterateMap) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof Loop) {
+ findEntityNamesUsed(((Loop) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof MasterIf) {
+ findEntityNamesUsed(((MasterIf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof While) {
+ findEntityNamesUsed(((While) methodOperation).getThenSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfValidateMethod) {
+ findEntityNamesUsed(((IfValidateMethod) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfInstanceOf) {
+ findEntityNamesUsed(((IfInstanceOf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfCompare) {
+ findEntityNamesUsed(((IfCompare) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfCompareField) {
+ findEntityNamesUsed(((IfCompareField) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfRegexp) {
+ findEntityNamesUsed(((IfRegexp) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfEmpty) {
+ findEntityNamesUsed(((IfEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfNotEmpty) {
+ findEntityNamesUsed(((IfNotEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfHasPermission) {
+ findEntityNamesUsed(((IfHasPermission) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ }
+ }
}
- public static Map<String, Object> runSimpleService(String xmlResource, String methodName, DispatchContext ctx, Map<String, ? extends Object> context, ClassLoader loader) throws MiniLangException {
- MethodContext methodContext = new MethodContext(ctx, context, loader);
- runSimpleMethod(xmlResource, methodName, methodContext);
- return methodContext.getResults();
+ protected static void findServiceNamesCalled(List<MethodOperation> methodOperations, Set<String> allServiceNames, Set<String> simpleMethodsVisited) throws MiniLangException {
+ for (MethodOperation methodOperation : methodOperations) {
+ if (methodOperation instanceof CallService) {
+ String svcName = ((CallService) methodOperation).getServiceName();
+ if (UtilValidate.isNotEmpty(svcName))
+ allServiceNames.add(svcName);
+ } else if (methodOperation instanceof CallServiceAsynch) {
+ String svcName = ((CallServiceAsynch) methodOperation).getServiceName();
+ if (UtilValidate.isNotEmpty(svcName))
+ allServiceNames.add(svcName);
+ } else if (methodOperation instanceof SetServiceFields) {
+ String svcName = ((SetServiceFields) methodOperation).getServiceName();
+ if (UtilValidate.isNotEmpty(svcName))
+ allServiceNames.add(svcName);
+ } else if (methodOperation instanceof CallSimpleMethod) {
+ CallSimpleMethod csm = (CallSimpleMethod) methodOperation;
+ try {
+ SimpleMethod calledMethod = csm.getSimpleMethodToCall(methodOperations.getClass().getClassLoader());
+ if (calledMethod == null) {
+ Debug.logWarning("Could not find simple-method [" + csm.getMethodName() + "] in [" + csm.getXmlResource() + "] from the SimpleMethod [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]", module);
+ } else {
+ if (!simpleMethodsVisited.contains(calledMethod.getLocationAndName())) {
+ simpleMethodsVisited.add(calledMethod.getLocationAndName());
+ findServiceNamesCalled(calledMethod.methodOperations, allServiceNames, simpleMethodsVisited);
+ }
+ }
+ } catch (MiniLangException e) {
+ Debug.logWarning("Error getting simple-method info in the [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]: " + e.toString(), module);
+ }
+ } else if (methodOperation instanceof Iterate) {
+ findServiceNamesCalled(((Iterate) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IterateMap) {
+ findServiceNamesCalled(((IterateMap) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof Loop) {
+ findServiceNamesCalled(((Loop) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof MasterIf) {
+ findServiceNamesCalled(((MasterIf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof While) {
+ findServiceNamesCalled(((While) methodOperation).getThenSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfValidateMethod) {
+ findServiceNamesCalled(((IfValidateMethod) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfInstanceOf) {
+ findServiceNamesCalled(((IfInstanceOf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfCompare) {
+ findServiceNamesCalled(((IfCompare) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfCompareField) {
+ findServiceNamesCalled(((IfCompareField) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfRegexp) {
+ findServiceNamesCalled(((IfRegexp) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfEmpty) {
+ findServiceNamesCalled(((IfEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfNotEmpty) {
+ findServiceNamesCalled(((IfNotEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof IfHasPermission) {
+ findServiceNamesCalled(((IfHasPermission) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ }
+ }
}
- public static Map<String, Object> runSimpleService(URL xmlURL, String methodName, DispatchContext ctx, Map<String, ? extends Object> context, ClassLoader loader) throws MiniLangException {
- MethodContext methodContext = new MethodContext(ctx, context, loader);
- runSimpleMethod(xmlURL, methodName, methodContext);
- return methodContext.getResults();
+ protected static Map<String, SimpleMethod> getAllDirectSimpleMethods(String name, String content, String fromLocation) throws MiniLangException {
+ if (UtilValidate.isEmpty(fromLocation)) {
+ fromLocation = "<location not known>";
+ }
+ Map<String, SimpleMethod> simpleMethods = FastMap.newInstance();
+ Document document = null;
+ try {
+ if (content != null) {
+ document = UtilXml.readXmlDocument(content, true, true);
+ }
+ } catch (java.io.IOException e) {
+ throw new MiniLangException("Could not read XML content", e);
+ } catch (org.xml.sax.SAXException e) {
+ throw new MiniLangException("Could not parse direct XML content", e);
+ } catch (javax.xml.parsers.ParserConfigurationException e) {
+ throw new MiniLangException("XML parser not setup correctly", e);
+ }
+ if (document == null) {
+ throw new MiniLangException("Could not load SimpleMethod XML document: " + name);
+ }
+ Element rootElement = document.getDocumentElement();
+ for (Element simpleMethodElement : UtilXml.childElementList(rootElement, "simple-method")) {
+ SimpleMethod simpleMethod = compileSimpleMethod(simpleMethodElement, simpleMethods, fromLocation);
+ simpleMethods.put(simpleMethod.getMethodName(), simpleMethod);
+ }
+ return simpleMethods;
}
- // ----- General Method Invokers -----
-
- public static String runSimpleMethod(String xmlResource, String methodName, MethodContext methodContext) throws MiniLangException {
- Map<String, SimpleMethod> simpleMethods = getSimpleMethods(xmlResource, methodContext.getLoader());
- SimpleMethod simpleMethod = simpleMethods.get(methodName);
- if (simpleMethod == null) {
- throw new MiniLangException("Could not find SimpleMethod " + methodName + " in XML document in resource: " + xmlResource);
+ protected static Map<String, SimpleMethod> getAllSimpleMethods(URL xmlURL) throws MiniLangException {
+ Map<String, SimpleMethod> simpleMethods = FastMap.newInstance();
+ Document document = null;
+ try {
+ document = UtilXml.readXmlDocument(xmlURL, true, true);
+ } catch (java.io.IOException e) {
+ throw new MiniLangException("Could not read XML file", e);
+ } catch (org.xml.sax.SAXException e) {
+ throw new MiniLangException("Could not parse XML file", e);
+ } catch (javax.xml.parsers.ParserConfigurationException e) {
+ throw new MiniLangException("XML parser not setup correctly", e);
}
- return simpleMethod.exec(methodContext);
+ if (document == null) {
+ throw new MiniLangException("Could not find SimpleMethod XML document: " + xmlURL.toString());
+ }
+ Element rootElement = document.getDocumentElement();
+ for (Element simpleMethodElement : UtilXml.childElementList(rootElement, "simple-method")) {
+ SimpleMethod simpleMethod = compileSimpleMethod(simpleMethodElement, simpleMethods, xmlURL.toString());
+ simpleMethods.put(simpleMethod.getMethodName(), simpleMethod);
+ }
+ return simpleMethods;
}
- public static String runSimpleMethod(URL xmlURL, String methodName, MethodContext methodContext) throws MiniLangException {
- Map<String, SimpleMethod> simpleMethods = getSimpleMethods(xmlURL);
- SimpleMethod simpleMethod = simpleMethods.get(methodName);
- if (simpleMethod == null) {
- throw new MiniLangException("Could not find SimpleMethod " + methodName + " in XML document from URL: " + xmlURL.toString());
+ public static Map<String, SimpleMethod> getDirectSimpleMethods(String name, String content, String fromLocation) throws MiniLangException {
+ Map<String, SimpleMethod> simpleMethods = simpleMethodsDirectCache.get(name);
+ if (simpleMethods == null) {
+ synchronized (SimpleMethod.class) {
+ simpleMethods = simpleMethodsDirectCache.get(name);
+ if (simpleMethods == null) {
+ simpleMethods = getAllDirectSimpleMethods(name, content, fromLocation);
+ simpleMethodsDirectCache.put(name, simpleMethods);
+ }
+ }
}
- return simpleMethod.exec(methodContext);
+ return simpleMethods;
}
public static Map<String, SimpleMethod> getSimpleMethods(String xmlResource, ClassLoader loader) throws MiniLangException {
@@ -173,34 +329,42 @@ public class SimpleMethod {
synchronized (SimpleMethod.class) {
simpleMethods = simpleMethodsResourceCache.get(xmlResource);
if (simpleMethods == null) {
- //URL xmlURL = UtilURL.fromResource(xmlResource, loader);
+ // URL xmlURL = UtilURL.fromResource(xmlResource, loader);
URL xmlURL = null;
try {
xmlURL = FlexibleLocation.resolveLocation(xmlResource, loader);
} catch (MalformedURLException e) {
throw new MiniLangException("Could not find SimpleMethod XML document in resource: " + xmlResource + "; error was: " + e.toString(), e);
}
-
if (xmlURL == null) {
throw new MiniLangException("Could not find SimpleMethod XML document in resource: " + xmlResource);
}
simpleMethods = getAllSimpleMethods(xmlURL);
-
- // put it in the cache
simpleMethodsResourceCache.put(xmlResource, simpleMethods);
}
}
}
+ return simpleMethods;
+ }
+ public static Map<String, SimpleMethod> getSimpleMethods(URL xmlURL) throws MiniLangException {
+ Map<String, SimpleMethod> simpleMethods = simpleMethodsURLCache.get(xmlURL);
+ if (simpleMethods == null) {
+ synchronized (SimpleMethod.class) {
+ simpleMethods = simpleMethodsURLCache.get(xmlURL);
+ if (simpleMethods == null) {
+ simpleMethods = getAllSimpleMethods(xmlURL);
+ simpleMethodsURLCache.put(xmlURL, simpleMethods);
+ }
+ }
+ }
return simpleMethods;
}
public static List<SimpleMethod> getSimpleMethodsList(String xmlResource, ClassLoader loader) throws MiniLangException {
List<SimpleMethod> simpleMethods = FastList.newInstance();
-
// Let the standard Map returning method take care of caching and compilation
Map<String, SimpleMethod> simpleMethodMap = SimpleMethod.getSimpleMethods(xmlResource, loader);
-
// Load and traverse the document again to get a correctly ordered list of methods
URL xmlURL = null;
try {
@@ -208,7 +372,6 @@ public class SimpleMethod {
} catch (MalformedURLException e) {
throw new MiniLangException("Could not find SimpleMethod XML document in resource: " + xmlResource + "; error was: " + e.toString(), e);
}
- // read in the file
Document document = null;
try {
document = UtilXml.readXmlDocument(xmlURL, true, true);
@@ -219,449 +382,166 @@ public class SimpleMethod {
} catch (javax.xml.parsers.ParserConfigurationException e) {
throw new MiniLangException("XML parser not setup correctly", e);
}
-
if (document == null) {
throw new MiniLangException("Could not find SimpleMethod XML document: " + xmlURL.toString());
}
-
Element rootElement = document.getDocumentElement();
- for (Element simpleMethodElement: UtilXml.childElementList(rootElement, "simple-method")) {
+ for (Element simpleMethodElement : UtilXml.childElementList(rootElement, "simple-method")) {
simpleMethods.add(simpleMethodMap.get(simpleMethodElement.getAttribute("method-name")));
}
-
return simpleMethods;
}
- public static Map<String, SimpleMethod> getSimpleMethods(URL xmlURL) throws MiniLangException {
- Map<String, SimpleMethod> simpleMethods = simpleMethodsURLCache.get(xmlURL);
-
- if (simpleMethods == null) {
- synchronized (SimpleMethod.class) {
- simpleMethods = simpleMethodsURLCache.get(xmlURL);
- if (simpleMethods == null) {
- simpleMethods = getAllSimpleMethods(xmlURL);
-
- // put it in the cache
- simpleMethodsURLCache.put(xmlURL, simpleMethods);
+ public static void readOperations(Element simpleMethodElement, List<MethodOperation> methodOperations, SimpleMethod simpleMethod) {
+ List<? extends Element> operationElements = UtilXml.childElementList(simpleMethodElement);
+ if (UtilValidate.isNotEmpty(operationElements)) {
+ for (Element curOperElem : operationElements) {
+ String nodeName = curOperElem.getNodeName();
+ MethodOperation methodOp = null;
+ MethodOperation.Factory<MethodOperation> factory = methodOperationFactories.get(nodeName);
+ if (factory != null) {
+ methodOp = factory.createMethodOperation(curOperElem, simpleMethod);
+ } else if ("else".equals(nodeName)) {
+ // don't add anything, but don't complain either, this one is handled in the individual operations
+ } else {
+ Debug.logWarning("Operation element \"" + nodeName + "\" no recognized", module);
}
+ if (methodOp == null)
+ continue;
+ methodOperations.add(methodOp);
+ DeprecatedOperation depOp = methodOp.getClass().getAnnotation(DeprecatedOperation.class);
+ if (depOp != null)
+ Debug.logInfo("The " + nodeName + " operation has been deprecated in favor of the " + depOp.value() + " operation; found use of this in [" + simpleMethod.getShortDescription() + "]: " + methodOp.rawString(), module);
}
}
-
- return simpleMethods;
}
- protected static Map<String, SimpleMethod> getAllSimpleMethods(URL xmlURL) throws MiniLangException {
- Map<String, SimpleMethod> simpleMethods = FastMap.newInstance();
-
- // read in the file
- Document document = null;
- try {
- document = UtilXml.readXmlDocument(xmlURL, true, true);
- } catch (java.io.IOException e) {
- throw new MiniLangException("Could not read XML file", e);
- } catch (org.xml.sax.SAXException e) {
- throw new MiniLangException("Could not parse XML file", e);
- } catch (javax.xml.parsers.ParserConfigurationException e) {
- throw new MiniLangException("XML parser not setup correctly", e);
- }
-
- if (document == null) {
- throw new MiniLangException("Could not find SimpleMethod XML document: " + xmlURL.toString());
- }
-
- Element rootElement = document.getDocumentElement();
- for (Element simpleMethodElement: UtilXml.childElementList(rootElement, "simple-method")) {
- SimpleMethod simpleMethod = compileSimpleMethod(simpleMethodElement, simpleMethods, xmlURL.toString());
- simpleMethods.put(simpleMethod.getMethodName(), simpleMethod);
- }
-
- return simpleMethods;
+ public static String runSimpleEvent(String xmlResource, String methodName, HttpServletRequest request, HttpServletResponse response) throws MiniLangException {
+ return runSimpleMethod(xmlResource, methodName, new MethodContext(request, response, null));
}
- protected static SimpleMethod compileSimpleMethod(Element simpleMethodElement, Map<String, SimpleMethod> simpleMethods, String location) {
- return new SimpleMethod(simpleMethodElement, simpleMethods, location);
+ public static String runSimpleEvent(String xmlResource, String methodName, HttpServletRequest request, HttpServletResponse response, ClassLoader loader) throws MiniLangException {
+ return runSimpleMethod(xmlResource, methodName, new MethodContext(request, response, loader));
}
- public static Map<String, SimpleMethod> getDirectSimpleMethods(String name, String content, String fromLocation) throws MiniLangException {
- Map<String, SimpleMethod> simpleMethods = simpleMethodsDirectCache.get(name);
-
- if (simpleMethods == null) {
- synchronized (SimpleMethod.class) {
- simpleMethods = simpleMethodsDirectCache.get(name);
- if (simpleMethods == null) {
- simpleMethods = getAllDirectSimpleMethods(name, content, fromLocation);
-
- // put it in the cache
- simpleMethodsDirectCache.put(name, simpleMethods);
- }
- }
- }
-
- return simpleMethods;
+ public static String runSimpleEvent(URL xmlURL, String methodName, HttpServletRequest request, HttpServletResponse response, ClassLoader loader) throws MiniLangException {
+ return runSimpleMethod(xmlURL, methodName, new MethodContext(request, response, loader));
}
- protected static Map<String, SimpleMethod> getAllDirectSimpleMethods(String name, String content, String fromLocation) throws MiniLangException {
- if (UtilValidate.isEmpty(fromLocation)) {
- fromLocation = "<location not known>";
- }
-
- Map<String, SimpleMethod> simpleMethods = FastMap.newInstance();
-
- // read in the file
- Document document = null;
-
- try {
- if (content != null) {
- document = UtilXml.readXmlDocument(content, true, true);
- }
- } catch (java.io.IOException e) {
- throw new MiniLangException("Could not read XML content", e);
- } catch (org.xml.sax.SAXException e) {
- throw new MiniLangException("Could not parse direct XML content", e);
- } catch (javax.xml.parsers.ParserConfigurationException e) {
- throw new MiniLangException("XML parser not setup correctly", e);
- }
-
- if (document == null) {
- throw new MiniLangException("Could not load SimpleMethod XML document: " + name);
- }
-
- Element rootElement = document.getDocumentElement();
- for (Element simpleMethodElement: UtilXml.childElementList(rootElement, "simple-method")) {
- SimpleMethod simpleMethod = compileSimpleMethod(simpleMethodElement, simpleMethods, fromLocation);
- simpleMethods.put(simpleMethod.getMethodName(), simpleMethod);
+ public static String runSimpleMethod(String xmlResource, String methodName, MethodContext methodContext) throws MiniLangException {
+ Map<String, SimpleMethod> simpleMethods = getSimpleMethods(xmlResource, methodContext.getLoader());
+ SimpleMethod simpleMethod = simpleMethods.get(methodName);
+ if (simpleMethod == null) {
+ throw new MiniLangException("Could not find SimpleMethod " + methodName + " in XML document in resource: " + xmlResource);
}
-
- return simpleMethods;
- }
-
- // Member fields begin here...
- protected List<MethodOperation> methodOperations = FastList.newInstance();
- protected Map<String, SimpleMethod> parentSimpleMethodsMap;
- protected String fromLocation;
- protected String methodName;
- protected String shortDescription;
- protected String defaultErrorCode;
- protected String defaultSuccessCode;
-
- protected String parameterMapName;
-
- // event fields
- protected String eventRequestName;
- protected String eventSessionName;
- protected String eventResponseName;
- protected String eventResponseCodeName;
- protected String eventErrorMessageName;
- protected String eventErrorMessageListName;
- protected String eventEventMessageName;
- protected String eventEventMessageListName;
-
- // service fields
- protected String serviceResponseMessageName;
- protected String serviceErrorMessageName;
- protected String serviceErrorMessageListName;
- protected String serviceErrorMessageMapName;
- protected String serviceSuccessMessageName;
- protected String serviceSuccessMessageListName;
-
- protected boolean loginRequired = true;
- protected boolean useTransaction = true;
-
- protected String localeName;
- protected String delegatorName;
- protected String securityName;
- protected String dispatcherName;
- protected String userLoginName;
-
- public SimpleMethod(Element simpleMethodElement, Map<String, SimpleMethod> parentSimpleMethodsMap, String fromLocation) {
- this.parentSimpleMethodsMap = parentSimpleMethodsMap;
- this.fromLocation = fromLocation;
- this.methodName = simpleMethodElement.getAttribute("method-name");
- this.shortDescription = simpleMethodElement.getAttribute("short-description");
-
- defaultErrorCode = UtilXml.elementAttribute(simpleMethodElement, "default-error-code", "error");
- defaultSuccessCode = UtilXml.elementAttribute(simpleMethodElement, "default-success-code", "success");
-
- parameterMapName = UtilXml.elementAttribute(simpleMethodElement, "parameter-map-name", "parameters");
-
- eventRequestName = UtilXml.elementAttribute(simpleMethodElement, "event-request-object-name", "request");
- eventSessionName = UtilXml.elementAttribute(simpleMethodElement, "event-session-object-name", "session");
- eventResponseName = UtilXml.elementAttribute(simpleMethodElement, "event-response-object-name", "response");
- eventResponseCodeName = UtilXml.elementAttribute(simpleMethodElement, "event-response-code-name", "_response_code_");
- eventErrorMessageName = UtilXml.elementAttribute(simpleMethodElement, "event-error-message-name", "_error_message_");
- eventErrorMessageListName = UtilXml.elementAttribute(simpleMethodElement, "event-error-message-list-name", "_error_message_list_");
- eventEventMessageName = UtilXml.elementAttribute(simpleMethodElement, "event-event-message-name", "_event_message_");
- eventEventMessageListName = UtilXml.elementAttribute(simpleMethodElement, "event-event-message-list-name", "_event_message_list_");
-
- serviceResponseMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-response-message-name", "responseMessage");
- serviceErrorMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-name", "errorMessage");
- serviceErrorMessageListName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-list-name", "errorMessageList");
- serviceErrorMessageMapName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-map-name", "errorMessageMap");
-
- serviceSuccessMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-success-message-name", "successMessage");
- serviceSuccessMessageListName = UtilXml.elementAttribute(simpleMethodElement, "service-success-message-list-name", "successMessageList");
-
- loginRequired = !"false".equals(simpleMethodElement.getAttribute("login-required"));
- useTransaction = !"false".equals(simpleMethodElement.getAttribute("use-transaction"));
-
- localeName = UtilXml.elementAttribute(simpleMethodElement, "locale-name", "locale");
- delegatorName = UtilXml.elementAttribute(simpleMethodElement, "delegator-name", "delegator");
- securityName = UtilXml.elementAttribute(simpleMethodElement, "security-name", "security");
- dispatcherName = UtilXml.elementAttribute(simpleMethodElement, "dispatcher-name", "dispatcher");
- userLoginName = UtilXml.elementAttribute(simpleMethodElement, "user-login-name", "userLogin");
-
- readOperations(simpleMethodElement, this.methodOperations, this);
- }
-
- public String getFromLocation() {
- return this.fromLocation;
- }
- public String getMethodName() {
- return this.methodName;
- }
- public String getLocationAndName() {
- return this.fromLocation + "#" + this.methodName;
- }
-
- public SimpleMethod getSimpleMethodInSameFile(String simpleMethodName) {
- if (parentSimpleMethodsMap == null) return null;
- return parentSimpleMethodsMap.get(simpleMethodName);
- }
-
- public String getShortDescription() {
- return this.shortDescription + " [" + this.fromLocation + "#" + this.methodName + "]";
- }
-
- public String getDefaultErrorCode() {
- return this.defaultErrorCode;
- }
-
- public String getDefaultSuccessCode() {
- return this.defaultSuccessCode;
- }
-
- public String getParameterMapName() {
- return this.parameterMapName;
- }
-
- // event fields
- public String getEventRequestName() {
- return this.eventRequestName;
- }
-
- public String getEventSessionName() {
- return this.eventSessionName;
- }
-
- public String getEventResponseCodeName() {
- return this.eventResponseCodeName;
- }
-
- public String getEventErrorMessageName() {
- return this.eventErrorMessageName;
- }
- public String getEventErrorMessageListName() {
- return this.eventErrorMessageListName;
- }
-
- public String getEventEventMessageName() {
- return this.eventEventMessageName;
- }
- public String getEventEventMessageListName() {
- return this.eventEventMessageListName;
- }
-
- // service fields
- public String getServiceResponseMessageName() {
- return this.serviceResponseMessageName;
- }
-
- public String getServiceErrorMessageName() {
- return this.serviceErrorMessageName;
- }
-
- public String getServiceErrorMessageListName() {
- return this.serviceErrorMessageListName;
- }
-
- public String getServiceErrorMessageMapName() {
- return this.serviceErrorMessageMapName;
- }
-
- public String getServiceSuccessMessageName() {
- return this.serviceSuccessMessageName;
- }
-
- public String getServiceSuccessMessageListName() {
- return this.serviceSuccessMessageListName;
- }
-
- public boolean getLoginRequired() {
- return this.loginRequired;
- }
-
- public boolean getUseTransaction() {
- return this.useTransaction;
- }
-
- public String getDelegatorEnvName() {
- return this.delegatorName;
- }
-
- public String getSecurityEnvName() {
- return this.securityName;
- }
-
- public String getDispatcherEnvName() {
- return this.dispatcherName;
- }
-
- public String getUserLoginEnvName() {
- return this.userLoginName;
- }
-
- public Set<String> getAllServiceNamesCalled() throws MiniLangException {
- Set<String> allServiceNames = FastSet.newInstance();
- Set<String> simpleMethodsVisited = FastSet.newInstance();
- findServiceNamesCalled(this.methodOperations, allServiceNames, simpleMethodsVisited);
- return allServiceNames;
+ return simpleMethod.exec(methodContext);
}
- protected static void findServiceNamesCalled(List<MethodOperation> methodOperations, Set<String> allServiceNames, Set<String> simpleMethodsVisited) throws MiniLangException {
- for (MethodOperation methodOperation: methodOperations) {
- if (methodOperation instanceof CallService) {
- String svcName = ((CallService) methodOperation).getServiceName();
- if (UtilValidate.isNotEmpty(svcName)) allServiceNames.add(svcName);
- } else if (methodOperation instanceof CallServiceAsynch) {
- String svcName = ((CallServiceAsynch) methodOperation).getServiceName();
- if (UtilValidate.isNotEmpty(svcName)) allServiceNames.add(svcName);
- } else if (methodOperation instanceof SetServiceFields) {
- String svcName = ((SetServiceFields) methodOperation).getServiceName();
- if (UtilValidate.isNotEmpty(svcName)) allServiceNames.add(svcName);
- } else if (methodOperation instanceof CallSimpleMethod) {
- CallSimpleMethod csm = (CallSimpleMethod) methodOperation;
- try {
- SimpleMethod calledMethod = csm.getSimpleMethodToCall(methodOperations.getClass().getClassLoader());
- if (calledMethod == null) {
- Debug.logWarning("Could not find simple-method [" + csm.getMethodName() + "] in [" + csm.getXmlResource() + "] from the SimpleMethod [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]", module);
- } else {
- if (!simpleMethodsVisited.contains(calledMethod.getLocationAndName())) {
- simpleMethodsVisited.add(calledMethod.getLocationAndName());
- findServiceNamesCalled(calledMethod.methodOperations, allServiceNames, simpleMethodsVisited);
- }
- }
- } catch (MiniLangException e) {
- Debug.logWarning("Error getting simple-method info in the [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]: " + e.toString(), module);
- }
- } else if (methodOperation instanceof Iterate) {
- findServiceNamesCalled(((Iterate) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IterateMap) {
- findServiceNamesCalled(((IterateMap) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof Loop) {
- findServiceNamesCalled(((Loop) methodOperation).getSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof MasterIf) {
- findServiceNamesCalled(((MasterIf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof While) {
- findServiceNamesCalled(((While) methodOperation).getThenSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfValidateMethod) {
- findServiceNamesCalled(((IfValidateMethod) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfInstanceOf) {
- findServiceNamesCalled(((IfInstanceOf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompare) {
- findServiceNamesCalled(((IfCompare) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompareField) {
- findServiceNamesCalled(((IfCompareField) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfRegexp) {
- findServiceNamesCalled(((IfRegexp) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfEmpty) {
- findServiceNamesCalled(((IfEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfNotEmpty) {
- findServiceNamesCalled(((IfNotEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfHasPermission) {
- findServiceNamesCalled(((IfHasPermission) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- }
+ public static String runSimpleMethod(URL xmlURL, String methodName, MethodContext methodContext) throws MiniLangException {
+ Map<String, SimpleMethod> simpleMethods = getSimpleMethods(xmlURL);
+ SimpleMethod simpleMethod = simpleMethods.get(methodName);
+ if (simpleMethod == null) {
+ throw new MiniLangException("Could not find SimpleMethod " + methodName + " in XML document from URL: " + xmlURL.toString());
}
+ return simpleMethod.exec(methodContext);
}
- public Set<String> getAllEntityNamesUsed() throws MiniLangException {
- Set<String> allEntityNames = FastSet.newInstance();
- Set<String> simpleMethodsVisited = FastSet.newInstance();
- findEntityNamesUsed(this.methodOperations, allEntityNames, simpleMethodsVisited);
- return allEntityNames;
+ public static Map<String, Object> runSimpleService(String xmlResource, String methodName, DispatchContext ctx, Map<String, ? extends Object> context) throws MiniLangException {
+ MethodContext methodContext = new MethodContext(ctx, context, null);
+ runSimpleMethod(xmlResource, methodName, methodContext);
+ return methodContext.getResults();
}
- protected static void findEntityNamesUsed(List<MethodOperation> methodOperations, Set<String> allEntityNames, Set<String> simpleMethodsVisited) throws MiniLangException {
- for (MethodOperation methodOperation: methodOperations) {
- if (methodOperation instanceof FindByPrimaryKey) {
- String entName = ((FindByPrimaryKey) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof FindByAnd) {
- String entName = ((FindByAnd) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof EntityOne) {
- String entName = ((EntityOne) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof EntityAnd) {
- String entName = ((EntityAnd) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof EntityCondition) {
- String entName = ((EntityCondition) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof EntityCount) {
- String entName = ((EntityCount) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof MakeValue) {
- String entName = ((MakeValue) methodOperation).getEntityName();
- if (UtilValidate.isNotEmpty(entName)) allEntityNames.add(entName);
- } else if (methodOperation instanceof GetRelated) {
- String relationName = ((GetRelated) methodOperation).getRelationName();
- if (UtilValidate.isNotEmpty(relationName)) allEntityNames.add(relationName);
- } else if (methodOperation instanceof GetRelatedOne) {
- String relationName = ((GetRelatedOne) methodOperation).getRelationName();
- if (UtilValidate.isNotEmpty(relationName)) allEntityNames.add(relationName);
- } else if (methodOperation instanceof CallSimpleMethod) {
- CallSimpleMethod csm = (CallSimpleMethod) methodOperation;
- try {
- SimpleMethod calledMethod = csm.getSimpleMethodToCall(null);
- if (calledMethod == null) {
- Debug.logWarning("Could not find simple-method [" + csm.getMethodName() + "] in [" + csm.getXmlResource() + "] from the SimpleMethod [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]", module);
- } else {
- if (!simpleMethodsVisited.contains(calledMethod.getLocationAndName())) {
- simpleMethodsVisited.add(calledMethod.getLocationAndName());
- findEntityNamesUsed(calledMethod.methodOperations, allEntityNames, simpleMethodsVisited);
- }
- }
- } catch (MiniLangException e) {
- Debug.logWarning("Error getting simple-method info in the [" + csm.getSimpleMethod().getMethodName() + "] in [" + csm.getSimpleMethod().getFromLocation() + "]: " + e.toString(), module);
- }
- } else if (methodOperation instanceof Iterate) {
- findEntityNamesUsed(((Iterate) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IterateMap) {
- findEntityNamesUsed(((IterateMap) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof Loop) {
- findEntityNamesUsed(((Loop) methodOperation).getSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof MasterIf) {
- findEntityNamesUsed(((MasterIf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof While) {
- findEntityNamesUsed(((While) methodOperation).getThenSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfValidateMethod) {
- findEntityNamesUsed(((IfValidateMethod) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfInstanceOf) {
- findEntityNamesUsed(((IfInstanceOf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompare) {
- findEntityNamesUsed(((IfCompare) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompareField) {
- findEntityNamesUsed(((IfCompareField) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfRegexp) {
- findEntityNamesUsed(((IfRegexp) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfEmpty) {
- findEntityNamesUsed(((IfEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfNotEmpty) {
- findEntityNamesUsed(((IfNotEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfHasPermission) {
- findEntityNamesUsed(((IfHasPermission) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ public static Map<String, Object> runSimpleService(String xmlResource, String methodName, DispatchContext ctx, Map<String, ? extends Object> context, ClassLoader loader) throws MiniLangException {
+ MethodContext methodContext = new MethodContext(ctx, context, loader);
+ runSimpleMethod(xmlResource, methodName, methodContext);
+ return methodContext.getResults();
+ }
+
+ public static Map<String, Object> runSimpleService(URL xmlURL, String methodName, DispatchContext ctx, Map<String, ? extends Object> context, ClassLoader loader) throws MiniLangException {
+ MethodContext methodContext = new MethodContext(ctx, context, loader);
+ runSimpleMethod(xmlURL, methodName, methodContext);
+ return methodContext.getResults();
+ }
+
+ /**
+ * Execs the given operations returning true if all return true, or returning false and stopping if any return false.
+ */
+ public static boolean runSubOps(List<MethodOperation> methodOperations, MethodContext methodContext) {
+ for (MethodOperation methodOperation : methodOperations) {
+ try {
+ if (!methodOperation.exec(methodContext)) {
+ return false;
+ }
+ } catch (Throwable t) {
+ String errMsg = "Error in simple-method operation [" + methodOperation.rawString() + "]: " + t.toString();
+ Debug.logError(t, errMsg, module);
+ throw new RuntimeException(errMsg);
}
}
+ return true;
+ }
+
+ protected String defaultErrorCode;
+ protected String defaultSuccessCode;
+ protected String delegatorName;
+ protected String dispatcherName;
+ protected String eventErrorMessageListName;
+ protected String eventErrorMessageName;
+ protected String eventEventMessageListName;
+ protected String eventEventMessageName;
+ protected String eventRequestName;
+ protected String eventResponseCodeName;
+ protected String eventResponseName;
+ protected String eventSessionName;
+ protected String fromLocation;
+ protected String localeName;
+ protected boolean loginRequired = true;
+ protected String methodName;
+ protected List<MethodOperation> methodOperations = FastList.newInstance();
+ protected String parameterMapName;
+ protected Map<String, SimpleMethod> parentSimpleMethodsMap;
+ protected String securityName;
+ protected String serviceErrorMessageListName;
+ protected String serviceErrorMessageMapName;
+ protected String serviceErrorMessageName;
+ protected String serviceResponseMessageName;
+ protected String serviceSuccessMessageListName;
+ protected String serviceSuccessMessageName;
+ protected String shortDescription;
+ protected String userLoginName;
+ protected boolean useTransaction = true;
+
+ public SimpleMethod(Element simpleMethodElement, Map<String, SimpleMethod> parentSimpleMethodsMap, String fromLocation) {
+ this.parentSimpleMethodsMap = parentSimpleMethodsMap;
+ this.fromLocation = fromLocation;
+ this.methodName = simpleMethodElement.getAttribute("method-name");
+ this.shortDescription = simpleMethodElement.getAttribute("short-description");
+ defaultErrorCode = UtilXml.elementAttribute(simpleMethodElement, "default-error-code", "error");
+ defaultSuccessCode = UtilXml.elementAttribute(simpleMethodElement, "default-success-code", "success");
+ parameterMapName = UtilXml.elementAttribute(simpleMethodElement, "parameter-map-name", "parameters");
+ eventRequestName = UtilXml.elementAttribute(simpleMethodElement, "event-request-object-name", "request");
+ eventSessionName = UtilXml.elementAttribute(simpleMethodElement, "event-session-object-name", "session");
+ eventResponseName = UtilXml.elementAttribute(simpleMethodElement, "event-response-object-name", "response");
+ eventResponseCodeName = UtilXml.elementAttribute(simpleMethodElement, "event-response-code-name", "_response_code_");
+ eventErrorMessageName = UtilXml.elementAttribute(simpleMethodElement, "event-error-message-name", "_error_message_");
+ eventErrorMessageListName = UtilXml.elementAttribute(simpleMethodElement, "event-error-message-list-name", "_error_message_list_");
+ eventEventMessageName = UtilXml.elementAttribute(simpleMethodElement, "event-event-message-name", "_event_message_");
+ eventEventMessageListName = UtilXml.elementAttribute(simpleMethodElement, "event-event-message-list-name", "_event_message_list_");
+ serviceResponseMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-response-message-name", "responseMessage");
+ serviceErrorMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-name", "errorMessage");
+ serviceErrorMessageListName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-list-name", "errorMessageList");
+ serviceErrorMessageMapName = UtilXml.elementAttribute(simpleMethodElement, "service-error-message-map-name", "errorMessageMap");
+ serviceSuccessMessageName = UtilXml.elementAttribute(simpleMethodElement, "service-success-message-name", "successMessage");
+ serviceSuccessMessageListName = UtilXml.elementAttribute(simpleMethodElement, "service-success-message-list-name", "successMessageList");
+ loginRequired = !"false".equals(simpleMethodElement.getAttribute("login-required"));
+ useTransaction = !"false".equals(simpleMethodElement.getAttribute("use-transaction"));
+ localeName = UtilXml.elementAttribute(simpleMethodElement, "locale-name", "locale");
+ delegatorName = UtilXml.elementAttribute(simpleMethodElement, "delegator-name", "delegator");
+ securityName = UtilXml.elementAttribute(simpleMethodElement, "security-name", "security");
+ dispatcherName = UtilXml.elementAttribute(simpleMethodElement, "dispatcher-name", "dispatcher");
+ userLoginName = UtilXml.elementAttribute(simpleMethodElement, "user-login-name", "userLogin");
+ readOperations(simpleMethodElement, this.methodOperations, this);
}
/** Execute the Simple Method operations */
@@ -669,36 +549,30 @@ public class SimpleMethod {
// always put the null field object in as "null"
methodContext.putEnv("null", GenericEntity.NULL_FIELD);
methodContext.putEnv("nullField", GenericEntity.NULL_FIELD);
-
methodContext.putEnv(delegatorName, methodContext.getDelegator());
methodContext.putEnv(securityName, methodContext.getSecurity());
methodContext.putEnv(dispatcherName, methodContext.getDispatcher());
methodContext.putEnv(localeName, methodContext.getLocale());
methodContext.putEnv(parameterMapName, methodContext.getParameters());
-
if (methodContext.getMethodType() == MethodContext.EVENT) {
methodContext.putEnv(eventRequestName, methodContext.getRequest());
methodContext.putEnv(eventSessionName, methodContext.getRequest().getSession());
methodContext.putEnv(eventResponseName, methodContext.getResponse());
}
-
methodContext.putEnv("methodName", this.getMethodName());
methodContext.putEnv("methodShortDescription", this.getShortDescription());
-
-
GenericValue userLogin = methodContext.getUserLogin();
Locale locale = methodContext.getLocale();
-
if (userLogin != null) {
methodContext.putEnv(userLoginName, userLogin);
}
if (loginRequired) {
if (userLogin == null) {
- Map<String, Object> messageMap = UtilMisc.<String, Object>toMap("shortDescription", shortDescription);
+ Map<String, Object> messageMap = UtilMisc.<String, Object> toMap("shortDescription", shortDescription);
String errMsg = UtilProperties.getMessage(SimpleMethod.err_resource, "simpleMethod.must_logged_process", messageMap, locale) + ".";
if (methodContext.getMethodType() == MethodContext.EVENT) {
- methodContext.getRequest().setAttribute("_ERROR_MESSAGE_", errMsg);
+ methodContext.getRequest().setAttribute("_ERROR_MESSAGE_", errMsg);
return defaultErrorCode;
} else if (methodContext.getMethodType() == MethodContext.SERVICE) {
methodContext.putResult(ModelService.ERROR_MESSAGE, errMsg);
@@ -707,10 +581,8 @@ public class SimpleMethod {
}
}
}
-
// if using transaction, try to start here
boolean beganTransaction = false;
-
if (useTransaction) {
try {
beganTransaction = TransactionUtil.begin();
@@ -728,10 +600,8 @@ public class SimpleMethod {
}
}
}
-
// declare errorMsg here just in case transaction ops fail
String errorMsg = "";
-
boolean finished = false;
try {
finished = runSubOps(methodOperations, methodContext);
@@ -742,30 +612,25 @@ public class SimpleMethod {
finished = false;
errorMsg += errMsg + "<br/>";
}
-
String returnValue = null;
String response = null;
StringBuilder summaryErrorStringBuffer = new StringBuilder();
if (methodContext.getMethodType() == MethodContext.EVENT) {
boolean forceError = false;
-
String tempErrorMsg = (String) methodContext.getEnv(eventErrorMessageName);
if (errorMsg.length() > 0 || UtilValidate.isNotEmpty(tempErrorMsg)) {
errorMsg += tempErrorMsg;
methodContext.getRequest().setAttribute("_ERROR_MESSAGE_", errorMsg);
forceError = true;
-
summaryErrorStringBuffer.append(errorMsg);
}
List<Object> tempErrorMsgList = UtilGenerics.checkList(methodContext.getEnv(eventErrorMessageListName));
if (UtilValidate.isNotEmpty(tempErrorMsgList)) {
methodContext.getRequest().setAttribute("_ERROR_MESSAGE_LIST_", tempErrorMsgList);
forceError = true;
-
summaryErrorStringBuffer.append("; ");
summaryErrorStringBuffer.append(tempErrorMsgList.toString());
}
-
String eventMsg = (String) methodContext.getEnv(eventEventMessageName);
if (UtilValidate.isNotEmpty(eventMsg)) {
methodContext.getRequest().setAttribute("_EVENT_MESSAGE_", eventMsg);
@@ -774,11 +639,10 @@ public class SimpleMethod {
if (UtilValidate.isNotEmpty(eventMsgList)) {
methodContext.getRequest().setAttribute("_EVENT_MESSAGE_LIST_", eventMsgList);
}
-
response = (String) methodContext.getEnv(eventResponseCodeName);
if (UtilValidate.isEmpty(response)) {
if (forceError) {
- //override response code, always use error code
+ // override response code, always use error code
Debug.logInfo("No response code string found, but error messages found so assuming error; returning code [" + defaultErrorCode + "]", module);
response = defaultErrorCode;
} else {
@@ -791,48 +655,39 @@ public class SimpleMethod {
returnValue = response;
} else if (methodContext.getMethodType() == MethodContext.SERVICE) {
boolean forceError = false;
-
String tempErrorMsg = (String) methodContext.getEnv(serviceErrorMessageName);
if (errorMsg.length() > 0 || UtilValidate.isNotEmpty(tempErrorMsg)) {
errorMsg += tempErrorMsg;
methodContext.putResult(ModelService.ERROR_MESSAGE, errorMsg);
forceError = true;
-
summaryErrorStringBuffer.append(errorMsg);
}
-
List<Object> errorMsgList = UtilGenerics.checkList(methodContext.getEnv(serviceErrorMessageListName));
if (UtilValidate.isNotEmpty(errorMsgList)) {
methodContext.putResult(ModelService.ERROR_MESSAGE_LIST, errorMsgList);
forceError = true;
-
summaryErrorStringBuffer.append("; ");
summaryErrorStringBuffer.append(errorMsgList.toString());
}
-
Map<String, Object> errorMsgMap = UtilGenerics.checkMap(methodContext.getEnv(serviceErrorMessageMapName));
if (UtilValidate.isNotEmpty(errorMsgMap)) {
methodContext.putResult(ModelService.ERROR_MESSAGE_MAP, errorMsgMap);
forceError = true;
-
summaryErrorStringBuffer.append("; ");
summaryErrorStringBuffer.append(errorMsgMap.toString());
}
-
String successMsg = (String) methodContext.getEnv(serviceSuccessMessageName);
if (UtilValidate.isNotEmpty(successMsg)) {
methodContext.putResult(ModelService.SUCCESS_MESSAGE, successMsg);
}
-
List<Object> successMsgList = UtilGenerics.checkList(methodContext.getEnv(serviceSuccessMessageListName));
if (UtilValidate.isNotEmpty(successMsgList)) {
methodContext.putResult(ModelService.SUCCESS_MESSAGE_LIST, successMsgList);
}
-
response = (String) methodContext.getEnv(serviceResponseMessageName);
if (UtilValidate.isEmpty(response)) {
if (forceError) {
- //override response code, always use error code
+ // override response code, always use error code
Debug.logVerbose("No response code string found, but error messages found so assuming error; returning code [" + defaultErrorCode + "]", module);
response = defaultErrorCode;
} else {
@@ -846,13 +701,11 @@ public class SimpleMethod {
response = defaultSuccessCode;
returnValue = defaultSuccessCode;
}
-
// decide whether or not to commit based on the response message, ie only rollback if error is returned and not finished
boolean doCommit = true;
if (!finished && defaultErrorCode.equals(response)) {
doCommit = false;
}
-
if (doCommit) {
// commit here passing beganTransaction to perform it properly
try {
@@ -872,49 +725,131 @@ public class SimpleMethod {
errorMsg += errMsg + "<br/>";
}
}
-
return returnValue;
}
- public static void readOperations(Element simpleMethodElement, List<MethodOperation> methodOperations, SimpleMethod simpleMethod) {
- List<? extends Element> operationElements = UtilXml.childElementList(simpleMethodElement);
+ public Set<String> getAllEntityNamesUsed() throws MiniLangException {
+ Set<String> allEntityNames = FastSet.newInstance();
+ Set<String> simpleMethodsVisited = FastSet.newInstance();
+ findEntityNamesUsed(this.methodOperations, allEntityNames, simpleMethodsVisited);
+ return allEntityNames;
+ }
- if (UtilValidate.isNotEmpty(operationElements)) {
- for (Element curOperElem: operationElements) {
- String nodeName = curOperElem.getNodeName();
- MethodOperation methodOp = null;
+ public Set<String> getAllServiceNamesCalled() throws MiniLangException {
+ Set<String> allServiceNames = FastSet.newInstance();
+ Set<String> simpleMethodsVisited = FastSet.newInstance();
+ findServiceNamesCalled(this.methodOperations, allServiceNames, simpleMethodsVisited);
+ return allServiceNames;
+ }
- MethodOperation.Factory<MethodOperation> factory = methodOperationFactories.get(nodeName);
- if (factory != null) {
- methodOp = factory.createMethodOperation(curOperElem, simpleMethod);
- } else if ("else".equals(nodeName)) {
- // don't add anything, but don't complain either, this one is handled in the individual operations
- } else {
- Debug.logWarning("Operation element \"" + nodeName + "\" no recognized", module);
- }
- if (methodOp == null) continue;
- methodOperations.add(methodOp);
- DeprecatedOperation depOp = methodOp.getClass().getAnnotation(DeprecatedOperation.class);
- if (depOp != null) Debug.logInfo("The " + nodeName + " operation has been deprecated in favor of the " + depOp.value() + " operation; found use of this in [" + simpleMethod.getShortDescription() + "]: " + methodOp.rawString(), module);
- }
- }
+ public String getDefaultErrorCode() {
+ return this.defaultErrorCode;
}
- /** Execs the given operations returning true if all return true, or returning
- * false and stopping if any return false.
- */
- public static boolean runSubOps(List<MethodOperation> methodOperations, MethodContext methodContext) {
- for (MethodOperation methodOperation: methodOperations) {
- try {
- if (!methodOperation.exec(methodContext)) {
- return false;
- }
- } catch (Throwable t) {
- String errMsg = "Error in simple-method operation [" + methodOperation.rawString() + "]: " + t.toString();
- Debug.logError(t, errMsg, module);
- throw new RuntimeException(errMsg);
- }
- }
- return true;
+ public String getDefaultSuccessCode() {
+ return this.defaultSuccessCode;
+ }
+
+ public String getDelegatorEnvName() {
+ return this.delegatorName;
+ }
+
+ public String getDispatcherEnvName() {
+ return this.dispatcherName;
+ }
+
+ public String getEventErrorMessageListName() {
+ return this.eventErrorMessageListName;
+ }
+
+ public String getEventErrorMessageName() {
+ return this.eventErrorMessageName;
+ }
+
+ public String getEventEventMessageListName() {
+ return this.eventEventMessageListName;
+ }
+
+ public String getEventEventMessageName() {
+ return this.eventEventMessageName;
+ }
+
+ // event fields
+ public String getEventRequestName() {
+ return this.eventRequestName;
+ }
+
+ public String getEventResponseCodeName() {
+ return this.eventResponseCodeName;
+ }
+
+ public String getEventSessionName() {
+ return this.eventSessionName;
+ }
+
+ public String getFromLocation() {
+ return this.fromLocation;
+ }
+
+ public String getLocationAndName() {
+ return this.fromLocation + "#" + this.methodName;
+ }
+
+ public boolean getLoginRequired() {
+ return this.loginRequired;
+ }
+
+ public String getMethodName() {
+ return this.methodName;
+ }
+
+ public String getParameterMapName() {
+ return this.parameterMapName;
+ }
+
+ public String getSecurityEnvName() {
+ return this.securityName;
+ }
+
+ public String getServiceErrorMessageListName() {
+ return this.serviceErrorMessageListName;
+ }
+
+ public String getServiceErrorMessageMapName() {
+ return this.serviceErrorMessageMapName;
+ }
+
+ public String getServiceErrorMessageName() {
+ return this.serviceErrorMessageName;
+ }
+
+ public String getServiceResponseMessageName() {
+ return this.serviceResponseMessageName;
+ }
+
+ public String getServiceSuccessMessageListName() {
+ return this.serviceSuccessMessageListName;
+ }
+
+ public String getServiceSuccessMessageName() {
+ return this.serviceSuccessMessageName;
+ }
+
+ public String getShortDescription() {
+ return this.shortDescription + " [" + this.fromLocation + "#" + this.methodName + "]";
+ }
+
+ public SimpleMethod getSimpleMethodInSameFile(String simpleMethodName) {
+ if (parentSimpleMethodsMap == null)
+ return null;
+ return parentSimpleMethodsMap.get(simpleMethodName);
+ }
+
+ public String getUserLoginEnvName() {
+ return this.userLoginName;
+ }
+
+ public boolean getUseTransaction() {
+ return this.useTransaction;
}
}
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethodBsfEngine.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethodBsfEngine.java?rev=1327981&r1=1327980&r2=1327981&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethodBsfEngine.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethodBsfEngine.java Thu Apr 19 15:09:03 2012
@@ -24,20 +24,20 @@ import java.util.Vector;
import javolution.util.FastMap;
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.minilang.method.MethodContext;
-
import org.apache.bsf.BSFDeclaredBean;
import org.apache.bsf.BSFException;
import org.apache.bsf.BSFManager;
import org.apache.bsf.util.BSFEngineImpl;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.minilang.method.MethodContext;
/**
- * <P>This is the OFBiz MiniLang SimpleMethod adapter for IBM's Bean Scripting Famework.
- * It is an implementation of the BSFEngine class, allowing BSF aware
- * applications to use SimpleMethod as a scripting language.
- *
- * <P>There should only be ONE simple-method in the XML file and it will be run as an event.
+ * <P>
+ * This is the OFBiz MiniLang SimpleMethod adapter for IBM's Bean Scripting Famework. It is an implementation of the BSFEngine class, allowing BSF aware applications to use SimpleMethod as a scripting
+ * language.
+ *
+ * <P>
+ * There should only be ONE simple-method in the XML file and it will be run as an event.
*/
public class SimpleMethodBsfEngine extends BSFEngineImpl {
@@ -45,53 +45,36 @@ public class SimpleMethodBsfEngine exten
protected Map<String, Object> context = FastMap.newInstance();
+ /**
+ * This is an implementation of the apply() method. It executes the funcBody text in an "anonymous" method call with arguments.
+ */
@SuppressWarnings("unchecked")
@Override
- public void initialize(BSFManager mgr, String lang, Vector declaredBeans) throws BSFException {
- super.initialize(mgr, lang, declaredBeans);
-
- // declare the bsf manager for callbacks, etc.
- context.put("bsf", mgr);
-
- for(int i=0; i<declaredBeans.size(); i++) {
- BSFDeclaredBean bean = (BSFDeclaredBean)declaredBeans.get(i);
- declareBean(bean);
- }
- }
-
- public void setDebug(boolean debug) {
- //interpreter.DEBUG=debug;
+ public Object apply(String source, int lineNo, int columnNo, Object funcBody, Vector namesVec, Vector argsVec) throws BSFException {
+ // if (namesVec.size() != argsVec.size()) throw new BSFException("number of params/names mismatch");
+ // if (!(funcBody instanceof String)) throw new BSFException("apply: function body must be a string");
+ throw new BSFException("The apply method is not yet supported for simple-methods");
}
/**
- * Invoke method name on the specified scripted object.
- * The object may be null to indicate the global namespace of the
- * interpreter.
- * @param object may be null for the global namespace.
+ * Invoke method name on the specified scripted object. The object may be null to indicate the global namespace of the interpreter.
+ *
+ * @param object
+ * may be null for the global namespace.
*/
public Object call(Object object, String name, Object[] args) throws BSFException {
throw new BSFException("The call method is not yet supported for SimpleMethods");
}
-
- /**
- * This is an implementation of the apply() method.
- * It exectutes the funcBody text in an "anonymous" method call with
- * arguments.
- */
- @SuppressWarnings("unchecked")
@Override
- public Object apply(String source, int lineNo, int columnNo, Object funcBody, Vector namesVec, Vector argsVec) throws BSFException {
- //if (namesVec.size() != argsVec.size()) throw new BSFException("number of params/names mismatch");
- //if (!(funcBody instanceof String)) throw new BSFException("apply: function body must be a string");
-
- throw new BSFException("The apply method is not yet supported for simple-methods");
+ public void declareBean(BSFDeclaredBean bean) throws BSFException {
+ context.put(bean.name, bean.bean);
}
public Object eval(String source, int lineNo, int columnNo, Object expr) throws BSFException {
- if (!(expr instanceof String)) throw new BSFException("simple-method expression must be a string");
-
- //right now only supports one method per file, so get all methods and just run the first...
+ if (!(expr instanceof String))
+ throw new BSFException("simple-method expression must be a string");
+ // right now only supports one method per file, so get all methods and just run the first...
Map<String, SimpleMethod> simpleMethods = null;
try {
simpleMethods = SimpleMethod.getDirectSimpleMethods(source, (String) expr, "<bsf source>");
@@ -99,46 +82,52 @@ public class SimpleMethodBsfEngine exten
throw new BSFException("Error loading/parsing simple-method XML source: " + e.getMessage());
}
Set<String> smNames = simpleMethods.keySet();
- if (smNames.size() == 0) throw new BSFException("Did not find any simple-methods in the file");
-
+ if (smNames.size() == 0)
+ throw new BSFException("Did not find any simple-methods in the file");
String methodName = smNames.iterator().next();
- if (smNames.size() > 1) Debug.logWarning("Found more than one simple-method in the file, running the [" + methodName + "] method, you should remove all but one method from this file", module);
-
+ if (smNames.size() > 1)
+ Debug.logWarning("Found more than one simple-method in the file, running the [" + methodName + "] method, you should remove all but one method from this file", module);
SimpleMethod simpleMethod = simpleMethods.get(methodName);
MethodContext methodContext = new MethodContext(context, null, MethodContext.EVENT);
return simpleMethod.exec(methodContext);
- //methodContext.getResults();
+ // methodContext.getResults();
}
-
@Override
public void exec(String source, int lineNo, int columnNo, Object script) throws BSFException {
eval(source, lineNo, columnNo, script);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public void initialize(BSFManager mgr, String lang, Vector declaredBeans) throws BSFException {
+ super.initialize(mgr, lang, declaredBeans);
+ // declare the bsf manager for callbacks, etc.
+ context.put("bsf", mgr);
+ for (int i = 0; i < declaredBeans.size(); i++) {
+ BSFDeclaredBean bean = (BSFDeclaredBean) declaredBeans.get(i);
+ declareBean(bean);
+ }
+ }
-/*
- public void compileApply (String source, int lineNo, int columnNo,
- Object funcBody, Vector paramNames, Vector arguments, CodeBuffer cb)
- throws BSFException;
-
- public void compileExpr (String source, int lineNo, int columnNo,
- Object expr, CodeBuffer cb) throws BSFException;
+ /*
+ * public void compileApply (String source, int lineNo, int columnNo, Object funcBody, Vector paramNames, Vector arguments, CodeBuffer cb) throws BSFException;
+ *
+ * public void compileExpr (String source, int lineNo, int columnNo, Object expr, CodeBuffer cb) throws BSFException;
+ *
+ * public void compileScript (String source, int lineNo, int columnNo, Object script, CodeBuffer cb) throws BSFException;
+ */
- public void compileScript (String source, int lineNo, int columnNo,
- Object script, CodeBuffer cb) throws BSFException;
- */
+ public void setDebug(boolean debug) {
+ // interpreter.DEBUG=debug;
+ }
@Override
- public void declareBean(BSFDeclaredBean bean) throws BSFException {
- context.put(bean.name, bean.bean);
+ public void terminate() {
}
@Override
public void undeclareBean(BSFDeclaredBean bean) throws BSFException {
context.remove(bean.name);
}
-
- @Override
- public void terminate() { }
}
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleServiceEngine.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleServiceEngine.java?rev=1327981&r1=1327980&r2=1327981&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleServiceEngine.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleServiceEngine.java Thu Apr 19 15:09:03 2012
@@ -36,16 +36,11 @@ public final class SimpleServiceEngine e
super(dispatcher);
}
- /** Run the service synchronously and IGNORE the result
- * @param context Map of name, value pairs composing the context
- */
- @Override
- public void runSyncIgnore(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException {
- runSync(localName, modelService, context);
- }
-
- /** Run the service synchronously and return the result
- * @param context Map of name, value pairs composing the context
+ /**
+ * Run the service synchronously and return the result
+ *
+ * @param context
+ * Map of name, value pairs composing the context
* @return Map of name, value pairs composing the result
*/
@Override
@@ -56,29 +51,34 @@ public final class SimpleServiceEngine e
return result;
}
+ /**
+ * Run the service synchronously and IGNORE the result
+ *
+ * @param context
+ * Map of name, value pairs composing the context
+ */
+ @Override
+ public void runSyncIgnore(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException {
+ runSync(localName, modelService, context);
+ }
+
// Invoke the simple method from a service context
private Map<String, Object> serviceInvoker(String localName, ModelService modelService, Map<String, ? extends Object> context) throws GenericServiceException {
// static java service methods should be: public Map methodName(DispatchContext dctx, Map context)
DispatchContext dctx = dispatcher.getLocalContext(localName);
-
// check the package and method names
if (modelService.location == null || modelService.invoke == null)
throw new GenericServiceException("Cannot locate service to invoke (location or invoke name missing)");
-
// get the classloader to use
ClassLoader classLoader = null;
-
if (dctx != null)
classLoader = dctx.getClassLoader();
-
// if the classLoader is null, no big deal, SimpleMethod will use the
// current thread's ClassLoader by default if null passed in
-
try {
return SimpleMethod.runSimpleService(this.getLocation(modelService), modelService.invoke, dctx, context, classLoader);
} catch (MiniLangException e) {
- throw new GenericServiceException("Error running simple method [" + modelService.invoke +
- "] in XML file [" + modelService.location + "]: ", e);
+ throw new GenericServiceException("Error running simple method [" + modelService.invoke + "] in XML file [" + modelService.location + "]: ", e);
}
}
}