src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityAttributesTabLayout.java [159:283]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        attributeDatabasePathColumn.setCellValueFactory(cellData -> cellData.getValue().databaseAttributePathProperty());
        // FIXME: See if there is a way of doing this without using the string "databaseType"...
        attributeDatabaseTypeColumn.setCellValueFactory(new PropertyValueFactory<ObjectAttributeAdapter,String>("databaseType"));

        attributeUsedForLockingColumn.setCellValueFactory(cellData -> cellData.getValue().usedForLockingProperty());
        attributeUsedForLockingColumn.setCellFactory((column) ->
            {
                return new TableCell<ObjectAttributeAdapter,Boolean>()
                    {
                        @Override
                        protected void updateItem(final Boolean item, final boolean empty)
                        {
                            super.updateItem(item, empty);

                            setAlignment(Pos.CENTER);
                            setStyle("-fx-padding: 0;");
                            setText("");

                            if (item == null || empty || item == false)
                                setGraphic(null);
                            else
                                setGraphic(GlyphsDude.createIcon(FontAwesomeIcon.LOCK, "16px"));
                        }
                     };
            });

//        Callback<TableColumn<ObjAttribute, String>, TableCell<ObjAttribute, String>> comboBoxCellFactory
//        = (TableColumn<ObjAttribute, String> param) -> new ComboBoxEditingCell();
//
//        ComboBoxTableCell attributeTypeCell = new ComboBoxTableCell(javaTypes);

//        attributeTypeColumn.setCellFactory(attributeTypeCell);
////        attributeTypeColumn.setCellFactory(ComboBoxTableCell.forTableColumn(ObjectEntityUtilities.getRegisteredTypeNames()));
//        attributeTypeColumn.setEditable(true);
////        attributeTypeColumn.set
//        attributeTypeColumn.setOnEditCommit(
//                        new EventHandler<CellEditEvent<ObjAttribute, String>>() {
//                            @Override
//                            public void handle(CellEditEvent<ObjAttribute,String> t) {
//                                System.out.println(t);
////                                ((ObjAttribute) t.getTableView().getItems().get(t.getTablePosition().getRow())).setLevel(t.getNewValue());
//                            }
//                        });

//        attributeTypeColumn.setPromptText("Java Type");
//        emailComboBox.setEditable(true);
//        emailComboBox.valueProperty().addListener(new ChangeListener<String>() {
//            @Override
//            public void changed(ObservableValue ov, String t, String t1) {
//                address = t1;
//            }
//        });

    }

    public void tabChanged(final Event event)
    {
        LOGGER.debug("event: " + event);
        getMainWindow().getCayenneProject().getDataMaps();
    }

    @Override
    public void setPropertyAdapter(final ObjectEntityAdapter objectEntityAdapter)
    {
        this.objectEntityAdapter = objectEntityAdapter;
    }

    private List<Binding<?>> getSelectedAttributeBindings(ObjectAttributeAdapter adapter)
    {
        List<Binding<?>> bindings = new ArrayList<>();

        bindings.add(new Binding<>(javaAttributeNameTextField.textProperty(), adapter.nameProperty()));
        bindings.add(new Binding<>(javaTypeComboBox.valueProperty(), adapter.javaTypeProperty()));
        bindings.add(new Binding<>(optimisticLockingCheckBox.selectedProperty(), adapter.usedForLockingProperty()));

        return bindings;
    }

    private final ChangeListener<ObjectAttributeAdapter> attributesTableViewSelectionListener = (observable, oldSelection, newSelection) ->
        {
            final String[] javaTypes = ObjectEntityUtilities.getRegisteredTypeNames();

            if (oldSelection != null)
            {
                unbind(getSelectedAttributeBindings(oldSelection));
//                javaAttributeNameTextField.textProperty().unbindBidirectional(oldSelection.nameProperty());
//                javaTypeComboBox.valueProperty().unbindBidirectional(oldSelection.javaTypeProperty());
//                optimisticLockingCheckBox.selectedProperty().unbindBidirectional(oldSelection.usedForLockingProperty());
            }

            javaTypeComboBox.getItems().clear();

            if (newSelection != null)
            {
                javaTypeComboBox.getItems().addAll(javaTypes);

                bind(getSelectedAttributeBindings(newSelection));

//                javaAttributeNameTextField.textProperty().bindBidirectional(newSelection.nameProperty());
//                javaTypeComboBox.valueProperty().bindBidirectional(newSelection.javaTypeProperty());
//                optimisticLockingCheckBox.selectedProperty().bindBidirectional(newSelection.usedForLockingProperty());
                databaseTypeLabel.setText(newSelection.getDatabaseType());
            }

            javaAttributeNameTextField.setDisable(newSelection == null);
            javaTypeComboBox.setDisable(newSelection == null);
            optimisticLockingCheckBox.setDisable(newSelection == null);
        };

    @Override
    public void beginEditing()
    {
        DetailEditorSupport.super.beginEditing();

        disable(javaAttributeNameTextField);
        javaAttributeNameTextField.setText(null);

        disable(javaTypeComboBox);
        javaTypeComboBox.getItems().clear();
        javaTypeComboBox.setValue(null);

        disable(optimisticLockingCheckBox);
        optimisticLockingCheckBox.setSelected(false);

        databaseTypeLabel.setText("N/A");
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityRelationshipsTabLayout.java [159:256]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        attributeDatabasePathColumn.setCellValueFactory(cellData -> cellData.getValue().databaseAttributePathProperty());
        // FIXME: See if there is a way of doing this without using the string "databaseType"...
        attributeDatabaseTypeColumn.setCellValueFactory(new PropertyValueFactory<ObjectAttributeAdapter,String>("databaseType"));

        attributeUsedForLockingColumn.setCellValueFactory(cellData -> cellData.getValue().usedForLockingProperty());
        attributeUsedForLockingColumn.setCellFactory((column) ->
            {
                return new TableCell<ObjectAttributeAdapter,Boolean>()
                    {
                        @Override
                        protected void updateItem(final Boolean item, final boolean empty)
                        {
                            super.updateItem(item, empty);

                            setAlignment(Pos.CENTER);
                            setStyle("-fx-padding: 0;");
                            setText("");

                            if (item == null || empty || item == false)
                                setGraphic(null);
                            else
                                setGraphic(GlyphsDude.createIcon(FontAwesomeIcon.LOCK, "16px"));
                        }
                     };
            });
    }

    public void tabChanged(final Event event)
    {
        LOGGER.debug("event: " + event);
        getMainWindow().getCayenneProject().getDataMaps();
    }

    @Override
    public void setPropertyAdapter(final ObjectEntityAdapter objectEntityAdapter)
    {
        this.objectEntityAdapter = objectEntityAdapter;
    }

    private List<Binding<?>> getSelectedAttributeBindings(ObjectAttributeAdapter adapter)
    {
        List<Binding<?>> bindings = new ArrayList<>();

        bindings.add(new Binding<>(javaAttributeNameTextField.textProperty(), adapter.nameProperty()));
        bindings.add(new Binding<>(javaTypeComboBox.valueProperty(), adapter.javaTypeProperty()));
        bindings.add(new Binding<>(optimisticLockingCheckBox.selectedProperty(), adapter.usedForLockingProperty()));

        return bindings;
    }

    private final ChangeListener<ObjectAttributeAdapter> attributesTableViewSelectionListener = (observable, oldSelection, newSelection) ->
        {
            final String[] javaTypes = ObjectEntityUtilities.getRegisteredTypeNames();

            if (oldSelection != null)
            {
                unbind(getSelectedAttributeBindings(oldSelection));

//                javaAttributeNameTextField.textProperty().unbindBidirectional(oldSelection.nameProperty());
//                javaTypeComboBox.valueProperty().unbindBidirectional(oldSelection.javaTypeProperty());
//                optimisticLockingCheckBox.selectedProperty().unbindBidirectional(oldSelection.usedForLockingProperty());
            }

            javaTypeComboBox.getItems().clear();

            if (newSelection != null)
            {
                javaTypeComboBox.getItems().addAll(javaTypes);

                bind(getSelectedAttributeBindings(newSelection));

//                javaAttributeNameTextField.textProperty().bindBidirectional(newSelection.nameProperty());
//                javaTypeComboBox.valueProperty().bindBidirectional(newSelection.javaTypeProperty());
//                optimisticLockingCheckBox.selectedProperty().bindBidirectional(newSelection.usedForLockingProperty());
                databaseTypeLabel.setText(newSelection.getDatabaseType());
            }

            javaAttributeNameTextField.setDisable(newSelection == null);
            javaTypeComboBox.setDisable(newSelection == null);
            optimisticLockingCheckBox.setDisable(newSelection == null);
        };

    @Override
    public void beginEditing()
    {
        DetailEditorSupport.super.beginEditing();

        disable(javaAttributeNameTextField);
        javaAttributeNameTextField.setText(null);

        disable(javaTypeComboBox);
        javaTypeComboBox.getItems().clear();
        javaTypeComboBox.setValue(null);

        disable(optimisticLockingCheckBox);
        optimisticLockingCheckBox.setSelected(false);

        databaseTypeLabel.setText("N/A");
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



