aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/main/java/com/vaadin/tests/components/table/TableUnregisterComponent.java
blob: 8d852e543834f6cc3c152008280623cc3cd7ab6a (plain)
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
package com.vaadin.tests.components.table;

import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.v7.data.Container;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.Property;
import com.vaadin.v7.data.util.IndexedContainer;
import com.vaadin.v7.data.util.ObjectProperty;
import com.vaadin.v7.ui.DefaultFieldFactory;
import com.vaadin.v7.ui.Field;
import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.TextField;

public class TableUnregisterComponent extends TestBase {

    private static final String COL_A = "textFieldA";
    private static final String COL_B = "textB";

    @Override
    protected void setup() {
        final Log log = new Log(5);

        IndexedContainer container = new IndexedContainer();
        container.addContainerProperty(COL_A, TextField.class, null);
        container.addContainerProperty(COL_B, String.class, "");

        Item it = container.addItem("a");
        final ObjectProperty<String> valA = new ObjectProperty<>("orgVal");
        final TextField fieldA = new TextField(valA) {
            @Override
            public void setPropertyDataSource(Property newDataSource) {
                super.setPropertyDataSource(newDataSource);
                if (newDataSource == null) {
                    log.log("Embedded field property data source cleared");
                } else {
                    log.log("Embedded field property data source set");
                }
            }
        };
        it.getItemProperty(COL_A).setValue(fieldA);
        it.getItemProperty(COL_B).setValue("Some text here");

        final Table table = new Table("", container);
        table.setColumnCollapsingAllowed(true);
        table.setTableFieldFactory(new DefaultFieldFactory() {
            @Override
            public Field<?> createField(Container container, Object itemId,
                    Object propertyId, Component uiContext) {
                if (COL_B.equals(propertyId)) {
                    Field<String> field = new TextField() {
                        @Override
                        public void setPropertyDataSource(
                                Property newDataSource) {
                            super.setPropertyDataSource(newDataSource);
                            if (newDataSource == null) {
                                log.log("Edit field property data source cleared");
                            } else {
                                log.log("Edit field property data source set");
                            }
                        }
                    };
                    field.setCaption(createCaptionByPropertyId(propertyId));
                    return field;
                } else {
                    return super.createField(container, itemId, propertyId,
                            uiContext);
                }
            }
        });

        addComponent(log);
        addComponent(table);

        addComponent(new Button("Switch column collapse", event -> table
                .setColumnCollapsed(COL_A, !table.isColumnCollapsed(COL_A))));

        addComponent(new Button("Switch editable",
                event -> table.setEditable(!table.isEditable())));
    }

    @Override
    protected String getDescription() {
        return "Table.uncollapseColumn (triggered by collapsing column or disabling editable mode) should only unregister property data sources that have been added by the table.";
    }

    @Override
    protected Integer getTicketNumber() {
        return Integer.valueOf("7541");
    }

}