001 /*
002 * Copyright 2002-2008 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * 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, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.table;
017
018 import java.util.Comparator;
019
020 import javax.swing.table.DefaultTableModel;
021 import javax.swing.table.TableModel;
022
023 import junit.framework.TestCase;
024
025 public class ShuttleSortableTableModelTests extends TestCase {
026
027 public void testNullComparisonWithComparator() {
028 Object[] columnNames = new Object[] { "first name", "last name" };
029 Object[][] data = new Object[][] { { "Peter", "De Bruycker" },
030 { "Jan", "Hoskens" }, { null, "test" } };
031
032 DefaultTableModel tableModel = new DefaultTableModel(data, columnNames);
033
034 ShuttleSortableTableModel shuttleSortableTableModel = new ShuttleSortableTableModel(tableModel);
035 shuttleSortableTableModel.setComparator(0, new Comparator() {
036 public int compare(Object o1, Object o2) {
037 String s1 = (String) o1;
038 String s2 = (String) o2;
039
040 if (s1 == null && s2 == null) {
041 return 0;
042 }
043
044 if (s1 == null) {
045 return 1;
046 }
047 if (s2 == null) {
048 return -1;
049 }
050
051 return s1.compareTo(s2);
052 }
053 });
054
055 shuttleSortableTableModel.sortByColumn(new ColumnToSort(1, 0));
056
057 // the row with first name == null must be the last one after sort
058 assertEquals("Jan", shuttleSortableTableModel.getValueAt(0, 0));
059 assertEquals("Peter", shuttleSortableTableModel.getValueAt(1, 0));
060 assertEquals(null, shuttleSortableTableModel.getValueAt(2, 0));
061 }
062
063 public void testNullComparisonWithoutComparator() {
064 Object[] columnNames = new Object[] { "first name", "last name", "test bean" };
065 Object[][] data = new Object[][] { { "Peter", "De Bruycker", new TestBean("1") },
066 { "Jan", "Hoskens", new TestBean("2") }, { null, "test", null } };
067
068 TableModel tableModel = new DefaultTableModel(data, columnNames) {
069 public Class getColumnClass(int columnIndex) {
070 if (columnIndex == 2) {
071 return TestBean.class;
072 }
073 return super.getColumnClass(columnIndex);
074 }
075 };
076
077 ShuttleSortableTableModel shuttleSortableTableModel = new ShuttleSortableTableModel(tableModel);
078
079 shuttleSortableTableModel.sortByColumn(new ColumnToSort(1, 2));
080
081 // the row with first name == null must be the last one after sort
082 assertEquals(null, shuttleSortableTableModel.getValueAt(0, 0));
083 assertEquals("Peter", shuttleSortableTableModel.getValueAt(1, 0));
084 assertEquals("Jan", shuttleSortableTableModel.getValueAt(2, 0));
085 }
086 }