01: /*
02: * File : $Source: /usr/local/cvs/opencms/src/org/opencms/workplace/list/CmsListItemDefaultComparator.java,v $
03: * Date : $Date: 2008-02-27 12:05:28 $
04: * Version: $Revision: 1.10 $
05: *
06: * This library is part of OpenCms -
07: * the Open Source Content Management System
08: *
09: * Copyright (c) 2002 - 2008 Alkacon Software GmbH (http://www.alkacon.com)
10: *
11: * This library is free software; you can redistribute it and/or
12: * modify it under the terms of the GNU Lesser General Public
13: * License as published by the Free Software Foundation; either
14: * version 2.1 of the License, or (at your option) any later version.
15: *
16: * This library is distributed in the hope that it will be useful,
17: * but WITHOUT ANY WARRANTY; without even the implied warranty of
18: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19: * Lesser General Public License for more details.
20: *
21: * For further information about Alkacon Software GmbH, please see the
22: * company website: http://www.alkacon.com
23: *
24: * For further information about OpenCms, please see the
25: * project website: http://www.opencms.org
26: *
27: * You should have received a copy of the GNU Lesser General Public
28: * License along with this library; if not, write to the Free Software
29: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30: */
31:
32: package org.opencms.workplace.list;
33:
34: import java.text.Collator;
35: import java.util.Comparator;
36: import java.util.Locale;
37:
38: /**
39: * Default comparator for case sensitive column sorting with string localization.<p>
40: *
41: * If both list items column values are Strings then a localized collector is used for sorting;
42: * if not, the <code>{@link Comparable}</code> interface is used.<p>
43: *
44: * @author Michael Moossen
45: *
46: * @version $Revision: 1.10 $
47: *
48: * @since 6.0.0
49: *
50: * @see org.opencms.workplace.list.CmsListColumnDefinition
51: */
52: public class CmsListItemDefaultComparator implements
53: I_CmsListItemComparator {
54:
55: /**
56: * Default Constructor.<p>
57: */
58: public CmsListItemDefaultComparator() {
59:
60: // no-op
61: }
62:
63: /**
64: * @see org.opencms.workplace.list.I_CmsListItemComparator#getComparator(java.lang.String, java.util.Locale)
65: */
66: public Comparator getComparator(final String columnId,
67: final Locale locale) {
68:
69: final Collator collator = Collator.getInstance(locale);
70: return new Comparator() {
71:
72: /**
73: * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
74: */
75: public int compare(Object o1, Object o2) {
76:
77: if ((o1 == o2) || !(o1 instanceof CmsListItem)
78: || !(o2 instanceof CmsListItem)) {
79: return 0;
80: }
81: Comparable c1 = (Comparable) ((CmsListItem) o1)
82: .get(columnId);
83: Comparable c2 = (Comparable) ((CmsListItem) o2)
84: .get(columnId);
85: if ((c1 instanceof String) && (c2 instanceof String)) {
86: return collator.compare(c1, c2);
87: } else if (c1 != null) {
88: if (c2 == null) {
89: return 1;
90: }
91: return c1.compareTo(c2);
92: } else if (c2 != null) {
93: return -1;
94: }
95: return 0;
96: }
97: };
98: }
99: }
|