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 GreaterThanFilter extends BaseFieldFilter {
028:
029: private static final long serialVersionUID = 1L;
030:
031: private Comparator comparator;
032:
033: public static GreaterThanFilter getInstance(
034: final FilterContext ctx, final String fieldId,
035: final String valueId) {
036: final GreaterThanFilter filter;
037: if (ctx.isStrict()) {
038: filter = new Strict();
039: } else {
040: filter = new NonStrict();
041: }
042: filter.setFieldId(fieldId);
043: filter.setValueId(valueId);
044: ctx.addInitEvent(new Event() {
045: public void run() {
046: filter.setComparator(ctx.getFieldComparator(fieldId));
047: }
048: });
049: return filter;
050: }
051:
052: public static GreaterThanFilter getConstantInstance(
053: FilterContext ctx, String fieldId, String valueId,
054: Object value) {
055: GreaterThanFilter filter = getInstance(ctx, fieldId, valueId);
056: filter.setValue(value);
057: return filter;
058: }
059:
060: public static void addToForm(FilterContext ctx, String id,
061: FormElement element) {
062: ctx.getForm().addElement(id, element);
063: }
064:
065: public static void addToForm(FilterContext ctx, String id,
066: Control control) {
067: addToForm(ctx, id, FilterFormUtil.createElement(ctx, id,
068: control));
069: }
070:
071: public static void addToForm(FilterContext ctx, String id) {
072: addToForm(ctx, id, FilterFormUtil.createElement(ctx, id));
073: }
074:
075: public Comparator getComparator() {
076: return comparator;
077: }
078:
079: public void setComparator(Comparator comparator) {
080: this .comparator = comparator;
081: }
082:
083: static class Strict extends GreaterThanFilter {
084: public Expression buildExpression(Map filterInfo) {
085: if (!isActive(filterInfo)) {
086: return null;
087: }
088: return ExpressionUtil.gt(buildVariableExpression(),
089: buildValueExpression(filterInfo), getComparator());
090: }
091: }
092:
093: static class NonStrict extends GreaterThanFilter {
094: public Expression buildExpression(Map filterInfo) {
095: if (!isActive(filterInfo)) {
096: return null;
097: }
098: return ExpressionUtil.ge(buildVariableExpression(),
099: buildValueExpression(filterInfo), getComparator());
100: }
101: }
102: }
|