Example usage for com.google.gwt.view.client SingleSelectionModel SingleSelectionModel

List of usage examples for com.google.gwt.view.client SingleSelectionModel SingleSelectionModel

Introduction

In this page you can find the example usage for com.google.gwt.view.client SingleSelectionModel SingleSelectionModel.

Prototype

public SingleSelectionModel() 

Source Link

Document

Constructs a SingleSelectionModel without a key provider.

Usage

From source file:org.jbpm.datamodeler.editor.client.editors.DataModelBrowser.java

License:Apache License

public void setDataModel(DataModelTO dataModel) {
    this.dataModel = dataModel;
    this.dataObjects = dataModel.getDataObjects();
    modelName.setText(dataModel.getName());

    // We create a new selection model due to a bug found in GWT when we change e.g. from one data object with 9 rows
    // to one with 3 rows and the table was sorted.
    // Several tests has been done and the final workaround (not too bad) we found is to
    //  1) sort the table again
    //  2) create a new selection model
    //  3) populate the table with new items
    //  3) select the first row

    SingleSelectionModel selectionModel2 = new SingleSelectionModel<DataObjectTO>();
    dataObjectsTable.setSelectionModel(selectionModel2);

    selectionModel2.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override//from  w ww  . j a  v  a2s . c o m
        public void onSelectionChange(SelectionChangeEvent event) {
            if (!skipNextOnChange) {
                DataObjectTO selectedObjectTO = ((SingleSelectionModel<DataObjectTO>) dataObjectsTable
                        .getSelectionModel()).getSelectedObject();
                notifyObjectSelected(selectedObjectTO);
            }
            skipNextOnChange = false;
        }
    });

    ArrayList<DataObjectTO> sortBuffer = new ArrayList<DataObjectTO>();
    sortBuffer.addAll(dataObjects);
    Collections.sort(sortBuffer, new DataObjectComparator());

    dataObjectsProvider.getList().clear();
    dataObjectsProvider.getList().addAll(sortBuffer);
    dataObjectsProvider.flush();
    dataObjectsProvider.refresh();

    dataObjectsTable.getColumnSortList()
            .push(new ColumnSortList.ColumnSortInfo(dataObjectsTable.getColumn(1), true));

    if (dataObjects.size() > 0) {
        dataObjectsTable.setKeyboardSelectedRow(0);
        selectionModel2.setSelected(sortBuffer.get(0), true);
    }

    // Set the first row selected again. Sounds crazy, but it's part of the workaround, don't remove this line.
    if (dataObjects.size() > 0) {
        dataObjectsTable.setKeyboardSelectedRow(0);
    }
}

From source file:org.jbpm.datamodeler.editor.client.editors.DataObjectBrowser.java

License:Apache License

public DataObjectBrowser() {
    initWidget(uiBinder.createAndBindUi(this));

    objectName.setText(Constants.INSTANCE.objectEditor_objectUnknown());
    dataObjectPropertiesProvider.setList(dataObjectProperties);

    //Init data objects table

    dataObjectPropertiesTable.setEmptyTableWidget(
            new com.github.gwtbootstrap.client.ui.Label(Constants.INSTANCE.objectEditor_emptyTable()));

    //Init delete column
    ClickableImageResourceCell clickableImageResourceCell = new ClickableImageResourceCell(true);
    final TooltipCellDecorator<ImageResource> decorator = new TooltipCellDecorator<ImageResource>(
            clickableImageResourceCell);
    decorator.setText(Constants.INSTANCE.objectEditor_action_deleteProperty());

    final Column<ObjectPropertyTO, ImageResource> deletePropertyColumnImg = new Column<ObjectPropertyTO, ImageResource>(
            decorator) {// www .  j  a va  2  s  .c o m
        @Override
        public ImageResource getValue(final ObjectPropertyTO global) {
            return ImagesResources.INSTANCE.Delete();
        }
    };

    deletePropertyColumnImg.setFieldUpdater(new FieldUpdater<ObjectPropertyTO, ImageResource>() {
        public void update(final int index, final ObjectPropertyTO property, final ImageResource value) {

            deleteDataObjectProperty(property, index);
        }
    });

    dataObjectPropertiesTable.addColumn(deletePropertyColumnImg);
    dataObjectPropertiesTable.setColumnWidth(deletePropertyColumnImg, 20, Style.Unit.PX);

    //Init property name column

    final TextColumn<ObjectPropertyTO> propertyNameColumn = new TextColumn<ObjectPropertyTO>() {

        @Override
        public void render(Cell.Context context, ObjectPropertyTO object, SafeHtmlBuilder sb) {
            SafeHtml startDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "<div style=\"cursor: pointer;\">";
                }
            };
            SafeHtml endDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "</div>";
                }
            };

            sb.append(startDiv);
            super.render(context, object, sb);
            sb.append(endDiv);
        }

        @Override
        public String getValue(final ObjectPropertyTO objectProperty) {
            return objectProperty.getName();
        }
    };

    propertyNameColumn.setSortable(true);
    dataObjectPropertiesTable.addColumn(propertyNameColumn, Constants.INSTANCE.objectEditor_columnName());
    //dataObjectPropertiesTable.setColumnWidth(propertyNameColumn, 100, Style.Unit.PX);

    ColumnSortEvent.ListHandler<ObjectPropertyTO> propertyNameColHandler = new ColumnSortEvent.ListHandler<ObjectPropertyTO>(
            dataObjectPropertiesProvider.getList());
    propertyNameColHandler.setComparator(propertyNameColumn, new ObjectPropertyComparator("name"));
    dataObjectPropertiesTable.addColumnSortHandler(propertyNameColHandler);

    //Init property type column
    final Column<ObjectPropertyTO, String> propertyTypeColumn = new Column<ObjectPropertyTO, String>(typeCell) {

        @Override
        public String getValue(final ObjectPropertyTO objectProperty) {
            return propertyTypeDisplay(objectProperty);
        }

    };
    propertyTypeColumn.setSortable(true);
    dataObjectPropertiesTable.addColumn(propertyTypeColumn, Constants.INSTANCE.objectEditor_columnType());
    //dataObjectPropertiesTable.setColumnWidth(propertyTypeColumn, 100, Style.Unit.PX);

    ColumnSortEvent.ListHandler<ObjectPropertyTO> propertyTypeColHandler = new ColumnSortEvent.ListHandler<ObjectPropertyTO>(
            dataObjectPropertiesProvider.getList());
    propertyTypeColHandler.setComparator(propertyTypeColumn, new ObjectPropertyComparator("className"));
    dataObjectPropertiesTable.addColumnSortHandler(propertyTypeColHandler);

    dataObjectPropertiesTable.getColumnSortList().push(propertyTypeColumn);
    dataObjectPropertiesTable.getColumnSortList().push(propertyNameColumn);

    //Init the selection model
    SingleSelectionModel<ObjectPropertyTO> selectionModel = new SingleSelectionModel<ObjectPropertyTO>();
    dataObjectPropertiesTable.setSelectionModel(selectionModel);
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            ObjectPropertyTO selectedPropertyTO = ((SingleSelectionModel<ObjectPropertyTO>) dataObjectPropertiesTable
                    .getSelectionModel()).getSelectedObject();
            notifyFieldSelected(selectedPropertyTO);
        }
    });

    dataObjectPropertiesTable
            .setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION);

    dataObjectPropertiesProvider.addDataDisplay(dataObjectPropertiesTable);
    dataObjectPropertiesProvider.refresh();

    newPropertyIsMultiple.setVisible(false);
    newPropertyIsMultiple.setValue(false);
    newPropertyBasicType.setValue(true);
    newPropertyButton.setIcon(IconType.PLUS_SIGN);
}

From source file:org.jbpm.datamodeler.editor.client.editors.DataObjectBrowser.java

License:Apache License

private void setDataObject(DataObjectTO dataObject) {
    this.dataObject = dataObject;
    objectName.setText(dataObject.getName() + "::" + dataObject.getPackageName());

    //We create a new selection model due to a bug found in GWT when we change e.g. from one data object with 9 rows
    // to one with 3 rows and the table was sorted.
    //Several tests has been done and the final workaround (not too bad) we found is to
    // 1) sort the table again
    // 2) create a new selection model
    // 3) populate the table with new items
    // 3) select the first row
    SingleSelectionModel selectionModel2 = new SingleSelectionModel<ObjectPropertyTO>();
    dataObjectPropertiesTable.setSelectionModel(selectionModel2);

    selectionModel2.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override// w  w w . ja  v  a 2  s .  c om
        public void onSelectionChange(SelectionChangeEvent event) {
            ObjectPropertyTO selectedPropertyTO = ((SingleSelectionModel<ObjectPropertyTO>) dataObjectPropertiesTable
                    .getSelectionModel()).getSelectedObject();
            notifyFieldSelected(selectedPropertyTO);
        }
    });

    ArrayList<ObjectPropertyTO> sortBuffer = new ArrayList<ObjectPropertyTO>();
    sortBuffer.addAll(dataObject.getProperties());
    Collections.sort(sortBuffer, new ObjectPropertyComparator("name"));

    dataObjectProperties = dataObject.getProperties();
    dataObjectPropertiesProvider.getList().clear();
    dataObjectPropertiesProvider.getList().addAll(sortBuffer);
    dataObjectPropertiesProvider.flush();
    dataObjectPropertiesProvider.refresh();

    dataObjectPropertiesTable.getColumnSortList()
            .push(new ColumnSortList.ColumnSortInfo(dataObjectPropertiesTable.getColumn(1), true));

    if (dataObjectProperties.size() > 0) {
        dataObjectPropertiesTable.setKeyboardSelectedRow(0);
        selectionModel2.setSelected(sortBuffer.get(0), true);
    }

    //set the first row selected again. Sounds crazy, but's part of the workaround, don't remove this line.
    if (dataObjectProperties.size() > 0) {
        dataObjectPropertiesTable.setKeyboardSelectedRow(0);
    }

    if (dataObjectProperties.size() == 0) {
        //there are no properties.
        //fire an empty property seleccion event in order to notify the
        notifyFieldSelected(null);
    }
}

From source file:org.kie.guvnor.guided.dtable.client.wizard.pages.ActionSetFieldsPageViewImpl.java

License:Apache License

private void initialiseAvailablePatterns() {
    availablePatternsContainer.add(availablePatternsWidget);
    availablePatternsWidget.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
    availablePatternsWidget.setMinimumWidth(180);

    final Label lstEmpty = new Label(Constants.INSTANCE.DecisionTableWizardNoAvailablePatterns());
    lstEmpty.setStyleName(WizardCellListResources.INSTANCE.cellListStyle().cellListEmptyItem());
    availablePatternsWidget.setEmptyListWidget(lstEmpty);

    final SingleSelectionModel<Pattern52> selectionModel = new SingleSelectionModel<Pattern52>();
    availablePatternsWidget.setSelectionModel(selectionModel);

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override/*from   w ww .  j a  va  2s .c  om*/
        public void onSelectionChange(final SelectionChangeEvent event) {
            availablePatternsSelection = selectionModel.getSelectedObject();
            presenter.selectPattern(availablePatternsSelection);
        }

    });
}

From source file:org.kie.guvnor.guided.dtable.client.wizard.pages.FactPatternConstraintsPageViewImpl.java

License:Apache License

private void initialiseAvailablePatterns() {
    availablePatternsContainer.add(availablePatternsWidget);
    availablePatternsWidget.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
    availablePatternsWidget.setMinimumWidth(175);

    final Label lstEmpty = new Label(Constants.INSTANCE.DecisionTableWizardNoAvailablePatterns());
    lstEmpty.setStyleName(WizardCellListResources.INSTANCE.cellListStyle().cellListEmptyItem());
    availablePatternsWidget.setEmptyListWidget(lstEmpty);

    final SingleSelectionModel<Pattern52> selectionModel = new SingleSelectionModel<Pattern52>();
    availablePatternsWidget.setSelectionModel(selectionModel);

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override/*from   ww w  .j  av  a  2  s . c  o m*/
        public void onSelectionChange(final SelectionChangeEvent event) {
            availablePatternsSelection = selectionModel.getSelectedObject();
            presenter.selectPattern(availablePatternsSelection);
        }

    });
}

From source file:org.kie.uberfire.plugin.client.editor.DynamicMenuEditor.java

License:Apache License

private void initTable(final AbstractCellTable<DynamicMenuItem> exampleTable) {
    exampleTable.setEmptyTableWidget(new Label("No menu items."));

    final TextColumn<DynamicMenuItem> activityCol = new TextColumn<DynamicMenuItem>() {

        @Override//www . ja v  a  2s  .c  o  m
        public String getValue(DynamicMenuItem object) {
            return String.valueOf(object.getActivityId());
        }
    };

    exampleTable.addColumn(activityCol, "Activity");

    final TextColumn<DynamicMenuItem> labelCol = new TextColumn<DynamicMenuItem>() {

        @Override
        public String getValue(DynamicMenuItem object) {
            return object.getMenuLabel();
        }
    };

    exampleTable.addColumn(labelCol, "Label");

    final ButtonCell buttonCell = new ButtonCell(IconType.REMOVE, ButtonType.DANGER, ButtonSize.MINI);

    final TooltipCellDecorator<String> decorator = new TooltipCellDecorator<String>(buttonCell);
    decorator.setText("delete row, if click");

    Column<DynamicMenuItem, String> buttonCol = new Column<DynamicMenuItem, String>(decorator) {

        @Override
        public String getValue(DynamicMenuItem object) {
            return "delete";
        }
    };

    buttonCol.setFieldUpdater(new FieldUpdater<DynamicMenuItem, String>() {
        @Override
        public void update(final int index, final DynamicMenuItem object, final String value) {
            dataProvider.getList().remove(object);
            dataProvider.flush();
            dataProvider.refresh();
        }
    });

    exampleTable.addColumn(buttonCol);

    final SingleSelectionModel<DynamicMenuItem> selectionModel = new SingleSelectionModel<DynamicMenuItem>();

    selectionModel.addSelectionChangeHandler(new Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            DynamicMenuItem person = selectionModel.getSelectedObject();
            DynamicMenuEditor.this.driver.edit(person);
        }
    });

    exampleTable
            .setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION);

    exampleTable.setSelectionModel(selectionModel);

    dataProvider.addDataDisplay(exampleTable);
}

From source file:org.kie.workbench.common.screens.datamodeller.client.widgets.DataModelBrowser.java

License:Apache License

public DataModelBrowser() {
    initWidget(uiBinder.createAndBindUi(this));

    modelName.setText(Constants.INSTANCE.modelBrowser_modelUnknown());

    dataObjectsProvider.setList(dataObjects);
    dataObjectsTable.setEmptyTableWidget(
            new com.github.gwtbootstrap.client.ui.Label(Constants.INSTANCE.modelBrowser_emptyTable()));

    // Init delete column
    ClickableImageResourceCell clickableImageResourceCell = new ClickableImageResourceCell(true);
    final TooltipCellDecorator<ImageResource> decorator = new TooltipCellDecorator<ImageResource>(
            clickableImageResourceCell);
    decorator.setText(Constants.INSTANCE.modelBrowser_action_deleteDataObject());

    final Column<DataObjectTO, ImageResource> deleteDataObjectColumnImg = new Column<DataObjectTO, ImageResource>(
            decorator) {//from  w ww  . j  a  v a  2  s  .  co m
        @Override
        public ImageResource getValue(final DataObjectTO global) {
            return ImagesResources.INSTANCE.Delete();
        }
    };

    deleteDataObjectColumnImg.setFieldUpdater(new FieldUpdater<DataObjectTO, ImageResource>() {
        public void update(final int index, final DataObjectTO object, final ImageResource value) {
            deleteDataObject(object, index);
        }
    });

    dataObjectsTable.addColumn(deleteDataObjectColumnImg);
    dataObjectsTable.setColumnWidth(deleteDataObjectColumnImg, 20, Style.Unit.PX);

    // Init data object column
    final TextColumn<DataObjectTO> dataObjectColumn = new TextColumn<DataObjectTO>() {

        @Override
        public void render(Cell.Context context, DataObjectTO object, SafeHtmlBuilder sb) {
            SafeHtml startDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "<div style=\"cursor: pointer;\">";
                }
            };
            SafeHtml endDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "</div>";
                }
            };

            sb.append(startDiv);
            super.render(context, object, sb);
            sb.append(endDiv);
        }

        @Override
        public String getValue(final DataObjectTO dataObject) {
            return DataModelerUtils.getDataObjectUILabel(dataObject);
        }
    };
    dataObjectColumn.setSortable(true);
    dataObjectsTable.addColumn(dataObjectColumn, Constants.INSTANCE.modelBrowser_columnName());

    ColumnSortEvent.ListHandler<DataObjectTO> dataObjectNameColHandler = new ColumnSortEvent.ListHandler<DataObjectTO>(
            dataObjectsProvider.getList());
    dataObjectNameColHandler.setComparator(dataObjectColumn, new DataObjectComparator());
    dataObjectsTable.addColumnSortHandler(dataObjectNameColHandler);
    dataObjectsTable.getColumnSortList().push(dataObjectColumn);

    //Init the selection model
    SingleSelectionModel<DataObjectTO> selectionModel = new SingleSelectionModel<DataObjectTO>();
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            if (!skipNextOnChange) {
                DataObjectTO selectedObjectTO = ((SingleSelectionModel<DataObjectTO>) dataObjectsTable
                        .getSelectionModel()).getSelectedObject();
                notifyObjectSelected(selectedObjectTO);
            }
            skipNextOnChange = false;
        }
    });

    dataObjectsTable
            .setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION);
    dataObjectsTable.setSelectionModel(selectionModel);

    dataObjectsProvider.addDataDisplay(dataObjectsTable);
    dataObjectsProvider.refresh();

    newEntityButton.setIcon(IconType.PLUS_SIGN);
}

From source file:org.kie.workbench.common.screens.datamodeller.client.widgets.DataModelBrowser.java

License:Apache License

private void loadDataModel(DataModelTO dataModel) {
    this.dataObjects = dataModel.getDataObjects();
    modelName.setText(dataModel.getName());

    // We create a new selection model due to a bug found in GWT when we change e.g. from one data object with 9 rows
    // to one with 3 rows and the table was sorted.
    // Several tests has been done and the final workaround (not too bad) we found is to
    //  1) sort the table again
    //  2) create a new selection model
    //  3) populate the table with new items
    //  3) select the first row

    SingleSelectionModel selectionModel2 = new SingleSelectionModel<DataObjectTO>();
    dataObjectsTable.setSelectionModel(selectionModel2);

    selectionModel2.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override//from  w ww  .jav a2  s .c o m
        public void onSelectionChange(SelectionChangeEvent event) {
            if (!skipNextOnChange) {
                DataObjectTO selectedObjectTO = ((SingleSelectionModel<DataObjectTO>) dataObjectsTable
                        .getSelectionModel()).getSelectedObject();
                notifyObjectSelected(selectedObjectTO);
            }
            skipNextOnChange = false;
        }
    });

    ArrayList<DataObjectTO> sortBuffer = new ArrayList<DataObjectTO>();
    sortBuffer.addAll(dataObjects);
    Collections.sort(sortBuffer, new DataObjectComparator());

    dataObjectsProvider.getList().clear();
    dataObjectsProvider.getList().addAll(sortBuffer);
    dataObjectsProvider.flush();
    dataObjectsProvider.refresh();

    dataObjectsTable.getColumnSortList()
            .push(new ColumnSortList.ColumnSortInfo(dataObjectsTable.getColumn(1), true));

    if (dataObjects.size() > 0) {
        dataObjectsTable.setKeyboardSelectedRow(0);
        selectionModel2.setSelected(sortBuffer.get(0), true);
    }

    // Set the first row selected again. Sounds crazy, but it's part of the workaround, don't remove this line.
    if (dataObjects.size() > 0) {
        dataObjectsTable.setKeyboardSelectedRow(0);
    }
}

From source file:org.kie.workbench.common.screens.datamodeller.client.widgets.DataObjectBrowser.java

License:Apache License

public DataObjectBrowser() {
    initWidget(uiBinder.createAndBindUi(this));

    objectButton.setType(ButtonType.LINK);
    objectButton.addClickHandler(new ClickHandler() {
        @Override/* w  w w . j av a2  s  .  c o  m*/
        public void onClick(ClickEvent event) {
            lastSelectedRow = dataObjectPropertiesTable.getKeyboardSelectedRow();
            showingObject = true;
            ObjectProperty currentSelection = ((SingleSelectionModel<ObjectProperty>) dataObjectPropertiesTable
                    .getSelectionModel()).getSelectedObject();
            if (currentSelection != null) {
                dataObjectPropertiesTable.getSelectionModel().setSelected(currentSelection, false);
            }
            notifyObjectSelected();
        }
    });

    dataObjectPropertiesProvider.setList(new ArrayList<ObjectProperty>());

    //Init data objects table

    dataObjectPropertiesTable.setEmptyTableWidget(
            new com.github.gwtbootstrap.client.ui.Label(Constants.INSTANCE.objectBrowser_emptyTable()));

    //Init property name column

    final TextColumn<ObjectProperty> propertyNameColumn = new TextColumn<ObjectProperty>() {

        @Override
        public void render(Cell.Context context, ObjectProperty object, SafeHtmlBuilder sb) {
            SafeHtml startDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "<div style=\"cursor: pointer;\">";
                }
            };
            SafeHtml endDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "</div>";
                }
            };

            sb.append(startDiv);
            super.render(context, object, sb);
            sb.append(endDiv);
        }

        @Override
        public String getValue(final ObjectProperty objectProperty) {
            return objectProperty.getName();
        }
    };

    propertyNameColumn.setSortable(true);
    dataObjectPropertiesTable.addColumn(propertyNameColumn, Constants.INSTANCE.objectBrowser_columnName());
    //dataObjectPropertiesTable.setColumnWidth(propertyNameColumn, 100, Style.Unit.PX);
    dataObjectPropertiesTable.setColumnWidth(propertyNameColumn, 30, Style.Unit.PCT);

    ColumnSortEvent.ListHandler<ObjectProperty> propertyNameColHandler = new ColumnSortEvent.ListHandler<ObjectProperty>(
            dataObjectPropertiesProvider.getList());
    propertyNameColHandler.setComparator(propertyNameColumn, new ObjectPropertyComparator("name"));
    dataObjectPropertiesTable.addColumnSortHandler(propertyNameColHandler);

    //Init property Label column

    final TextColumn<ObjectProperty> propertyLabelColumn = new TextColumn<ObjectProperty>() {

        @Override
        public void render(Cell.Context context, ObjectProperty object, SafeHtmlBuilder sb) {
            SafeHtml startDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "<div style=\"cursor: pointer;\">";
                }
            };
            SafeHtml endDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "</div>";
                }
            };

            sb.append(startDiv);
            super.render(context, object, sb);
            sb.append(endDiv);
        }

        @Override
        public String getValue(final ObjectProperty objectProperty) {
            return AnnotationValueHandler.getStringValue(objectProperty, MainDomainAnnotations.LABEL_ANNOTATION,
                    MainDomainAnnotations.VALUE_PARAM);
        }
    };

    propertyLabelColumn.setSortable(true);
    dataObjectPropertiesTable.addColumn(propertyLabelColumn, Constants.INSTANCE.objectBrowser_columnLabel());
    dataObjectPropertiesTable.setColumnWidth(propertyLabelColumn, 30, Style.Unit.PCT);

    ColumnSortEvent.ListHandler<ObjectProperty> propertyLabelColHandler = new ColumnSortEvent.ListHandler<ObjectProperty>(
            dataObjectPropertiesProvider.getList());
    propertyNameColHandler.setComparator(propertyLabelColumn, new ObjectPropertyComparator("label"));
    dataObjectPropertiesTable.addColumnSortHandler(propertyLabelColHandler);

    //Init property type browsing column
    ClickableImageResourceCell typeImageCell = new ClickableImageResourceCell(true, 25);
    final TooltipCellDecorator<ImageResource> typeImageDecorator = new TooltipCellDecorator<ImageResource>(
            typeImageCell);
    typeImageDecorator.setText(Constants.INSTANCE.objectBrowser_action_goToDataObjectDefinition());

    final Column<ObjectProperty, ImageResource> typeImageColumn = new Column<ObjectProperty, ImageResource>(
            typeImageDecorator) {
        @Override
        public ImageResource getValue(final ObjectProperty property) {

            if (!property.isBaseType() && !getDataObject().getClassName().equals(property.getClassName())
                    && !getDataModel().isExternal(property.getClassName())) {
                return ImagesResources.INSTANCE.BrowseObject();
            } else {
                return null;
            }
        }
    };

    typeImageColumn.setFieldUpdater(new FieldUpdater<ObjectProperty, ImageResource>() {
        public void update(final int index, final ObjectProperty property, final ImageResource value) {

            onTypeCellSelection(property);
        }
    });

    dataObjectPropertiesTable.addColumn(typeImageColumn);

    //Init property type column
    final TextColumn<ObjectProperty> propertyTypeColumn = new TextColumn<ObjectProperty>() {

        @Override
        public void render(Cell.Context context, ObjectProperty object, SafeHtmlBuilder sb) {
            SafeHtml startDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "<div style=\"cursor: pointer;\">";
                }
            };
            SafeHtml endDiv = new SafeHtml() {
                @Override
                public String asString() {
                    return "</div>";
                }
            };

            sb.append(startDiv);
            super.render(context, object, sb);
            sb.append(endDiv);
        }

        @Override
        public String getValue(final ObjectProperty objectProperty) {
            return propertyTypeDisplay(objectProperty);
        }
    };
    propertyTypeColumn.setSortable(true);
    dataObjectPropertiesTable.addColumn(propertyTypeColumn, Constants.INSTANCE.objectBrowser_columnType());
    dataObjectPropertiesTable.setColumnWidth(propertyTypeColumn, 40, Style.Unit.PCT);

    //Init delete column
    ClickableImageResourceCell deleteImageCell = new ClickableImageResourceCell(true, 25);
    final TooltipCellDecorator<ImageResource> decorator = new TooltipCellDecorator<ImageResource>(
            deleteImageCell);
    decorator.setPlacement(Placement.LEFT);
    decorator.setText(Constants.INSTANCE.objectBrowser_action_deleteProperty());

    final Column<ObjectProperty, ImageResource> deletePropertyColumnImg = new Column<ObjectProperty, ImageResource>(
            decorator) {
        @Override
        public ImageResource getValue(final ObjectProperty global) {
            if (!isReadonly()) {
                return ImagesResources.INSTANCE.Delete();
            } else {
                return null;
            }
        }
    };

    deletePropertyColumnImg.setFieldUpdater(new FieldUpdater<ObjectProperty, ImageResource>() {
        public void update(final int index, final ObjectProperty property, final ImageResource value) {

            if (!isReadonly()) {
                checkAndDeleteDataObjectProperty(property, index);
            }
        }
    });

    dataObjectPropertiesTable.addColumn(deletePropertyColumnImg);

    ColumnSortEvent.ListHandler<ObjectProperty> propertyTypeColHandler = new ColumnSortEvent.ListHandler<ObjectProperty>(
            dataObjectPropertiesProvider.getList());
    propertyTypeColHandler.setComparator(propertyTypeColumn, new ObjectPropertyComparator("className"));
    dataObjectPropertiesTable.addColumnSortHandler(propertyTypeColHandler);

    dataObjectPropertiesTable.getColumnSortList().push(propertyNameColumn);

    //Init the selection model
    SingleSelectionModel<ObjectProperty> selectionModel = new SingleSelectionModel<ObjectProperty>();
    dataObjectPropertiesTable.setSelectionModel(selectionModel);
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            ObjectProperty selectedProperty = ((SingleSelectionModel<ObjectProperty>) dataObjectPropertiesTable
                    .getSelectionModel()).getSelectedObject();
            notifyFieldSelected(selectedProperty);
        }
    });

    dataObjectPropertiesTable
            .setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION);

    dataObjectPropertiesTable.addCellPreviewHandler(new CellPreviewEvent.Handler<ObjectProperty>() {

        @Override
        public void onCellPreview(CellPreviewEvent<ObjectProperty> event) {
            if (showingObject && "click".equals(event.getNativeEvent().getType())) {
                int selectedRow = dataObjectPropertiesTable.getKeyboardSelectedRow();
                if (lastSelectedRow >= 0 && lastSelectedRow == selectedRow) {
                    ObjectProperty selectedProperty = dataObjectPropertiesProvider.getList().get(selectedRow);
                    ((SingleSelectionModel<ObjectProperty>) dataObjectPropertiesTable.getSelectionModel())
                            .setSelected(selectedProperty, true);
                }
                showingObject = false;
            }
        }
    });

    dataObjectPropertiesProvider.addDataDisplay(dataObjectPropertiesTable);
    dataObjectPropertiesProvider.refresh();

    newPropertyButton.setIcon(IconType.PLUS_SIGN);

    setReadonly(true);

}

From source file:org.kie.workbench.common.screens.datamodeller.client.widgets.DataObjectBrowser.java

License:Apache License

private void setDataObject(DataObject dataObject) {
    this.dataObject = dataObject;
    refreshObjectSelector(dataObject);/*from w  ww.j  a  va 2 s  . c om*/

    //We create a new selection model due to a bug found in GWT when we change e.g. from one data object with 9 rows
    // to one with 3 rows and the table was sorted.
    //Several tests has been done and the final workaround (not too bad) we found is to
    // 1) sort the table again
    // 2) create a new selection model
    // 3) populate the table with new items
    // 3) select the first row
    SingleSelectionModel selectionModel2 = new SingleSelectionModel<ObjectProperty>();
    dataObjectPropertiesTable.setSelectionModel(selectionModel2);

    selectionModel2.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            ObjectProperty selectedProperty = ((SingleSelectionModel<ObjectProperty>) dataObjectPropertiesTable
                    .getSelectionModel()).getSelectedObject();
            notifyFieldSelected(selectedProperty);
        }
    });

    List<ObjectProperty> dataObjectProperties = (dataObject != null)
            ? DataModelerUtils.getManagedProperties(dataObject)
            : Collections.<ObjectProperty>emptyList();

    ArrayList<ObjectProperty> sortBuffer = new ArrayList<ObjectProperty>();
    if (dataObject != null) {
        sortBuffer.addAll(dataObjectProperties);
    }
    Collections.sort(sortBuffer, new ObjectPropertyComparator("name"));

    dataObjectPropertiesProvider.getList().clear();
    dataObjectPropertiesProvider.getList().addAll(sortBuffer);
    dataObjectPropertiesProvider.flush();
    dataObjectPropertiesProvider.refresh();

    dataObjectPropertiesTable.getColumnSortList()
            .push(new ColumnSortList.ColumnSortInfo(dataObjectPropertiesTable.getColumn(2), true));

    if (dataObjectProperties.size() > 0) {
        dataObjectPropertiesTable.setKeyboardSelectedRow(0);
        selectionModel2.setSelected(sortBuffer.get(0), true);
    }

    //set the first row selected again. Sounds crazy, but's part of the workaround, don't remove this line.
    if (dataObjectProperties.size() > 0) {
        dataObjectPropertiesTable.setKeyboardSelectedRow(0);
    }
}