001: /**
002: * Copyright 2006 Webmedia Group Ltd.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: **/package org.araneaframework.uilib.list.structure.filter.field;
016:
017: import java.util.Comparator;
018: import java.util.Map;
019: import org.araneaframework.backend.list.memorybased.Expression;
020: import org.araneaframework.uilib.form.Control;
021: import org.araneaframework.uilib.form.FormElement;
022: import org.araneaframework.uilib.list.structure.filter.FilterContext;
023: import org.araneaframework.uilib.list.util.ExpressionUtil;
024: import org.araneaframework.uilib.list.util.FilterFormUtil;
025: import org.araneaframework.uilib.util.Event;
026:
027: public abstract class LowerThanFilter extends BaseFieldFilter {
028:
029: private static final long serialVersionUID = 1L;
030:
031: private Comparator comparator;
032:
033: public static LowerThanFilter getInstance(final FilterContext ctx,
034: final String fieldId, final String valueId) {
035: final LowerThanFilter filter;
036: if (ctx.isStrict()) {
037: filter = new Strict();
038: } else {
039: filter = new NonStrict();
040: }
041: filter.setFieldId(fieldId);
042: filter.setValueId(valueId);
043: ctx.addInitEvent(new Event() {
044: public void run() {
045: filter.setComparator(ctx.getFieldComparator(fieldId));
046: }
047: });
048: return filter;
049: }
050:
051: public static LowerThanFilter getConstantInstance(
052: FilterContext ctx, String fieldId, String valueId,
053: Object value) {
054: LowerThanFilter filter = getInstance(ctx, fieldId, valueId);
055: filter.setValue(value);
056: return filter;
057: }
058:
059: public static void addToForm(FilterContext ctx, String id,
060: FormElement element) {
061: ctx.getForm().addElement(id, element);
062: }
063:
064: public static void addToForm(FilterContext ctx, String id,
065: Control control) {
066: addToForm(ctx, id, FilterFormUtil.createElement(ctx, id,
067: control));
068: }
069:
070: public static void addToForm(FilterContext ctx, String id) {
071: addToForm(ctx, id, FilterFormUtil.createElement(ctx, id));
072: }
073:
074: public Comparator getComparator() {
075: return comparator;
076: }
077:
078: public void setComparator(Comparator comparator) {
079: this .comparator = comparator;
080: }
081:
082: static class Strict extends LowerThanFilter {
083: public Expression buildExpression(Map filterInfo) {
084: if (!isActive(filterInfo)) {
085: return null;
086: }
087: return ExpressionUtil.lt(buildVariableExpression(),
088: buildValueExpression(filterInfo), getComparator());
089: }
090: }
091:
092: static class NonStrict extends LowerThanFilter {
093: public Expression buildExpression(Map filterInfo) {
094: if (!isActive(filterInfo)) {
095: return null;
096: }
097: return ExpressionUtil.le(buildVariableExpression(),
098: buildValueExpression(filterInfo), getComparator());
099: }
100: }
101: }
|