Refactoring PKs - Refactoring FirebirdSniffer and HSQLDBSniffer
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/70880cab Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/70880cab Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/70880cab Branch: refs/heads/master Commit: 70880cabc771b12a27efcec6a0450d72758d3d3c Parents: ac111c6 Author: Aleksey Pleshkanev <priest...@hotmail.com> Authored: Sun Apr 1 19:42:04 2018 +0300 Committer: Aleksey Pleshkanev <priest...@hotmail.com> Committed: Sun Apr 1 19:42:04 2018 +0300 ---------------------------------------------------------------------- .../cayenne/dba/firebird/FirebirdSniffer.java | 36 ++++++++++++++++---- .../cayenne/dba/hsqldb/HSQLDBSniffer.java | 32 ++++++++++++----- 2 files changed, 53 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/70880cab/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdSniffer.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdSniffer.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdSniffer.java index de46542..6c69d94 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdSniffer.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdSniffer.java @@ -16,28 +16,50 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ - -package org.apache.cayenne.dba.firebird; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; +package org.apache.cayenne.dba.firebird; import org.apache.cayenne.configuration.server.DbAdapterDetector; +import org.apache.cayenne.configuration.server.PkGeneratorFactoryProvider; import org.apache.cayenne.dba.DbAdapter; +import org.apache.cayenne.dba.JdbcAdapter; +import org.apache.cayenne.dba.PkGenerator; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.Inject; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.Objects; + public class FirebirdSniffer implements DbAdapterDetector { + protected AdhocObjectFactory objectFactory; - public FirebirdSniffer(@Inject AdhocObjectFactory objectFactory) { + protected PkGeneratorFactoryProvider pkGeneratorProvider; + + public FirebirdSniffer(@Inject AdhocObjectFactory objectFactory, + @Inject PkGeneratorFactoryProvider pkGeneratorProvider) { this.objectFactory = objectFactory; + this.pkGeneratorProvider = Objects.requireNonNull(pkGeneratorProvider, "Null pkGeneratorProvider"); } @Override public DbAdapter createAdapter(DatabaseMetaData md) throws SQLException { String dbName = md.getDatabaseProductName(); - return dbName != null && dbName.toUpperCase().contains("FIREBIRD") - ? (DbAdapter) objectFactory.newInstance(DbAdapter.class, FirebirdAdapter.class.getName()) : null; + if (dbName == null || !dbName.toUpperCase().contains("FIREBIRD")) { + return null; + } + + JdbcAdapter adapter = objectFactory.newInstance( + DbAdapter.class, + FirebirdAdapter.class.getName()); + + PkGenerator pkGenerator = pkGeneratorProvider.get(adapter); + + if (pkGenerator != null) { + adapter.setPkGenerator(pkGenerator); + } + + return adapter; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/70880cab/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java index e385792..e098407 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBSniffer.java @@ -19,25 +19,33 @@ package org.apache.cayenne.dba.hsqldb; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; - import org.apache.cayenne.configuration.server.DbAdapterDetector; +import org.apache.cayenne.configuration.server.PkGeneratorFactoryProvider; import org.apache.cayenne.dba.DbAdapter; +import org.apache.cayenne.dba.JdbcAdapter; +import org.apache.cayenne.dba.PkGenerator; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.Inject; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.Objects; + /** * Detects HSQLDB database from JDBC metadata. - * + * * @since 1.2 */ public class HSQLDBSniffer implements DbAdapterDetector { protected AdhocObjectFactory objectFactory; - public HSQLDBSniffer(@Inject AdhocObjectFactory objectFactory) { + protected PkGeneratorFactoryProvider pkGeneratorProvider; + + public HSQLDBSniffer(@Inject AdhocObjectFactory objectFactory, + @Inject PkGeneratorFactoryProvider pkGeneratorProvider) { this.objectFactory = objectFactory; + this.pkGeneratorProvider = Objects.requireNonNull(pkGeneratorProvider, "Null pkGeneratorProvider"); } @Override @@ -50,8 +58,16 @@ public class HSQLDBSniffer implements DbAdapterDetector { boolean supportsSchema = md.getDriverMajorVersion() < 1 || md.getDriverMajorVersion() == 1 && md.getDriverMinorVersion() <= 8; - return supportsSchema - ? (DbAdapter) objectFactory.newInstance(DbAdapter.class, HSQLDBAdapter.class.getName()) - : (DbAdapter) objectFactory.newInstance(DbAdapter.class, HSQLDBNoSchemaAdapter.class.getName()); + JdbcAdapter adapter = supportsSchema + ? objectFactory.newInstance(DbAdapter.class, HSQLDBAdapter.class.getName()) + : objectFactory.newInstance(DbAdapter.class, HSQLDBNoSchemaAdapter.class.getName()); + + PkGenerator pkGenerator = pkGeneratorProvider.get(adapter); + + if (pkGenerator != null) { + adapter.setPkGenerator(pkGenerator); + } + + return adapter; } }