1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
package com.vaadin.tests.containers.filesystemcontainer;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.v7.data.Container;
import com.vaadin.v7.data.Container.Ordered;
import com.vaadin.v7.data.util.FilesystemContainer;
import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.TreeTable;
public class FileSystemContainerInTreeTable extends TestBase {
private Log log = new Log(5);
private TreeTable treeTable;
@Override
protected void setup() {
setTheme("reindeer-tests");
final File folder;
try {
File tempFile = File.createTempFile("fsc-tt", "");
tempFile.delete();
folder = new File(tempFile.getParent(), tempFile.getName());
folder.mkdir();
System.out.println(folder.getPath());
folder.deleteOnExit();
populate(folder, 3, 10);
FilesystemContainer fsc = new FilesystemContainer(folder);
treeTable = new TreeTable();
treeTable.addStyleName("table-equal-rowheight");
treeTable.setWidth("450px");
treeTable.setHeight("550px");
treeTable.setContainerDataSource(fsc);
treeTable.setItemIconPropertyId(FilesystemContainer.PROPERTY_ICON);
treeTable.setVisibleColumns("Name");
treeTable.setColumnWidth("Name", 400);
treeTable.addExpandListener(
event -> logExpandCollapse(event.getItemId(), "expanded"));
treeTable.addCollapseListener(
event -> logExpandCollapse(event.getItemId(), "collapsed"));
addComponent(log);
addComponent(treeTable);
HorizontalLayout buttonLayout = new HorizontalLayout();
buttonLayout.setSpacing(true);
buttonLayout.addComponent(new Button("Create dir11", event -> {
new File(folder, "dir11").mkdir();
log.log("Row dir11 created");
}));
buttonLayout.addComponent(new Button("Delete dir11", event -> {
new File(folder, "dir11").delete();
log.log("Row dir11 deleted");
}));
// to clean up explicitly before ending an automated test
buttonLayout.addComponent(
new Button("Clean all files", event -> folder.delete()));
addComponent(buttonLayout);
} catch (IOException e) {
e.printStackTrace();
}
}
private void populate(File folder, int subDirectories, int files)
throws IOException {
for (int i = 1; i <= files; i++) {
File f = new File(folder, "file" + i + ".txt");
f.createNewFile();
}
for (int i = 1; i <= subDirectories; i++) {
File f = new File(folder, "dir" + i);
f.mkdir();
populate(f, 0, 2);
}
}
protected int indexOfId(Table source, Object itemId) {
Container.Ordered c = (Ordered) source.getContainerDataSource();
if (c instanceof Container.Indexed) {
return ((Container.Indexed) source).indexOfId(itemId);
} else {
List<Object> list = new ArrayList<>(source.getItemIds());
return list.indexOf(itemId);
}
}
protected void logExpandCollapse(Object itemId, String operation) {
File file = (File) itemId;
// do not use the variable part (path) of file name
log.log("Row " + file.getName() + " " + operation + ". Row index: "
+ indexOfId(treeTable, itemId));
}
@Override
protected String getDescription() {
return "TreeTable partial updates can only be used with a container that notifies the TreeTable of item set changes";
}
@Override
protected Integer getTicketNumber() {
return 7837;
}
}
|