01: /**
02: * Copyright 2006 Webmedia Group Ltd.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: **/package org.araneaframework.uilib.list.structure.order;
16:
17: import java.util.HashMap;
18: import java.util.Iterator;
19: import java.util.Map;
20: import org.apache.commons.logging.Log;
21: import org.apache.commons.logging.LogFactory;
22: import org.araneaframework.Environment;
23: import org.araneaframework.backend.list.memorybased.ComparatorExpression;
24: import org.araneaframework.backend.list.memorybased.compexpr.MultiComparatorExpression;
25: import org.araneaframework.backend.list.memorybased.compexpr.ReverseComparatorExpression;
26: import org.araneaframework.uilib.list.OrderInfo;
27: import org.araneaframework.uilib.list.OrderInfoField;
28: import org.araneaframework.uilib.list.structure.ListOrder;
29:
30: public class MultiFieldOrder implements ListOrder {
31:
32: private static final long serialVersionUID = 1L;
33:
34: private static final Log log = LogFactory
35: .getLog(MultiFieldOrder.class);
36:
37: protected Map orders = new HashMap();
38:
39: public void addFieldOrder(FieldOrder order) {
40: this .orders.put(order.getFieldId(), order);
41: }
42:
43: public FieldOrder getFieldOrder(String field) {
44: return (FieldOrder) this .orders.get(field);
45: }
46:
47: public boolean isFiedOrdered(String field) {
48: return getFieldOrder(field) != null;
49: }
50:
51: public void clearFieldOrders() {
52: for (Iterator i = orders.values().iterator(); i.hasNext();) {
53: ListOrder order = (ListOrder) i.next();
54: order.destroy();
55: i.remove();
56: }
57: }
58:
59: public void init(Environment env) {
60: for (Iterator i = orders.values().iterator(); i.hasNext();) {
61: ListOrder order = (ListOrder) i.next();
62: order.init(env);
63: }
64: }
65:
66: public void destroy() {
67: clearFieldOrders();
68: }
69:
70: public ComparatorExpression buildComparatorExpression(
71: OrderInfo orderInfo) {
72: log.debug("Building ComparatorExpression, orderInfo = "
73: + orderInfo.toString());
74: if (orderInfo.getFields().size() == 0) {
75: log.debug("No filterInfoFields specified, returning null");
76: return null;
77: }
78:
79: MultiComparatorExpression multiExpr = new MultiComparatorExpression();
80:
81: Iterator i = orderInfo.getFields().iterator();
82: while (i.hasNext()) {
83: OrderInfoField orderInfoField = (OrderInfoField) i.next();
84: FieldOrder columnOrder = (FieldOrder) this .orders
85: .get(orderInfoField.getId());
86: if (columnOrder != null) {
87: ComparatorExpression temp = columnOrder
88: .buildComparatorExpression(orderInfo);
89: if (!orderInfoField.isAscending()) {
90: temp = new ReverseComparatorExpression(temp);
91: }
92: multiExpr.add(temp);
93: }
94: }
95:
96: return multiExpr;
97: }
98: }
|