1
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
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 }