Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

ContainerSortingTest.java 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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 }, new boolean[] {
  53. 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 }, new boolean[] {
  59. 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, new String[] { "Audi", "C++", "Call of Duty", "Cars",
  70. "English", "Fallout", "Finnish", "Ford", "Games", "Java",
  71. "Might and Magic", "Natural languages", "PHP",
  72. "Programming languages", "Python", "Red Alert", "Swedish",
  73. "Toyota", "Volvo" });
  74. TestUtil.assertArrays(
  75. 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(
  80. hc.getChildren(nameToId.get("Games")).toArray(),
  81. new Integer[] { nameToId.get("Call of Duty"),
  82. nameToId.get("Fallout"),
  83. nameToId.get("Might and Magic"),
  84. nameToId.get("Red Alert") });
  85. }
  86. private static void populateContainer(HierarchicalContainer container) {
  87. container.addContainerProperty("name", String.class, null);
  88. addItem(container, "Games", null);
  89. addItem(container, "Call of Duty", "Games");
  90. addItem(container, "Might and Magic", "Games");
  91. addItem(container, "Fallout", "Games");
  92. addItem(container, "Red Alert", "Games");
  93. addItem(container, "Cars", null);
  94. addItem(container, "Toyota", "Cars");
  95. addItem(container, "Volvo", "Cars");
  96. addItem(container, "Audi", "Cars");
  97. addItem(container, "Ford", "Cars");
  98. addItem(container, "Natural languages", null);
  99. addItem(container, "Swedish", "Natural languages");
  100. addItem(container, "English", "Natural languages");
  101. addItem(container, "Finnish", "Natural languages");
  102. addItem(container, "Programming languages", null);
  103. addItem(container, "C++", "Programming languages");
  104. addItem(container, "PHP", "Programming languages");
  105. addItem(container, "Java", "Programming languages");
  106. addItem(container, "Python", "Programming languages");
  107. }
  108. private static int index = 0;
  109. private static Map<String, Integer> nameToId = new HashMap<String, Integer>();
  110. private static Map<Integer, String> idToName = new HashMap<Integer, String>();
  111. public static void addItem(IndexedContainer container, String string,
  112. String parent) {
  113. nameToId.put(string, index);
  114. idToName.put(index, string);
  115. Item item = container.addItem(index);
  116. item.getItemProperty("name").setValue(string);
  117. if (parent != null && container instanceof HierarchicalContainer) {
  118. ((HierarchicalContainer) container).setParent(index,
  119. nameToId.get(parent));
  120. }
  121. index++;
  122. }
  123. private void verifyOrder(Container.Sortable ic, Object[] idOrder) {
  124. int size = ic.size();
  125. Object[] actual = new Object[size];
  126. Iterator<?> i = ic.getItemIds().iterator();
  127. int index = 0;
  128. while (i.hasNext()) {
  129. Object o = i.next();
  130. if (o.getClass() == Integer.class
  131. && idOrder[index].getClass() == String.class) {
  132. o = idToName.get(o);
  133. }
  134. actual[index++] = o;
  135. }
  136. TestUtil.assertArrays(actual, idOrder);
  137. }
  138. private void populate(IndexedContainer ic) {
  139. addItem(ic, ITEM_STRING_1, ITEM_STRING_1, 1, 1);
  140. addItem(ic, ITEM_STRING_NULL2, null, 0, null);
  141. addItem(ic, ITEM_STRING_2, ITEM_STRING_2, 2, 2);
  142. addItem(ic, ITEM_ANOTHER_NULL, null, 0, null);
  143. addItem(ic, ITEM_DATA_MINUS1, ITEM_DATA_MINUS1, -1, -1);
  144. addItem(ic, ITEM_DATA_MINUS1_NULL, null, -1, null);
  145. addItem(ic, ITEM_DATA_MINUS2, ITEM_DATA_MINUS2, -2, -2);
  146. addItem(ic, ITEM_DATA_MINUS2_NULL, null, -2, null);
  147. }
  148. private Item addItem(Container ic, String id, String string_null,
  149. int integer, Integer integer_null) {
  150. Item i = ic.addItem(id);
  151. i.getItemProperty(PROPERTY_STRING_ID).setValue(id);
  152. i.getItemProperty(PROPERTY_STRING_NULL).setValue(string_null);
  153. i.getItemProperty(PROPERTY_INTEGER_NOT_NULL).setValue(integer);
  154. i.getItemProperty(PROPERTY_INTEGER_NULL2).setValue(integer_null);
  155. return i;
  156. }
  157. private void addProperties(IndexedContainer ic) {
  158. ic.addContainerProperty("id", String.class, null);
  159. ic.addContainerProperty(PROPERTY_STRING_ID, String.class, "");
  160. ic.addContainerProperty(PROPERTY_STRING_NULL, String.class, null);
  161. ic.addContainerProperty(PROPERTY_INTEGER_NULL2, Integer.class, null);
  162. ic.addContainerProperty(PROPERTY_INTEGER_NOT_NULL, Integer.class, 0);
  163. ic.addContainerProperty("comparable-null", Integer.class, 0);
  164. }
  165. public class MyObject implements Comparable<MyObject> {
  166. private String data;
  167. @Override
  168. public int compareTo(MyObject o) {
  169. if (o == null) {
  170. return 1;
  171. }
  172. if (o.data == null) {
  173. return data == null ? 0 : 1;
  174. } else if (data == null) {
  175. return -1;
  176. } else {
  177. return data.compareTo(o.data);
  178. }
  179. }
  180. }
  181. }