|
Author: adrianc
Date: Sat May 26 05:01:00 2012 New Revision: 1342854 URL: http://svn.apache.org/viewvc?rev=1342854&view=rev Log: Overhauled Mini-language <filter-list-by-date> element. Modified: ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FilterListByDate.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=1342854&r1=1342853&r2=1342854&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd (original) +++ ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd Sat May 26 05:01:00 2012 @@ -2884,6 +2884,7 @@ under the License. <xs:annotation> <xs:documentation> The name of the field that contains the map that will be used for the entity field comparison. + <br/><br/> Required. Attribute type: expression. </xs:documentation> </xs:annotation> @@ -2893,6 +2894,7 @@ under the License. <xs:documentation> The name of the field the filtered list will be put into. Defaults to the value of the list-name attribute (replaces the old list). + <br/><br/> Optional. Attribute type: expression. </xs:documentation> </xs:annotation> @@ -2902,68 +2904,64 @@ under the License. <xs:element name="filter-list-by-date" substitutionGroup="EntityFindOperations"> <xs:annotation> <xs:documentation> - The filter-list-by-date tag filters the given list by the valid date using the from and thru dates in each value object. + Filters a list of entity values by their date-range fields. + Each entity value in the list will be compared to the specified date, and + if the entity value's date-range fields include the date, the entity value + will be copied to the target list. </xs:documentation> </xs:annotation> <xs:complexType> - <xs:attributeGroup ref="attlist.filter-list-by-date"/> + <xs:attribute type="xs:string" name="list" use="required"> + <xs:annotation> + <xs:documentation> + The name of the field that contains the list of entity values. + <br/><br/> + Required. Attribute type: expression. + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute type="xs:string" name="to-list"> + <xs:annotation> + <xs:documentation> + The name of the field the filtered list will be put into. + Defaults to the value of the list-name attribute (replaces the old list). + <br/><br/> + Optional. Attribute type: expression. + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute type="xs:string" name="valid-date"> + <xs:annotation> + <xs:documentation> + The name of a field in the method environment date to filter by. + Defaults to now. + <br/><br/> + Optional. Attribute type: expression. + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute type="xs:string" name="from-field-name"> + <xs:annotation> + <xs:documentation> + The name of the entity field to use as the beginning date. + Defaults to "fromDate". + <br/><br/> + Optional. Attribute type: constant. + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute type="xs:string" name="thru-field-name"> + <xs:annotation> + <xs:documentation> + The name of the entity field to use as the ending date. + Defaults to "thruDate". + <br/><br/> + Optional. Attribute type: constant. + </xs:documentation> + </xs:annotation> + </xs:attribute> </xs:complexType> </xs:element> - <xs:attributeGroup name="attlist.filter-list-by-date"> - <xs:attribute type="xs:string" name="list" use="required"> - <xs:annotation> - <xs:documentation> - The name of the method environment field that contains the list of GenericValue objects. - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute type="xs:string" name="to-list"> - <xs:annotation> - <xs:documentation> - The name of the method environment field the filtered list will be put into. - Defaults to the value of the list-name attribute (ie goes to the same place it came from, replacing the old list). - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute type="xs:string" name="valid-date"> - <xs:annotation> - <xs:documentation> - The name of a field in the method environment date to filter by. - Defaults to now. - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute type="xs:string" name="from-field-name" default="fromDate"> - <xs:annotation> - <xs:documentation> - The name of the GenericValue field to use as the beginning effective date. - Defaults to fromDate. - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute type="xs:string" name="thru-field-name" default="thruDate"> - <xs:annotation> - <xs:documentation> - The name of the GenericValue field to use as the ending effective date. - Defaults to thruDate. - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="all-same" default="true"> - <xs:annotation> - <xs:documentation> - Specifies whether or not all GenericValue objects in the list are of the same entity. - Defaults to true. - </xs:documentation> - </xs:annotation> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="true"/> - <xs:enumeration value="false"/> - </xs:restriction> - </xs:simpleType> - </xs:attribute> - </xs:attributeGroup> <xs:element name="make-value" substitutionGroup="EntityValueOperations"> <xs:annotation> <xs:documentation> Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FilterListByDate.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FilterListByDate.java?rev=1342854&r1=1342853&r2=1342854&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FilterListByDate.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/FilterListByDate.java Sat May 26 05:01:00 2012 @@ -22,72 +22,91 @@ import java.sql.Timestamp; import java.util.List; import org.ofbiz.base.util.UtilDateTime; -import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; 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.w3c.dom.Element; /** - * Uses the delegator to find entity values by anding the map fields + * Implements the <filter-list-by-date> element. */ -public class FilterListByDate extends MethodOperation { +public final class FilterListByDate extends MethodOperation { - String allSameStr; - String fromFieldName; - ContextAccessor<List<GenericEntity>> listAcsr; - String thruFieldName; - ContextAccessor<List<GenericEntity>> toListAcsr; - ContextAccessor<Timestamp> validDateAcsr; + private final FlexibleMapAccessor<List<GenericEntity>> listFma; + private final FlexibleMapAccessor<List<GenericEntity>> toListFma; + private final FlexibleMapAccessor<Timestamp> validDateFma; + private final String fromFieldName; + private final String thruFieldName; public FilterListByDate(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - listAcsr = new ContextAccessor<List<GenericEntity>>(element.getAttribute("list"), element.getAttribute("list-name")); - toListAcsr = new ContextAccessor<List<GenericEntity>>(element.getAttribute("to-list"), element.getAttribute("to-list-name")); - if (toListAcsr.isEmpty()) { - toListAcsr = listAcsr; + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "list", "to-list", "valid-date", "fromDate", "thruDate"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "list"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "list", "to-list", "valid-date"); + MiniLangValidate.constantAttributes(simpleMethod, element, "fromDate", "thruDate"); + MiniLangValidate.noChildElements(simpleMethod, element); } - validDateAcsr = new ContextAccessor<Timestamp>(element.getAttribute("valid-date"), element.getAttribute("valid-date-name")); - fromFieldName = element.getAttribute("from-field-name"); - if (UtilValidate.isEmpty(fromFieldName)) - fromFieldName = "fromDate"; - thruFieldName = element.getAttribute("thru-field-name"); - if (UtilValidate.isEmpty(thruFieldName)) - thruFieldName = "thruDate"; - allSameStr = element.getAttribute("all-same"); + listFma = FlexibleMapAccessor.getInstance(element.getAttribute("list")); + String toListAttribute = element.getAttribute("to-list"); + if (toListAttribute.isEmpty()) { + toListFma = listFma; + } else { + toListFma = FlexibleMapAccessor.getInstance(toListAttribute); + } + validDateFma = FlexibleMapAccessor.getInstance(element.getAttribute("valid-date")); + fromFieldName = MiniLangValidate.checkAttribute(element.getAttribute("from-field-name"), "fromDate"); + thruFieldName = MiniLangValidate.checkAttribute(element.getAttribute("thru-field-name"), "thruDate"); } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - if (!validDateAcsr.isEmpty()) { - toListAcsr.put(methodContext, EntityUtil.filterByDate(listAcsr.get(methodContext), validDateAcsr.get(methodContext), fromFieldName, thruFieldName, true)); + if (!validDateFma.isEmpty()) { + toListFma.put(methodContext.getEnvMap(), EntityUtil.filterByDate(listFma.get(methodContext.getEnvMap()), validDateFma.get(methodContext.getEnvMap()), fromFieldName, thruFieldName, true)); } else { - toListAcsr.put(methodContext, EntityUtil.filterByDate(listAcsr.get(methodContext), UtilDateTime.nowTimestamp(), fromFieldName, thruFieldName, true)); + toListFma.put(methodContext.getEnvMap(), EntityUtil.filterByDate(listFma.get(methodContext.getEnvMap()), UtilDateTime.nowTimestamp(), fromFieldName, thruFieldName, true)); } return true; } @Override public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); + return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap()); } @Override public String rawString() { - // TODO: something more than the empty tag - return "<filter-list-by-date/>"; + return toString(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("<filter-list-by-date "); + sb.append("list=\"").append(this.listFma).append("\" "); + sb.append("to-list=\"").append(this.toListFma).append("\" "); + sb.append("valid-date=\"").append(this.validDateFma).append("\" "); + sb.append("from-field-name=\"").append(this.fromFieldName).append("\" "); + sb.append("thru-field-name=\"").append(this.thruFieldName).append("\" "); + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <filter-list-by-date> element. + */ public static final class FilterListByDateFactory implements Factory<FilterListByDate> { + @Override public FilterListByDate createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new FilterListByDate(element, simpleMethod); } + @Override public String getName() { return "filter-list-by-date"; } |
| Free forum by Nabble | Edit this page |
