You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GridGeneratedProperties.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.vaadin.tests.components.grid;
  2. import com.vaadin.server.VaadinRequest;
  3. import com.vaadin.shared.data.sort.SortDirection;
  4. import com.vaadin.tests.components.AbstractReindeerTestUI;
  5. import com.vaadin.ui.Button;
  6. import com.vaadin.ui.Button.ClickEvent;
  7. import com.vaadin.ui.Button.ClickListener;
  8. import com.vaadin.v7.data.Container.Filter;
  9. import com.vaadin.v7.data.Container.Filterable;
  10. import com.vaadin.v7.data.Container.Indexed;
  11. import com.vaadin.v7.data.Item;
  12. import com.vaadin.v7.data.sort.Sort;
  13. import com.vaadin.v7.data.sort.SortOrder;
  14. import com.vaadin.v7.data.util.GeneratedPropertyContainer;
  15. import com.vaadin.v7.data.util.IndexedContainer;
  16. import com.vaadin.v7.data.util.PropertyValueGenerator;
  17. import com.vaadin.v7.data.util.filter.Compare;
  18. import com.vaadin.v7.data.util.filter.UnsupportedFilterException;
  19. import com.vaadin.v7.ui.Grid;
  20. /**
  21. * Smoke tests for v7 generated properties in Grid
  22. */
  23. public class GridGeneratedProperties extends AbstractReindeerTestUI {
  24. private GeneratedPropertyContainer container;
  25. static double MILES_CONVERSION = 0.6214d;
  26. private Filter filter = new Compare.Greater("miles", 1d);
  27. @Override
  28. protected void setup(VaadinRequest request) {
  29. container = new GeneratedPropertyContainer(createContainer());
  30. Grid grid = new Grid(container);
  31. addComponent(grid);
  32. container.addGeneratedProperty("miles",
  33. new PropertyValueGenerator<Double>() {
  34. @Override
  35. public Double getValue(Item item, Object itemId,
  36. Object propertyId) {
  37. return (Double) item.getItemProperty("km").getValue()
  38. * MILES_CONVERSION;
  39. }
  40. @Override
  41. public Class<Double> getType() {
  42. return Double.class;
  43. }
  44. @Override
  45. public Filter modifyFilter(Filter filter)
  46. throws UnsupportedFilterException {
  47. if (filter instanceof Compare.Greater) {
  48. Double value = (Double) ((Compare.Greater) filter)
  49. .getValue();
  50. value = value / MILES_CONVERSION;
  51. return new Compare.Greater("km", value);
  52. }
  53. return super.modifyFilter(filter);
  54. }
  55. });
  56. final Button filterButton = new Button("Add filter");
  57. filterButton.addClickListener(new ClickListener() {
  58. boolean active = false;
  59. @Override
  60. public void buttonClick(ClickEvent event) {
  61. if (active) {
  62. ((Filterable) container).removeContainerFilter(filter);
  63. filterButton.setCaption("Add filter");
  64. active = false;
  65. return;
  66. }
  67. ((Filterable) container).addContainerFilter(filter);
  68. filterButton.setCaption("Remove filter");
  69. active = true;
  70. }
  71. });
  72. container.addGeneratedProperty("foo",
  73. new PropertyValueGenerator<String>() {
  74. @Override
  75. public String getValue(Item item, Object itemId,
  76. Object propertyId) {
  77. return item.getItemProperty("foo").getValue() + " "
  78. + item.getItemProperty("bar").getValue();
  79. }
  80. @Override
  81. public Class<String> getType() {
  82. return String.class;
  83. }
  84. });
  85. container.removeContainerProperty("bar");
  86. container.addGeneratedProperty("baz",
  87. new PropertyValueGenerator<Integer>() {
  88. @Override
  89. public Integer getValue(Item item, Object itemId,
  90. Object propertyId) {
  91. return (Integer) item.getItemProperty("bar").getValue();
  92. }
  93. @Override
  94. public Class<Integer> getType() {
  95. return Integer.class;
  96. }
  97. @Override
  98. public SortOrder[] getSortProperties(SortOrder order) {
  99. return Sort.by("bar", order.getDirection()).build()
  100. .toArray(new SortOrder[1]);
  101. }
  102. });
  103. addComponent(filterButton);
  104. grid.sort(Sort.by("km").then("bar", SortDirection.DESCENDING));
  105. }
  106. private Indexed createContainer() {
  107. Indexed container = new IndexedContainer();
  108. container.addContainerProperty("foo", String.class, "foo");
  109. container.addContainerProperty("bar", Integer.class, 0);
  110. // km contains double values from 0.0 to 2.0
  111. container.addContainerProperty("km", Double.class, 0);
  112. for (int i = 0; i <= 100; ++i) {
  113. Object itemId = container.addItem();
  114. Item item = container.getItem(itemId);
  115. item.getItemProperty("foo").setValue("foo");
  116. item.getItemProperty("bar").setValue(i);
  117. item.getItemProperty("km").setValue(i / 5.0d);
  118. }
  119. return container;
  120. }
  121. @Override
  122. protected String getTestDescription() {
  123. return "A Grid with GeneratedPropertyContainer";
  124. }
  125. @Override
  126. protected Integer getTicketNumber() {
  127. return 13334;
  128. }
  129. }