package com.vaadin.tests.components.beanitemcontainer;
import java.util.Date;
-import java.util.Random;
import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.util.PortableRandom;
public class BeanItemContainerGenerator {
BeanItemContainer<TestBean> container = new BeanItemContainer<TestBean>(
TestBean.class);
- Random r = new Random(seed);
+ PortableRandom r = new PortableRandom(seed);
for (int i = 0; i < size; i++) {
container.addBean(new TestBean(r));
}
this.shoesize = shoesize;
}
- public TestBean(Random r) {
+ public TestBean(PortableRandom r) {
age = r.nextInt(100) + 5;
shoesize = r.nextInt(10) + 35;
name = createRandomString(r, r.nextInt(5) + 5);
}
- public static String createRandomString(Random r, int len) {
+ public static String createRandomString(PortableRandom r, int len) {
StringBuilder b = new StringBuilder();
for (int i = 0; i < len; i++) {
b.append((char) (r.nextInt('z' - 'a') + 'a'));
<td>/run/com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues?restartApplication</td>
<td></td>
</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td>85,9</td>
+</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td></td>
<td>sort-country-desc</td>
</tr>
+<!-- Disable sorting -->
<tr>
<td>click</td>
<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
+<!-- Try to sort -->
<tr>
<td>mouseClick</td>
<td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
<td>39,8</td>
</tr>
+<!-- Enable sorting to get the same screenshot as before -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td>79,4</td>
+</tr>
<tr>
<td>screenCapture</td>
<td></td>
table = new Table();
table.setSortDisabled(false);
table.setContainerDataSource(BeanItemContainerGenerator
- .createContainer(100));
+ .createContainer(100, 1));
table.setColumnCollapsingAllowed(true);
Button b = new Button("Disable sorting", new Button.ClickListener() {
--- /dev/null
+package com.vaadin.tests.util;\r
+\r
+import java.util.concurrent.atomic.AtomicLong;\r
+\r
+public class PortableRandom {\r
+ private final static long multiplier = 0x5DEECE66DL;\r
+ private final static long addend = 0xBL;\r
+ private final static long mask = (1L << 48) - 1;\r
+ private AtomicLong seed;\r
+\r
+ public PortableRandom(long seed) {\r
+ this.seed = new AtomicLong(0L);\r
+ setSeed(seed);\r
+ }\r
+\r
+ synchronized public void setSeed(long seed) {\r
+ seed = (seed ^ multiplier) & mask;\r
+ this.seed.set(seed);\r
+ }\r
+\r
+ public int nextInt(int n) {\r
+ if (n <= 0) {\r
+ throw new IllegalArgumentException("n must be positive");\r
+ }\r
+\r
+ if ((n & -n) == n) {\r
+ return (int) ((n * (long) next(31)) >> 31);\r
+ }\r
+\r
+ int bits, val;\r
+ do {\r
+ bits = next(31);\r
+ val = bits % n;\r
+ } while (bits - val + (n - 1) < 0);\r
+ return val;\r
+ }\r
+\r
+ protected int next(int bits) {\r
+ long oldseed, nextseed;\r
+ AtomicLong seed = this.seed;\r
+ do {\r
+ oldseed = seed.get();\r
+ nextseed = (oldseed * multiplier + addend) & mask;\r
+ } while (!seed.compareAndSet(oldseed, nextseed));\r
+ return (int) (nextseed >>> (48 - bits));\r
+ }\r
+\r
+ public boolean nextBoolean() {\r
+ return next(1) != 0;\r
+ }\r
+\r
+}
\ No newline at end of file