Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbvosburgh2007-05-09 17:55:23 +0000
committerbvosburgh2007-05-09 17:55:23 +0000
commit627203c3bee2d9f83fe218efd2d5fbdd41f1b04f (patch)
treeb88c52dd85e541a65a4134d6443400935f524b96 /jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java
parent9b57526d3a5fd19e3dce6e5029b1f26283b500cb (diff)
downloadwebtools.dali-627203c3bee2d9f83fe218efd2d5fbdd41f1b04f.tar.gz
webtools.dali-627203c3bee2d9f83fe218efd2d5fbdd41f1b04f.tar.xz
webtools.dali-627203c3bee2d9f83fe218efd2d5fbdd41f1b04f.zip
[181471] added code-completion for join column name for single- and multi-relationship mappings
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaEObject.java8
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/AbstractJavaTable.java52
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaJoinTable.java33
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java29
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java23
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java32
6 files changed, 141 insertions, 36 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaEObject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaEObject.java
index 448f8e2089..e34f2129a6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaEObject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaEObject.java
@@ -92,4 +92,12 @@ public abstract class JavaEObject extends JpaEObject
protected ITextRange elementTextRange(ITextRange elementTextRange) {
return (elementTextRange != null) ? elementTextRange : this.getTextRange();
}
+
+ /**
+ * Convenience method. Return whether element's text range is not
+ * null (meaning the element exists) and the specified position touches it.
+ */
+ protected boolean elementTouches(ITextRange elementTextRange, int pos) {
+ return (elementTextRange != null) && elementTextRange.touches(pos);
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/AbstractJavaTable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/AbstractJavaTable.java
index 0878e6a919..75d5b5a258 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/AbstractJavaTable.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/AbstractJavaTable.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jpt.core.internal.ITextRange;
import org.eclipse.jpt.core.internal.content.java.JavaEObject;
import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
@@ -792,6 +793,10 @@ public abstract class AbstractJavaTable extends JavaEObject implements ITable
return this.elementTextRange(this.nameDeclarationAdapter, astRoot);
}
+ public boolean nameTouches(int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.nameDeclarationAdapter, pos, astRoot);
+ }
+
public ITextRange getSchemaTextRange() {
return this.elementTextRange(this.schemaDeclarationAdapter);
}
@@ -800,6 +805,10 @@ public abstract class AbstractJavaTable extends JavaEObject implements ITable
return this.elementTextRange(this.schemaDeclarationAdapter, astRoot);
}
+ public boolean schemaTouches(int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.schemaDeclarationAdapter, pos, astRoot);
+ }
+
public ITextRange getCatalogTextRange() {
return this.elementTextRange(this.catalogDeclarationAdapter);
}
@@ -808,6 +817,10 @@ public abstract class AbstractJavaTable extends JavaEObject implements ITable
return this.elementTextRange(this.catalogDeclarationAdapter, astRoot);
}
+ public boolean catalogTouches(int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.catalogDeclarationAdapter, pos, astRoot);
+ }
+
//TODO should we allow setting through the ecore, that would make this method
//public and part of the ITable api. only the model needs to be setting the default,
//but the ui needs to be listening for changes to the default.
@@ -941,24 +954,41 @@ public abstract class AbstractJavaTable extends JavaEObject implements ITable
return this.elementTextRange(this.member.annotationElementTextRange(elementAdapter, astRoot));
}
- /**
- * name, schema, catalog
- */
+ protected boolean elementTouches(DeclarationAnnotationElementAdapter elementAdapter, int pos) {
+ return this.elementTouches(this.member.annotationElementTextRange(elementAdapter), pos);
+ }
+
+ protected boolean elementTouches(DeclarationAnnotationElementAdapter elementAdapter, int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.member.annotationElementTextRange(elementAdapter, astRoot), pos);
+ }
+
public Iterator<String> candidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
if (this.isConnected()) {
- if (this.getNameTextRange(astRoot).includes(pos)) {
- return this.quotedCandidateNames(filter);
- }
- if (this.getSchemaTextRange(astRoot).includes(pos)) {
- return this.quotedCandidateSchemas(filter);
- }
- if (this.getCatalogTextRange(astRoot).includes(pos)) {
- return this.quotedCandidateCatalogs(filter);
+ Iterator<String> result = this.connectedCandidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
}
}
return null;
}
+ /**
+ * called if the database is connected
+ * name, schema, catalog
+ */
+ protected Iterator<String> connectedCandidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
+ if (this.nameTouches(pos, astRoot)) {
+ return this.quotedCandidateNames(filter);
+ }
+ if (this.schemaTouches(pos, astRoot)) {
+ return this.quotedCandidateSchemas(filter);
+ }
+ if (this.catalogTouches(pos, astRoot)) {
+ return this.quotedCandidateCatalogs(filter);
+ }
+ return null;
+ }
+
private ConnectionProfile connectionProfile() {
return this.getJpaProject().connectionProfile();
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaJoinTable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaJoinTable.java
index 4396465488..cf2921820f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaJoinTable.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaJoinTable.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.core.internal.content.java.mappings;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
@@ -30,6 +31,7 @@ import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
import org.eclipse.jpt.core.internal.platform.BaseJpaPlatform;
import org.eclipse.jpt.core.internal.platform.DefaultsContext;
+import org.eclipse.jpt.utility.internal.Filter;
/**
* <!-- begin-user-doc -->
@@ -761,6 +763,32 @@ public class JavaJoinTable extends AbstractJavaTable implements IJoinTable
((JavaJoinColumn) joinColumn).moveAnnotation(index);
}
+ @Override
+ public Iterator<String> connectedCandidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
+ Iterator<String> result = super.connectedCandidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ for (IJoinColumn column : this.getJoinColumns()) {
+ result = ((JavaJoinColumn) column).candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ }
+ for (IJoinColumn column : this.getInverseJoinColumns()) {
+ result = ((JavaJoinColumn) column).candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected JavaUniqueConstraint createJavaUniqueConstraint(int index) {
+ return JavaUniqueConstraint.createJoinTableUniqueConstraint(getMember(), index);
+ }
+
// ********** IJoinTable implementation **********
public IJoinColumn createJoinColumn(int index) {
return this.createJavaJoinColumn(index);
@@ -785,9 +813,4 @@ public class JavaJoinTable extends AbstractJavaTable implements IJoinTable
public boolean containsSpecifiedInverseJoinColumns() {
return !this.getSpecifiedInverseJoinColumns().isEmpty();
}
-
- @Override
- protected JavaUniqueConstraint createJavaUniqueConstraint(int index) {
- return JavaUniqueConstraint.createJoinTableUniqueConstraint(getMember(), index);
- }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
index 616c12ec7e..aa4ea47f5b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.java.mappings;
+import java.util.Iterator;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EClass;
@@ -28,6 +29,7 @@ import org.eclipse.jpt.core.internal.mappings.INonOwningMapping;
import org.eclipse.jpt.core.internal.mappings.IOrderBy;
import org.eclipse.jpt.core.internal.mappings.ITable;
import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
+import org.eclipse.jpt.utility.internal.Filter;
/**
* <!-- begin-user-doc -->
@@ -476,8 +478,16 @@ public abstract class JavaMultiRelationshipMapping
public void updateFromJava(CompilationUnit astRoot) {
super.updateFromJava(astRoot);
setMappedBy((String) this.mappedByAdapter.getValue(astRoot));
- ((JavaOrderBy) this.orderBy).updateFromJava(astRoot);
- ((JavaJoinTable) getJoinTable()).updateFromJava(astRoot);
+ this.getJavaOrderBy().updateFromJava(astRoot);
+ this.getJavaJoinTable().updateFromJava(astRoot);
+ }
+
+ private JavaJoinTable getJavaJoinTable() {
+ return (JavaJoinTable) this.joinTable;
+ }
+
+ private JavaOrderBy getJavaOrderBy() {
+ return (JavaOrderBy) this.orderBy;
}
@Override
@@ -485,6 +495,19 @@ public abstract class JavaMultiRelationshipMapping
setFetch(DefaultLazyFetchType.fromJavaAnnotationValue(this.getFetchAdapter().getValue(astRoot)));
}
+ @Override
+ public Iterator<String> candidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
+ Iterator<String> result = super.candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ result = this.getJavaJoinTable().candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ return null;
+ }
+
/**
* extract the element type from the specified container signature and
* convert it into a reference entity type name;
@@ -506,4 +529,4 @@ public abstract class JavaMultiRelationshipMapping
String elementTypeName = buildReferenceEntityTypeName(elementSignature, jdtType());
return typeNamedIsContainer(elementTypeName) ? null : elementTypeName;
}
-} // JavaMultiRelationshipMapping
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
index 5a1b8c4204..f0cf1d9c3e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
@@ -468,6 +468,14 @@ public abstract class JavaNamedColumn extends JavaEObject
return this.elementTextRange(this.nameDeclarationAdapter, astRoot);
}
+ public boolean nameTouches(int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.nameDeclarationAdapter, pos, astRoot);
+ }
+
+ protected boolean elementTouches(DeclarationAnnotationElementAdapter elementAdapter, int pos, CompilationUnit astRoot) {
+ return this.elementTouches(this.member.annotationElementTextRange(elementAdapter, astRoot), pos);
+ }
+
public void updateFromJava(CompilationUnit astRoot) {
this.setSpecifiedName((String) this.nameAdapter.getValue(astRoot));
this.setColumnDefinition((String) this.columnDefinitionAdapter.getValue(astRoot));
@@ -501,13 +509,24 @@ public abstract class JavaNamedColumn extends JavaEObject
*/
public Iterator<String> candidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
if (this.isConnected()) {
- if (this.getNameTextRange(astRoot).includes(pos)) {
- return this.quotedCandidateNames(filter);
+ Iterator<String> result = this.connectedCandidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
}
}
return null;
}
+ /**
+ * called if the database is connected
+ */
+ protected Iterator<String> connectedCandidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
+ if (this.nameTouches(pos, astRoot)) {
+ return this.quotedCandidateNames(filter);
+ }
+ return null;
+ }
+
private Iterator<String> candidateNames() {
return this.dbTable().columnNames();
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
index 9f8c2fbb85..7b06ef891a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
@@ -33,6 +33,7 @@ import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping;
import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
+import org.eclipse.jpt.utility.internal.Filter;
/**
* <!-- begin-user-doc -->
@@ -319,21 +320,7 @@ public abstract class JavaSingleRelationshipMapping
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_SINGLE_RELATIONSHIP_MAPPING__FETCH, oldFetch, fetch));
}
- /**
- * Returns the value of the '<em><b>Join Columns</b></em>' containment reference list.
- * The list contents are of type {@link org.eclipse.jpt.core.internal.mappings.IJoinColumn}.
- * <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Join Columns</em>' containment reference list isn't clear,
- * there really should be more of a description here...
- * </p>
- * <!-- end-user-doc -->
- * @return the value of the '<em>Join Columns</em>' containment reference list.
- * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getISingleRelationshipMapping_JoinColumns()
- * @model type="org.eclipse.jpt.core.internal.mappings.IJoinColumn" containment="true" transient="true" changeable="false" volatile="true"
- * @generated NOT
- */
- public EList getJoinColumns() {
+ public EList<IJoinColumn> getJoinColumns() {
return this.getSpecifiedJoinColumns().isEmpty() ? this.getDefaultJoinColumns() : this.getSpecifiedJoinColumns();
}
@@ -665,6 +652,21 @@ public abstract class JavaSingleRelationshipMapping
return !this.getSpecifiedJoinColumns().isEmpty();
}
+ @Override
+ public Iterator<String> candidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) {
+ Iterator<String> result = super.candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ for (IJoinColumn column : this.getJoinColumns()) {
+ result = ((JavaJoinColumn) column).candidateValuesFor(pos, filter, astRoot);
+ if (result != null) {
+ return result;
+ }
+ }
+ return null;
+ }
+
public IJoinColumn createJoinColumn(int index) {
return this.createJavaJoinColumn(index);
}

Back to the top