diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db')
14 files changed, 148 insertions, 26 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java index 0c4238e616..9b1e787d66 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007 Oracle. All rights reserved. + * Copyright (c) 2007, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -77,6 +77,10 @@ final class Catalog extends DTPWrapper implements Comparable<Catalog> { return this.database.column(dtpColumn); } + public Database database() { + return this.database; + } + // ***** schemata synchronized Set<Schema> buildSchemata() { diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java index 547ba01aad..2f8bbd222c 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -13,8 +13,10 @@ import java.text.Collator; import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject; import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener; +import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition; import org.eclipse.datatools.modelbase.sql.datatypes.DataType; import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType; +import org.eclipse.jpt.utility.internal.ClassTools; import org.eclipse.jpt.utility.internal.JavaType; import org.eclipse.jpt.utility.internal.NameTools; @@ -35,6 +37,14 @@ public final class Column extends DTPWrapper implements Comparable<Column> { private static final JavaType CLOB_JAVA_TYPE = new JavaType(java.sql.Clob.class); private static final JavaType STRING_JAVA_TYPE = new JavaType(java.lang.String.class); + private static final JavaType UTIL_DATE_JAVA_TYPE = new JavaType(java.util.Date.class); + private static final JavaType SQL_DATE_JAVA_TYPE = new JavaType(java.sql.Date.class); + private static final JavaType SQL_TIME_JAVA_TYPE = new JavaType(java.sql.Time.class); + private static final JavaType SQL_TIMESTAMP_JAVA_TYPE = new JavaType(java.sql.Timestamp.class); + + private static final JavaType BIG_DECIMAL_JAVA_TYPE = new JavaType(java.math.BigDecimal.class); + private static final JavaType LONG_JAVA_TYPE = new JavaType(long.class); + // ********** constructors ********** @@ -109,6 +119,54 @@ public final class Column extends DTPWrapper implements Comparable<Column> { /** * Return a Java type declaration that is reasonably + * similar to the column's data type and suitable for use as a + * primary key field. + */ + public String primaryKeyJavaTypeDeclaration() { + return this.primaryKeyJavaType().declaration(); + } + + /** + * Return a Java type that is reasonably + * similar to the column's data type and suitable for use as a + * primary key field. + */ + public JavaType primaryKeyJavaType() { + return this.jpaSpecCompliantPrimaryKeyJavaType(this.javaType()); + } + + /** + * The JPA spec [2.1.4] says only the following types are allowed in + * primary key fields: + * [variable] primitives + * [variable] primitive wrappers + * java.lang.String + * java.util.Date + * java.sql.Date + */ + private JavaType jpaSpecCompliantPrimaryKeyJavaType(JavaType javaType) { + if (javaType.isVariablePrimitive() + || javaType.isVariablePrimitiveWrapper() + || javaType.equals(STRING_JAVA_TYPE) + || javaType.equals(UTIL_DATE_JAVA_TYPE) + || javaType.equals(SQL_DATE_JAVA_TYPE)) { + return javaType; + } + if (javaType.equals(BIG_DECIMAL_JAVA_TYPE)) { + return LONG_JAVA_TYPE; // ?? + } + if (javaType.equals(SQL_TIME_JAVA_TYPE)) { + return UTIL_DATE_JAVA_TYPE; // ??? + } + if (javaType.equals(SQL_TIMESTAMP_JAVA_TYPE)) { + return UTIL_DATE_JAVA_TYPE; // ??? + } + // all the other typical types are pretty much un-mappable - return String(?) + return STRING_JAVA_TYPE; + } + + /** + * Return a Java type declaration that is reasonably * similar to the column's data type. */ public String javaTypeDeclaration() { @@ -122,11 +180,21 @@ public final class Column extends DTPWrapper implements Comparable<Column> { public JavaType javaType() { DataType dataType = this.dtpColumn.getDataType(); return (dataType instanceof PredefinedDataType) ? - this.jpaSpecCompliantJavaType(DTPTools.javaTypeFor(((PredefinedDataType) dataType).getPrimitiveType())) + this.jpaSpecCompliantJavaType(this.javaType((PredefinedDataType) dataType)) : DEFAULT_JAVA_TYPE; } + private JavaType javaType(PredefinedDataType dataType) { + // this is just a bit hacky: moving from a type declaration to a class name to a type declaration... + String dtpJavaClassName = this.predefinedDataTypeDefinition(dataType).getJavaClassName(); + return new JavaType(ClassTools.classNameForTypeDeclaration(dtpJavaClassName)); + } + + private PredefinedDataTypeDefinition predefinedDataTypeDefinition(PredefinedDataType dataType) { + return this.database().dtpDefinition().getPredefinedDataTypeDefinition(dataType.getName()); + } + /** * The JDBC spec says JDBC drivers should be able to map BLOBs and CLOBs * directly, but the JPA spec does not allow them. @@ -153,6 +221,10 @@ public final class Column extends DTPWrapper implements Comparable<Column> { return this.dtpColumn == column; } + public Database database() { + return this.table.database(); + } + // ********** Comparable implementation ********** public int compareTo( Column column) { diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java index 46dd3e41ef..7a93a8f5c4 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java @@ -114,6 +114,11 @@ public abstract class ConnectionProfile extends DTPWrapper implements Comparable public abstract String getUserPassword(); + /** + * protected, use defaultSchema() : Schema instead + */ + protected abstract String getDefaultSchemaName(); + public abstract String getDefaultSchema(); public abstract String getInstanceId(); @@ -140,6 +145,13 @@ public abstract class ConnectionProfile extends DTPWrapper implements Comparable */ public abstract boolean canWorkOffline(); + /** + * Return the default Schema for this connection. Can be null. + */ + public Schema defaultSchema() { + return getDatabase().schemaNamed(getDefaultSchemaName()); + } + @Override protected boolean connectionIsOnline() { diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java index 9e76ac0aa7..117816e148 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -9,12 +9,12 @@ ******************************************************************************/ package org.eclipse.jpt.db.internal; -import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.Vector; + import org.eclipse.datatools.connectivity.IConnectionProfile; import org.eclipse.datatools.connectivity.IProfileListener; import org.eclipse.datatools.connectivity.ProfileManager; @@ -172,10 +172,10 @@ public class ConnectionProfileRepository { // ********** member class ********** /** * Keep the repository in synch with the DTP profile manager - * and forward events to the repositories listeners. + * and forward events to the repository's listeners. */ private class LocalProfileListener implements IProfileListener { - private Collection<ProfileListener> listeners = new Vector<ProfileListener>(); + private Vector<ProfileListener> listeners = new Vector<ProfileListener>(); LocalProfileListener() { super(); diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java index ae4cb741e5..d7337660a8 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java @@ -271,7 +271,7 @@ public final class DTPConnectionProfileWrapper extends ConnectionProfile { } @Override - public String getDefaultSchema() { + protected String getDefaultSchemaName() { if( this.getDatabase().getVendor().equalsIgnoreCase( POSTGRESQL_VENDOR)) { return PUBLIC_SCHEMA; } diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java index 180ff5c998..c9e4673716 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -22,7 +22,7 @@ import org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener; */ final class DTPConnectionWrapper extends Connection { - final private DTPConnectionProfileWrapper profile; + final DTPConnectionProfileWrapper profile; private LocalConnectionListener connectionListener; // ********** constructors ********** @@ -67,12 +67,12 @@ final class DTPConnectionWrapper extends Connection { // ********** queries ********** - private IManagedConnection getDTPConnection() { + IManagedConnection getDTPConnection() { return this.profile.getDTPConnection(); } - private IManagedConnection getDTPOfflineConnection() { + IManagedConnection getDTPOfflineConnection() { return this.profile.getDTPOfflineConnection(); } @@ -200,21 +200,18 @@ final class DTPConnectionWrapper extends Connection { } } - @SuppressWarnings("unused") void databaseChanged( Database database, int eventType) { for (ConnectionListener listener : this.listeners) { listener.databaseChanged( DTPConnectionWrapper.this.profile, database); } } - @SuppressWarnings("unused") void schemaChanged( Schema schema, Database database, int eventType) { for (ConnectionListener listener : this.listeners) { listener.schemaChanged( DTPConnectionWrapper.this.profile, schema); } } - @SuppressWarnings("unused") void tableChanged( Table table, Schema schema, Database database, int eventType) { for (ConnectionListener listener : this.listeners) { listener.tableChanged( DTPConnectionWrapper.this.profile, table); diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java index a636134d8c..017ce94d7c 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -15,8 +15,10 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Set; +import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition; import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject; import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener; +import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin; import org.eclipse.emf.common.util.EList; /** @@ -135,6 +137,11 @@ public final class DTPDatabaseWrapper extends Database { return this.dtpDatabase.getVersion(); } + @Override + public DatabaseDefinition dtpDefinition() { + return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.dtpDatabase); + } + // ***** schemata diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java index ab7f5656e9..a4f9f2c14d 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -13,6 +13,7 @@ import java.text.Collator; import java.util.Iterator; import java.util.Set; +import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition; import org.eclipse.jpt.utility.internal.StringTools; import org.eclipse.jpt.utility.internal.iterators.TransformationIterator; @@ -71,6 +72,12 @@ public abstract class Database extends DTPWrapper implements Comparable<Database return this.schema( dtpTable.getSchema()).table( dtpTable); } + public Database database() { + return this; + } + + public abstract DatabaseDefinition dtpDefinition(); + // ********** Comparable implementation ********** public int compareTo( Database database) { diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java index 6287711978..6493592884 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -123,10 +123,10 @@ public final class ForeignKey extends DTPWrapper implements Comparable<ForeignKe * the base table's primary key */ public Iterator<Column> nonPrimaryKeyBaseColumns() { - return new FilteringIterator<Column>(this.baseColumns()) { + return new FilteringIterator<Column, Column>(this.baseColumns()) { @Override - protected boolean accept(Object o) { - return ! ForeignKey.this.getBaseTable().primaryKeyColumnsContains((Column) o); + protected boolean accept(Column o) { + return ! ForeignKey.this.getBaseTable().primaryKeyColumnsContains(o); } }; } @@ -176,6 +176,10 @@ public final class ForeignKey extends DTPWrapper implements Comparable<ForeignKe return columnPair.getBaseColumn().matchesJavaFieldName(javaFieldName + "_" + pkColumn.getName()); } + public Database database() { + return this.baseTable.database(); + } + // ***** column pairs diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java index 2822a50297..ba97c88f43 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java @@ -127,7 +127,7 @@ public final class NullConnectionProfile extends ConnectionProfile { } @Override - public String getDefaultSchema() { + public String getDefaultSchemaName() { return ""; } diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java index bc92d29d54..0ba22eb085 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -11,6 +11,7 @@ package org.eclipse.jpt.db.internal; import java.util.Collections; import java.util.Set; +import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition; import org.eclipse.jpt.utility.internal.ClassTools; /** @@ -80,6 +81,11 @@ public final class NullDatabase extends Database { return ""; } + @Override + public DatabaseDefinition dtpDefinition() { + return null; + } + // ***** catalogs @Override diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java index 9ef2c7fb04..de19966414 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -125,6 +125,10 @@ public final class Schema extends DTPWrapper implements Comparable<Schema> { return this.database.column(dtpColumn); } + public Database database() { + return this.database; + } + // ********** tables ********** diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java index 7cb68a47e5..28a096614b 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -71,4 +71,9 @@ public final class Sequence extends DTPWrapper implements Comparable<Sequence> { public int compareTo( Sequence sequence) { return Collator.getInstance().compare( this.getName(), sequence.getName()); } + + public Database database() { + return this.schema.database(); + } + } diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java index 7b49b72f8c..8f7aaf732e 100644 --- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java +++ b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. All rights reserved. + * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -151,6 +151,10 @@ public final class Table extends DTPWrapper implements Comparable<Table> { return this.schema.table(table); } + public Database database() { + return this.schema.database(); + } + // ***** columns private synchronized Set<Column> getColumns() { |