diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java index 5537ac9428..3b098c84a8 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java @@ -18,26 +18,12 @@ ****************************************************************/ package org.apache.cayenne.access; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - import org.apache.cayenne.access.loader.DbLoaderConfiguration; import org.apache.cayenne.access.loader.ManyToManyCandidateEntity; +import org.apache.cayenne.access.loader.filters.DbPath; import org.apache.cayenne.access.loader.filters.EntityFilters; import org.apache.cayenne.access.loader.filters.Filter; import org.apache.cayenne.access.loader.filters.FiltersConfig; -import org.apache.cayenne.access.loader.filters.DbPath; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.map.DataMap; @@ -59,7 +45,23 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import static org.apache.cayenne.access.loader.filters.FilterFactory.*; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import static org.apache.cayenne.access.loader.filters.FilterFactory.NULL; +import static org.apache.cayenne.access.loader.filters.FilterFactory.TRUE; +import static org.apache.cayenne.access.loader.filters.FilterFactory.include; /** * Utility class that does reverse engineering of the database. It can create @@ -95,7 +97,7 @@ public DbLoader(Connection connection, DbAdapter adapter, DbLoaderDelegate deleg /** * Creates new DbLoader with specified naming strategy. - * + * * @since 3.0 */ public DbLoader(Connection connection, DbAdapter adapter, DbLoaderDelegate delegate, ObjectNameGenerator strategy) { @@ -135,7 +137,7 @@ public boolean isCreatingMeaningfulPK() { /** * Returns database connection used by this DbLoader. - * + * * @since 3.0 */ public Connection getConnection() { @@ -144,7 +146,7 @@ public Connection getConnection() { /** * Returns DbAdapter associated with this DbLoader. - * + * * @since 1.1 */ public DbAdapter getAdapter() { @@ -153,7 +155,7 @@ public DbAdapter getAdapter() { /** * Retrieves catalogs for the database associated with this DbLoader. - * + * * @return List with the catalog names, empty Array if none found. */ public List getCatalogs() throws SQLException { @@ -162,7 +164,7 @@ public List getCatalogs() throws SQLException { /** * Retrieves the schemas for the database. - * + * * @return List with the schema names, empty Array if none found. */ public List getSchemas() throws SQLException { @@ -184,9 +186,9 @@ private static List getStrings(ResultSet rs) throws SQLException { /** * Returns all the table types for the given database. Types may be such as * Typical types are "TABLE", - * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", - * "LOCAL TEMPORARY", "ALIAS", "SYNONYM"., etc. - * + * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", + * "LOCAL TEMPORARY", "ALIAS", "SYNONYM"., etc. + * * @return List of Strings, empty array if nothing found. */ public List getTableTypes() throws SQLException { @@ -206,12 +208,9 @@ public List getTableTypes() throws SQLException { /** * Returns all tables for given combination of the criteria. Tables returned * as DbEntities without any attributes or relationships. - * * * @param config - * - * @param types - * The types of table names to retrieve, null returns all types. + * @param types The types of table names to retrieve, null returns all types. * @return * @since 3.2 */ @@ -231,12 +230,10 @@ public Map> getTables(DbLoaderConfiguration config } /** - * * @param filters * @param dbPath * @param types * @return Map - * * @throws SQLException */ private Map getDbEntities(FiltersConfig filters, DbPath dbPath, String[] types) throws SQLException { @@ -280,13 +277,11 @@ private Map getDbEntities(FiltersConfig filters, DbPath dbPath /** * Loads dbEntities for the specified tables. - * - * @param map - * DataMap to be populated with DbEntities. + * + * @param map DataMap to be populated with DbEntities. * @param config - * @param tables - * The list of org.apache.cayenne.ashwood.dbutil.Table objects - * for which DbEntities must be created. @return false if loading must be immediately aborted. + * @param tables The list of org.apache.cayenne.ashwood.dbutil.Table objects + * for which DbEntities must be created. @return false if loading must be immediately aborted. */ public List loadDbEntities(DataMap map, DbLoaderConfiguration config, Map> tables) throws SQLException { /** List of db entities to process. */ @@ -299,8 +294,20 @@ public List loadDbEntities(DataMap map, DbLoaderConfiguration config, // if so, consult the delegate what to do DbEntity oldEnt = map.getDbEntity(dbEntity.getName()); if (oldEnt != null) { + Collection oldObjEnt = map.getMappedEntities(oldEnt); + if (!oldObjEnt.isEmpty()) { + for (ObjEntity objEntity : oldObjEnt) { + LOGGER.debug("Delete ObjEntity: " + objEntity.getName()); + map.removeObjEntity(objEntity.getName(), true); + delegate.objEntityRemoved(objEntity); + } + } + + LOGGER.debug("Overwrite DbEntity: " + oldEnt.getName()); map.removeDbEntity(oldEnt.getName(), true); + delegate.dbEntityRemoved(oldEnt); } + map.addDbEntity(dbEntity); // notify delegate @@ -432,9 +439,9 @@ private DbAttribute loadDbAttribute(ResultSet rs) throws SQLException { * Creates an ObjEntity for each DbEntity in the map. ObjEntities are * created empty without */ - protected void loadObjEntities(DataMap map, DbLoaderConfiguration config, Collection entities) { + protected Collection loadObjEntities(DataMap map, DbLoaderConfiguration config, Collection entities) { if (entities.isEmpty()) { - return; + return null; } Collection loadedEntities = new ArrayList(entities.size()); @@ -443,14 +450,14 @@ protected void loadObjEntities(DataMap map, DbLoaderConfiguration config, Collec for (DbEntity dbEntity : entities) { // check if there are existing entities - - // TODO: performance. This is an O(n^2) search and it shows on - // YourKit profiles. Pre-cache mapped entities perhaps (?) - Collection existing = map.getMappedEntities(dbEntity); - if (!existing.isEmpty()) { - loadedEntities.addAll(existing); - continue; - } + + // TODO: performance. This is an O(n^2) search and it shows on + // YourKit profiles. Pre-cache mapped entities perhaps (?) + Collection existing = map.getMappedEntities(dbEntity); + if (!existing.isEmpty()) { + loadedEntities.addAll(existing); + continue; + } String objEntityName = DefaultUniqueNameGenerator.generate(NameCheckers.objEntity, map, nameGenerator.createObjEntityName(dbEntity)); @@ -466,6 +473,8 @@ protected void loadObjEntities(DataMap map, DbLoaderConfiguration config, Collec // update ObjEntity attributes and relationships createEntityMerger(map).synchronizeWithDbEntities(loadedEntities); + + return loadedEntities; } /** @@ -625,7 +634,7 @@ protected void postProcessMasterDbRelationship(DbRelationship relationship, Expo /** * Flattens many-to-many relationships in the generated model. */ - private void flattenManyToManyRelationships(DataMap map) { + private void flattenManyToManyRelationships(DataMap map, Collection loadedObjEntities) { Collection entitiesForDelete = new LinkedList(); for (ObjEntity curEntity : map.getObjEntities()) { @@ -641,10 +650,11 @@ private void flattenManyToManyRelationships(DataMap map) { for (ObjEntity curDeleteEntity : entitiesForDelete) { map.removeObjEntity(curDeleteEntity.getName(), true); } + loadedObjEntities.removeAll(entitiesForDelete); } - private void fireObjEntitiesAddedEvents(DataMap map) { - for (ObjEntity curEntity : map.getObjEntities()) { + private void fireObjEntitiesAddedEvents(Collection loadedObjEntities) { + for (ObjEntity curEntity : loadedObjEntities) { // notify delegate if (delegate != null) { delegate.objEntityAdded(curEntity); @@ -678,31 +688,31 @@ public String[] getDefaultTableTypes() { * Performs database reverse engineering and generates DataMap that contains * default mapping of the tables and views. By default will include regular * tables and views. - * + * * @since 1.0.7 * @deprecated since 4.0 use - * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration, String...)} - * method that supports catalogs. + * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration, String...)} + * method that supports catalogs. */ @Deprecated - public DataMap loadDataMapFromDB(String schemaPattern, String tablePattern, DataMap dataMap) throws SQLException { + public DataMap loadDataMapFromDB(String schemaPattern, String tablePattern, DataMap dataMap) throws SQLException { - DbLoaderConfiguration configuration = new DbLoaderConfiguration(); - configuration.setFiltersConfig(new FiltersConfig(new EntityFilters(new DbPath(null, schemaPattern), - include(tablePattern), TRUE, NULL))); + DbLoaderConfiguration configuration = new DbLoaderConfiguration(); + configuration.setFiltersConfig(new FiltersConfig(new EntityFilters(new DbPath(null, schemaPattern), + include(tablePattern), TRUE, NULL))); - load(dataMap, configuration); - return dataMap; - } + load(dataMap, configuration); + return dataMap; + } /** * Performs database reverse engineering and generates DataMap object that * contains default mapping of the tables and views. Allows to limit types * of tables to read. - * + * * @deprecated since 4.0 use - * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration, String...)} - * method that supports catalogs. + * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration, String...)} + * method that supports catalogs. */ @Deprecated public DataMap loadDataMapFromDB(String schemaPattern, String tablePattern, String[] tableTypes, DataMap dataMap) @@ -729,7 +739,7 @@ private Filter transformPatternToFilter(String tablePattern) { } /** - * Performs database reverse engineering based on the specified config + * Performs database reverse engineering based on the specified config * and fills the specified * DataMap object with DB and object mapping info. * @@ -742,10 +752,10 @@ public void load(DataMap dataMap, DbLoaderConfiguration config, String... tableT if (entities != null) { loadDbRelationships(config, tables); + Collection loadedObjEntities = loadObjEntities(dataMap, config, entities); - loadObjEntities(dataMap, config, entities); - flattenManyToManyRelationships(dataMap); - fireObjEntitiesAddedEvents(dataMap); + flattenManyToManyRelationships(dataMap, loadedObjEntities); + fireObjEntitiesAddedEvents(loadedObjEntities); } } @@ -773,7 +783,7 @@ public DataMap load(DbLoaderConfiguration config) throws SQLException { * currently this method is NOT CALLED from "loadDataMapFromDB" and should * be invoked explicitly by the user. *

- * + * * @since 1.1 * @deprecated since 4.0 use loadProcedures(DataMap, String, String, String) that supports "catalog" pattern. */ @@ -794,7 +804,7 @@ public void loadProceduresFromDB(String schemaPattern, String namePattern, DataM * currently this method is NOT CALLED from "loadDataMapFromDB" and should * be invoked explicitly by the user. *

- * + * * @since 4.0 */ public Map loadProcedures(DataMap dataMap, DbLoaderConfiguration config) @@ -822,7 +832,7 @@ private void loadProceduresColumns(DbLoaderConfiguration config, Map loadProcedures(FiltersConfig filters, DbPath dbPa procedure.setSchema(rs.getString("PROCEDURE_SCHEM")); if (filters.filter(new DbPath(procedure.getCatalog(), procedure.getSchema())) - .procedureFilter().isInclude(procedure)) { + .procedureFilter().isInclude(procedure)) { LOGGER.info("skipping Cayenne PK procedure: " + name); continue; } @@ -951,7 +961,7 @@ private Map loadProcedures(FiltersConfig filters, DbPath dbPa /** * Sets new naming strategy for reverse engineering - * + * * @since 3.0 */ public void setNameGenerator(ObjectNameGenerator strategy) { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoaderDelegate.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoaderDelegate.java index c1e457a644..1919c466f5 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoaderDelegate.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoaderDelegate.java @@ -19,7 +19,6 @@ package org.apache.cayenne.access; -import org.apache.cayenne.CayenneException; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; @@ -30,13 +29,6 @@ */ public interface DbLoaderDelegate { - /** - * Returns true to tell DbLoader that it is OK to overwrite DbEntity that - * already exists in the model. If loading process should be stopped - * immediately, an exception is thrown. - */ - boolean overwriteDbEntity(DbEntity entity) throws CayenneException; - void dbEntityAdded(DbEntity entity); void dbEntityRemoved(DbEntity entity); diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DefaultDbLoaderDelegate.java b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DefaultDbLoaderDelegate.java index bc91162d74..1e8a593aef 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DefaultDbLoaderDelegate.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DefaultDbLoaderDelegate.java @@ -18,7 +18,6 @@ ****************************************************************/ package org.apache.cayenne.access.loader; -import org.apache.cayenne.CayenneException; import org.apache.cayenne.access.DbLoaderDelegate; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; @@ -28,11 +27,6 @@ */ public class DefaultDbLoaderDelegate implements DbLoaderDelegate { - @Override - public boolean overwriteDbEntity(DbEntity entity) throws CayenneException { - return false; - } - @Override public void dbEntityAdded(DbEntity entity) { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntity.java b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntity.java index 792c8a8e95..ef8391d897 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntity.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntity.java @@ -18,9 +18,6 @@ ****************************************************************/ package org.apache.cayenne.access.loader; -import java.util.ArrayList; -import java.util.List; - import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.map.ObjRelationship; @@ -31,6 +28,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.ArrayList; +import java.util.List; + /** * Class represent ObjEntity that may be optimized using flattened relationships * as many to many table @@ -72,7 +72,7 @@ private ManyToManyCandidateEntity(ObjEntity entityValue, List r */ public static ManyToManyCandidateEntity build(ObjEntity joinEntity) { ArrayList relationships = new ArrayList(joinEntity.getRelationships()); - if (relationships.size() != 2) { + if (relationships.size() != 2 || (relationships.get(0).getDbRelationships().isEmpty() || relationships.get(1).getDbRelationships().isEmpty())) { return null; } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java index 2a56b88cfb..ec4550d75f 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java @@ -54,13 +54,7 @@ public void setUp() throws Exception { loader = new DbLoader( dataSourceFactory.getSharedDataSource().getConnection(), adapter, - new DefaultDbLoaderDelegate() { - - public boolean overwriteDbEntity(DbEntity ent) throws CayenneException { - return !(ent.getName().equalsIgnoreCase("ARTIST") - || ent.getName().equalsIgnoreCase("PAINTING")); - } - }); + new DefaultDbLoaderDelegate()); } @After diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java index af1bf26eee..3ff918e876 100644 --- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java @@ -19,15 +19,14 @@ package org.apache.cayenne.tools.dbimport; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.cayenne.CayenneException; import org.apache.cayenne.access.DbLoaderDelegate; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * @since 4.0 */ @@ -45,10 +44,6 @@ class DbImportDbLoaderDelegate implements DbLoaderDelegate { removedObjEntities = new ArrayList(); } - public boolean overwriteDbEntity(DbEntity ent) throws CayenneException { - return false; - } - public void dbEntityAdded(DbEntity ent) { ent.getDataMap().addDbEntity(ent); addedDbEntities.add(ent); diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegateTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegateTest.java index 7614dbc1dc..52bae8a43d 100644 --- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegateTest.java +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegateTest.java @@ -19,7 +19,6 @@ package org.apache.cayenne.tools.dbimport; -import org.apache.cayenne.CayenneException; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; @@ -30,7 +29,6 @@ import java.util.List; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class DbImportDbLoaderDelegateTest { @@ -52,11 +50,6 @@ public void setUp() { objEntity.setDataMap(dataMap); } - @Test - public void testOverwriteDbEntity() throws CayenneException { - assertFalse(delegate.overwriteDbEntity(dbEntity)); - } - @Test public void testDbEntityAdded() { delegate.dbEntityAdded(dbEntity); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java index f19e758151..201db31456 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java @@ -19,7 +19,6 @@ package org.apache.cayenne.modeler.dialog.db; -import org.apache.cayenne.CayenneException; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DbLoader; import org.apache.cayenne.access.DbLoaderDelegate; @@ -74,10 +73,6 @@ public class DbLoaderHelper { // preferences... private static final Collection EXCLUDED_TABLES = Arrays.asList("AUTO_PK_SUPPORT", "auto_pk_support"); - static DbLoaderMergeDialog mergeDialog; - - protected boolean overwritePreferenceSet; - protected boolean overwritingEntities; protected boolean stoppingReverseEngineering; protected boolean existingMap; @@ -99,14 +94,6 @@ public class DbLoaderHelper { */ protected List addedObjEntities; - static DbLoaderMergeDialog getMergeDialogInstance() { - if (mergeDialog == null) { - mergeDialog = new DbLoaderMergeDialog(Application.getFrame()); - } - - return mergeDialog; - } - public DbLoaderHelper(ProjectController mediator, Connection connection, DbAdapter adapter, String dbUserName) { this.dbUserName = dbUserName; this.mediator = mediator; @@ -118,26 +105,10 @@ public DbLoaderHelper(ProjectController mediator, Connection connection, DbAdapt this.loader = new DbLoader(connection, adapter, new LoaderDelegate()); } - public void setOverwritingEntities(boolean overwritePreference) { - this.overwritingEntities = overwritePreference; - } - - public void setOverwritePreferenceSet(boolean overwritePreferenceSet) { - this.overwritePreferenceSet = overwritePreferenceSet; - } - public void setStoppingReverseEngineering(boolean stopReverseEngineering) { this.stoppingReverseEngineering = stopReverseEngineering; } - public boolean isOverwritePreferenceSet() { - return overwritePreferenceSet; - } - - public boolean isOverwritingEntities() { - return overwritingEntities; - } - public boolean isStoppingReverseEngineering() { return stoppingReverseEngineering; } @@ -228,24 +199,7 @@ protected void cleanup() { final class LoaderDelegate implements DbLoaderDelegate { - public boolean overwriteDbEntity(DbEntity ent) throws CayenneException { - checkCanceled(); - - if (!overwritePreferenceSet) { - DbLoaderMergeDialog dialog = DbLoaderHelper.getMergeDialogInstance(); - dialog.initFromModel(DbLoaderHelper.this, ent.getName()); - dialog.centerWindow(); - dialog.setVisible(true); - dialog.setVisible(false); - } - - if (stoppingReverseEngineering) { - throw new CayenneException("Should stop DB import."); - } - - return overwritingEntities; - } - + @Override public void dbEntityAdded(DbEntity entity) { checkCanceled(); @@ -261,6 +215,7 @@ public void dbEntityAdded(DbEntity entity) { } } + @Override public void objEntityAdded(ObjEntity entity) { checkCanceled(); @@ -272,6 +227,7 @@ public void objEntityAdded(ObjEntity entity) { } } + @Override public void dbEntityRemoved(DbEntity entity) { checkCanceled(); @@ -280,6 +236,7 @@ public void dbEntityRemoved(DbEntity entity) { } } + @Override public void objEntityRemoved(ObjEntity entity) { checkCanceled(); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderMergeDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderMergeDialog.java deleted file mode 100644 index 2a335af849..0000000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderMergeDialog.java +++ /dev/null @@ -1,131 +0,0 @@ -/***************************************************************** - * 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.dialog.db; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JPanel; - -import org.apache.cayenne.modeler.CayenneModelerFrame; -import org.apache.cayenne.modeler.util.CayenneDialog; -import org.apache.cayenne.modeler.util.PanelFactory; - -/** - */ -public class DbLoaderMergeDialog extends CayenneDialog { - - protected DbLoaderHelper helper; - protected JCheckBox rememberSelection; - protected JLabel message; - protected JButton overwriteButton; - protected JButton skipButton; - protected JButton stopButton; - - public DbLoaderMergeDialog(CayenneModelerFrame owner) { - super(owner); - init(); - initController(); - } - - private void init() { - // create widgets - this.rememberSelection = new JCheckBox("Remember my decision for other entities."); - this.rememberSelection.setSelected(true); - - this.overwriteButton = new JButton("Overwrite"); - this.skipButton = new JButton("Skip"); - this.stopButton = new JButton("Stop"); - this.message = new JLabel("DataMap already contains this table. Overwrite?"); - - // assemble - JPanel messagePanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20)); - messagePanel.add(message); - - JPanel checkPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 5)); - checkPanel.add(rememberSelection); - - JPanel buttons = PanelFactory.createButtonPanel(new JButton[] { - skipButton, overwriteButton, stopButton - }); - - Container contentPane = getContentPane(); - contentPane.setLayout(new BorderLayout()); - contentPane.add(messagePanel, BorderLayout.NORTH); - contentPane.add(checkPanel, BorderLayout.CENTER); - contentPane.add(buttons, BorderLayout.SOUTH); - - setModal(true); - setResizable(false); - setSize(250, 150); - setTitle("DbEntity Already Exists"); - setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); - } - - private void initController() { - overwriteButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - updateModel(true, false); - } - }); - - skipButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - updateModel(false, false); - } - }); - - stopButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - updateModel(false, true); - } - }); - } - - private void updateModel(boolean overwrite, boolean stop) { - if (helper != null) { - helper.setOverwritePreferenceSet(rememberSelection.isSelected()); - helper.setOverwritingEntities(overwrite); - helper.setStoppingReverseEngineering(stop); - } - - this.setVisible(false); - } - - public void initFromModel(DbLoaderHelper helper, String tableName) { - this.helper = helper; - this.message.setText("DataMap already contains table '" - + tableName - + "'. Overwrite?"); - - validate(); - pack(); - } -}