選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

ContainerSortingTest.java 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package com.vaadin.data.util;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import org.junit.Test;
  6. import com.vaadin.data.Container;
  7. import com.vaadin.data.Item;
  8. import com.vaadin.tests.util.TestUtil;
  9. public class ContainerSortingTest {
  10. private static final String ITEM_DATA_MINUS2_NULL = "Data -2 null";
  11. private static final String ITEM_DATA_MINUS2 = "Data -2";
  12. private static final String ITEM_DATA_MINUS1 = "Data -1";
  13. private static final String ITEM_DATA_MINUS1_NULL = "Data -1 null";
  14. private static final String ITEM_ANOTHER_NULL = "Another null";
  15. private static final String ITEM_STRING_2 = "String 2";
  16. private static final String ITEM_STRING_NULL2 = "String null";
  17. private static final String ITEM_STRING_1 = "String 1";
  18. private static final String PROPERTY_INTEGER_NULL2 = "integer-null";
  19. private static final String PROPERTY_INTEGER_NOT_NULL = "integer-not-null";
  20. private static final String PROPERTY_STRING_NULL = "string-null";
  21. private static final String PROPERTY_STRING_ID = "string-not-null";
  22. @Test
  23. public void testEmptyFilteredIndexedContainer() {
  24. IndexedContainer ic = new IndexedContainer();
  25. addProperties(ic);
  26. populate(ic);
  27. ic.addContainerFilter(PROPERTY_STRING_ID, "aasdfasdfasdf", true, false);
  28. ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
  29. }
  30. @Test
  31. public void testFilteredIndexedContainer() {
  32. IndexedContainer ic = new IndexedContainer();
  33. addProperties(ic);
  34. populate(ic);
  35. ic.addContainerFilter(PROPERTY_STRING_ID, "a", true, false);
  36. ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
  37. verifyOrder(ic,
  38. new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
  39. ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2,
  40. ITEM_DATA_MINUS2_NULL, });
  41. }
  42. @Test
  43. public void testIndexedContainer() {
  44. IndexedContainer ic = new IndexedContainer();
  45. addProperties(ic);
  46. populate(ic);
  47. ic.sort(new Object[] { PROPERTY_STRING_ID }, new boolean[] { true });
  48. verifyOrder(ic, new String[] { ITEM_ANOTHER_NULL, ITEM_DATA_MINUS1,
  49. ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
  50. ITEM_STRING_1, ITEM_STRING_2, ITEM_STRING_NULL2 });
  51. ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
  52. PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID },
  53. new boolean[] { true, false, true });
  54. verifyOrder(ic, new String[] { ITEM_DATA_MINUS2, ITEM_DATA_MINUS2_NULL,
  55. ITEM_DATA_MINUS1, ITEM_DATA_MINUS1_NULL, ITEM_ANOTHER_NULL,
  56. ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
  57. ic.sort(new Object[] { PROPERTY_INTEGER_NOT_NULL,
  58. PROPERTY_INTEGER_NULL2, PROPERTY_STRING_ID },
  59. new boolean[] { true, true, true });
  60. verifyOrder(ic, new String[] { ITEM_DATA_MINUS2_NULL, ITEM_DATA_MINUS2,
  61. ITEM_DATA_MINUS1_NULL, ITEM_DATA_MINUS1, ITEM_ANOTHER_NULL,
  62. ITEM_STRING_NULL2, ITEM_STRING_1, ITEM_STRING_2 });
  63. }
  64. @Test
  65. public void testHierarchicalContainer() {
  66. HierarchicalContainer hc = new HierarchicalContainer();
  67. populateContainer(hc);
  68. hc.sort(new Object[] { "name" }, new boolean[] { true });
  69. verifyOrder(hc,
  70. new String[] { "Audi", "C++", "Call of Duty", "Cars", "English",
  71. "Fallout", "Finnish", "Ford", "Games", "Java",
  72. "Might and Magic", "Natural languages", "PHP",
  73. "Programming languages", "Python", "Red Alert",
  74. "Swedish", "Toyota", "Volvo" });
  75. TestUtil.assertArrays(hc.rootItemIds().toArray(),
  76. new Integer[] { nameToId.get("Cars"), nameToId.get("Games"),
  77. nameToId.get("Natural languages"),
  78. nameToId.get("Programming languages") });
  79. TestUtil.assertArrays(hc.getChildren(nameToId.get("Games")).toArray(),
  80. new Integer[] { nameToId.get("Call of Duty"),
  81. nameToId.get("Fallout"),
  82. nameToId.get("Might and Magic"),
  83. nameToId.get("Red Alert") });
  84. }
  85. private static void populateContainer(HierarchicalContainer container) {
  86. container.addContainerProperty("name", String.class, null);
  87. addItem(container, "Games", null);
  88. addItem(container, "Call of Duty", "Games");
  89. addItem(container, "Might and Magic", "Games");
  90. addItem(container, "Fallout", "Games");
  91. addItem(container, "Red Alert", "Games");
  92. addItem(container, "Cars", null);
  93. addItem(container, "Toyota", "Cars");
  94. addItem(container, "Volvo", "Cars");
  95. addItem(container, "Audi", "Cars");
  96. addItem(container, "Ford", "Cars");
  97. addItem(container, "Natural languages", null);
  98. addItem(container, "Swedish", "Natural languages");
  99. addItem(container, "English", "Natural languages");
  100. addItem(container, "Finnish", "Natural languages");
  101. addItem(container, "Programming languages", null);
  102. addItem(container, "C++", "Programming languages");
  103. addItem(container, "PHP", "Programming languages");
  104. addItem(container, "Java", "Programming languages");
  105. addItem(container, "Python", "Programming languages");
  106. }
  107. private static int index = 0;
  108. private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
  109. private static Map<Integer, String> idToName = new HashMap<Integer, String>();
  110. public static void addItem(IndexedContainer container, String string,
  111. String parent) {
  112. nameToId.put(string, index);
  113. idToName.put(index, string);
  114. Item item = container.addItem(index);
  115. item.getItemProperty("name").setValue(string);
  116. if (parent != null && container instanceof HierarchicalContainer) {
  117. ((HierarchicalContainer) container).setParent(index,
  118. nameToId.get(parent));
  119. }
  120. index++;
  121. }
  122. private void verifyOrder(Container.Sortable ic, Object[] idOrder) {
  123. int size = ic.size();
  124. Object[] actual = new Object[size];
  125. Iterator<?> i = ic.getItemIds().iterator();
  126. int index = 0;
  127. while (i.hasNext()) {
  128. Object o = i.next();
  129. if (o.getClass() == Integer.class
  130. && idOrder[index].getClass() == String.class) {
  131. o = idToName.get(o);
  132. }
  133. actual[index++] = o;
  134. }
  135. TestUtil.assertArrays(actual, idOrder);
  136. }
  137. private void populate(IndexedContainer ic) {
  138. addItem(ic, ITEM_STRING_1, ITEM_STRING_1, 1, 1);
  139. addItem(ic, ITEM_STRING_NULL2, null, 0, null);
  140. addItem(ic, ITEM_STRING_2, ITEM_STRING_2, 2, 2);
  141. addItem(ic, ITEM_ANOTHER_NULL, null, 0, null);
  142. addItem(ic, ITEM_DATA_MINUS1, ITEM_DATA_MINUS1, -1, -1);
  143. addItem(ic, ITEM_DATA_MINUS1_NULL, null, -1, null);
  144. addItem(ic, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2, -2, -2);
  145. addItem(ic, ITEM_DATA_MINUS2_NULL, null, -2, null);
  146. }
  147. private Item addItem(Container ic, String id, String string_null,
  148. int integer, Integer integer_null) {
  149. Item i = ic.addItem(id);
  150. i.getItemProperty(PROPERTY_STRING_ID).setValue(id);
  151. i.getItemProperty(PROPERTY_STRING_NULL).setValue(string_null);
  152. i.getItemProperty(PROPERTY_INTEGER_NOT_NULL).setValue(integer);
  153. i.getItemProperty(PROPERTY_INTEGER_NULL2).setValue(integer_null);
  154. return i;
  155. }
  156. private void addProperties(IndexedContainer ic) {
  157. ic.addContainerProperty("id", String.class, null);
  158. ic.addContainerProperty(PROPERTY_STRING_ID, String.class, "");
  159. ic.addContainerProperty(PROPERTY_STRING_NULL, String.class, null);
  160. ic.addContainerProperty(PROPERTY_INTEGER_NULL2, Integer.class, null);
  161. ic.addContainerProperty(PROPERTY_INTEGER_NOT_NULL, Integer.class, 0);
  162. ic.addContainerProperty("comparable-null", Integer.class, 0);
  163. }
  164. public class MyObject implements Comparable<MyObject> {
  165. private String data;
  166. @Override
  167. public int compareTo(MyObject o) {
  168. if (o == null) {
  169. return 1;
  170. }
  171. if (o.data == null) {
  172. return data == null ? 0 : 1;
  173. } else if (data == null) {
  174. return -1;
  175. } else {
  176. return data.compareTo(o.data);
  177. }
  178. }
  179. }
  180. }