Repository: cayenne Updated Branches: refs/heads/master 4920e53c1 -> 67282fb6d
cleanup Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/67282fb6 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/67282fb6 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/67282fb6 Branch: refs/heads/master Commit: 67282fb6d79e18267021d718a467f7ba22938ae2 Parents: 4920e53 Author: Nikita Timofeev <stari...@gmail.com> Authored: Thu Feb 2 14:27:16 2017 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Thu Feb 2 14:27:16 2017 +0300 ---------------------------------------------------------------------- .../merge/context/EntityMergeSupport.java | 90 +++++++------------- .../merge/token/db/AbstractToDbToken.java | 5 +- .../reverse/dbimport/DefaultDbImportAction.java | 42 +++------ .../org/apache/cayenne/dba/TypesMapping.java | 4 +- .../org/apache/cayenne/dba/TypesMappingIT.java | 21 +---- .../action/ReverseEngineeringAction.java | 9 +- .../dialog/db/load/ModelerDbImportAction.java | 3 +- 7 files changed, 54 insertions(+), 120 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java index ef6c3f3..7f86dd2 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java @@ -245,8 +245,7 @@ public class EntityMergeSupport { } if (dbRelationship.getTargetEntityName() != null) { - boolean needGeneratedEntity = createObjRelationship(entity, dbRelationship, - nameGenerator.objEntityName(targetEntity)); + boolean needGeneratedEntity = createObjRelationship(entity, dbRelationship, nameGenerator.objEntityName(targetEntity)); if (needGeneratedEntity) { LOGGER.warn("Can't find ObjEntity for " + dbRelationship.getTargetEntityName()); LOGGER.warn("Db Relationship (" + dbRelationship + ") will have GUESSED Obj Relationship reflection. "); @@ -261,24 +260,23 @@ public class EntityMergeSupport { private void addMissingAttribute(ObjEntity entity, DbAttribute da) { ObjAttribute oa = new ObjAttribute(); - oa.setName(NameBuilder.builder(oa, entity) - .baseName(nameGenerator.objAttributeName(da)) - .name()); + oa.setName(NameBuilder.builder(oa, entity).baseName(nameGenerator.objAttributeName(da)).name()); oa.setEntity(entity); - - String type = TypesMapping.getJavaBySqlType(da.getType()); - if (usingPrimitives) { - String primitive = CLASS_TO_PRIMITIVE.get(type); - if (primitive != null) { - type = primitive; - } - } - oa.setType(type); + oa.setType(getTypeForObjAttribute(da)); oa.setDbAttributePath(da.getName()); entity.addAttribute(oa); fireAttributeAdded(oa); } + private String getTypeForObjAttribute(DbAttribute dbAttribute) { + String type = TypesMapping.getJavaBySqlType(dbAttribute.getType()); + String primitiveType; + if (usingPrimitives && (primitiveType = CLASS_TO_PRIMITIVE.get(type)) != null) { + return primitiveType; + } + return type; + } + private boolean getRidOfAttributesThatAreNowSrcAttributesForRelationships(ObjEntity entity) { boolean changed = false; for (DbAttribute da : getMeaningfulFKs(entity)) { @@ -317,14 +315,13 @@ public class EntityMergeSupport { * Returns a list of attributes that exist in the DbEntity, but are missing * from the ObjEntity. */ - protected List<DbAttribute> getAttributesToAdd(ObjEntity objEntity) { + private List<DbAttribute> getAttributesToAdd(ObjEntity objEntity) { DbEntity dbEntity = objEntity.getDbEntity(); List<DbAttribute> missing = new ArrayList<>(); Collection<DbRelationship> incomingRels = getIncomingRelationships(dbEntity); for (DbAttribute dba : dbEntity.getAttributes()) { - if (shouldAddToObjEntity(objEntity, dba, incomingRels)) { missing.add(dba); } @@ -333,64 +330,35 @@ public class EntityMergeSupport { return missing; } - protected boolean shouldAddToObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) { - + private boolean shouldAddToObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) { if (dbAttribute.getName() == null || entity.getAttributeForDbAttribute(dbAttribute) != null) { return false; } boolean addMeaningfulPK = meaningfulPKsFilter.isIncluded(entity.getDbEntityName()); - - if (dbAttribute.isPrimaryKey() && !addMeaningfulPK) { - return false; + if (dbAttribute.isPrimaryKey()) { + return addMeaningfulPK; } // check FK's - boolean isFK = false; - Iterator<DbRelationship> rit = dbAttribute.getEntity().getRelationships().iterator(); - while (!isFK && rit.hasNext()) { - DbRelationship rel = rit.next(); - for (DbJoin join : rel.getJoins()) { - if (join.getSource() == dbAttribute) { - isFK = true; - break; - } - } - } - - if (addMeaningfulPK) { - if (!dbAttribute.isPrimaryKey() && isFK) { - return false; - } - } else { - if (isFK) { - return false; - } + if(isFK(dbAttribute, dbAttribute.getEntity().getRelationships(), true)) { + return false; } - // check incoming relationships - rit = incomingRels.iterator(); - while (!isFK && rit.hasNext()) { - DbRelationship rel = rit.next(); + return !isFK(dbAttribute, incomingRels, false); + } + + private boolean isFK(DbAttribute dbAttribute, Collection<DbRelationship> collection, boolean source) { + for (DbRelationship rel : collection) { for (DbJoin join : rel.getJoins()) { - if (join.getTarget() == dbAttribute) { - isFK = true; - break; + DbAttribute joinAttribute = source ? join.getSource() : join.getTarget(); + if (joinAttribute == dbAttribute) { + return true; } } } - if (addMeaningfulPK) { - if (!dbAttribute.isPrimaryKey() && isFK) { - return false; - } - } else { - if (isFK) { - return false; - } - } - - return true; + return false; } private boolean shouldAddToObjEntity(ObjEntity entity, DbRelationship dbRelationship) { @@ -502,7 +470,7 @@ public class EntityMergeSupport { /** * Notifies all listeners that an ObjAttribute was added */ - protected void fireAttributeAdded(ObjAttribute attr) { + private void fireAttributeAdded(ObjAttribute attr) { for (EntityMergeListener listener : listeners) { listener.objAttributeAdded(attr); } @@ -511,7 +479,7 @@ public class EntityMergeSupport { /** * Notifies all listeners that an ObjRelationship was added */ - protected void fireRelationshipAdded(ObjRelationship rel) { + private void fireRelationshipAdded(ObjRelationship rel) { for (EntityMergeListener listener : listeners) { listener.objRelationshipAdded(rel); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java index 8370a9d..d336198 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java @@ -55,9 +55,8 @@ public abstract class AbstractToDbToken extends AbstractMergerToken { JdbcEventLogger logger = mergerContext.getDataNode().getJdbcEventLogger(); logger.log(sql); - try (Connection conn = mergerContext.getDataNode().getDataSource().getConnection();) { - - try (Statement st = conn.createStatement();) { + try (Connection conn = mergerContext.getDataNode().getDataSource().getConnection()) { + try (Statement st = conn.createStatement()) { st.execute(sql); } } catch (SQLException e) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java index 3278dc4..c7f9ceb 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java @@ -137,7 +137,6 @@ public class DefaultDbImportAction implements DbImportAction { DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor(); DataSource dataSource = dataSourceFactory.getDataSource(dataNodeDescriptor); DbAdapter adapter = adapterFactory.createAdapter(dataNodeDescriptor, dataSource); - ObjectNameGenerator objectNameGenerator = config.createNameGenerator(); DataMap sourceDataMap; try (Connection connection = dataSource.getConnection()) { @@ -162,20 +161,16 @@ public class DefaultDbImportAction implements DbImportAction { MergerTokenFactory mergerTokenFactory = mergerTokenFactoryProvider.get(adapter); DbLoaderConfiguration loaderConfig = config.getDbLoaderConfig(); - List<MergerToken> tokens = DataMapMerger.builder(mergerTokenFactory) + Collection<MergerToken> tokens = DataMapMerger.builder(mergerTokenFactory) .filters(loaderConfig.getFiltersConfig()) .skipPKTokens(loaderConfig.isSkipPrimaryKeyLoading()) .skipRelationshipsTokens(loaderConfig.isSkipRelationshipsLoading()) .build() .createMergeTokens(targetDataMap, sourceDataMap); + tokens = log(sort(reverse(mergerTokenFactory, tokens))); hasChanges |= syncDataMapProperties(targetDataMap, config); - hasChanges |= applyTokens(config.createMergeDelegate(), - targetDataMap, - log(sort(reverse(mergerTokenFactory, tokens))), - objectNameGenerator, - config.createMeaningfulPKFilter(), - config.isUsePrimitives()); + hasChanges |= applyTokens(targetDataMap, tokens, config); hasChanges |= syncProcedures(targetDataMap, sourceDataMap, loaderConfig.getFiltersConfig()); if (hasChanges) { @@ -183,11 +178,7 @@ public class DefaultDbImportAction implements DbImportAction { } } - - protected void transformSourceBeforeMerge(DataMap sourceDataMap, - DataMap targetDataMap, - DbImportConfiguration configuration) { - + protected void transformSourceBeforeMerge(DataMap sourceDataMap, DataMap targetDataMap, DbImportConfiguration configuration) { if (configuration.isForceDataMapCatalog()) { String catalog = targetDataMap.getDefaultCatalog(); for (DbEntity e : sourceDataMap.getDbEntities()) { @@ -201,11 +192,9 @@ public class DefaultDbImportAction implements DbImportAction { e.setSchema(schema); } } - } private boolean syncDataMapProperties(DataMap targetDataMap, DbImportConfiguration config) { - String defaultPackage = config.getDefaultPackage(); if (defaultPackage == null || defaultPackage.trim().length() == 0) { return false; @@ -314,12 +303,7 @@ public class DefaultDbImportAction implements DbImportAction { return tokens; } - private boolean applyTokens(ModelMergeDelegate mergeDelegate, - DataMap targetDataMap, - Collection<MergerToken> tokens, - ObjectNameGenerator nameGenerator, - NameFilter meaningfulPKFilter, - boolean usingPrimitives) { + private boolean applyTokens(DataMap targetDataMap, Collection<MergerToken> tokens, DbImportConfiguration config) { if (tokens.isEmpty()) { logger.info(""); @@ -328,8 +312,7 @@ public class DefaultDbImportAction implements DbImportAction { } final Collection<ObjEntity> loadedObjEntities = new LinkedList<>(); - - mergeDelegate = new ProxyModelMergeDelegate(mergeDelegate) { + ModelMergeDelegate mergeDelegate = new ProxyModelMergeDelegate(config.createMergeDelegate()) { @Override public void objEntityAdded(ObjEntity ent) { loadedObjEntities.add(ent); @@ -337,11 +320,12 @@ public class DefaultDbImportAction implements DbImportAction { } }; + ObjectNameGenerator nameGenerator = config.createNameGenerator(); MergerContext mergerContext = MergerContext.builder(targetDataMap) .delegate(mergeDelegate) .nameGenerator(nameGenerator) - .usingPrimitives(usingPrimitives) - .meaningfulPKFilter(meaningfulPKFilter) + .usingPrimitives(config.isUsePrimitives()) + .meaningfulPKFilter(config.createMeaningfulPKFilter()) .build(); for (MergerToken token : tokens) { @@ -405,15 +389,11 @@ public class DefaultDbImportAction implements DbImportAction { projectSaver.save(project); } - protected DataMap load(DbImportConfiguration config, - DbAdapter adapter, - Connection connection) throws Exception { + protected DataMap load(DbImportConfiguration config, DbAdapter adapter, Connection connection) throws Exception { return createDbLoader(adapter, connection, config).load(); } - protected DbLoader createDbLoader(DbAdapter adapter, - Connection connection, - DbImportConfiguration config) { + protected DbLoader createDbLoader(DbAdapter adapter, Connection connection, DbImportConfiguration config) { return new DbLoader(adapter, connection, config.getDbLoaderConfig(), config.createLoaderDelegate(), http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/cayenne-server/src/main/java/org/apache/cayenne/dba/TypesMapping.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/TypesMapping.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/TypesMapping.java index 30e7aa8..8e7c05d 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/TypesMapping.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/TypesMapping.java @@ -511,12 +511,12 @@ public class TypesMapping { return SQL_ENUM_JAVA.get(type); } - protected Map<Integer, List<TypeInfo>> databaseTypes = new HashMap<>(); + Map<Integer, List<TypeInfo>> databaseTypes = new HashMap<>(); public TypesMapping(DatabaseMetaData metaData) throws SQLException { // map database types to standard JDBC types - try (ResultSet rs = metaData.getTypeInfo();) { + try (ResultSet rs = metaData.getTypeInfo()) { while (rs.next()) { TypeInfo info = new TypeInfo(); info.name = rs.getString("TYPE_NAME"); http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/cayenne-server/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java index 0f3b36b..d823c42 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java @@ -104,22 +104,14 @@ public class TypesMappingIT extends ServerCase { public void testTypeInfoCompleteness() throws Exception { // check counts // since more then 1 database type can map to a single JDBC type - Connection conn = dataSourceFactory.getSharedDataSource().getConnection(); int len = 0; - try { + try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection()) { DatabaseMetaData md = conn.getMetaData(); - ResultSet rs = md.getTypeInfo(); - try { + try (ResultSet rs = md.getTypeInfo()) { while (rs.next()) { len++; } } - finally { - rs.close(); - } - } - finally { - conn.close(); } int actualLen = 0; @@ -135,15 +127,10 @@ public class TypesMappingIT extends ServerCase { assertTrue(len <= actualLen); } - TypesMapping createTypesMapping() throws Exception { - Connection conn = dataSourceFactory.getSharedDataSource().getConnection(); - - try { + private TypesMapping createTypesMapping() throws Exception { + try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection()) { DatabaseMetaData md = conn.getMetaData(); return new TypesMapping(md); } - finally { - conn.close(); - } } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java index de1c75e..accb8ae 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ReverseEngineeringAction.java @@ -63,6 +63,9 @@ public class ReverseEngineeringAction extends DBWizardAction<DbLoaderOptionsDial final DbLoaderOptionsDialog loaderOptionsDialog = loaderOptionDialog(connectWizard); if(!context.buildConfig(connectWizard, loaderOptionsDialog)) { + try { + context.getConnection().close(); + } catch (SQLException ignored) {} return; } @@ -72,14 +75,12 @@ public class ReverseEngineeringAction extends DBWizardAction<DbLoaderOptionsDial application.getUndoManager().discardAllEdits(); try { context.getConnection().close(); - } catch (SQLException ignored) { - } + } catch (SQLException ignored) {} } }); } - private void runLoaderInThread(final DbLoaderContext context, - final Runnable callback) { + private void runLoaderInThread(final DbLoaderContext context, final Runnable callback) { Thread th = new Thread(new Runnable() { public void run() { LoadDataMapTask task = new LoadDataMapTask(Application.getFrame(), "Reengineering DB", context); http://git-wip-us.apache.org/repos/asf/cayenne/blob/67282fb6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java index bf74a0c..64b33e3 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java @@ -41,8 +41,7 @@ public class ModelerDbImportAction extends DefaultDbImportAction { @Inject DataSourceFactory dataSourceFactory, @Inject DbAdapterFactory adapterFactory, @Inject MapLoader mapLoader, - @Inject MergerTokenFactoryProvider mergerTokenFactoryProvider - ) { + @Inject MergerTokenFactoryProvider mergerTokenFactoryProvider) { super(logger, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider); }