diff --git a/src/main/java/org/apache/cayenne/modeler/adapters/DataMapAdapter.java b/src/main/java/org/apache/cayenne/modeler/adapters/DataMapAdapter.java index 4a6ef5c..afb65d3 100644 --- a/src/main/java/org/apache/cayenne/modeler/adapters/DataMapAdapter.java +++ b/src/main/java/org/apache/cayenne/modeler/adapters/DataMapAdapter.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; import javafx.beans.property.BooleanProperty; @@ -37,7 +38,8 @@ public class DataMapAdapter extends CayennePropertyAdapter // implements Adapter private final DataMap dataMap; // private BeanPathAdapter dataMapAdapter; - private final List objectEntityAdapters = new ArrayList<>(); + private final List objectEntityAdapters = new ArrayList<>(); + private final List databaseEntityAdapters = new ArrayList<>(); private StringProperty nameProperty; @@ -63,6 +65,9 @@ public DataMapAdapter(final DataMap dataMap) for (ObjEntity objEntity : dataMap.getObjEntities()) objectEntityAdapters.add(new ObjectEntityAdapter(objEntity)); + for (DbEntity dbEntity : dataMap.getDbEntities()) + databaseEntityAdapters.add(new DatabaseEntityAdapter(dbEntity)); + try { nameProperty = JavaBeanStringPropertyBuilder.create().bean(dataMap).name("name").build(); @@ -144,15 +149,13 @@ public StringProperty getDefaultClientSuperclassProperty() return defaultClientSuperclassProperty; } - public List getObjectEntityAdapters() { return objectEntityAdapters; } -// @Override -// public BeanPathAdapter getBeanPathAdapter() -// { -// return dataMapAdapter; -// } + public List getDatabaseEntityAdapters() + { + return databaseEntityAdapters; + } } diff --git a/src/main/java/org/apache/cayenne/modeler/adapters/DatabaseEntityAdapter.java b/src/main/java/org/apache/cayenne/modeler/adapters/DatabaseEntityAdapter.java new file mode 100644 index 0000000..298e89a --- /dev/null +++ b/src/main/java/org/apache/cayenne/modeler/adapters/DatabaseEntityAdapter.java @@ -0,0 +1,81 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.adapters; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.cayenne.map.DbEntity; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.StringProperty; +import javafx.beans.property.adapter.JavaBeanStringPropertyBuilder; + +public class DatabaseEntityAdapter extends CayennePropertyAdapter // implements AdapterSupport +{ + private final DbEntity databaseEntity; +// private BeanPathAdapter dataMapAdapter; + + private final List objectEntityAdapters = new ArrayList<>(); + + private StringProperty nameProperty; + + private StringProperty locationProperty; + + private BooleanProperty quoteSQLIdentifiersProperty; + + private StringProperty defaultCatalogProperty; + private StringProperty defaultSchemaProperty; + private StringProperty defaultPackageProperty; + + private StringProperty defaultSuperclassProperty; + private IntegerProperty defaultLockTypeProperty; + + private BooleanProperty clientSupportedProperty; + private StringProperty defaultClientPackageProperty; + private StringProperty defaultClientSuperclassProperty; + + public DatabaseEntityAdapter(final DbEntity databaseEntity) + { + this.databaseEntity = databaseEntity; + + try + { + nameProperty = JavaBeanStringPropertyBuilder.create().bean(databaseEntity).name("name").build(); + } + catch (final NoSuchMethodException e) + { + throw new RuntimeException("Fix the builder.", e); + } + +// this.dataMapAdapter = new BeanPathAdapter(dataMap); + } + + public StringProperty getNameProperty() + { + return nameProperty; + } + + public StringProperty getLocationProperty() + { + return locationProperty; + } +} diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java index de581bd..de823b1 100644 --- a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java +++ b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java @@ -23,6 +23,7 @@ import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter; import org.apache.cayenne.modeler.utility.ObjectEntityUtilities; import de.jensd.fx.glyphs.GlyphsDude; @@ -33,7 +34,10 @@ import javafx.fxml.FXML; import javafx.scene.control.TableColumn; -public class DatabaseEntityColumnsTabLayout extends AbstractViewLayout +public class DatabaseEntityColumnsTabLayout + extends AbstractViewLayout + implements DetailEditorSupport + { // @FXML // private TableView attributesTableView; @@ -55,6 +59,8 @@ public class DatabaseEntityColumnsTabLayout extends AbstractViewLayout // private ObjectEntityClassTabLayout objectEntityClassTabViewController; + private DatabaseEntityAdapter databaseEntityAdapter; + public DatabaseEntityColumnsTabLayout(MainWindowSupport parent) throws IOException { super(parent.getMainWindow(), "/layouts/DatabaseEntityColumnsTabLayout.fxml"); @@ -150,6 +156,7 @@ protected void loadSubViews() // destination.getChildren().add(source); // } + @Deprecated // Unused? public void display(DbEntity dbEntity) { System.out.println("trying to display: " + dbEntity); @@ -165,9 +172,19 @@ public void tabChanged(Event event) getMainWindow().getCayenneProject().getDataMaps(); } -// @Override -// public MainWindowLayout getMainWindow() -// { -// return parent.getMainWindow(); -// } + @Override + public void setPropertyAdapter(DatabaseEntityAdapter databaseEntityAdapter) + { + this.databaseEntityAdapter = databaseEntityAdapter; + } + + @Override + public void beginEditing() + { + } + + @Override + public void endEditing() + { + } } diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java index d84edc2..b6d9692 100644 --- a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java +++ b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java @@ -22,12 +22,15 @@ import java.io.IOException; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter; import javafx.event.Event; import javafx.fxml.FXML; import javafx.scene.layout.AnchorPane; -public class DatabaseEntityLayout extends AbstractViewLayout +public class DatabaseEntityLayout + extends AbstractViewLayout + implements DetailEditorSupport { @FXML private AnchorPane tableTabAnchorPane, columnsTabAnchorPane; @@ -39,6 +42,8 @@ public class DatabaseEntityLayout extends AbstractViewLayout // private ObjectEntityClassTabLayout objectEntityClassTabLayout; // private ObjectEntityAttributesTabLayout objectEntityAttributesTabLayout; + private DatabaseEntityAdapter databaseEntityAdapter; + public DatabaseEntityLayout(MainWindowSupport parent) throws IOException { super(parent.getMainWindow(), "/layouts/DatabaseEntityLayout.fxml"); @@ -89,6 +94,7 @@ protected void loadSubViews() // destination.getChildren().add(source); // } + @Deprecated // Unused? public void display(DbEntity dbEntity) { System.out.println("trying to display: " + dbEntity); @@ -104,9 +110,26 @@ public void tabChanged(Event event) getMainWindow().getCayenneProject().getDataMaps(); } -// @Override -// public MainWindowLayout getMainWindow() -// { -// return mainWindow; -// } + @Override + public void setPropertyAdapter(DatabaseEntityAdapter databaseEntityAdapter) + { + this.databaseEntityAdapter = databaseEntityAdapter; + + databaseEntityTableTabLayout.setPropertyAdapter(databaseEntityAdapter); + databaseEntityColumnsTabLayout.setPropertyAdapter(databaseEntityAdapter); + } + + @Override + public void beginEditing() + { + databaseEntityTableTabLayout.beginEditing(); + databaseEntityColumnsTabLayout.beginEditing(); + } + + @Override + public void endEditing() + { + databaseEntityTableTabLayout.endEditing(); + databaseEntityColumnsTabLayout.endEditing(); + } } diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityTableTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityTableTabLayout.java index bf7c05a..cc55d96 100644 --- a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityTableTabLayout.java +++ b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityTableTabLayout.java @@ -22,8 +22,11 @@ import java.io.IOException; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter; -public class DatabaseEntityTableTabLayout extends AbstractViewLayout +public class DatabaseEntityTableTabLayout + extends AbstractViewLayout + implements DetailEditorSupport { // @FXML // private Button dbEntitySyncButton; @@ -33,6 +36,8 @@ public class DatabaseEntityTableTabLayout extends AbstractViewLayout private MainWindowSupport parent; + private DatabaseEntityAdapter databaseEntityAdapter; + public DatabaseEntityTableTabLayout(MainWindowSupport parent) throws IOException { super(parent.getMainWindow(), "/layouts/DatabaseEntityTableTabLayout.fxml"); @@ -53,6 +58,7 @@ public DatabaseEntityTableTabLayout(MainWindowSupport parent) throws IOException // } // private ObjEntity objectEntity; + @Deprecated // Unused? public void display(DbEntity databaseEntity) { // this.objectEntity = objectEntity; @@ -61,6 +67,21 @@ public void display(DbEntity databaseEntity) // abstractClassCheckbox.selectedProperty().bind(objectEntity.isAbstract()); } + @Override + public void setPropertyAdapter(DatabaseEntityAdapter databaseEntityAdapter) + { + this.databaseEntityAdapter = databaseEntityAdapter; + } + + @Override + public void beginEditing() + { + } + + @Override + public void endEditing() + { + } // @Override // protected void loadComponents() diff --git a/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java index 755bb1f..f3bb653 100644 --- a/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java +++ b/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java @@ -21,9 +21,9 @@ import java.io.IOException; -import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.modeler.CayenneModeler; import org.apache.cayenne.modeler.adapters.DataMapAdapter; +import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter; import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter; import org.apache.cayenne.modeler.notification.NotificationCenter; import org.apache.cayenne.modeler.notification.event.DataDomainChangeEvent; @@ -32,9 +32,8 @@ import org.apache.cayenne.modeler.project.CayenneProject; import org.apache.cayenne.modeler.project.DataDomainTreeItem; import org.apache.cayenne.modeler.project.DataMapTreeItem; -import org.apache.cayenne.modeler.project.DatabaseEntityTreeViewModel; +import org.apache.cayenne.modeler.project.DatabaseEntityTreeItem; import org.apache.cayenne.modeler.project.ObjectEntityTreeItem; -import org.apache.cayenne.modeler.utility.TreeViewUtilities; import de.jensd.fx.glyphs.GlyphsDude; import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon; @@ -115,6 +114,8 @@ else if (treeItem instanceof DataMapTreeItem) return dataMapDetail; else if (treeItem instanceof ObjectEntityTreeItem) return objectEntityDetail; + else if (treeItem instanceof DatabaseEntityTreeItem) + return databaseEntityDetail; return null; } @@ -156,6 +157,8 @@ else if (newValue instanceof DataMapTreeItem) displayDataMap((DataMapTreeItem) newValue); else if (newValue instanceof ObjectEntityTreeItem) displayObjectEntity((ObjectEntityTreeItem) newValue); + else if (newValue instanceof DatabaseEntityTreeItem) + displayDatabaseEntity((DatabaseEntityTreeItem) newValue); // if (newValue.getValue() instanceof DataDomainTreeViewModel) // displayDataDomain((DataDomainTreeViewModel) newValue.getValue()); // else if (newValue.getValue() instanceof DataMapTreeViewModel) @@ -252,7 +255,9 @@ private void addDataMap(final DataMapAdapter dataMapAdapter, final DataDomainTre addObjEntity(objectEntityAdapter, dataMapBranch); // for (final ObjEntity objEntity : dataMap.getObjEntities()) // addObjEntity(objEntity, dataMapBranch); -// + + for (DatabaseEntityAdapter databaseEntityAdapter : dataMapAdapter.getDatabaseEntityAdapters()) + addDbEntity(databaseEntityAdapter, dataMapBranch); // for (final DbEntity dbEntity : dataMap.getDbEntities()) // addDbEntity(dbEntity, dataMapBranch); } @@ -268,12 +273,13 @@ private void addObjEntity(final ObjectEntityAdapter objectEntityAdapter, final D // TreeItem objEntityLeaf = TreeViewUtilities.addNode(objEntity.getName(), dataMapBranch, FontAwesomeIcon.FILE_TEXT); } - private void addDbEntity(final DbEntity dbEntity, final TreeItem dataMapBranch) + private void addDbEntity(final DatabaseEntityAdapter databaseEntityAdapter, final DataMapTreeItem dataMapBranch) { - final TreeItem dbEntityLeaf = - TreeViewUtilities.addNode(new TreeItem<>(new DatabaseEntityTreeViewModel(dbEntity)), - dataMapBranch, - FontAwesomeIcon.TABLE); + DatabaseEntityTreeItem databaseEntityLeaf = new DatabaseEntityTreeItem(databaseEntityAdapter, dataMapBranch); +// final TreeItem dbEntityLeaf = +// TreeViewUtilities.addNode(new TreeItem<>(new DatabaseEntityTreeViewModel(dbEntity)), +// dataMapBranch, +// FontAwesomeIcon.TABLE); // TreeItem dbEntityLeaf = TreeViewUtilities.addNode(dbEntity.getName(), dataMapBranch, FontAwesomeIcon.TABLE); } @@ -308,15 +314,14 @@ private void displayObjectEntity(final ObjectEntityTreeItem objectEntityTreeItem displayDetailView(objectEntityDetail); objectEntityDetail.setPropertyAdapter(objectEntityTreeItem.getPropertyAdapter()); objectEntityDetail.beginEditing(); -// displayDetailView(objectEntityDetail); -// objectEntityDetail.display(objectEntity.getValue()); } - private void displayDatabaseEntity(final DatabaseEntityTreeViewModel databaseEntity) + private void displayDatabaseEntity(final DatabaseEntityTreeItem databaseEntityTreeItem) { System.out.println("database entity!!!"); displayDetailView(databaseEntityDetail); - databaseEntityDetail.display(databaseEntity.getValue()); + databaseEntityDetail.setPropertyAdapter(databaseEntityTreeItem.getPropertyAdapter()); + databaseEntityDetail.beginEditing(); } public void onNewButtonClicked() diff --git a/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java new file mode 100644 index 0000000..34d5ca1 --- /dev/null +++ b/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java @@ -0,0 +1,47 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.project; + +import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter; + +import de.jensd.fx.glyphs.GlyphsDude; +import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon; +import javafx.scene.control.TreeItem; + +public class DatabaseEntityTreeItem extends TreeItem implements CayenneTreeItem +{ + private final DatabaseEntityAdapter databaseEntityAdapter; + + public DatabaseEntityTreeItem(final DatabaseEntityAdapter databaseEntityAdapter, final TreeItem parent) + { + this.databaseEntityAdapter = databaseEntityAdapter; + + valueProperty().bindBidirectional(databaseEntityAdapter.getNameProperty()); + setGraphic(GlyphsDude.createIcon(FontAwesomeIcon.TABLE, TREE_ICON_SIZE)); + parent.getChildren().add(this); + setExpanded(true); + } + + @Override + public DatabaseEntityAdapter getPropertyAdapter() + { + return databaseEntityAdapter; + } +}