Author: adrianc
Date: Fri Jun 29 12:56:33 2012
New Revision: 1355348
URL: http://svn.apache.org/viewvc?rev=1355348&view=rev
Log:
Mini-language <find-by-and> element improvement: add a fields-to-select-list
attribute.
Modified:
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FindByAnd.java
Modified:
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FindByAnd.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FindByAnd.java?rev=1355348&r1=1355347&r2=1355348&view=diff
==============================================================================
---
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FindByAnd.java
(original)
+++
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FindByAnd.java
Fri Jun 29 12:56:33 2012
@@ -18,10 +18,12 @@
*******************************************************************************/
package org.ofbiz.minilang.method.entityops;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.collections.FlexibleMapAccessor;
import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.Delegator;
@@ -38,6 +40,8 @@ import org.w3c.dom.Element;
/**
* Implements the <find-by-and> element.
+ *
+ * @see <a
href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cfindbyand%3E}}">Mini-language
Reference</a>
*/
public final class FindByAnd extends MethodOperation {
@@ -45,6 +49,7 @@ public final class FindByAnd extends Met
private final FlexibleStringExpander delegatorNameFse;
private final FlexibleStringExpander entityNameFse;
+ private final FlexibleMapAccessor<Collection<String>>
fieldsToSelectListFma;
private final FlexibleMapAccessor<Object> listFma;
private final FlexibleMapAccessor<Map<String, ? extends Object>> mapFma;
private final FlexibleMapAccessor<List<String>> orderByListFma;
@@ -54,15 +59,16 @@ public final class FindByAnd extends Met
public FindByAnd(Element element, SimpleMethod simpleMethod) throws
MiniLangException {
super(element, simpleMethod);
if (MiniLangValidate.validationOn()) {
- MiniLangValidate.attributeNames(simpleMethod, element,
"entity-name", "use-cache", "use-iterator", "list", "map", "order-by-list",
"delegator-name");
+ MiniLangValidate.attributeNames(simpleMethod, element,
"entity-name", "use-cache", "fields-to-select-list", "use-iterator", "list",
"map", "order-by-list", "delegator-name");
MiniLangValidate.requiredAttributes(simpleMethod, element,
"entity-name", "list", "map");
- MiniLangValidate.expressionAttributes(simpleMethod, element,
"list", "map", "order-by-list");
+ MiniLangValidate.expressionAttributes(simpleMethod, element,
"list", "map", "fields-to-select-list", "order-by-list");
MiniLangValidate.noChildElements(simpleMethod, element);
}
entityNameFse =
FlexibleStringExpander.getInstance(element.getAttribute("entity-name"));
listFma =
FlexibleMapAccessor.getInstance(element.getAttribute("list"));
mapFma = FlexibleMapAccessor.getInstance(element.getAttribute("map"));
orderByListFma =
FlexibleMapAccessor.getInstance(element.getAttribute("order-by-list"));
+ fieldsToSelectListFma =
FlexibleMapAccessor.getInstance(element.getAttribute("fields-to-select-list"));
useCacheFse =
FlexibleStringExpander.getInstance(element.getAttribute("use-cache"));
useIteratorFse =
FlexibleStringExpander.getInstance(element.getAttribute("use-iterator"));
delegatorNameFse =
FlexibleStringExpander.getInstance(element.getAttribute("delegator-name"));
@@ -75,19 +81,21 @@ public final class FindByAnd extends Met
boolean useCache =
"true".equals(useCacheFse.expandString(methodContext.getEnvMap()));
boolean useIterator =
"true".equals(useIteratorFse.expandString(methodContext.getEnvMap()));
List<String> orderByNames =
orderByListFma.get(methodContext.getEnvMap());
+ Collection<String> fieldsToSelectList =
fieldsToSelectListFma.get(methodContext.getEnvMap());
Delegator delegator = methodContext.getDelegator();
if (!delegatorName.isEmpty()) {
delegator = DelegatorFactory.getDelegator(delegatorName);
}
try {
+ EntityCondition whereCond = null;
+ Map<String, ? extends Object> fieldMap =
mapFma.get(methodContext.getEnvMap());
+ if (fieldMap != null) {
+ whereCond = EntityCondition.makeCondition(fieldMap);
+ }
if (useIterator) {
- EntityCondition whereCond = null;
- if (!mapFma.isEmpty()) {
- whereCond =
EntityCondition.makeCondition(mapFma.get(methodContext.getEnvMap()));
- }
- listFma.put(methodContext.getEnvMap(),
delegator.find(entityName, whereCond, null, null, orderByNames, null));
+ listFma.put(methodContext.getEnvMap(),
delegator.find(entityName, whereCond, null, UtilMisc.toSet(fieldsToSelectList),
orderByNames, null));
} else {
- listFma.put(methodContext.getEnvMap(),
delegator.findByAnd(entityName, mapFma.get(methodContext.getEnvMap()),
orderByNames, useCache));
+ listFma.put(methodContext.getEnvMap(),
delegator.findList(entityName, whereCond, UtilMisc.toSet(fieldsToSelectList),
orderByNames, null, useCache));
}
} catch (GenericEntityException e) {
String errMsg = "Exception thrown while performing entity find: "
+ e.getMessage();
@@ -112,6 +120,9 @@ public final class FindByAnd extends Met
if (!orderByListFma.isEmpty()) {
sb.append("order-by-list=\"").append(this.orderByListFma).append("\" ");
}
+ if (!fieldsToSelectListFma.isEmpty()) {
+
sb.append("fields-to-select-list=\"").append(this.fieldsToSelectListFma).append("\"
");
+ }
if (!useCacheFse.isEmpty()) {
sb.append("use-cache=\"").append(this.useCacheFse).append("\" ");
}