| DocumentComparator.java |
1 /**
2 * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 */
22
23 package com.liferay.portal.kernel.search;
24
25 import java.util.ArrayList;
26 import java.util.Comparator;
27 import java.util.List;
28
29 /**
30 * <a href="DocumentComparator.java.html"><b><i>View Source</i></b></a>
31 *
32 * @author Brian Wing Shun Chan
33 *
34 */
35 public class DocumentComparator implements Comparator {
36
37 public DocumentComparator() {
38 this(true, false);
39 }
40
41 public DocumentComparator(boolean asc, boolean caseSensitive) {
42 _asc = asc;
43 _caseSensitive = caseSensitive;
44 }
45
46 public void addOrderBy(String name) {
47 addOrderBy(name, _asc, _caseSensitive);
48 }
49
50 public void addOrderBy(String name, boolean asc, boolean caseSensitive) {
51 DocumentComparatorOrderBy orderBy = new DocumentComparatorOrderBy(
52 name, asc, caseSensitive);
53
54 _columns.add(orderBy);
55 }
56
57 public int compare(Object obj1, Object obj2) {
58 if (!(obj1 instanceof Document)) {
59 return -1;
60 }
61
62 if (!(obj2 instanceof Document)) {
63 return 1;
64 }
65
66 Document doc1 = (Document)obj1;
67 Document doc2 = (Document)obj2;
68
69 for (int i = 0; i < _columns.size(); i++) {
70 DocumentComparatorOrderBy orderBy =
71 (DocumentComparatorOrderBy)_columns.get(i);
72
73 String value1 = doc1.get(orderBy.getName());
74 String value2 = doc2.get(orderBy.getName());
75
76 if (!orderBy.isAsc()) {
77 String temp = value1;
78
79 value1 = value2;
80 value2 = temp;
81 }
82
83 int result = 0;
84
85 if ((value1 != null) && (value2 != null)) {
86 if (orderBy.isCaseSensitive()) {
87 result = value1.compareTo(value2);
88 }
89 else {
90 result = value1.compareToIgnoreCase(value2);
91 }
92 }
93
94 if (result != 0) {
95 return result;
96 }
97 }
98
99 return 0;
100 }
101
102 private boolean _asc;
103 private boolean _caseSensitive;
104 private List _columns = new ArrayList();
105
106 }