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/23 04:31:54 UTC
svn commit: r1329034 - in /ofbiz/trunk/framework/minilang: dtd/
src/META-INF/services/ src/org/ofbiz/minilang/method/conditional/
src/org/ofbiz/minilang/method/envops/
Author: adrianc
Date: Mon Apr 23 02:31:53 2012
New Revision: 1329034
URL: http://svn.apache.org/viewvc?rev=1329034&view=rev
Log:
Added <continue> and <break> elements to Mini-language looping elements.
Added:
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java (with props)
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java (with props)
Modified:
ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd
ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/While.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Iterate.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/IterateMap.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Loop.java
Modified: ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd (original)
+++ ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd Mon Apr 23 02:31:53 2012
@@ -3568,6 +3568,20 @@ under the License.
</xs:annotation>
</xs:attribute>
</xs:attributeGroup>
+ <xs:element name="break" substitutionGroup="ControlOperations">
+ <xs:annotation>
+ <xs:documentation>
+ Causes script execution to exit the nearest enclosing loop element.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="continue" substitutionGroup="ControlOperations">
+ <xs:annotation>
+ <xs:documentation>
+ Causes script execution to return to the beginning of the nearest enclosing loop element.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
<xs:element name="return" substitutionGroup="ControlOperations">
<xs:annotation>
<xs:documentation>
Modified: ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation%24Factory?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory (original)
+++ ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory Mon Apr 23 02:31:53 2012
@@ -67,7 +67,9 @@ org.ofbiz.minilang.method.entityops.Stor
org.ofbiz.minilang.method.entityops.TransactionBegin$TransactionBeginFactory
org.ofbiz.minilang.method.entityops.TransactionCommit$TransactionCommitFactory
org.ofbiz.minilang.method.entityops.TransactionRollback$TransactionRollbackFactory
+org.ofbiz.minilang.method.envops.Break$BreakFactory
org.ofbiz.minilang.method.envops.ClearField$ClearFieldFactory
+org.ofbiz.minilang.method.envops.Continue$ContinueFactory
org.ofbiz.minilang.method.envops.FieldToList$FieldToListFactory
org.ofbiz.minilang.method.envops.FirstFromList$FirstFromListFactory
org.ofbiz.minilang.method.envops.Iterate$IterateFactory
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/While.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/While.java?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/While.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/While.java Mon Apr 23 02:31:53 2012
@@ -27,6 +27,8 @@ import org.ofbiz.minilang.MiniLangExcept
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
import org.ofbiz.minilang.method.MethodOperation;
+import org.ofbiz.minilang.method.envops.Break.BreakElementException;
+import org.ofbiz.minilang.method.envops.Continue.ContinueElementException;
import org.w3c.dom.Element;
/**
@@ -52,9 +54,20 @@ public class While extends MethodOperati
// if a sub-op returns false return false and stop, otherwise drop though loop and
// return true
while (condition.checkCondition(methodContext)) {
- boolean runSubOpsResult = SimpleMethod.runSubOps(thenSubOps, methodContext);
- if (!runSubOpsResult) {
- return false;
+ try {
+ for (MethodOperation methodOperation : thenSubOps) {
+ if (!methodOperation.exec(methodContext)) {
+ return false;
+ }
+ }
+ } catch (MiniLangException e) {
+ if (e instanceof BreakElementException) {
+ break;
+ }
+ if (e instanceof ContinueElementException) {
+ continue;
+ }
+ throw e;
}
}
return true;
Added: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java?rev=1329034&view=auto
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java (added)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java Mon Apr 23 02:31:53 2012
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.minilang.method.envops;
+
+import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.SimpleMethod;
+import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
+import org.w3c.dom.Element;
+
+/**
+ * Causes script execution to exit the nearest loop element.
+ */
+public class Break extends MethodOperation {
+
+ public Break(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ super(element, simpleMethod);
+ }
+
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ throw new BreakElementException();
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return this.rawString();
+ }
+
+ @Override
+ public String rawString() {
+ return "<break/>";
+ }
+
+ @SuppressWarnings("serial")
+ public class BreakElementException extends MiniLangException {
+
+ public BreakElementException() {
+ super("<break> element encountered without enclosing loop");
+ }
+
+ @Override
+ public String getMessage() {
+ StringBuilder sb = new StringBuilder(super.getMessage());
+ SimpleMethod method = getSimpleMethod();
+ sb.append(" Method = ").append(method.getMethodName()).append(", File = ").append(method.getFromLocation());
+ sb.append(", Element = <break>, Line ").append(getLineNumber());
+ return sb.toString();
+ }
+ }
+
+ public static final class BreakFactory implements Factory<Break> {
+ public Break createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new Break(element, simpleMethod);
+ }
+
+ public String getName() {
+ return "break";
+ }
+ }
+}
Propchange: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Break.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Rev URL
Added: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java?rev=1329034&view=auto
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java (added)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java Mon Apr 23 02:31:53 2012
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.minilang.method.envops;
+
+import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.SimpleMethod;
+import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
+import org.w3c.dom.Element;
+
+/**
+ * Causes script execution to return to the beginning of the nearest enclosing loop element.
+ */
+public class Continue extends MethodOperation {
+
+ public Continue(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ super(element, simpleMethod);
+ }
+
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ throw new ContinueElementException();
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return this.rawString();
+ }
+
+ @Override
+ public String rawString() {
+ return "<continue/>";
+ }
+
+ @SuppressWarnings("serial")
+ public class ContinueElementException extends MiniLangException {
+
+ public ContinueElementException() {
+ super("<continue> element encountered without enclosing loop");
+ }
+
+ @Override
+ public String getMessage() {
+ StringBuilder sb = new StringBuilder(super.getMessage());
+ SimpleMethod method = getSimpleMethod();
+ sb.append(" Method = ").append(method.getMethodName()).append(", File = ").append(method.getFromLocation());
+ sb.append(", Element = <continue>, Line ").append(getLineNumber());
+ return sb.toString();
+ }
+ }
+
+ public static final class ContinueFactory implements Factory<Continue> {
+ public Continue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new Continue(element, simpleMethod);
+ }
+
+ public String getName() {
+ return "continue";
+ }
+ }
+}
Propchange: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Continue.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Rev URL
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Iterate.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Iterate.java?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Iterate.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Iterate.java Mon Apr 23 02:31:53 2012
@@ -34,6 +34,8 @@ import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.ContextAccessor;
import org.ofbiz.minilang.method.MethodContext;
import org.ofbiz.minilang.method.MethodOperation;
+import org.ofbiz.minilang.method.envops.Break.BreakElementException;
+import org.ofbiz.minilang.method.envops.Continue.ContinueElementException;
import org.w3c.dom.Element;
/**
@@ -68,9 +70,20 @@ public class Iterate extends MethodOpera
try {
while ((theEntry = eli.next()) != null) {
entryAcsr.put(methodContext, theEntry);
- if (!SimpleMethod.runSubOps(subOps, methodContext)) {
- // only return here if it returns false, otherwise just carry on
- return false;
+ try {
+ for (MethodOperation methodOperation : subOps) {
+ if (!methodOperation.exec(methodContext)) {
+ return false;
+ }
+ }
+ } catch (MiniLangException e) {
+ if (e instanceof BreakElementException) {
+ break;
+ }
+ if (e instanceof ContinueElementException) {
+ continue;
+ }
+ throw e;
}
}
} finally {
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/IterateMap.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/IterateMap.java?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/IterateMap.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/IterateMap.java Mon Apr 23 02:31:53 2012
@@ -29,6 +29,8 @@ import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.ContextAccessor;
import org.ofbiz.minilang.method.MethodContext;
import org.ofbiz.minilang.method.MethodOperation;
+import org.ofbiz.minilang.method.envops.Break.BreakElementException;
+import org.ofbiz.minilang.method.envops.Continue.ContinueElementException;
import org.w3c.dom.Element;
/**
@@ -79,10 +81,20 @@ public class IterateMap extends MethodOp
for (Map.Entry<? extends Object, ? extends Object> theEntry : theMap.entrySet()) {
keyAcsr.put(methodContext, theEntry.getKey());
valueAcsr.put(methodContext, theEntry.getValue());
-
- if (!SimpleMethod.runSubOps(subOps, methodContext)) {
- // only return here if it returns false, otherwise just carry on
- return false;
+ try {
+ for (MethodOperation methodOperation : subOps) {
+ if (!methodOperation.exec(methodContext)) {
+ return false;
+ }
+ }
+ } catch (MiniLangException e) {
+ if (e instanceof BreakElementException) {
+ break;
+ }
+ if (e instanceof ContinueElementException) {
+ continue;
+ }
+ throw e;
}
}
return true;
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Loop.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Loop.java?rev=1329034&r1=1329033&r2=1329034&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Loop.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Loop.java Mon Apr 23 02:31:53 2012
@@ -28,6 +28,8 @@ import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.ContextAccessor;
import org.ofbiz.minilang.method.MethodContext;
import org.ofbiz.minilang.method.MethodOperation;
+import org.ofbiz.minilang.method.envops.Break.BreakElementException;
+import org.ofbiz.minilang.method.envops.Continue.ContinueElementException;
import org.w3c.dom.Element;
/**
@@ -67,9 +69,20 @@ public class Loop extends MethodOperatio
}
for (int i = 0; i < count; i++) {
fieldAcsr.put(methodContext, i);
- if (!SimpleMethod.runSubOps(subOps, methodContext)) {
- // only return here if it returns false, otherwise just carry on
- return false;
+ try {
+ for (MethodOperation methodOperation : subOps) {
+ if (!methodOperation.exec(methodContext)) {
+ return false;
+ }
+ }
+ } catch (MiniLangException e) {
+ if (e instanceof BreakElementException) {
+ break;
+ }
+ if (e instanceof ContinueElementException) {
+ continue;
+ }
+ throw e;
}
}
return true;
@@ -86,7 +99,7 @@ public class Loop extends MethodOperatio
@Override
public String rawString() {
- return "<loop count=\"" + this.countStr + "\"/>";
+ return "<loop field=\"" + this.fieldAcsr + "\" count=\"" + this.countStr + "\"/>";
}
public static final class LoopFactory implements Factory<Loop> {