Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

AbstractContainerTestBase.java 37KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. package com.vaadin.v7.data.util;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertNotNull;
  5. import static org.junit.Assert.assertNull;
  6. import static org.junit.Assert.assertTrue;
  7. import java.util.ArrayList;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import com.vaadin.v7.data.Container;
  11. import com.vaadin.v7.data.Container.Filterable;
  12. import com.vaadin.v7.data.Container.ItemSetChangeEvent;
  13. import com.vaadin.v7.data.Container.ItemSetChangeListener;
  14. import com.vaadin.v7.data.Container.Ordered;
  15. import com.vaadin.v7.data.Container.Sortable;
  16. import com.vaadin.v7.data.Item;
  17. import com.vaadin.v7.data.util.filter.SimpleStringFilter;
  18. public abstract class AbstractContainerTestBase {
  19. /**
  20. * Helper class for testing e.g. listeners expecting events to be fired.
  21. */
  22. protected abstract static class AbstractEventCounter {
  23. private int eventCount = 0;
  24. private int lastAssertedEventCount = 0;
  25. /**
  26. * Increment the event count. To be called by subclasses e.g. from a
  27. * listener method.
  28. */
  29. protected void increment() {
  30. ++eventCount;
  31. }
  32. /**
  33. * Check that no one event has occurred since the previous assert call.
  34. */
  35. public void assertNone() {
  36. assertEquals(lastAssertedEventCount, eventCount);
  37. }
  38. /**
  39. * Check that exactly one event has occurred since the previous assert
  40. * call.
  41. */
  42. public void assertOnce() {
  43. assertEquals(++lastAssertedEventCount, eventCount);
  44. }
  45. /**
  46. * Reset the counter and the expected count.
  47. */
  48. public void reset() {
  49. eventCount = 0;
  50. lastAssertedEventCount = 0;
  51. }
  52. }
  53. /**
  54. * Test class for counting item set change events and verifying they have
  55. * been received.
  56. */
  57. protected static class ItemSetChangeCounter extends AbstractEventCounter
  58. implements ItemSetChangeListener {
  59. @Override
  60. public void containerItemSetChange(ItemSetChangeEvent event) {
  61. increment();
  62. }
  63. }
  64. // #6043: for items that have been filtered out, Container interface does
  65. // not specify what to return from getItem() and getContainerProperty(), so
  66. // need checkGetItemNull parameter for the test to be usable for most
  67. // current containers
  68. protected void validateContainer(Container container,
  69. Object expectedFirstItemId, Object expectedLastItemId,
  70. Object itemIdInSet, Object itemIdNotInSet, boolean checkGetItemNull,
  71. int expectedSize) {
  72. Container.Indexed indexed = null;
  73. if (container instanceof Container.Indexed) {
  74. indexed = (Container.Indexed) container;
  75. }
  76. List<Object> itemIdList = new ArrayList<Object>(container.getItemIds());
  77. // size()
  78. assertEquals(expectedSize, container.size());
  79. assertEquals(expectedSize, itemIdList.size());
  80. // first item, last item
  81. Object first = itemIdList.get(0);
  82. Object last = itemIdList.get(itemIdList.size() - 1);
  83. assertEquals(expectedFirstItemId, first);
  84. assertEquals(expectedLastItemId, last);
  85. // containsId
  86. assertFalse(container.containsId(itemIdNotInSet));
  87. assertTrue(container.containsId(itemIdInSet));
  88. // getItem
  89. if (checkGetItemNull) {
  90. assertNull(container.getItem(itemIdNotInSet));
  91. }
  92. assertNotNull(container.getItem(itemIdInSet));
  93. // getContainerProperty
  94. for (Object propId : container.getContainerPropertyIds()) {
  95. if (checkGetItemNull) {
  96. assertNull(
  97. container.getContainerProperty(itemIdNotInSet, propId));
  98. }
  99. assertNotNull(container.getContainerProperty(itemIdInSet, propId));
  100. }
  101. if (indexed != null) {
  102. // firstItemId
  103. assertEquals(first, indexed.firstItemId());
  104. // lastItemId
  105. assertEquals(last, indexed.lastItemId());
  106. // nextItemId
  107. assertEquals(itemIdList.get(1), indexed.nextItemId(first));
  108. // prevItemId
  109. assertEquals(itemIdList.get(itemIdList.size() - 2),
  110. indexed.prevItemId(last));
  111. // isFirstId
  112. assertTrue(indexed.isFirstId(first));
  113. assertFalse(indexed.isFirstId(last));
  114. // isLastId
  115. assertTrue(indexed.isLastId(last));
  116. assertFalse(indexed.isLastId(first));
  117. // indexOfId
  118. assertEquals(0, indexed.indexOfId(first));
  119. assertEquals(expectedSize - 1, indexed.indexOfId(last));
  120. // getIdByIndex
  121. assertEquals(indexed.getIdByIndex(0), first);
  122. assertEquals(indexed.getIdByIndex(expectedSize - 1), last);
  123. }
  124. // getItemProperty
  125. assertNull(
  126. container.getItem(itemIdInSet).getItemProperty("notinset"));
  127. }
  128. protected static final Object FULLY_QUALIFIED_NAME = "fullyQualifiedName";
  129. protected static final Object SIMPLE_NAME = "simpleName";
  130. protected static final Object REVERSE_FULLY_QUALIFIED_NAME = "reverseFullyQualifiedName";
  131. protected static final Object ID_NUMBER = "idNumber";
  132. protected void testBasicContainerOperations(Container container) {
  133. initializeContainer(container);
  134. // Basic container
  135. validateContainer(container, sampleData[0],
  136. sampleData[sampleData.length - 1], sampleData[10], "abc", true,
  137. sampleData.length);
  138. validateRemovingItems(container);
  139. validateAddItem(container);
  140. if (container instanceof Container.Indexed) {
  141. validateAddItemAt((Container.Indexed) container);
  142. }
  143. if (container instanceof Container.Ordered) {
  144. validateAddItemAfter((Container.Ordered) container);
  145. }
  146. }
  147. protected void validateRemovingItems(Container container) {
  148. int sizeBeforeRemoving = container.size();
  149. List<Object> itemIdList = new ArrayList<Object>(container.getItemIds());
  150. // There should be at least four items in the list
  151. Object first = itemIdList.get(0);
  152. Object middle = itemIdList.get(2);
  153. Object last = itemIdList.get(itemIdList.size() - 1);
  154. container.removeItem(first);
  155. container.removeItem(middle); // Middle now that first has been removed
  156. container.removeItem(last);
  157. assertEquals(sizeBeforeRemoving - 3, container.size());
  158. container.removeAllItems();
  159. assertEquals(0, container.size());
  160. }
  161. protected void validateAddItem(Container container) {
  162. try {
  163. container.removeAllItems();
  164. Object id = container.addItem();
  165. assertTrue(container.containsId(id));
  166. assertNotNull(container.getItem(id));
  167. Item item = container.addItem("foo");
  168. assertNotNull(item);
  169. assertTrue(container.containsId("foo"));
  170. assertEquals(item, container.getItem("foo"));
  171. // Add again
  172. Item item2 = container.addItem("foo");
  173. assertNull(item2);
  174. // Null is not a valid itemId
  175. assertNull(container.addItem(null));
  176. } catch (UnsupportedOperationException e) {
  177. // Ignore contains which do not support addItem*
  178. }
  179. }
  180. protected void validateAddItemAt(Container.Indexed container) {
  181. try {
  182. container.removeAllItems();
  183. Object id = container.addItemAt(0);
  184. assertTrue(container.containsId(id));
  185. assertEquals(id, container.getIdByIndex(0));
  186. assertNotNull(container.getItem(id));
  187. Item item = container.addItemAt(0, "foo");
  188. assertNotNull(item);
  189. assertTrue(container.containsId("foo"));
  190. assertEquals(item, container.getItem("foo"));
  191. assertEquals("foo", container.getIdByIndex(0));
  192. Item itemAtEnd = container.addItemAt(2, "atend");
  193. assertNotNull(itemAtEnd);
  194. assertTrue(container.containsId("atend"));
  195. assertEquals(itemAtEnd, container.getItem("atend"));
  196. assertEquals("atend", container.getIdByIndex(2));
  197. // Add again
  198. Item item2 = container.addItemAt(0, "foo");
  199. assertNull(item2);
  200. } catch (UnsupportedOperationException e) {
  201. // Ignore contains which do not support addItem*
  202. }
  203. }
  204. protected void validateAddItemAfter(Container.Ordered container) {
  205. if (container instanceof AbstractBeanContainer) {
  206. // Doesn't work as bean container requires beans
  207. return;
  208. }
  209. try {
  210. container.removeAllItems();
  211. assertNotNull(container.addItem(0));
  212. Item item = container.addItemAfter(null, "foo");
  213. assertNotNull(item);
  214. assertTrue(container.containsId("foo"));
  215. assertEquals(item, container.getItem("foo"));
  216. assertEquals("foo",
  217. container.getItemIds().iterator().next());
  218. Item itemAtEnd = container.addItemAfter(0, "atend");
  219. assertNotNull(itemAtEnd);
  220. assertTrue(container.containsId("atend"));
  221. assertEquals(itemAtEnd, container.getItem("atend"));
  222. Iterator<?> i = container.getItemIds().iterator();
  223. i.next();
  224. i.next();
  225. assertEquals("atend", i.next());
  226. // Add again
  227. assertNull(container.addItemAfter(null, "foo"));
  228. assertNull(container.addItemAfter("atend", "foo"));
  229. assertNull(container.addItemAfter("nonexistant", "123123"));
  230. } catch (UnsupportedOperationException e) {
  231. // Ignore contains which do not support addItem*
  232. }
  233. }
  234. protected void testContainerOrdered(Container.Ordered container) {
  235. // addItem with empty container
  236. Object id = container.addItem();
  237. assertOrderedContents(container, id);
  238. Item item = container.getItem(id);
  239. assertNotNull(item);
  240. // addItemAfter with empty container
  241. container.removeAllItems();
  242. assertOrderedContents(container);
  243. id = container.addItemAfter(null);
  244. assertOrderedContents(container, id);
  245. item = container.getItem(id);
  246. assertNotNull(item);
  247. // Add a new item before the first
  248. // addItemAfter
  249. Object newFirstId = container.addItemAfter(null);
  250. assertOrderedContents(container, newFirstId, id);
  251. // addItemAfter(Object)
  252. Object newSecondItemId = container.addItemAfter(newFirstId);
  253. // order is now: newFirstId, newSecondItemId, id
  254. assertOrderedContents(container, newFirstId, newSecondItemId, id);
  255. // addItemAfter(Object,Object)
  256. String fourthId = "id of the fourth item";
  257. Item fourth = container.addItemAfter(newFirstId, fourthId);
  258. // order is now: newFirstId, fourthId, newSecondItemId, id
  259. assertNotNull(fourth);
  260. assertEquals(fourth, container.getItem(fourthId));
  261. assertOrderedContents(container, newFirstId, fourthId, newSecondItemId,
  262. id);
  263. // addItemAfter(Object,Object)
  264. Object fifthId = new Object();
  265. Item fifth = container.addItemAfter(null, fifthId);
  266. // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id
  267. assertNotNull(fifth);
  268. assertEquals(fifth, container.getItem(fifthId));
  269. assertOrderedContents(container, fifthId, newFirstId, fourthId,
  270. newSecondItemId, id);
  271. // addItemAfter(Object,Object)
  272. Object sixthId = new Object();
  273. Item sixth = container.addItemAfter(id, sixthId);
  274. // order is now: fifthId, newFirstId, fourthId, newSecondItemId, id,
  275. // sixthId
  276. assertNotNull(sixth);
  277. assertEquals(sixth, container.getItem(sixthId));
  278. assertOrderedContents(container, fifthId, newFirstId, fourthId,
  279. newSecondItemId, id, sixthId);
  280. // Test order after removing first item 'fifthId'
  281. container.removeItem(fifthId);
  282. // order is now: newFirstId, fourthId, newSecondItemId, id, sixthId
  283. assertOrderedContents(container, newFirstId, fourthId, newSecondItemId,
  284. id, sixthId);
  285. // Test order after removing last item 'sixthId'
  286. container.removeItem(sixthId);
  287. // order is now: newFirstId, fourthId, newSecondItemId, id
  288. assertOrderedContents(container, newFirstId, fourthId, newSecondItemId,
  289. id);
  290. // Test order after removing item from the middle 'fourthId'
  291. container.removeItem(fourthId);
  292. // order is now: newFirstId, newSecondItemId, id
  293. assertOrderedContents(container, newFirstId, newSecondItemId, id);
  294. // Delete remaining items
  295. container.removeItem(newFirstId);
  296. container.removeItem(newSecondItemId);
  297. container.removeItem(id);
  298. assertOrderedContents(container);
  299. Object finalItem = container.addItem();
  300. assertOrderedContents(container, finalItem);
  301. }
  302. private void assertOrderedContents(Ordered container, Object... ids) {
  303. assertEquals(ids.length, container.size());
  304. for (int i = 0; i < ids.length - 1; i++) {
  305. assertNotNull("The item id should not be null", ids[i]);
  306. }
  307. if (ids.length == 0) {
  308. assertNull("The first id is wrong", container.firstItemId());
  309. assertNull("The last id is wrong", container.lastItemId());
  310. return;
  311. }
  312. assertEquals("The first id is wrong", ids[0], container.firstItemId());
  313. assertEquals("The last id is wrong", ids[ids.length - 1],
  314. container.lastItemId());
  315. // isFirstId & isLastId
  316. assertTrue(container.isFirstId(container.firstItemId()));
  317. assertTrue(container.isLastId(container.lastItemId()));
  318. // nextId
  319. Object ref = container.firstItemId();
  320. for (int i = 1; i < ids.length; i++) {
  321. Object next = container.nextItemId(ref);
  322. assertEquals("The id after " + ref + " is wrong", ids[i], next);
  323. ref = next;
  324. }
  325. assertNull("The last id should not have a next id",
  326. container.nextItemId(ids[ids.length - 1]));
  327. assertNull(container.nextItemId("not-in-container"));
  328. // prevId
  329. ref = container.lastItemId();
  330. for (int i = ids.length - 2; i >= 0; i--) {
  331. Object prev = container.prevItemId(ref);
  332. assertEquals("The id before " + ref + " is wrong", ids[i], prev);
  333. ref = prev;
  334. }
  335. assertNull("The first id should not have a prev id",
  336. container.prevItemId(ids[0]));
  337. assertNull(container.prevItemId("not-in-container"));
  338. }
  339. protected void testContainerIndexed(Container.Indexed container,
  340. Object itemId, int itemPosition, boolean testAddEmptyItemAt,
  341. Object newItemId, boolean testAddItemAtWithId) {
  342. initializeContainer(container);
  343. // indexOfId
  344. assertEquals(itemPosition, container.indexOfId(itemId));
  345. // getIdByIndex
  346. assertEquals(itemId, container.getIdByIndex(itemPosition));
  347. // addItemAt
  348. if (testAddEmptyItemAt) {
  349. Object addedId = container.addItemAt(itemPosition);
  350. assertEquals(itemPosition, container.indexOfId(addedId));
  351. assertEquals(itemPosition + 1, container.indexOfId(itemId));
  352. assertEquals(addedId, container.getIdByIndex(itemPosition));
  353. assertEquals(itemId,
  354. container.getIdByIndex(itemPosition + 1));
  355. Object newFirstId = container.addItemAt(0);
  356. assertEquals(0, container.indexOfId(newFirstId));
  357. assertEquals(itemPosition + 2, container.indexOfId(itemId));
  358. assertEquals(newFirstId, container.firstItemId());
  359. assertEquals(newFirstId, container.getIdByIndex(0));
  360. assertEquals(itemId,
  361. container.getIdByIndex(itemPosition + 2));
  362. Object newLastId = container.addItemAt(container.size());
  363. assertEquals(container.size() - 1,
  364. container.indexOfId(newLastId));
  365. assertEquals(itemPosition + 2, container.indexOfId(itemId));
  366. assertEquals(newLastId, container.lastItemId());
  367. assertEquals(newLastId,
  368. container.getIdByIndex(container.size() - 1));
  369. assertEquals(itemId,
  370. container.getIdByIndex(itemPosition + 2));
  371. assertTrue(container.removeItem(addedId));
  372. assertTrue(container.removeItem(newFirstId));
  373. assertTrue(container.removeItem(newLastId));
  374. assertFalse(
  375. "Removing non-existing item should indicate failure",
  376. container.removeItem(addedId));
  377. }
  378. // addItemAt
  379. if (testAddItemAtWithId) {
  380. container.addItemAt(itemPosition, newItemId);
  381. assertEquals(itemPosition, container.indexOfId(newItemId));
  382. assertEquals(itemPosition + 1, container.indexOfId(itemId));
  383. assertEquals(newItemId,
  384. container.getIdByIndex(itemPosition));
  385. assertEquals(itemId,
  386. container.getIdByIndex(itemPosition + 1));
  387. assertTrue(container.removeItem(newItemId));
  388. assertFalse(container.containsId(newItemId));
  389. container.addItemAt(0, newItemId);
  390. assertEquals(0, container.indexOfId(newItemId));
  391. assertEquals(itemPosition + 1, container.indexOfId(itemId));
  392. assertEquals(newItemId, container.firstItemId());
  393. assertEquals(newItemId, container.getIdByIndex(0));
  394. assertEquals(itemId,
  395. container.getIdByIndex(itemPosition + 1));
  396. assertTrue(container.removeItem(newItemId));
  397. assertFalse(container.containsId(newItemId));
  398. container.addItemAt(container.size(), newItemId);
  399. assertEquals(container.size() - 1,
  400. container.indexOfId(newItemId));
  401. assertEquals(itemPosition, container.indexOfId(itemId));
  402. assertEquals(newItemId, container.lastItemId());
  403. assertEquals(newItemId,
  404. container.getIdByIndex(container.size() - 1));
  405. assertEquals(itemId, container.getIdByIndex(itemPosition));
  406. assertTrue(container.removeItem(newItemId));
  407. assertFalse(container.containsId(newItemId));
  408. }
  409. }
  410. protected void testContainerFiltering(Container.Filterable container) {
  411. initializeContainer(container);
  412. // Filter by "contains ab"
  413. SimpleStringFilter filter1 = new SimpleStringFilter(
  414. FULLY_QUALIFIED_NAME, "ab", false, false);
  415. container.addContainerFilter(filter1);
  416. assertTrue(container.getContainerFilters().size() == 1);
  417. assertEquals(filter1,
  418. container.getContainerFilters().iterator().next());
  419. validateContainer(container, "com.vaadin.data.BufferedValidatable",
  420. "com.vaadin.ui.TabSheet",
  421. "com.vaadin.terminal.gwt.client.Focusable",
  422. "com.vaadin.data.Buffered", isFilteredOutItemNull(), 20);
  423. // Filter by "contains da" (reversed as ad here)
  424. container.removeAllContainerFilters();
  425. assertTrue(container.getContainerFilters().isEmpty());
  426. SimpleStringFilter filter2 = new SimpleStringFilter(
  427. REVERSE_FULLY_QUALIFIED_NAME, "ad", false, false);
  428. container.addContainerFilter(filter2);
  429. assertTrue(container.getContainerFilters().size() == 1);
  430. assertEquals(filter2,
  431. container.getContainerFilters().iterator().next());
  432. validateContainer(container, "com.vaadin.data.Buffered",
  433. "com.vaadin.server.ComponentSizeValidator",
  434. "com.vaadin.data.util.IndexedContainer",
  435. "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
  436. isFilteredOutItemNull(), 37);
  437. }
  438. /**
  439. * Override in subclasses to return false if the container getItem() method
  440. * returns a non-null value for an item that has been filtered out.
  441. *
  442. * @return
  443. */
  444. protected boolean isFilteredOutItemNull() {
  445. return true;
  446. }
  447. protected void testContainerSortingAndFiltering(
  448. Container.Sortable sortable) {
  449. Filterable filterable = (Filterable) sortable;
  450. initializeContainer(sortable);
  451. // Filter by "contains ab"
  452. filterable.addContainerFilter(new SimpleStringFilter(
  453. FULLY_QUALIFIED_NAME, "ab", false, false));
  454. // Must be able to sort based on PROP1 for this test
  455. assertTrue(sortable.getSortableContainerPropertyIds()
  456. .contains(FULLY_QUALIFIED_NAME));
  457. sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
  458. new boolean[] { true });
  459. validateContainer(sortable, "com.vaadin.data.BufferedValidatable",
  460. "com.vaadin.ui.TableFieldFactory",
  461. "com.vaadin.ui.TableFieldFactory",
  462. "com.vaadin.data.util.BeanItem", isFilteredOutItemNull(), 20);
  463. }
  464. protected void testContainerSorting(Container.Filterable container) {
  465. Container.Sortable sortable = (Sortable) container;
  466. initializeContainer(container);
  467. // Must be able to sort based on PROP1 for this test
  468. assertTrue(sortable.getSortableContainerPropertyIds()
  469. .contains(FULLY_QUALIFIED_NAME));
  470. assertTrue(sortable.getSortableContainerPropertyIds()
  471. .contains(REVERSE_FULLY_QUALIFIED_NAME));
  472. sortable.sort(new Object[] { FULLY_QUALIFIED_NAME },
  473. new boolean[] { true });
  474. validateContainer(container, "com.vaadin.Application",
  475. "org.vaadin.test.LastClass",
  476. "com.vaadin.server.ApplicationResource", "blah", true,
  477. sampleData.length);
  478. sortable.sort(new Object[] { REVERSE_FULLY_QUALIFIED_NAME },
  479. new boolean[] { true });
  480. validateContainer(container, "com.vaadin.server.ApplicationPortlet2",
  481. "com.vaadin.data.util.ObjectProperty",
  482. "com.vaadin.ui.BaseFieldFactory", "blah", true,
  483. sampleData.length);
  484. }
  485. protected void initializeContainer(Container container) {
  486. assertTrue(container.removeAllItems());
  487. Object[] propertyIds = container.getContainerPropertyIds().toArray();
  488. for (Object propertyId : propertyIds) {
  489. container.removeContainerProperty(propertyId);
  490. }
  491. container.addContainerProperty(FULLY_QUALIFIED_NAME, String.class, "");
  492. container.addContainerProperty(SIMPLE_NAME, String.class, "");
  493. container.addContainerProperty(REVERSE_FULLY_QUALIFIED_NAME,
  494. String.class, null);
  495. container.addContainerProperty(ID_NUMBER, Integer.class, null);
  496. for (int i = 0; i < sampleData.length; i++) {
  497. String id = sampleData[i];
  498. Item item = container.addItem(id);
  499. item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(sampleData[i]);
  500. item.getItemProperty(SIMPLE_NAME)
  501. .setValue(getSimpleName(sampleData[i]));
  502. item.getItemProperty(REVERSE_FULLY_QUALIFIED_NAME)
  503. .setValue(reverse(sampleData[i]));
  504. item.getItemProperty(ID_NUMBER).setValue(i);
  505. }
  506. }
  507. protected static String getSimpleName(String name) {
  508. if (name.contains(".")) {
  509. return name.substring(name.lastIndexOf('.') + 1);
  510. } else {
  511. return name;
  512. }
  513. }
  514. protected static String reverse(String string) {
  515. return new StringBuilder(string).reverse().toString();
  516. }
  517. protected final String[] sampleData = {
  518. "com.vaadin.annotations.AutoGenerated", "com.vaadin.Application",
  519. "com.vaadin.data.Buffered", "com.vaadin.data.BufferedValidatable",
  520. "com.vaadin.data.Container", "com.vaadin.data.Item",
  521. "com.vaadin.data.Property", "com.vaadin.data.util.BeanItem",
  522. "com.vaadin.data.util.BeanItemContainer",
  523. "com.vaadin.data.util.ContainerHierarchicalWrapper",
  524. "com.vaadin.data.util.ContainerOrderedWrapper",
  525. "com.vaadin.data.util.DefaultItemSorter",
  526. "com.vaadin.data.util.FilesystemContainer",
  527. "com.vaadin.data.util.Filter",
  528. "com.vaadin.data.util.HierarchicalContainer",
  529. "com.vaadin.data.util.IndexedContainer",
  530. "com.vaadin.data.util.ItemSorter",
  531. "com.vaadin.data.util.MethodProperty",
  532. "com.vaadin.data.util.ObjectProperty",
  533. "com.vaadin.data.util.PropertyFormatter",
  534. "com.vaadin.data.util.PropertysetItem",
  535. "com.vaadin.data.util.QueryContainer",
  536. "com.vaadin.data.util.TextFileProperty",
  537. "com.vaadin.data.Validatable",
  538. "com.vaadin.data.validator.AbstractStringValidator",
  539. "com.vaadin.data.validator.AbstractValidator",
  540. "com.vaadin.data.validator.CompositeValidator",
  541. "com.vaadin.data.validator.DoubleValidator",
  542. "com.vaadin.data.validator.EmailValidator",
  543. "com.vaadin.data.validator.IntegerValidator",
  544. "com.vaadin.data.validator.NullValidator",
  545. "com.vaadin.data.validator.RegexpValidator",
  546. "com.vaadin.data.validator.StringLengthValidator",
  547. "com.vaadin.data.Validator", "com.vaadin.event.Action",
  548. "com.vaadin.event.ComponentEventListener",
  549. "com.vaadin.event.EventRouter", "com.vaadin.event.FieldEvents",
  550. "com.vaadin.event.ItemClickEvent", "com.vaadin.event.LayoutEvents",
  551. "com.vaadin.event.ListenerMethod",
  552. "com.vaadin.event.MethodEventSource",
  553. "com.vaadin.event.MouseEvents", "com.vaadin.event.ShortcutAction",
  554. "com.vaadin.launcher.DemoLauncher",
  555. "com.vaadin.launcher.DevelopmentServerLauncher",
  556. "com.vaadin.launcher.util.BrowserLauncher",
  557. "com.vaadin.service.ApplicationContext",
  558. "com.vaadin.service.FileTypeResolver",
  559. "com.vaadin.server.ApplicationResource",
  560. "com.vaadin.server.ClassResource",
  561. "com.vaadin.server.CompositeErrorMessage",
  562. "com.vaadin.server.DownloadStream",
  563. "com.vaadin.server.ErrorMessage",
  564. "com.vaadin.server.ExternalResource",
  565. "com.vaadin.server.FileResource",
  566. "com.vaadin.terminal.gwt.client.ApplicationConfiguration",
  567. "com.vaadin.terminal.gwt.client.ApplicationConnection",
  568. "com.vaadin.terminal.gwt.client.BrowserInfo",
  569. "com.vaadin.terminal.gwt.client.ClientExceptionHandler",
  570. "com.vaadin.terminal.gwt.client.ComponentDetail",
  571. "com.vaadin.terminal.gwt.client.ComponentDetailMap",
  572. "com.vaadin.terminal.gwt.client.ComponentLocator",
  573. "com.vaadin.terminal.gwt.client.Console",
  574. "com.vaadin.terminal.gwt.client.Container",
  575. "com.vaadin.terminal.gwt.client.ContainerResizedListener",
  576. "com.vaadin.terminal.gwt.client.CSSRule",
  577. "com.vaadin.terminal.gwt.client.DateTimeService",
  578. "com.vaadin.terminal.gwt.client.DefaultWidgetSet",
  579. "com.vaadin.terminal.gwt.client.Focusable",
  580. "com.vaadin.terminal.gwt.client.HistoryImplIEVaadin",
  581. "com.vaadin.terminal.gwt.client.LocaleNotLoadedException",
  582. "com.vaadin.terminal.gwt.client.LocaleService",
  583. "com.vaadin.terminal.gwt.client.MouseEventDetails",
  584. "com.vaadin.terminal.gwt.client.NullConsole",
  585. "com.vaadin.terminal.gwt.client.Paintable",
  586. "com.vaadin.terminal.gwt.client.RenderInformation",
  587. "com.vaadin.terminal.gwt.client.RenderSpace",
  588. "com.vaadin.terminal.gwt.client.StyleConstants",
  589. "com.vaadin.terminal.gwt.client.TooltipInfo",
  590. "com.vaadin.terminal.gwt.client.ui.Action",
  591. "com.vaadin.terminal.gwt.client.ui.ActionOwner",
  592. "com.vaadin.terminal.gwt.client.ui.AlignmentInfo",
  593. "com.vaadin.terminal.gwt.client.ui.CalendarEntry",
  594. "com.vaadin.terminal.gwt.client.ui.ClickEventHandler",
  595. "com.vaadin.terminal.gwt.client.ui.Field",
  596. "com.vaadin.terminal.gwt.client.ui.Icon",
  597. "com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout",
  598. "com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer",
  599. "com.vaadin.terminal.gwt.client.ui.layout.Margins",
  600. "com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler",
  601. "com.vaadin.terminal.gwt.client.ui.MenuBar",
  602. "com.vaadin.terminal.gwt.client.ui.MenuItem",
  603. "com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextToolbar",
  604. "com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler",
  605. "com.vaadin.terminal.gwt.client.ui.SubPartAware",
  606. "com.vaadin.terminal.gwt.client.ui.Table",
  607. "com.vaadin.terminal.gwt.client.ui.TreeAction",
  608. "com.vaadin.terminal.gwt.client.ui.TreeImages",
  609. "com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout",
  610. "com.vaadin.terminal.gwt.client.ui.VAccordion",
  611. "com.vaadin.terminal.gwt.client.ui.VButton",
  612. "com.vaadin.terminal.gwt.client.ui.VCalendarPanel",
  613. "com.vaadin.terminal.gwt.client.ui.VCheckBox",
  614. "com.vaadin.terminal.gwt.client.ui.VContextMenu",
  615. "com.vaadin.terminal.gwt.client.ui.VCssLayout",
  616. "com.vaadin.terminal.gwt.client.ui.VCustomComponent",
  617. "com.vaadin.terminal.gwt.client.ui.VCustomLayout",
  618. "com.vaadin.terminal.gwt.client.ui.VDateField",
  619. "com.vaadin.terminal.gwt.client.ui.VDateFieldCalendar",
  620. "com.vaadin.terminal.gwt.client.ui.VEmbedded",
  621. "com.vaadin.terminal.gwt.client.ui.VFilterSelect",
  622. "com.vaadin.terminal.gwt.client.ui.VForm",
  623. "com.vaadin.terminal.gwt.client.ui.VFormLayout",
  624. "com.vaadin.terminal.gwt.client.ui.VGridLayout",
  625. "com.vaadin.terminal.gwt.client.ui.VHorizontalLayout",
  626. "com.vaadin.terminal.gwt.client.ui.VLabel",
  627. "com.vaadin.terminal.gwt.client.ui.VLink",
  628. "com.vaadin.terminal.gwt.client.ui.VListSelect",
  629. "com.vaadin.terminal.gwt.client.ui.VMarginInfo",
  630. "com.vaadin.terminal.gwt.client.ui.VMenuBar",
  631. "com.vaadin.terminal.gwt.client.ui.VNativeButton",
  632. "com.vaadin.terminal.gwt.client.ui.VNativeSelect",
  633. "com.vaadin.terminal.gwt.client.ui.VNotification",
  634. "com.vaadin.terminal.gwt.client.ui.VOptionGroup",
  635. "com.vaadin.terminal.gwt.client.ui.VOptionGroupBase",
  636. "com.vaadin.terminal.gwt.client.ui.VOrderedLayout",
  637. "com.vaadin.terminal.gwt.client.ui.VOverlay",
  638. "com.vaadin.terminal.gwt.client.ui.VPanel",
  639. "com.vaadin.terminal.gwt.client.ui.VPasswordField",
  640. "com.vaadin.terminal.gwt.client.ui.VPopupCalendar",
  641. "com.vaadin.terminal.gwt.client.ui.VPopupView",
  642. "com.vaadin.terminal.gwt.client.ui.VProgressIndicator",
  643. "com.vaadin.terminal.gwt.client.ui.VRichTextArea",
  644. "com.vaadin.terminal.gwt.client.ui.VScrollTable",
  645. "com.vaadin.terminal.gwt.client.ui.VSlider",
  646. "com.vaadin.terminal.gwt.client.ui.VSplitPanel",
  647. "com.vaadin.terminal.gwt.client.ui.VSplitPanelHorizontal",
  648. "com.vaadin.terminal.gwt.client.ui.VSplitPanelVertical",
  649. "com.vaadin.terminal.gwt.client.ui.VTablePaging",
  650. "com.vaadin.terminal.gwt.client.ui.VTabsheet",
  651. "com.vaadin.terminal.gwt.client.ui.VTabsheetBase",
  652. "com.vaadin.terminal.gwt.client.ui.VTabsheetPanel",
  653. "com.vaadin.terminal.gwt.client.ui.VTextArea",
  654. "com.vaadin.terminal.gwt.client.ui.VTextField",
  655. "com.vaadin.terminal.gwt.client.ui.VTextualDate",
  656. "com.vaadin.terminal.gwt.client.ui.VTime",
  657. "com.vaadin.terminal.gwt.client.ui.VTree",
  658. "com.vaadin.terminal.gwt.client.ui.VTwinColSelect",
  659. "com.vaadin.terminal.gwt.client.ui.VUnknownComponent",
  660. "com.vaadin.terminal.gwt.client.ui.VUpload",
  661. "com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility",
  662. "com.vaadin.terminal.gwt.client.ui.VVerticalLayout",
  663. "com.vaadin.terminal.gwt.client.ui.VView",
  664. "com.vaadin.terminal.gwt.client.ui.VWindow",
  665. "com.vaadin.terminal.gwt.client.UIDL",
  666. "com.vaadin.terminal.gwt.client.Util",
  667. "com.vaadin.terminal.gwt.client.ValueMap",
  668. "com.vaadin.terminal.gwt.client.VCaption",
  669. "com.vaadin.terminal.gwt.client.VCaptionWrapper",
  670. "com.vaadin.terminal.gwt.client.VDebugConsole",
  671. "com.vaadin.terminal.gwt.client.VErrorMessage",
  672. "com.vaadin.terminal.gwt.client.VTooltip",
  673. "com.vaadin.terminal.gwt.client.VUIDLBrowser",
  674. "com.vaadin.terminal.gwt.client.WidgetMap",
  675. "com.vaadin.terminal.gwt.client.WidgetSet",
  676. "com.vaadin.server.AbstractApplicationPortlet",
  677. "com.vaadin.server.AbstractApplicationServlet",
  678. "com.vaadin.server.AbstractCommunicationManager",
  679. "com.vaadin.server.AbstractWebApplicationContext",
  680. "com.vaadin.server.ApplicationPortlet",
  681. "com.vaadin.server.ApplicationPortlet2",
  682. "com.vaadin.server.ApplicationRunnerServlet",
  683. "com.vaadin.server.ApplicationServlet",
  684. "com.vaadin.server.ChangeVariablesErrorEvent",
  685. "com.vaadin.server.CommunicationManager",
  686. "com.vaadin.server.ComponentSizeValidator",
  687. "com.vaadin.server.Constants",
  688. "com.vaadin.server.GAEApplicationServlet",
  689. "com.vaadin.server.HttpServletRequestListener",
  690. "com.vaadin.server.HttpUploadStream",
  691. "com.vaadin.server.JsonPaintTarget",
  692. "com.vaadin.server.PortletApplicationContext",
  693. "com.vaadin.server.PortletApplicationContext2",
  694. "com.vaadin.server.PortletCommunicationManager",
  695. "com.vaadin.server.PortletRequestListener",
  696. "com.vaadin.server.RestrictedRenderResponse",
  697. "com.vaadin.server.SessionExpiredException",
  698. "com.vaadin.server.SystemMessageException",
  699. "com.vaadin.server.WebApplicationContext",
  700. "com.vaadin.server.WebBrowser",
  701. "com.vaadin.server.widgetsetutils.ClassPathExplorer",
  702. "com.vaadin.server.widgetsetutils.WidgetMapGenerator",
  703. "com.vaadin.server.widgetsetutils.WidgetSetBuilder",
  704. "com.vaadin.server.KeyMapper", "com.vaadin.server.Paintable",
  705. "com.vaadin.server.PaintException", "com.vaadin.server.PaintTarget",
  706. "com.vaadin.server.ParameterHandler", "com.vaadin.server.Resource",
  707. "com.vaadin.server.Scrollable", "com.vaadin.server.Sizeable",
  708. "com.vaadin.server.StreamResource", "com.vaadin.server.SystemError",
  709. "com.vaadin.server.Terminal", "com.vaadin.server.ThemeResource",
  710. "com.vaadin.server.UploadStream", "com.vaadin.server.URIHandler",
  711. "com.vaadin.server.UserError", "com.vaadin.server.VariableOwner",
  712. "com.vaadin.tools.ReflectTools",
  713. "com.vaadin.tools.WidgetsetCompiler",
  714. "com.vaadin.ui.AbsoluteLayout", "com.vaadin.ui.AbstractComponent",
  715. "com.vaadin.ui.AbstractComponentContainer",
  716. "com.vaadin.ui.AbstractField", "com.vaadin.ui.AbstractLayout",
  717. "com.vaadin.ui.AbstractOrderedLayout",
  718. "com.vaadin.ui.AbstractSelect", "com.vaadin.ui.Accordion",
  719. "com.vaadin.ui.Alignment", "com.vaadin.ui.AlignmentUtils",
  720. "com.vaadin.ui.BaseFieldFactory", "com.vaadin.ui.Button",
  721. "com.vaadin.ui.CheckBox", "com.vaadin.ui.ClientWidget",
  722. "com.vaadin.ui.ComboBox", "com.vaadin.ui.Component",
  723. "com.vaadin.ui.ComponentContainer", "com.vaadin.ui.CssLayout",
  724. "com.vaadin.ui.CustomComponent", "com.vaadin.ui.CustomLayout",
  725. "com.vaadin.ui.DateField", "com.vaadin.ui.DefaultFieldFactory",
  726. "com.vaadin.ui.Embedded", "com.vaadin.ui.ExpandLayout",
  727. "com.vaadin.ui.Field", "com.vaadin.ui.FieldFactory",
  728. "com.vaadin.ui.Form", "com.vaadin.ui.FormFieldFactory",
  729. "com.vaadin.ui.FormLayout", "com.vaadin.ui.GridLayout",
  730. "com.vaadin.ui.HorizontalLayout", "com.vaadin.ui.InlineDateField",
  731. "com.vaadin.ui.Label", "com.vaadin.ui.Layout", "com.vaadin.ui.Link",
  732. "com.vaadin.ui.ListSelect", "com.vaadin.ui.LoginForm",
  733. "com.vaadin.ui.MenuBar", "com.vaadin.ui.NativeButton",
  734. "com.vaadin.ui.NativeSelect", "com.vaadin.ui.OptionGroup",
  735. "com.vaadin.ui.OrderedLayout", "com.vaadin.ui.Panel",
  736. "com.vaadin.ui.PopupDateField", "com.vaadin.ui.PopupView",
  737. "com.vaadin.ui.ProgressIndicator", "com.vaadin.ui.RichTextArea",
  738. "com.vaadin.ui.Select", "com.vaadin.ui.Slider",
  739. "com.vaadin.ui.SplitPanel", "com.vaadin.ui.Table",
  740. "com.vaadin.ui.TableFieldFactory", "com.vaadin.ui.TabSheet",
  741. "com.vaadin.ui.TextField", "com.vaadin.ui.Tree",
  742. "com.vaadin.ui.TwinColSelect", "com.vaadin.ui.Upload",
  743. "com.vaadin.ui.UriFragmentUtility", "com.vaadin.ui.VerticalLayout",
  744. "com.vaadin.ui.Window", "com.vaadin.util.SerializerHelper",
  745. "org.vaadin.test.LastClass" };
  746. }