Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 211221 Details for
Bug 188940
code completion proposals in JPA XML Mapping file
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
proposed patch
patch_02_17_2012-3 (text/plain), 223.42 KB, created by
Nan Li
on 2012-02-17 17:32:51 EST
(
hide
)
Description:
proposed patch
Filename:
MIME Type:
Creator:
Nan Li
Created:
2012-02-17 17:32:51 EST
Size:
223.42 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jpt.jpa.core >Index: src/org/eclipse/jpt/jpa/core/JpaXmlStructureNode.java >=================================================================== >RCS file: src/org/eclipse/jpt/jpa/core/JpaXmlStructureNode.java >diff -N src/org/eclipse/jpt/jpa/core/JpaXmlStructureNode.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jpt/jpa/core/JpaXmlStructureNode.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,33 @@ >+/******************************************************************************* >+ * Copyright (c) 2008, 2010 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. >+ * >+ * Contributors: >+ * Oracle - initial API and implementation >+ ******************************************************************************/ >+package org.eclipse.jpt.jpa.core; >+ >+ >+/** >+ * Implement this interface for XML objects that appear in the Structure view >+ * >+ * Provisional API: This interface is part of an interim API that is still >+ * under development and expected to change significantly before reaching >+ * stability. It is available at this early stage to solicit feedback from >+ * pioneering adopters on the understanding that any code that uses this API >+ * will almost certainly be broken (repeatedly) as the API evolves. >+ * >+ * @version 2.4 >+ * @since 2.4 >+ */ >+ >+public interface JpaXmlStructureNode extends JpaStructureNode { >+ >+ /** >+ * Return the content assist proposals for the specified position >+ * in the XML file. >+ */ >+ Iterable<String> getXmlCompletionProposals(int pos); >+} >Index: src/org/eclipse/jpt/jpa/core/context/MappingFileRoot.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/MappingFileRoot.java,v >retrieving revision 1.2 >diff -u -r1.2 MappingFileRoot.java >--- src/org/eclipse/jpt/jpa/core/context/MappingFileRoot.java 12 May 2011 04:20:30 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/context/MappingFileRoot.java 17 Feb 2012 22:14:48 -0000 >@@ -9,7 +9,7 @@ > ******************************************************************************/ > package org.eclipse.jpt.jpa.core.context; > >-import org.eclipse.jpt.jpa.core.JpaStructureNode; >+import org.eclipse.jpt.jpa.core.JpaXmlStructureNode; > import org.eclipse.jpt.jpa.core.context.persistence.PersistentTypeContainer; > > /** >@@ -25,7 +25,7 @@ > * @since 2.1 > */ > public interface MappingFileRoot >- extends XmlContextNode, JpaStructureNode, PersistentTypeContainer >+ extends XmlContextNode, JpaXmlStructureNode, PersistentTypeContainer > { > /** > * covariant override >Index: src/org/eclipse/jpt/jpa/core/context/XmlContextNode.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/XmlContextNode.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlContextNode.java >--- src/org/eclipse/jpt/jpa/core/context/XmlContextNode.java 6 Feb 2011 02:07:17 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/context/XmlContextNode.java 17 Feb 2012 22:14:48 -0000 >@@ -31,6 +31,12 @@ > extends JpaContextNode > { > // TODO bjv rename to XmlJpaContextNode >+ >+ /** >+ * Return the content assist proposals for the specified position >+ * in the XML file. >+ */ >+ Iterable<String> getXmlCompletionProposals(int pos); > /** > * Add to the list of current validation messages > */ >Index: src/org/eclipse/jpt/jpa/core/context/persistence/Persistence.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/persistence/Persistence.java,v >retrieving revision 1.5 >diff -u -r1.5 Persistence.java >--- src/org/eclipse/jpt/jpa/core/context/persistence/Persistence.java 10 Feb 2012 20:49:02 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/context/persistence/Persistence.java 17 Feb 2012 22:14:48 -0000 >@@ -10,7 +10,7 @@ > package org.eclipse.jpt.jpa.core.context.persistence; > > import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; >-import org.eclipse.jpt.jpa.core.JpaStructureNode; >+import org.eclipse.jpt.jpa.core.JpaXmlStructureNode; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.resource.persistence.XmlPersistence; > >@@ -29,7 +29,7 @@ > * @since 2.0 > */ > public interface Persistence >- extends XmlContextNode, JpaStructureNode >+ extends XmlContextNode, JpaXmlStructureNode > { > /** > * Return the resource model object associated with this context model object >Index: src/org/eclipse/jpt/jpa/core/context/persistence/PersistenceUnit.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/persistence/PersistenceUnit.java,v >retrieving revision 1.9 >diff -u -r1.9 PersistenceUnit.java >--- src/org/eclipse/jpt/jpa/core/context/persistence/PersistenceUnit.java 10 Feb 2012 20:49:02 -0000 1.9 >+++ src/org/eclipse/jpt/jpa/core/context/persistence/PersistenceUnit.java 17 Feb 2012 22:14:48 -0000 >@@ -21,6 +21,7 @@ > import org.eclipse.jpt.jpa.core.context.Embeddable; > import org.eclipse.jpt.jpa.core.context.Entity; > import org.eclipse.jpt.jpa.core.context.Generator; >+import org.eclipse.jpt.jpa.core.context.PersistentType; > import org.eclipse.jpt.jpa.core.context.Query; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; >@@ -699,6 +700,15 @@ > boolean specifiesPersistentType(String typeName); > > /** >+ * Return the persistence unit's Java persistent types, as specified by >+ * the class refs (both specified and implied) and jar files. >+ * There can be duplicate types, and any of them may be overridden by a >+ * mapping file persistence type. >+ * @see #getMappingFilePersistentTypes() >+ */ >+ Iterable<PersistentType> getJavaPersistentTypes(); >+ >+ /** > * Return the persistence unit's entities. > */ > Iterable<Entity> getEntities(); >@@ -732,8 +742,13 @@ > * types in the project currently annotated. > */ > void synchronizeClasses(IProgressMonitor monitor); >- >- >+ >+ /** >+ * Return the names of all the packages valid cross the persistence unit >+ * including the ones from jar files >+ */ >+ Iterable<String> getPackageNames(); >+ > // ********** validation ********** > > /** >Index: src/org/eclipse/jpt/jpa/core/internal/context/AbstractXmlContextNode.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/AbstractXmlContextNode.java,v >retrieving revision 1.3 >diff -u -r1.3 AbstractXmlContextNode.java >--- src/org/eclipse/jpt/jpa/core/internal/context/AbstractXmlContextNode.java 8 Jul 2011 15:53:36 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/internal/context/AbstractXmlContextNode.java 17 Feb 2012 22:14:48 -0000 >@@ -62,4 +62,27 @@ > protected TextRange getValidationTextRange(TextRange textRange) { > return (textRange != null) ? textRange : this.getValidationTextRange(); > } >+ >+ // *********** completion proposals *********** >+ >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ if (this.connectionProfileIsActive()) { >+ Iterable<String> result = this.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ /** >+ * This method is called if the database is connected, allowing us to >+ * get candidates from the various database tables etc. >+ * This method should <em>not</em> be cascaded to "child" objects; it should >+ * only return candidates for the current object. The cascading is >+ * handled by {@link #getXmlCompletionProposals(int)}. >+ */ >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java,v >retrieving revision 1.17 >diff -u -r1.17 AbstractJavaMultiRelationshipMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java 16 Feb 2012 16:54:02 -0000 1.17 >+++ src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java 17 Feb 2012 22:14:48 -0000 >@@ -1196,7 +1196,8 @@ > } > > public Table getReferencedColumnDbTable() { >- return AbstractJavaMultiRelationshipMapping.this.getResolvedMapKeyEntity().getPrimaryDbTable(); >+ Entity entity = AbstractJavaMultiRelationshipMapping.this.getResolvedMapKeyEntity(); >+ return entity != null ? entity.getPrimaryDbTable() : null; > } > > public int getJoinColumnsSize() { >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java,v >retrieving revision 1.14 >diff -u -r1.14 AbstractEntityMappings.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java 17 Feb 2012 14:18:39 -0000 1.14 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractEntityMappings.java 17 Feb 2012 22:14:48 -0000 >@@ -57,6 +57,7 @@ > import org.eclipse.jpt.jpa.core.resource.orm.XmlTableGenerator; > import org.eclipse.jpt.jpa.core.resource.orm.XmlTypeMapping; > import org.eclipse.jpt.jpa.db.Catalog; >+import org.eclipse.jpt.jpa.db.Database; > import org.eclipse.jpt.jpa.db.Schema; > import org.eclipse.jpt.jpa.db.SchemaContainer; > import org.eclipse.text.edits.DeleteEdit; >@@ -1059,4 +1060,92 @@ > new SingleElementIterable<ReplaceEdit>(this.xmlEntityMappings.createRenamePackageEdit(newName)) : > EmptyIterable.<ReplaceEdit>instance(); > } >+ >+ // ************ completion proposals************** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.queryContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmTableGenerator tableGenerator : this.getTableGenerators()) { >+ result = tableGenerator.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ for (OrmSequenceGenerator seqGenerator : this.getSequenceGenerators()) { >+ result = seqGenerator.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ result = this.persistenceUnitMetadata.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.packageTouches(pos)) { >+ return this.getCandidatePackages(); >+ } >+ for (OrmPersistentType persistentType : this.getPersistentTypes()) { >+ result = persistentType.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.schemaTouches(pos)) { >+ return this.getCandidateSchemata(); >+ } >+ if (this.catalogTouches(pos)) { >+ return this.getCandidateCatalogs(); >+ } >+ return null; >+ } >+ >+ // ********** content assist: schema >+ >+ protected boolean schemaTouches(int pos) { >+ return this.getXmlEntityMappings().schemaTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateSchemata() { >+ SchemaContainer schemaContainer = this.getDbSchemaContainer(); >+ return (schemaContainer != null) ? schemaContainer.getSortedSchemaIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: catalog >+ >+ protected boolean catalogTouches(int pos) { >+ return this.getXmlEntityMappings().catalogTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateCatalogs() { >+ Database db = this.getDatabase(); >+ return (db != null) ? db.getSortedCatalogIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: package >+ >+ private boolean packageTouches(int pos) { >+ return this.getXmlEntityMappings().packageTouches(pos); >+ } >+ >+ private Iterable<String> getCandidatePackages() { >+ return this.getPersistenceUnit().getPackageNames(); >+ } >+ > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmAttributeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmAttributeMapping.java,v >retrieving revision 1.4 >diff -u -r1.4 AbstractOrmAttributeMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmAttributeMapping.java 1 Sep 2011 18:35:56 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmAttributeMapping.java 17 Feb 2012 22:14:48 -0000 >@@ -14,6 +14,7 @@ > import org.eclipse.jdt.core.IPackageFragment; > import org.eclipse.jdt.core.IType; > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.CollectionTools; > import org.eclipse.jpt.common.utility.internal.StringTools; > import org.eclipse.jpt.common.utility.internal.Tools; > import org.eclipse.jpt.common.utility.internal.Transformer; >@@ -416,4 +417,34 @@ > ); > } > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.attributeNameTouches(pos)) { >+ return this.getCandidateMappingNames(); >+ } >+ return null; >+ } >+ >+ /** >+ * @return all the attribute of corresponding Java persistent type >+ */ >+ // Attributes of the corresponding XML persistent type include these >+ // that are already defined in XML so using these attributes as candidates >+ // could lead to multiple attribute mappings with the same name; >+ // thus using the attribute of the corresponding Java persistent type instead >+ private Iterable<String> getCandidateMappingNames() { >+ return CollectionTools.collection(this.getTypeMapping().getPersistentType(). >+ getJavaPersistentType().getAttributeNames()); >+ } >+ >+ private boolean attributeNameTouches(int pos) { >+ return this.getXmlAttributeMapping().nameTouches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java,v >retrieving revision 1.6 >diff -u -r1.6 AbstractOrmBaseColumn.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java 14 Sep 2011 19:39:22 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java 17 Feb 2012 22:14:48 -0000 >@@ -299,4 +299,23 @@ > protected NamedColumnTextRangeResolver buildTextRangeResolver() { > return new OrmTableColumnTextRangeResolver(this); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.tableTouches(pos)) { >+ return this.getCandidateTableNames(); >+ } >+ return null; >+ } >+ >+ protected boolean tableTouches(int pos) { >+ X xmlColumn = this.getXmlColumn(); >+ return (xmlColumn != null) && (xmlColumn.tableTouches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java,v >retrieving revision 1.5 >diff -u -r1.5 AbstractOrmBaseEmbeddedMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java 14 Sep 2011 19:39:22 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java 17 Feb 2012 22:14:49 -0000 >@@ -32,10 +32,10 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; > import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; > import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.MappingTools; > import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideColumnValidator; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideValidator; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.EmbeddableOverrideDescriptionProvider; >@@ -226,6 +226,20 @@ > this.attributeOverrideContainer.validate(messages, reporter); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.attributeOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > > // ********** attribute override container owner ********* > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java,v >retrieving revision 1.7 >diff -u -r1.7 AbstractOrmBasicMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java 5 Dec 2011 17:48:38 -0000 1.7 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java 17 Feb 2012 22:14:49 -0000 >@@ -26,9 +26,9 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; > import org.eclipse.jpt.jpa.core.context.orm.OrmTemporalConverter; > import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.NullOrmConverter; >@@ -368,4 +368,23 @@ > public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { > return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (TableColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.converter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java,v >retrieving revision 1.17 >diff -u -r1.17 AbstractOrmEntity.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java 16 Feb 2012 16:54:02 -0000 1.17 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java 17 Feb 2012 22:14:49 -0000 >@@ -1918,6 +1918,48 @@ > return this.getValidationTextRange(this.xmlTypeMapping.getInheritanceStrategyTextRange()); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.table.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmSecondaryTable secondaryTable : this.getSpecifiedSecondaryTables()) { >+ result = secondaryTable.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ for (OrmPrimaryKeyJoinColumn pkJoinColumn : this.getSpecifiedPrimaryKeyJoinColumns()) { >+ result = pkJoinColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ result = this.attributeOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.associationOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.discriminatorColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.generatorContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > > // ********** OrmOverrideContainer.Owner implementation ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmGenerator.java,v >retrieving revision 1.5 >diff -u -r1.5 AbstractOrmGenerator.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmGenerator.java 21 Oct 2011 19:12:58 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmGenerator.java 17 Feb 2012 22:14:49 -0000 >@@ -13,6 +13,7 @@ > import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.common.utility.internal.StringTools; > import org.eclipse.jpt.common.utility.internal.Tools; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.Generator; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.context.orm.OrmGenerator; >@@ -20,6 +21,7 @@ > import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; > import org.eclipse.jpt.jpa.core.resource.orm.XmlGenerator; > import org.eclipse.jpt.jpa.db.Catalog; >+import org.eclipse.jpt.jpa.db.Database; > import org.eclipse.jpt.jpa.db.Schema; > import org.eclipse.jpt.jpa.db.SchemaContainer; > import org.eclipse.wst.validation.internal.provisional.core.IMessage; >@@ -192,6 +194,48 @@ > Tools.valuesAreEqual(this.getSpecifiedInitialValue(), generator.getSpecifiedInitialValue()); > } > >+ // ************* completion proposals ************* >+ /** >+ * called if the database is connected: >+ * table, schema, catalog, pkColumnName, valueColumnName >+ */ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.schemaTouches(pos)) { >+ return this.getCandidateSchemata(); >+ } >+ if (this.catalogTouches(pos)) { >+ return this.getCandidateCatalogs(); >+ } >+ return null; >+ } >+ >+ // ********** content assist: schema >+ >+ protected boolean schemaTouches(int pos) { >+ return this.xmlGenerator.schemaTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateSchemata() { >+ SchemaContainer schemaContainer = this.getDbSchemaContainer(); >+ return (schemaContainer != null) ? schemaContainer.getSortedSchemaIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: catalog >+ >+ protected boolean catalogTouches(int pos) { >+ return this.xmlGenerator.catalogTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateCatalogs() { >+ Database db = this.getDatabase(); >+ return (db != null) ? db.getSortedCatalogIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ > // ********** database stuff ********** > > public Schema getDbSchema() { >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java,v >retrieving revision 1.9 >diff -u -r1.9 AbstractOrmIdMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java 5 Dec 2011 17:48:38 -0000 1.9 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java 17 Feb 2012 22:14:49 -0000 >@@ -28,9 +28,9 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; > import org.eclipse.jpt.jpa.core.context.orm.OrmTemporalConverter; > import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.NullOrmConverter; >@@ -449,4 +449,33 @@ > public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { > return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (TableColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.generatorContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.generatedValue != null) { >+ result = this.generatedValue.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ result = this.converter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java,v >retrieving revision 1.6 >diff -u -r1.6 AbstractOrmJoinColumnRelationshipStrategy.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java 21 Nov 2011 19:15:24 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java 17 Feb 2012 22:14:49 -0000 >@@ -290,4 +290,21 @@ > joinColumn.validate(messages, reporter); > } > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmJoinColumn joinColumn : this.getJoinColumns()) { >+ result = joinColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractOrmJoinTableRelationshipStrategy.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java 8 Jul 2011 15:53:13 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java 17 Feb 2012 22:14:49 -0000 >@@ -126,6 +126,20 @@ > } > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.joinTable != null) { >+ result = this.joinTable.getXmlCompletionProposals(pos); >+ } >+ return result; >+ } >+ > > // ********** misc ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java,v >retrieving revision 1.16 >diff -u -r1.16 AbstractOrmMultiRelationshipMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java 16 Feb 2012 16:54:02 -0000 1.16 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java 17 Feb 2012 22:14:49 -0000 >@@ -1033,6 +1033,45 @@ > return this.getValidationTextRange(this.xmlAttributeMapping.getMapKeyClassTextRange()); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.orderable.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.mapKeyNameTouches(pos)) { >+ return this.getCandidateMapKeyNames(); >+ } >+ result = this.mapKeyColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapKeyConverter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapKeyAttributeOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmJoinColumn joinColumn : this.getMapKeyJoinColumns()) { >+ result = joinColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ protected boolean mapKeyNameTouches(int pos) { >+ return this.xmlAttributeMapping.mapKeyNameTouches(pos); >+ } > > // ********** abstract owner ********** > >@@ -1197,7 +1236,8 @@ > } > > public Table getReferencedColumnDbTable() { >- return AbstractOrmMultiRelationshipMapping.this.getResolvedMapKeyEntity().getPrimaryDbTable(); >+ Entity entity = AbstractOrmMultiRelationshipMapping.this.getResolvedMapKeyEntity(); >+ return entity != null ? entity.getPrimaryDbTable() : null; > } > > public int getJoinColumnsSize() { >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java,v >retrieving revision 1.7 >diff -u -r1.7 AbstractOrmNamedColumn.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java 16 Feb 2012 16:54:02 -0000 1.7 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java 17 Feb 2012 22:14:50 -0000 >@@ -11,6 +11,7 @@ > > import java.util.List; > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn; >@@ -252,7 +253,30 @@ > return (xmlColumn == null) ? null : xmlColumn.getNameTextRange(); > } > >+ // ********** completion proposals ********** > >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.columnNameTouches(pos)) { >+ return this.getCandidateColumnNames(); >+ } >+ return null; >+ } >+ >+ protected boolean columnNameTouches(int pos) { >+ X column = this.getXmlColumn(); >+ return (column != null) && (column.columnNameTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateColumnNames() { >+ Table dbTable = this.getDbTable(); >+ return (dbTable != null) ? dbTable.getSortedColumnIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ > // ********** misc ********** > > @Override >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java,v >retrieving revision 1.7 >diff -u -r1.7 AbstractOrmRelationshipMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java 9 Feb 2012 19:24:24 -0000 1.7 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmRelationshipMapping.java 17 Feb 2012 22:14:50 -0000 >@@ -432,5 +432,20 @@ > String targetTypeName = resolvedTargetType.getName(); > return (targetTypeName != null) ? targetTypeName : MetamodelField.DEFAULT_TYPE_NAME; > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.relationship.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSequenceGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSequenceGenerator.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractOrmSequenceGenerator.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSequenceGenerator.java 21 Oct 2011 19:12:58 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSequenceGenerator.java 17 Feb 2012 22:14:50 -0000 >@@ -10,11 +10,13 @@ > package org.eclipse.jpt.jpa.core.internal.context.orm; > > import org.eclipse.jpt.common.utility.internal.StringTools; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.Generator; > import org.eclipse.jpt.jpa.core.context.SequenceGenerator; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.context.orm.OrmSequenceGenerator; > import org.eclipse.jpt.jpa.core.resource.orm.XmlSequenceGenerator; >+import org.eclipse.jpt.jpa.db.Schema; > > /** > * <code>orm.xml</code> sequence generator >@@ -104,4 +106,32 @@ > return super.isIdentical(generator) && > StringTools.stringsAreEqual(this.getSpecifiedSequenceName(), ((SequenceGenerator)generator).getSpecifiedSequenceName()); > } >+ >+ // ********** completion proposals ********** >+ >+ /** >+ * called if the database is connected: >+ * sequenceName >+ */ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.sequenceNameTouches(pos)) { >+ return this.getCandidateSequences(); >+ } >+ return null; >+ } >+ >+ protected boolean sequenceNameTouches(int pos) { >+ return this.xmlGenerator.sequenceNameTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateSequences() { >+ Schema dbSchema = this.getDbSchema(); >+ return (dbSchema != null) ? dbSchema.getSortedSequenceIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractOrmSingleRelationshipMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java 17 May 2011 21:24:27 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java 17 Feb 2012 22:14:50 -0000 >@@ -138,4 +138,19 @@ > super.validate(messages, reporter); > this.derivedIdentity.validate(messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.derivedIdentity.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTable.java,v >retrieving revision 1.5 >diff -u -r1.5 AbstractOrmTable.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTable.java 10 Oct 2011 13:25:42 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTable.java 17 Feb 2012 22:14:50 -0000 >@@ -28,6 +28,7 @@ > import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; > import org.eclipse.jpt.jpa.core.resource.orm.XmlUniqueConstraint; > import org.eclipse.jpt.jpa.db.Catalog; >+import org.eclipse.jpt.jpa.db.Database; > import org.eclipse.jpt.jpa.db.Schema; > import org.eclipse.jpt.jpa.db.SchemaContainer; > import org.eclipse.wst.validation.internal.provisional.core.IMessage; >@@ -469,6 +470,82 @@ > return (xmlTable == null) ? null : xmlTable.getCatalogTextRange(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmUniqueConstraint constraint : this.getUniqueConstraints()) { >+ result = constraint.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ /** >+ * called if the database is connected: >+ * name, schema, catalog >+ */ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.tableNameTouches(pos)) { >+ return this.getCandidateTableNames(); >+ } >+ if (this.schemaTouches(pos)) { >+ return this.getCandidateSchemata(); >+ } >+ if (this.catalogTouches(pos)) { >+ return this.getCandidateCatalogs(); >+ } >+ return null; >+ } >+ >+ // ********* content assist : table >+ >+ protected boolean tableNameTouches(int pos) { >+ X table = this.getXmlTable(); >+ return (table != null) && (table.nameTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateTableNames() { >+ Schema dbSchema = this.getDbSchema(); >+ return (dbSchema != null) ? dbSchema.getSortedTableIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********* content assist : schema >+ >+ protected boolean schemaTouches(int pos) { >+ X table = this.getXmlTable(); >+ return (table != null) && (table.schemaTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateSchemata() { >+ if (this.getDbSchemaContainer() == null) >+ return EmptyIterable.<String>instance(); >+ else >+ return this.getDbSchemaContainer().getSortedSchemaIdentifiers(); >+ } >+ >+ // ********* content assist : catalog >+ >+ protected boolean catalogTouches(int pos) { >+ X table = this.getXmlTable(); >+ return (table != null) && (table.catalogTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateCatalogs() { >+ Database db = this.getDatabase(); >+ return (db != null) ? db.getSortedCatalogIdentifiers() : EmptyIterable.<String> instance(); >+ } > > // ********** misc ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java,v >retrieving revision 1.14 >diff -u -r1.14 AbstractOrmTypeMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java 9 Feb 2012 19:24:24 -0000 1.14 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java 17 Feb 2012 22:14:50 -0000 >@@ -512,4 +512,57 @@ > //fix this problem. bug 358745 > return (textRange != null) ? textRange : TextRange.Empty.instance(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.classNameTouches(pos)) { >+ return this.getCandidateClassNames(); >+ } >+ return null; >+ } >+ >+ private Iterable<String> getCandidateClassNames() { >+ final String packageName = this.getEntityMappings().getPackage(); >+ if (!StringTools.stringIsEmpty(packageName)) { >+ return new TransformationIterable<String, String>(this.getFilteredCandidateClassNames(packageName)) { >+ @Override >+ protected String transform(String className) { >+ return className.substring(packageName.length()+1); >+ } >+ }; >+ } >+ return this.getCandidateFullQulifiedClassNames(); >+ } >+ >+ private Iterable<String> getFilteredCandidateClassNames(final String packageName) { >+ return new FilteringIterable<String>(this.getCandidateFullQulifiedClassNames()) { >+ @Override >+ protected boolean accept(String className) { >+ return className.startsWith(packageName); >+ } >+ }; >+ } >+ >+ /** >+ * @return names of the classes specified by class refs and jar files >+ */ >+ private Iterable<String> getCandidateFullQulifiedClassNames() { >+ return new TransformationIterable<PersistentType, String>( >+ this.getPersistenceUnit().getJavaPersistentTypes()) { >+ @Override >+ protected String transform(PersistentType pType) { >+ return pType.getName(); >+ } >+ }; >+ } >+ >+ private boolean classNameTouches(int pos) { >+ return this.getXmlTypeMapping().classNameTouches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java,v >retrieving revision 1.10 >diff -u -r1.10 AbstractOrmVersionMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java 5 Dec 2011 17:48:38 -0000 1.10 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java 17 Feb 2012 22:14:50 -0000 >@@ -24,9 +24,9 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmTemporalConverter; > import org.eclipse.jpt.jpa.core.context.orm.OrmVersionMapping; > import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.NullOrmConverter; >@@ -291,4 +291,23 @@ > public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { > return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (TableColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.converter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java,v >retrieving revision 1.2 >diff -u -r1.2 GenericOrmManyToManyRelationship.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java 8 Jul 2011 15:53:13 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java 17 Feb 2012 22:14:50 -0000 >@@ -171,4 +171,23 @@ > this.mappedByStrategy.validate(messages, reporter); > this.joinTableStrategy.validate(messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mappedByStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinTableStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java,v >retrieving revision 1.2 >diff -u -r1.2 GenericOrmManyToOneRelationship.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java 8 Jul 2011 15:53:13 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java 17 Feb 2012 22:14:50 -0000 >@@ -176,4 +176,23 @@ > this.joinColumnStrategy.validate(messages, reporter); > this.joinTableStrategy.validate(messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinColumnStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinTableStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmMappedByRelationshipStrategy.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java 2 Aug 2011 13:24:15 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java 17 Feb 2012 22:14:50 -0000 >@@ -222,4 +222,22 @@ > TextRange textRange = this.getXmlMappedByMapping().getMappedByTextRange(); > return (textRange != null) ? textRange : this.getRelationship().getValidationTextRange(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.mappedByTouches(pos)) { >+ return this.getCandidateMappedByAttributeNames(); >+ } >+ return null; >+ } >+ >+ protected boolean mappedByTouches(int pos) { >+ return this.getXmlMappedByMapping().mappedByTouches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java,v >retrieving revision 1.2 >diff -u -r1.2 GenericOrmOneToManyRelationship.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java 8 Jul 2011 15:53:13 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java 17 Feb 2012 22:14:50 -0000 >@@ -241,4 +241,27 @@ > this.joinTableStrategy.validate(messages, reporter); > this.joinColumnStrategy.validate(messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mappedByStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinTableStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinColumnStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java,v >retrieving revision 1.3 >diff -u -r1.3 GenericOrmOneToOneRelationship.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java 1 Aug 2011 15:10:01 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java 17 Feb 2012 22:14:50 -0000 >@@ -264,4 +264,31 @@ > this.joinTableStrategy.validate(messages, reporter); > this.joinColumnStrategy.validate(messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mappedByStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.primaryKeyJoinColumnStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinTableStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.joinColumnStrategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java,v >retrieving revision 1.10 >diff -u -r1.10 GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java 16 Feb 2012 16:54:02 -0000 1.10 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java 17 Feb 2012 22:14:50 -0000 >@@ -238,6 +238,22 @@ > } > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmPrimaryKeyJoinColumn column : this.getPrimaryKeyJoinColumns()) { >+ result = column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > > // ********** join column owner ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentAttribute.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentAttribute.java,v >retrieving revision 1.8 >diff -u -r1.8 SpecifiedOrmPersistentAttribute.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentAttribute.java 17 Feb 2012 14:18:04 -0000 1.8 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentAttribute.java 17 Feb 2012 22:14:50 -0000 >@@ -533,6 +533,20 @@ > JavaPersistentAttribute.JpaContainerDefinition.Null.instance(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapping.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > > // ********** misc ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentType.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentType.java,v >retrieving revision 1.6 >diff -u -r1.6 SpecifiedOrmPersistentType.java >--- src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentType.java 17 Feb 2012 14:18:27 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/context/orm/SpecifiedOrmPersistentType.java 17 Feb 2012 22:14:51 -0000 >@@ -1293,6 +1293,26 @@ > return this.mapping.getValidationTextRange(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapping.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmPersistentAttribute attribute : this.getSpecifiedAttributes()) { >+ result = attribute.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > > // ********** misc ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java,v >retrieving revision 1.18 >diff -u -r1.18 AbstractPersistenceUnit.java >--- src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java 10 Feb 2012 20:49:02 -0000 1.18 >+++ src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java 17 Feb 2012 22:14:51 -0000 >@@ -31,6 +31,7 @@ > import org.eclipse.jdt.core.IType; > import org.eclipse.jdt.core.JavaModelException; > import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; >+import org.eclipse.jpt.common.core.resource.java.JavaResourceType; > import org.eclipse.jpt.common.core.utility.BodySourceWriter; > import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.common.utility.internal.CollectionTools; >@@ -1657,15 +1658,8 @@ > ); > } > >- /** >- * Return the persistence unit's Java persistent types, as specified by >- * the class refs (both specified and implied) and jar files. >- * There can be duplicate types, and any of them may be overridden by a >- * mapping file persistence type. >- * @see #getMappingFilePersistentTypes() >- */ > @SuppressWarnings("unchecked") >- protected Iterable<PersistentType> getJavaPersistentTypes() { >+ public Iterable<PersistentType> getJavaPersistentTypes() { > return new CompositeIterable<PersistentType>( > this.getClassRefPersistentTypes(), > this.getJarFilePersistentTypes() >@@ -2043,6 +2037,14 @@ > sb.append(this.name); > } > >+ public Iterable<String> getPackageNames() { >+ Set<String> packageNames = new HashSet<String>(); >+ for (PersistentType pType : this.getJavaPersistentTypes()) { >+ JavaResourceType jrt = ((JavaPersistentType)pType).getJavaResourceType(); >+ packageNames.add(jrt.getPackageName()); >+ } >+ return packageNames; >+ } > > // ********** validation ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java,v >retrieving revision 1.5 >diff -u -r1.5 AbstractOrmOverride.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java 14 Sep 2011 19:39:22 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java 17 Feb 2012 22:14:51 -0000 >@@ -13,14 +13,14 @@ > import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; > import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; >-import org.eclipse.jpt.jpa.core.context.TypeMapping; > import org.eclipse.jpt.jpa.core.context.ReadOnlyTableColumn.Owner; >+import org.eclipse.jpt.jpa.core.context.TypeMapping; > import org.eclipse.jpt.jpa.core.context.orm.OrmOverride; > import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideContainer; > import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverride; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; > import org.eclipse.jpt.jpa.core.internal.context.orm.OrmOverrideTextRangeResolver; > import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; >@@ -170,4 +170,26 @@ > public Iterable<String> getCandidateTableNames() { > return this.getContainer().getCandidateTableNames(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.nameTouches(pos)) { >+ return this.getCandidateNames(); >+ } >+ return null; >+ } >+ >+ protected boolean nameTouches(int pos) { >+ return this.xmlOverride.nameTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateNames() { >+ return this.getContainer().getAllOverridableNames(); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java,v >retrieving revision 1.6 >diff -u -r1.6 AbstractOrmOverrideContainer.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java 14 Sep 2011 19:39:22 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java 17 Feb 2012 22:14:51 -0000 >@@ -28,10 +28,10 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideContainer; > import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyOverride; > import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverride; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; > import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; > import org.eclipse.wst.validation.internal.provisional.core.IMessage; >@@ -471,4 +471,21 @@ > this.specifiedOverrides.get(0).getValidationTextRange() : > this.owner.getValidationTextRange(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (R override : this.getOverrides()) { >+ result = override.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitDefaults.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitDefaults.java,v >retrieving revision 1.4 >diff -u -r1.4 AbstractOrmPersistenceUnitDefaults.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitDefaults.java 20 Jan 2012 19:34:29 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitDefaults.java 17 Feb 2012 22:14:51 -0000 >@@ -10,6 +10,7 @@ > package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; > > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.AccessType; > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistenceUnitMetadata; > import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; >@@ -17,6 +18,7 @@ > import org.eclipse.jpt.jpa.core.resource.orm.XmlPersistenceUnitDefaults; > import org.eclipse.jpt.jpa.core.resource.orm.XmlPersistenceUnitMetadata; > import org.eclipse.jpt.jpa.db.Catalog; >+import org.eclipse.jpt.jpa.db.Database; > import org.eclipse.jpt.jpa.db.Schema; > import org.eclipse.jpt.jpa.db.SchemaContainer; > >@@ -353,4 +355,43 @@ > XmlPersistenceUnitDefaults xmlDefaults = this.getXmlDefaults(); > return (xmlDefaults == null) ? null : xmlDefaults.getValidationTextRange(); > } >+ >+ // ********** completion proposals ********* >+ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.schemaTouches(pos)) { >+ return this.getCandidateSchemata(); >+ } >+ if (this.catalogTouches(pos)) { >+ return this.getCandidateCatalogs(); >+ } >+ return null; >+ } >+ >+ // ********** content assist: schema >+ >+ protected boolean schemaTouches(int pos) { >+ return this.getXmlDefaults().schemaTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateSchemata() { >+ SchemaContainer schemaContainer = this.getDbSchemaContainer(); >+ return (schemaContainer != null) ? schemaContainer.getSortedSchemaIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: catalog >+ >+ protected boolean catalogTouches(int pos) { >+ return this.getXmlDefaults().catalogTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateCatalogs() { >+ Database db = this.getDatabase(); >+ return (db != null) ? db.getSortedCatalogIdentifiers() : EmptyIterable.<String> instance(); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitMetadata.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitMetadata.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractOrmPersistenceUnitMetadata.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitMetadata.java 29 Jun 2011 14:43:41 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmPersistenceUnitMetadata.java 17 Feb 2012 22:14:51 -0000 >@@ -187,4 +187,19 @@ > XmlPersistenceUnitMetadata xmlMetadata = this.getXmlPersistenceUnitMetadata(); > return (xmlMetadata == null) ? null : xmlMetadata.getValidationTextRange(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.persistenceUnitDefaults.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java,v >retrieving revision 1.2 >diff -u -r1.2 GenericOrmAssociationOverride.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java 8 Jul 2011 15:53:14 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java 17 Feb 2012 22:14:51 -0000 >@@ -116,4 +116,19 @@ > public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { > return this.getContainer2_0().buildJoinTableInverseJoinColumnValidator(this, column, owner, textRangeResolver); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.relationship.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmAttributeOverride.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java 14 Sep 2011 19:39:22 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java 17 Feb 2012 22:14:51 -0000 >@@ -17,9 +17,9 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; > import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; > import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAttributeOverride; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; > import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; > import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; >@@ -152,4 +152,19 @@ > protected boolean xmlColumnIsSpecified() { > return this.getXmlColumn() != null; > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java,v >retrieving revision 1.6 >diff -u -r1.6 GenericOrmEmbeddedMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java 14 Sep 2011 19:39:22 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java 17 Feb 2012 22:14:51 -0000 >@@ -36,11 +36,11 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; > import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; > import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.MappingTools; > import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmBaseEmbeddedMapping; > import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideInverseJoinColumnValidator; >@@ -221,6 +221,21 @@ > } > > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.associationOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } >+ > // ********** attribute override container owner ********* > > protected class AttributeOverrideContainerOwner >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratedValue.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratedValue.java,v >retrieving revision 1.3 >diff -u -r1.3 GenericOrmGeneratedValue.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratedValue.java 1 Aug 2011 15:09:58 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratedValue.java 17 Feb 2012 22:14:51 -0000 >@@ -189,4 +189,26 @@ > public TextRange getGeneratorTextRange() { > return this.getValidationTextRange(this.xmlGeneratedValue.getGeneratorTextRange()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.generatorTouches(pos)) { >+ return this.getCandidateGeneratorNames(); >+ } >+ return null; >+ } >+ >+ protected boolean generatorTouches(int pos) { >+ return this.xmlGeneratedValue.generatorTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateGeneratorNames() { >+ return this.getPersistenceUnit().getUniqueGeneratorNames(); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratorContainer.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratorContainer.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmGeneratorContainer.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratorContainer.java 1 Sep 2011 18:35:56 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmGeneratorContainer.java 17 Feb 2012 22:14:51 -0000 >@@ -212,6 +212,28 @@ > return (textRange != null) ? textRange : this.getParent().getValidationTextRange(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.tableGenerator != null) { >+ result = this.tableGenerator.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ if (this.sequenceGenerator != null) { >+ result = this.sequenceGenerator.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > > // ********** misc ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java,v >retrieving revision 1.6 >diff -u -r1.6 GenericOrmJoinColumn.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java 16 Feb 2012 16:54:02 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java 17 Feb 2012 22:14:52 -0000 >@@ -10,6 +10,7 @@ > package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; > > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; >@@ -173,4 +174,28 @@ > protected NamedColumnTextRangeResolver buildTextRangeResolver() { > return new OrmJoinColumnTextRangeResolver(this); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.referencedColumnNameTouches(pos)) { >+ return this.getCandidateReferencedColumnNames(); >+ } >+ return null; >+ } >+ >+ protected boolean referencedColumnNameTouches(int pos) { >+ XmlJoinColumn joinColumn = this.getXmlColumn(); >+ return (joinColumn != null) && (joinColumn.referencedColumnNameTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateReferencedColumnNames() { >+ Table table = this.owner.getReferencedColumnDbTable(); >+ return (table != null) ? table.getSortedColumnIdentifiers() : EmptyIterable.<String> instance(); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java,v >retrieving revision 1.9 >diff -u -r1.9 GenericOrmJoinTable.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java 16 Feb 2012 16:54:02 -0000 1.9 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java 17 Feb 2012 22:14:52 -0000 >@@ -307,6 +307,22 @@ > return this.getRelationshipStrategy().validatesAgainstDatabase(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmJoinColumn column : this.getInverseJoinColumns()) { >+ result = column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > > // ********** join column owners ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java,v >retrieving revision 1.5 >diff -u -r1.5 GenericOrmOrderable.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java 30 Aug 2011 00:59:05 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java 17 Feb 2012 22:14:52 -0000 >@@ -400,7 +400,21 @@ > } > } > >+ // ********** completion proposals ********** > >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.orderColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } >+ > // ********** order column owner (JPA 2.0) ********** > > protected class OrderColumnOwner >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmOverrideRelationship.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java 14 Sep 2011 19:39:22 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java 17 Feb 2012 22:14:52 -0000 >@@ -15,13 +15,13 @@ > import org.eclipse.jpt.jpa.core.context.MappedByRelationship; > import org.eclipse.jpt.jpa.core.context.OverrideRelationship; > import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; >-import org.eclipse.jpt.jpa.core.context.ReadOnlyTableColumn.Owner; > import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; > import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationship; > import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; > import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; > import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; > import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; >+import org.eclipse.jpt.jpa.core.context.ReadOnlyTableColumn.Owner; > import org.eclipse.jpt.jpa.core.context.Relationship; > import org.eclipse.jpt.jpa.core.context.RelationshipMapping; > import org.eclipse.jpt.jpa.core.context.TypeMapping; >@@ -29,9 +29,9 @@ > import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; > import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; > import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; >-import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; >+import org.eclipse.jpt.jpa.core.internal.context.TableColumnTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; > import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; > import org.eclipse.jpt.jpa.core.internal.context.orm.GenericOrmOverrideJoinColumnRelationshipStrategy; >@@ -305,4 +305,19 @@ > public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { > return this.getAssociationOverride2_0().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.strategy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmPrimaryKeyJoinColumn.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java 16 Feb 2012 16:54:02 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java 17 Feb 2012 22:14:52 -0000 >@@ -10,6 +10,7 @@ > package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; > > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.jpa.core.context.ReadOnlyPrimaryKeyJoinColumn; > import org.eclipse.jpt.jpa.core.context.XmlContextNode; > import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; >@@ -169,4 +170,28 @@ > public TextRange getReferencedColumnNameTextRange() { > return this.getValidationTextRange(this.xmlColumn.getReferencedColumnNameTextRange()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.referencedColumnNameTouches(pos)) { >+ return this.getCandidateReferencedColumnNames(); >+ } >+ return null; >+ } >+ >+ public boolean referencedColumnNameTouches(int pos) { >+ XmlPrimaryKeyJoinColumn column = this.getXmlColumn(); >+ return (column != null) && (column.referencedColumnNameTouches(pos)); >+ } >+ >+ protected Iterable<String> getCandidateReferencedColumnNames() { >+ Table table = this.owner.getReferencedColumnDbTable(); >+ return (table != null) ? table.getSortedColumnIdentifiers() : EmptyIterable.<String> instance(); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmReferenceTable.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java 10 Oct 2011 13:25:42 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java 17 Feb 2012 22:14:52 -0000 >@@ -261,4 +261,21 @@ > protected void validateJoinColumns(List<IMessage> messages, IReporter reporter) { > this.validateNodes(this.getJoinColumns(), messages, reporter); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmJoinColumn column : this.getJoinColumns()) { >+ result = column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java,v >retrieving revision 1.9 >diff -u -r1.9 GenericOrmSecondaryTable.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java 16 Feb 2012 16:54:02 -0000 1.9 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java 17 Feb 2012 22:14:52 -0000 >@@ -317,6 +317,22 @@ > } > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmPrimaryKeyJoinColumn column : this.getPrimaryKeyJoinColumns()) { >+ result = column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > > // ********** primary key join column owner adapter ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmTableGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmTableGenerator.java,v >retrieving revision 1.6 >diff -u -r1.6 GenericOrmTableGenerator.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmTableGenerator.java 21 Oct 2011 19:12:58 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmTableGenerator.java 17 Feb 2012 22:14:52 -0000 >@@ -450,4 +450,71 @@ > } > return isIdentical; > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmUniqueConstraint constraint : this.getUniqueConstraints()) { >+ result = constraint.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ /** >+ * called if the database is connected: >+ * table, schema, catalog, pkColumnName, valueColumnName >+ */ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.tableTouches(pos)) { >+ return this.getCandidateTables(); >+ } >+ if (this.pkColumnNameTouches(pos)) { >+ return this.getCandidateColumnNames(); >+ } >+ if (this.valueColumnNameTouches(pos)) { >+ return this.getCandidateColumnNames(); >+ } >+ return null; >+ } >+ >+ // ********** content assist: table >+ >+ protected boolean tableTouches(int pos) { >+ return this.xmlGenerator.tableTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateTables() { >+ Schema dbSchema = this.getDbSchema(); >+ return (dbSchema != null) ? dbSchema.getSortedTableIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: pkColumnName >+ >+ protected boolean pkColumnNameTouches(int pos) { >+ return this.xmlGenerator.pkColumnNameTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateColumnNames() { >+ Table table = this.getDbTable(); >+ return (table != null) ? table.getSortedColumnIdentifiers() : EmptyIterable.<String> instance(); >+ } >+ >+ // ********** content assist: valueColumnName >+ >+ protected boolean valueColumnNameTouches(int pos) { >+ return this.xmlGenerator.valueColumnNameTouches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmUniqueConstraint.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmUniqueConstraint.java,v >retrieving revision 1.3 >diff -u -r1.3 GenericOrmUniqueConstraint.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmUniqueConstraint.java 21 Oct 2011 19:12:58 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmUniqueConstraint.java 17 Feb 2012 22:14:52 -0000 >@@ -105,6 +105,28 @@ > return isIdentical; > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ protected Iterable<String> getConnectedXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getConnectedXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.columnNamesTouches(pos)) { >+ return this.getCandidateColumnNames(); >+ } >+ return null; >+ } >+ >+ protected boolean columnNamesTouches(int pos) { >+ return this.xmlUniqueConstraint.columnNamesTouches(pos); >+ } >+ >+ protected Iterable<String> getCandidateColumnNames() { >+ return this.owner.getCandidateUniqueConstraintColumnNames(); >+ } >+ > // ********** misc ********** > > @Override >Index: src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java,v >retrieving revision 1.22 >diff -u -r1.22 AbstractOrmElementCollectionMapping2_0.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java 16 Feb 2012 16:54:02 -0000 1.22 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java 17 Feb 2012 22:14:52 -0000 >@@ -1606,6 +1606,65 @@ > } > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.collectionTable.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.valueColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.converter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.orderable.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.valueAttributeOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.valueAssociationOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.mapKeyNameTouches(pos)) { >+ return this.getCandidateMapKeyNames(); >+ } >+ result = this.mapKeyColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapKeyConverter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.mapKeyAttributeOverrideContainer.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmJoinColumn joinColumn : this.getMapKeyJoinColumns()) { >+ result = joinColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } >+ >+ protected boolean mapKeyNameTouches(int pos) { >+ return this.xmlAttributeMapping.mapKeyNameTouches(pos); >+ } > > // ********** abstract owner ********** > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmDerivedIdentity2_0.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java 8 Jul 2011 15:53:14 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java 17 Feb 2012 22:14:52 -0000 >@@ -170,4 +170,21 @@ > public TextRange getValidationTextRange() { > return this.getMapping().getValidationTextRange(); > } >+ >+ // ************** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.strategy != null) { >+ result = ((XmlContextNode) this.strategy).getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlAttributeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlAttributeMapping.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractXmlAttributeMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlAttributeMapping.java 17 Jan 2012 13:22:37 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlAttributeMapping.java 17 Feb 2012 22:14:52 -0000 >@@ -279,4 +279,15 @@ > protected static Translator buildAccessTranslator() { > return new Translator(JPA.ACCESS, OrmPackage.eINSTANCE.getXmlAccessHolder_Access(), Translator.DOM_ATTRIBUTE); > } >+ >+ // *********** content assist ************ >+ >+ protected TextRange getNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.NAME); >+ } >+ >+ public boolean nameTouches(int pos) { >+ TextRange textRange = this.getNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlBaseColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlBaseColumn.java,v >retrieving revision 1.1 >diff -u -r1.1 AbstractXmlBaseColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlBaseColumn.java 17 Aug 2011 18:45:23 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlBaseColumn.java 17 Feb 2012 22:14:53 -0000 >@@ -533,4 +533,15 @@ > return new Translator(JPA.TABLE, OrmPackage.eINSTANCE.getXmlBaseColumn_Table(), Translator.DOM_ATTRIBUTE); > } > >+ // ************ content assist ************ >+ >+ private TextRange getTableCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.TABLE); >+ } >+ >+ public boolean tableTouches(int pos) { >+ TextRange textRange = this.getTableCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ > } // AbstractXmlAbstractColumn >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java,v >retrieving revision 1.3 >diff -u -r1.3 AbstractXmlMultiRelationshipMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java 25 Aug 2011 20:29:37 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlMultiRelationshipMapping.java 17 Feb 2012 22:14:53 -0000 >@@ -1123,4 +1123,24 @@ > protected static Translator buildOrderColumnTranslator() { > return XmlOrderColumn.buildTranslator(JPA2_0.ORDER_COLUMN, OrmV2_0Package.eINSTANCE.getXmlOrderable_2_0_OrderColumn()); > } >+ >+ // ********** content assist *************** >+ >+ public TextRange getMappedByCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.MAPPED_BY); >+ } >+ >+ public TextRange getMapKeyNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.MAP_KEY); >+ } >+ >+ public boolean mappedByTouches(int pos) { >+ TextRange textRange = this.getMappedByCodeAssistTextRange(); >+ return (textRange!= null) && textRange.touches(pos); >+ } >+ >+ public boolean mapKeyNameTouches(int pos) { >+ TextRange textRange = this.getMapKeyNameCodeAssistTextRange(); >+ return (textRange != null) && textRange.touches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlNamedColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlNamedColumn.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractXmlNamedColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlNamedColumn.java 16 Aug 2011 12:57:51 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlNamedColumn.java 17 Feb 2012 22:14:53 -0000 >@@ -274,4 +274,15 @@ > return new Translator(JPA.COLUMN_DEFINITION, OrmPackage.eINSTANCE.getXmlNamedColumn_ColumnDefinition(), Translator.DOM_ATTRIBUTE); > } > >+ // *********** content assist *********** >+ >+ public TextRange getColumnNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.NAME); >+ } >+ >+ public boolean columnNameTouches(int pos) { >+ TextRange textRange = this.getColumnNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ > } // AbstractXmlNamedColumn >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTable.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTable.java,v >retrieving revision 1.1 >diff -u -r1.1 AbstractXmlTable.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTable.java 6 Feb 2011 02:07:21 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTable.java 17 Feb 2012 22:14:53 -0000 >@@ -436,4 +436,32 @@ > return XmlUniqueConstraint.buildTranslator(JPA.UNIQUE_CONSTRAINT, OrmPackage.eINSTANCE.getAbstractXmlTable_UniqueConstraints()); > } > >+ //***************** content assist **************** >+ >+ public TextRange getNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.NAME); >+ } >+ >+ public TextRange getSchemaCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.SCHEMA); >+ } >+ >+ public TextRange getCatalogCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.CATALOG); >+ } >+ >+ public boolean nameTouches(int pos) { >+ TextRange textRange = this.getNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean schemaTouches(int pos) { >+ TextRange textRange = this.getSchemaCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean catalogTouches(int pos) { >+ TextRange textRange = this.getCatalogCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // AbstractXmlBaseTable >Index: src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTypeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTypeMapping.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractXmlTypeMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTypeMapping.java 17 Jan 2012 13:22:37 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/AbstractXmlTypeMapping.java 17 Feb 2012 22:14:53 -0000 >@@ -550,4 +550,14 @@ > return new ReplaceEdit(offset, packageLength, newName); > } > >+ // *********** content assist ************ >+ >+ protected TextRange getClassNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.CLASS); >+ } >+ >+ public boolean classNameTouches(int pos) { >+ TextRange textRange = this.getClassNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // TypeMapping >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlAssociationOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlAssociationOverride.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlAssociationOverride.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlAssociationOverride.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlAssociationOverride.java 17 Feb 2012 22:14:53 -0000 >@@ -518,4 +518,14 @@ > protected static Translator buildJoinTableTranslator() { > return XmlJoinTable.buildTranslator(JPA.JOIN_TABLE, OrmPackage.eINSTANCE.getXmlJoinTableContainer_JoinTable()); > } >+ >+ // ************ content assist *********** >+ public TextRange getNameTextCodeAssistRange() { >+ return getAttributeCodeAssistTextRange(JPA.NAME); >+ } >+ >+ public boolean nameTouches(int pos) { >+ TextRange textRange = this.getNameTextCodeAssistRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeMapping.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlAttributeMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeMapping.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeMapping.java 17 Feb 2012 22:14:53 -0000 >@@ -67,4 +67,5 @@ > //TODO unsure about this api, might change soon > String getMappingKey(); > >+ boolean nameTouches(int pos); > } // XmlAttributeMapping >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeOverride.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlAttributeOverride.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeOverride.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlAttributeOverride.java 17 Feb 2012 22:14:53 -0000 >@@ -437,4 +437,15 @@ > protected static Translator buildColumnTranslator() { > return XmlColumn.buildTranslator(JPA.COLUMN, OrmPackage.eINSTANCE.getXmlAttributeOverride_Column()); > } >+ >+ // ************* content assist ************ >+ >+ public TextRange getNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.NAME); >+ } >+ >+ public boolean nameTouches(int pos) { >+ TextRange textRange = this.getNameTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlBaseColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlBaseColumn.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlBaseColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlBaseColumn.java 17 Aug 2011 18:45:23 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlBaseColumn.java 17 Feb 2012 22:14:53 -0000 >@@ -172,4 +172,6 @@ > > TextRange getTableTextRange(); > >+ boolean tableTouches(int pos); >+ > } // XmlBaseColumn >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java,v >retrieving revision 1.3 >diff -u -r1.3 XmlElementCollection.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java 25 Aug 2011 20:29:37 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlElementCollection.java 17 Feb 2012 22:14:53 -0000 >@@ -1684,4 +1684,15 @@ > return getMapKeyClass().createRenamePackageEdit(newName); > } > >+ // ********** content assist *************** >+ >+ public TextRange getMapKeyNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.MAP_KEY); >+ } >+ >+ public boolean mapKeyNameTouches(int pos) { >+ TextRange textRange = this.getMapKeyNameCodeAssistTextRange(); >+ return (textRange != null) && textRange.touches(pos); >+ } >+ > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlEntityMappings.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlEntityMappings.java,v >retrieving revision 1.2 >diff -u -r1.2 XmlEntityMappings.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlEntityMappings.java 17 Jan 2012 13:22:37 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlEntityMappings.java 17 Feb 2012 22:14:54 -0000 >@@ -23,6 +23,7 @@ > import org.eclipse.emf.ecore.util.EObjectContainmentEList; > import org.eclipse.emf.ecore.util.InternalEList; > import org.eclipse.jpt.common.core.internal.utility.translators.SimpleRootTranslator; >+import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.common.utility.internal.CollectionTools; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.JPA2_0; > import org.eclipse.jpt.jpa.core.resource.xml.AbstractJpaRootEObject; >@@ -1116,4 +1117,21 @@ > return new ReplaceEdit(offset, this.package_.length(), newName); > } > >+ // *********** content assist ********* >+ >+ public boolean schemaTouches(int pos) { >+ TextRange textRange = this.getElementCodeAssistTextRange(JPA.SCHEMA); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean catalogTouches(int pos) { >+ TextRange textRange = this.getElementCodeAssistTextRange(JPA.CATALOG); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean packageTouches(int pos) { >+ TextRange textRange = this.getElementCodeAssistTextRange(JPA.PACKAGE); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlGeneratedValue.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlGeneratedValue.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlGeneratedValue.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlGeneratedValue.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlGeneratedValue.java 17 Feb 2012 22:14:54 -0000 >@@ -300,4 +300,14 @@ > protected static Translator buildGeneratorTranslator() { > return new Translator(JPA.GENERATOR, OrmPackage.eINSTANCE.getXmlGeneratedValue_Generator(), Translator.DOM_ATTRIBUTE); > } >+ >+ // *********** content assist ************ >+ >+ protected TextRange getGeneratorCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.GENERATOR); >+ } >+ public boolean generatorTouches(int pos) { >+ TextRange textRange = this.getGeneratorCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // GeneratedValue >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlGenerator.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlGenerator.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlGenerator.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlGenerator.java 17 Feb 2012 22:14:54 -0000 >@@ -116,5 +116,13 @@ > */ > void setAllocationSize(Integer value); > >- public TextRange getNameTextRange(); >+ TextRange getNameTextRange(); >+ >+ TextRange getSchemaCodeAssistTextRange(); >+ >+ TextRange getCatalogCodeAssistTextRange(); >+ >+ boolean schemaTouches(int pos); >+ >+ boolean catalogTouches(int pos); > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlJoinColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlJoinColumn.java,v >retrieving revision 1.3 >diff -u -r1.3 XmlJoinColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlJoinColumn.java 17 Aug 2011 18:45:23 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlJoinColumn.java 17 Feb 2012 22:14:54 -0000 >@@ -263,4 +263,15 @@ > protected static Translator buildReferencedColumnNameTranslator() { > return new Translator(JPA.REFERENCED_COLUMN_NAME, OrmPackage.eINSTANCE.getXmlBaseJoinColumn_ReferencedColumnName(), Translator.DOM_ATTRIBUTE); > } >+ >+ // ************ content assist ************** >+ >+ public TextRange getReferencedColumnNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.REFERENCED_COLUMN_NAME); >+ } >+ >+ public boolean referencedColumnNameTouches(int pos) { >+ TextRange textRange = this.getReferencedColumnNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // JoinColumn >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlMappedByMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlMappedByMapping.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlMappedByMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlMappedByMapping.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlMappedByMapping.java 17 Feb 2012 22:14:54 -0000 >@@ -64,5 +64,7 @@ > */ > void setMappedBy(String value); > >- TextRange getMappedByTextRange(); >+ TextRange getMappedByTextRange(); >+ >+ boolean mappedByTouches(int pos); > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlNamedColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlNamedColumn.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlNamedColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlNamedColumn.java 16 Aug 2011 12:57:51 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlNamedColumn.java 17 Feb 2012 22:14:54 -0000 >@@ -92,4 +92,6 @@ > > TextRange getNameTextRange(); > >+ boolean columnNameTouches(int pos); >+ > } // XmlNamedColumn >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlOneToOne.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlOneToOne.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlOneToOne.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlOneToOne.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlOneToOne.java 17 Feb 2012 22:14:54 -0000 >@@ -464,4 +464,15 @@ > protected static Translator buildPrimaryKeyJoinColumnTranslator() { > return XmlPrimaryKeyJoinColumn.buildTranslator(JPA.PRIMARY_KEY_JOIN_COLUMN, OrmPackage.eINSTANCE.getXmlPrimaryKeyJoinColumnContainer_PrimaryKeyJoinColumns()); > } >+ >+ // ********** content assist *************** >+ >+ public TextRange getMappedByCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.MAPPED_BY); >+ } >+ >+ public boolean mappedByTouches(int pos) { >+ TextRange textRange = this.getMappedByCodeAssistTextRange(); >+ return (textRange!= null) && textRange.touches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlOverride.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlOverride.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlOverride.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlOverride.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlOverride.java 17 Feb 2012 22:14:54 -0000 >@@ -64,4 +64,6 @@ > void setName(String value); > > TextRange getNameTextRange(); >+ >+ boolean nameTouches(int pos); > } // XmlOverride >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlPersistenceUnitDefaults.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlPersistenceUnitDefaults.java,v >retrieving revision 1.2 >diff -u -r1.2 XmlPersistenceUnitDefaults.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlPersistenceUnitDefaults.java 17 Jan 2012 13:22:37 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlPersistenceUnitDefaults.java 17 Feb 2012 22:14:54 -0000 >@@ -17,6 +17,7 @@ > import org.eclipse.emf.ecore.impl.ENotificationImpl; > import org.eclipse.jpt.common.core.internal.utility.translators.EmptyTagBooleanTranslator; > import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >+import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.JPA2_0; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.OrmV2_0Package; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.XmlPersistenceUnitDefaults_2_0; >@@ -726,4 +727,16 @@ > protected static Translator buildEntityListenersTranslator() { > return EntityListeners.buildTranslator(JPA.ENTITY_LISTENERS, OrmPackage.eINSTANCE.getXmlPersistenceUnitDefaults_EntityListeners()); > } >+ >+ // *********** content assist ********* >+ >+ public boolean schemaTouches(int pos) { >+ TextRange textRange = this.getElementCodeAssistTextRange(JPA.SCHEMA); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean catalogTouches(int pos) { >+ TextRange textRange = this.getElementCodeAssistTextRange(JPA.CATALOG); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlPrimaryKeyJoinColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlPrimaryKeyJoinColumn.java,v >retrieving revision 1.2 >diff -u -r1.2 XmlPrimaryKeyJoinColumn.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlPrimaryKeyJoinColumn.java 16 Aug 2011 12:57:51 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlPrimaryKeyJoinColumn.java 17 Feb 2012 22:14:54 -0000 >@@ -259,4 +259,15 @@ > return new Translator(JPA.REFERENCED_COLUMN_NAME, OrmPackage.eINSTANCE.getXmlBaseJoinColumn_ReferencedColumnName(), Translator.DOM_ATTRIBUTE); > } > >+ // *********** content assist *********** >+ >+ public TextRange getReferencedColumnNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.REFERENCED_COLUMN_NAME); >+ } >+ >+ public boolean referencedColumnNameTouches(int pos) { >+ TextRange textRange = this.getReferencedColumnNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ > } // XmlPrimaryKeyJoinColumnImpl >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlSequenceGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlSequenceGenerator.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlSequenceGenerator.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlSequenceGenerator.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlSequenceGenerator.java 17 Feb 2012 22:14:54 -0000 >@@ -699,4 +699,33 @@ > protected static Translator buildSchemaTranslator() { > return new Translator(JPA.SCHEMA, OrmV2_0Package.eINSTANCE.getXmlSequenceGenerator_2_0_Schema(), Translator.DOM_ATTRIBUTE); > } >+ >+ // *********** content assist **************** >+ >+ public TextRange getSequenceNameCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.SEQUENCE_NAME); >+ } >+ >+ public TextRange getSchemaCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.SCHEMA); >+ } >+ >+ public TextRange getCatalogCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.CATALOG); >+ } >+ >+ public boolean sequenceNameTouches(int pos) { >+ TextRange textRange = this.getSequenceNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean schemaTouches(int pos) { >+ TextRange textRange = this.getSchemaCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean catalogTouches(int pos) { >+ TextRange textRange = this.getCatalogCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlTableGenerator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlTableGenerator.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlTableGenerator.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlTableGenerator.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlTableGenerator.java 17 Feb 2012 22:14:54 -0000 >@@ -944,4 +944,51 @@ > protected static Translator buildDescriptionTranslator() { > return new Translator(JPA.DESCRIPTION, OrmV2_0Package.eINSTANCE.getXmlGenerator_2_0_Description()); > } >+ >+ // ************* content assist *************** >+ >+ public TextRange getTableCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.TABLE); >+ } >+ >+ public TextRange getSchemaCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.SCHEMA); >+ } >+ >+ public TextRange getCatalogCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.CATALOG); >+ } >+ >+ public TextRange getPKColumnNameTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.PK_COLUMN_NAME); >+ } >+ >+ public TextRange getValueColumnNameTextRange() { >+ return getAttributeCodeAssistTextRange(JPA.VALUE_COLUMN_NAME); >+ } >+ >+ public boolean tableTouches(int pos) { >+ TextRange textRange = this.getTableCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean schemaTouches(int pos) { >+ TextRange textRange = this.getSchemaCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean catalogTouches(int pos) { >+ TextRange textRange = this.getCatalogCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean pkColumnNameTouches(int pos) { >+ TextRange textRange = this.getPKColumnNameTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } >+ >+ public boolean valueColumnNameTouches(int pos) { >+ TextRange textRange = this.getValueColumnNameTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlTypeMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlTypeMapping.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlTypeMapping.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlTypeMapping.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlTypeMapping.java 17 Feb 2012 22:14:54 -0000 >@@ -161,4 +161,7 @@ > > ReplaceEdit createRenamePackageEdit(String newName); > >+ // ********** content assist ********* >+ >+ boolean classNameTouches(int pos); > } // XmlTypeMapping >Index: src/org/eclipse/jpt/jpa/core/resource/orm/XmlUniqueConstraint.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/orm/XmlUniqueConstraint.java,v >retrieving revision 1.1 >diff -u -r1.1 XmlUniqueConstraint.java >--- src/org/eclipse/jpt/jpa/core/resource/orm/XmlUniqueConstraint.java 6 Feb 2011 02:07:20 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/core/resource/orm/XmlUniqueConstraint.java 17 Feb 2012 22:14:54 -0000 >@@ -17,6 +17,7 @@ > import org.eclipse.emf.ecore.impl.ENotificationImpl; > import org.eclipse.emf.ecore.util.EDataTypeEList; > import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >+import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.OrmV2_0Package; > import org.eclipse.jpt.jpa.core.resource.orm.v2_0.XmlUniqueConstraint_2_0; > import org.eclipse.jpt.jpa.core.resource.xml.AbstractJpaEObject; >@@ -271,4 +272,15 @@ > protected static Translator buildColumnNameTranslator() { > return new Translator(JPA.COLUMN_NAME, OrmPackage.eINSTANCE.getXmlUniqueConstraint_ColumnNames()); > } >+ >+ // ************ content assist ********** >+ >+ protected TextRange getColumnNameCodeAssistTextRange() { >+ return this.getElementCodeAssistTextRange(JPA.COLUMN_NAME); >+ } >+ >+ public boolean columnNamesTouches(int pos) { >+ TextRange textRange = getColumnNameCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/core/resource/xml/AbstractJpaEObject.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/resource/xml/AbstractJpaEObject.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractJpaEObject.java >--- src/org/eclipse/jpt/jpa/core/resource/xml/AbstractJpaEObject.java 8 Jul 2011 15:54:51 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/resource/xml/AbstractJpaEObject.java 17 Feb 2012 22:14:55 -0000 >@@ -260,6 +260,55 @@ > } > > >+ // ********** content assist ********** >+ >+ /** >+ * Return a text range for the specified attribute node. >+ * If the attribute node does not exist, return null >+ * >+ * This is used for content assist to return the exact text range of an attribute. >+ * It is different from the text range used by validation which returns >+ * the parent's text range if the specified attribute node does not exist >+ */ >+ protected TextRange getAttributeCodeAssistTextRange(String attributeName) { >+ IDOMNode attributeNode = this.getAttributeNode(attributeName); >+ return (attributeNode != null) ? this.buildTextRange(attributeNode) : null; >+ } >+ >+ /** >+ * Return a text range for the specified element node. >+ * If the element node does not exist, return null >+ * >+ * This is used for content assist to return the exact text range of an element. >+ * It is different from the text range used by validation which returns >+ * the parent's text range if the specified element node does not exist >+ */ >+ protected TextRange getElementCodeAssistTextRange(String elementName) { >+ IDOMNode elementNode = this.getElementNode(elementName); >+ return (elementNode != null) ? this.buildElementCodeAssistTextRange(elementNode) : null; >+ } >+ >+ protected TextRange buildElementCodeAssistTextRange(IDOMNode domNode) { >+ return (domNode == null) ? null : this.buildElementCodeAssistTextRange(domNode, null); >+ } >+ >+ protected TextRange buildElementCodeAssistTextRange(IDOMNode domNode, TextRange textRange) { >+ return (domNode == null) ? null : this.buildElementCodeAssistTextRange_(domNode, textRange); >+ } >+ /** >+ * pre-condition: the specified DOM node is not <code>null</code> >+ */ >+ protected TextRange buildElementCodeAssistTextRange_(IDOMNode domNode, TextRange textRange) { >+ int offset = domNode.getStartOffset(); >+ int length = (domNode.getNodeType() == Node.ELEMENT_NODE) ? >+ (((IDOMElement) domNode).getEndStartOffset() - offset) : >+ domNode.getLength(); >+ int lineNumber = domNode.getStructuredDocument().getLineOfOffset(offset) + 1; >+ return (textRange == null) ? >+ new SimpleTextRange(offset, length, lineNumber) : >+ textRange.buildTextRange(offset, length, lineNumber); >+ } >+ > // ********** Refactoring TextEdits ********** > > public DeleteEdit createDeleteEdit() { >#P org.eclipse.jpt.jpa.eclipselink.core >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkConvert.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkConvert.java,v >retrieving revision 1.10 >diff -u -r1.10 JavaEclipseLinkConvert.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkConvert.java 5 Dec 2011 17:49:03 -0000 1.10 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkConvert.java 17 Feb 2012 22:14:58 -0000 >@@ -9,10 +9,12 @@ > ******************************************************************************/ > package org.eclipse.jpt.jpa.eclipselink.core.internal.context.java; > >+import java.util.Arrays; > import org.eclipse.jdt.core.dom.CompilationUnit; > import org.eclipse.jpt.common.core.resource.java.Annotation; > import org.eclipse.jpt.common.utility.Filter; > import org.eclipse.jpt.common.utility.internal.StringTools; >+import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; > import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; > import org.eclipse.jpt.jpa.core.JpaFactory; > import org.eclipse.jpt.jpa.core.context.Converter; >@@ -141,8 +143,15 @@ > return new FilteringIterable<String>(this.getConverterNames(), filter); > } > >+ /** >+ * @return names of the user-defined converters and of reserved converters >+ */ >+ @SuppressWarnings("unchecked") > protected Iterable<String> getConverterNames() { >- return this.getPersistenceUnit().getUniqueConverterNames(); >+ return new CompositeIterable<String>( >+ this.getPersistenceUnit().getUniqueConverterNames(), >+ Arrays.asList(EclipseLinkConvert.RESERVED_CONVERTER_NAMES) >+ ); > } > > @Override >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmTenantDiscriminatorColumn2_3.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmTenantDiscriminatorColumn2_3.java,v >retrieving revision 1.1 >diff -u -r1.1 EclipseLinkOrmTenantDiscriminatorColumn2_3.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmTenantDiscriminatorColumn2_3.java 7 Oct 2011 12:52:48 -0000 1.1 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmTenantDiscriminatorColumn2_3.java 17 Feb 2012 22:14:58 -0000 >@@ -249,4 +249,22 @@ > protected NamedColumnTextRangeResolver buildTextRangeResolver() { > return new OrmTableColumnTextRangeResolver(this); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.tableTouches(pos)) { >+ return this.getCandidateTableNames(); >+ } >+ return null; >+ } >+ >+ protected boolean tableTouches(int pos) { >+ return this.xmlTenantDiscriminatorColumn.tableTouches(pos); >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java,v >retrieving revision 1.2 >diff -u -r1.2 OrmEclipseLinkArrayMapping2_3.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java 17 Feb 2012 14:18:02 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkArrayMapping2_3.java 17 Feb 2012 22:14:58 -0000 >@@ -321,4 +321,23 @@ > public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { > return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (TableColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.column.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.converter.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConvert.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConvert.java,v >retrieving revision 1.7 >diff -u -r1.7 OrmEclipseLinkConvert.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConvert.java 5 Dec 2011 17:49:03 -0000 1.7 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkConvert.java 17 Feb 2012 22:14:58 -0000 >@@ -9,7 +9,9 @@ > ******************************************************************************/ > package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; > >+import java.util.Arrays; > import org.eclipse.jpt.common.core.utility.TextRange; >+import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; > import org.eclipse.jpt.jpa.core.context.Converter; > import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; > import org.eclipse.jpt.jpa.core.context.orm.OrmConverter; >@@ -116,6 +118,33 @@ > return this.getXmlConvertibleMapping().getConvertTextRange(); > } > >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ if (this.convertValueTouches(pos)) { >+ return this.getConverterNames(); >+ } >+ return null; >+ } >+ >+ protected boolean convertValueTouches(int pos) { >+ return this.getXmlConvertibleMapping().convertTouches(pos); >+ } >+ >+ /** >+ * @return names of the user-defined converters and of reserved converters >+ */ >+ @SuppressWarnings("unchecked") >+ protected Iterable<String> getConverterNames() { >+ return new CompositeIterable<String>( >+ this.getPersistenceUnit().getUniqueConverterNames(), >+ Arrays.asList(EclipseLinkConvert.RESERVED_CONVERTER_NAMES)); >+ } > > // ********** adapter ********** > >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java,v >retrieving revision 1.12 >diff -u -r1.12 OrmEclipseLinkEntityImpl.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java 17 Feb 2012 14:18:03 -0000 1.12 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java 17 Feb 2012 22:14:58 -0000 >@@ -435,4 +435,20 @@ > protected boolean isDynamicType() { > return this.getPersistentType().isDynamic(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.multitenancy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } >+ > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java,v >retrieving revision 1.11 >diff -u -r1.11 OrmEclipseLinkMappedSuperclassImpl.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java 17 Feb 2012 14:18:02 -0000 1.11 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java 17 Feb 2012 22:14:58 -0000 >@@ -382,4 +382,19 @@ > protected boolean isDynamicType() { > return this.getPersistentType().isDynamic(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ result = this.multitenancy.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java,v >retrieving revision 1.10 >diff -u -r1.10 OrmEclipseLinkMultitenancyImpl2_3.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java 21 Dec 2011 21:07:02 -0000 1.10 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java 17 Feb 2012 22:14:58 -0000 >@@ -775,4 +775,21 @@ > XmlMultitenant_2_4 xmlMultitenant = this.getXmlMultitenant(); > return (xmlMultitenant == null) ? null : xmlMultitenant.getValidationTextRange(); > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn : this.getSpecifiedTenantDiscriminatorColumns()) { >+ result = tenantDiscriminatorColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java,v >retrieving revision 1.7 >diff -u -r1.7 OrmEclipseLinkPersistenceUnitDefaults.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java 20 Jan 2012 19:34:34 -0000 1.7 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java 17 Feb 2012 22:14:58 -0000 >@@ -15,8 +15,8 @@ > import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; > import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; > import org.eclipse.jpt.jpa.core.context.DiscriminatorType; >-import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedDiscriminatorColumn; > import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; >+import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedDiscriminatorColumn; > import org.eclipse.jpt.jpa.core.context.orm.OrmPersistenceUnitMetadata; > import org.eclipse.jpt.jpa.core.internal.context.JptValidator; > import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; >@@ -354,4 +354,21 @@ > this.removeXmlDefaultsIfUnset(); > } > } >+ >+ // ********** completion proposals ********** >+ >+ @Override >+ public Iterable<String> getXmlCompletionProposals(int pos) { >+ Iterable<String> result = super.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ for (OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn : this.getTenantDiscriminatorColumns()) { >+ result = tenantDiscriminatorColumn.getXmlCompletionProposals(pos); >+ if (result != null) { >+ return result; >+ } >+ } >+ return null; >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java,v >retrieving revision 1.4 >diff -u -r1.4 XmlArray.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java 17 Feb 2012 14:18:03 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlArray.java 17 Feb 2012 22:14:59 -0000 >@@ -1289,4 +1289,15 @@ > protected static Translator buildAttributeTypeTranslator() { > return new Translator(EclipseLink2_3.ARRAY__ATTRIBUTE_TYPE, EclipseLinkOrmV2_3Package.eINSTANCE.getXmlArray_2_3_AttributeType(), Translator.DOM_ATTRIBUTE); > } >+ >+ // *********** content assist ************ >+ >+ protected TextRange getConvertCodeAssistTextRange() { >+ return getElementCodeAssistTextRange(EclipseLink.CONVERT); >+ } >+ >+ public boolean convertTouches(int pos) { >+ TextRange textRange = this.getConvertCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // XmlArray >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java,v >retrieving revision 1.4 >diff -u -r1.4 XmlBasic.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java 17 Feb 2012 14:18:03 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlBasic.java 17 Feb 2012 22:14:59 -0000 >@@ -1551,4 +1551,14 @@ > return new Translator(EclipseLink2_1.ATTRIBUTE_TYPE, EclipseLinkOrmV2_1Package.eINSTANCE.getXmlBasic_2_1_AttributeType(), Translator.DOM_ATTRIBUTE); > } > >+ // *********** content assist ************ >+ >+ protected TextRange getConvertCodeAssistTextRange() { >+ return getElementCodeAssistTextRange(EclipseLink.CONVERT); >+ } >+ >+ public boolean convertTouches(int pos) { >+ TextRange textRange = this.getConvertCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConvertibleMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConvertibleMapping.java,v >retrieving revision 1.2 >diff -u -r1.2 XmlConvertibleMapping.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConvertibleMapping.java 5 Dec 2011 17:49:03 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlConvertibleMapping.java 17 Feb 2012 22:14:59 -0000 >@@ -74,4 +74,6 @@ > */ > TextRange getConvertTextRange(); > >+ boolean convertTouches(int pos); >+ > } // XmlConvertibleMapping >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java,v >retrieving revision 1.6 >diff -u -r1.6 XmlElementCollection.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java 17 Feb 2012 14:18:03 -0000 1.6 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlElementCollection.java 17 Feb 2012 22:14:59 -0000 >@@ -2305,4 +2305,14 @@ > return new EmptyTagBooleanTranslator(EclipseLink2_4.DELETE_ALL, EclipseLinkOrmV2_4Package.eINSTANCE.getXmlElementCollection_2_4_DeleteAll()); > } > >+ // *********** content assist ************ >+ >+ protected TextRange getConvertCodeAssistTextRange() { >+ return getElementCodeAssistTextRange(EclipseLink.CONVERT); >+ } >+ >+ public boolean convertTouches(int pos) { >+ TextRange textRange = this.getConvertCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java,v >retrieving revision 1.5 >diff -u -r1.5 XmlId.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java 17 Feb 2012 14:18:03 -0000 1.5 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlId.java 17 Feb 2012 22:15:00 -0000 >@@ -20,6 +20,8 @@ > import org.eclipse.emf.ecore.impl.ENotificationImpl; > import org.eclipse.emf.ecore.util.EObjectContainmentEList; > import org.eclipse.emf.ecore.util.InternalEList; >+import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >+import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.jpa.core.resource.orm.JPA; > import org.eclipse.jpt.jpa.core.resource.orm.OrmPackage; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.EclipseLink2_1; >@@ -33,8 +35,6 @@ > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_4.EclipseLinkOrmV2_4Package; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_4.XmlCacheIndex_2_4; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_4.XmlId_2_4; >-import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >-import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.wst.common.internal.emf.resource.Translator; > > /** >@@ -1113,4 +1113,14 @@ > return XmlTableGenerator.buildTranslator(JPA.TABLE_GENERATOR, OrmPackage.eINSTANCE.getXmlGeneratorContainer_TableGenerator()); > } > >+ // *********** content assist ************ >+ >+ protected TextRange getConvertCodeAssistTextRange() { >+ return getElementCodeAssistTextRange(EclipseLink.CONVERT); >+ } >+ >+ public boolean convertTouches(int pos) { >+ TextRange textRange = this.getConvertCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTenantDiscriminatorColumn.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTenantDiscriminatorColumn.java,v >retrieving revision 1.4 >diff -u -r1.4 XmlTenantDiscriminatorColumn.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTenantDiscriminatorColumn.java 14 Sep 2011 19:39:15 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlTenantDiscriminatorColumn.java 17 Feb 2012 22:15:00 -0000 >@@ -401,4 +401,14 @@ > protected static Translator buildPrimaryKeyTranslator() { > return new Translator(EclipseLink2_3.TENANT_DISCRIMINATOR_COLUMN__PRIMARY_KEY, EclipseLinkOrmV2_3Package.eINSTANCE.getXmlTenantDiscriminatorColumn_2_3_PrimaryKey(), Translator.DOM_ATTRIBUTE); > } >+ // *********** content assist *********** >+ >+ public TextRange getTableCodeAssistTextRange() { >+ return getAttributeCodeAssistTextRange(EclipseLink2_3.TENANT_DISCRIMINATOR_COLUMN__TABLE); >+ } >+ >+ public boolean tableTouches(int pos) { >+ TextRange textRange = this.getTableCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } // XmlTenantDiscriminator >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java,v >retrieving revision 1.3 >diff -u -r1.3 XmlVersion.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java 17 Feb 2012 14:18:03 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlVersion.java 17 Feb 2012 22:15:00 -0000 >@@ -20,6 +20,8 @@ > import org.eclipse.emf.ecore.impl.ENotificationImpl; > import org.eclipse.emf.ecore.util.EObjectContainmentEList; > import org.eclipse.emf.ecore.util.InternalEList; >+import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >+import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.EclipseLink2_1; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.EclipseLinkOrmV2_1Package; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.XmlVersion_2_1; >@@ -27,8 +29,6 @@ > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_2.EclipseLinkOrmV2_2Package; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_2.XmlIndex_2_2; > import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_2.XmlVersion_2_2; >-import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator; >-import org.eclipse.jpt.common.core.utility.TextRange; > import org.eclipse.wst.common.internal.emf.resource.Translator; > > /** >@@ -992,4 +992,14 @@ > return new Translator(EclipseLink2_1.ATTRIBUTE_TYPE, EclipseLinkOrmV2_1Package.eINSTANCE.getXmlVersion_2_1_AttributeType(), Translator.DOM_ATTRIBUTE); > } > >+ // *********** content assist ************ >+ >+ protected TextRange getConvertCodeAssistTextRange() { >+ return getElementCodeAssistTextRange(EclipseLink.CONVERT); >+ } >+ >+ public boolean convertTouches(int pos) { >+ TextRange textRange = this.getConvertCodeAssistTextRange(); >+ return (textRange != null) && (textRange.touches(pos)); >+ } > } >Index: src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_3/XmlTenantDiscriminatorColumn_2_3.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_3/XmlTenantDiscriminatorColumn_2_3.java,v >retrieving revision 1.4 >diff -u -r1.4 XmlTenantDiscriminatorColumn_2_3.java >--- src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_3/XmlTenantDiscriminatorColumn_2_3.java 14 Sep 2011 19:39:15 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_3/XmlTenantDiscriminatorColumn_2_3.java 17 Feb 2012 22:15:00 -0000 >@@ -113,4 +113,6 @@ > void setPrimaryKey(Boolean value); > > TextRange getTableTextRange(); >+ >+ boolean tableTouches(int pos); > } // XmlTenantDiscriminator2_3 >#P org.eclipse.jpt.jpa.ui >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui/META-INF/MANIFEST.MF,v >retrieving revision 1.7 >diff -u -r1.7 MANIFEST.MF >--- META-INF/MANIFEST.MF 10 Feb 2012 20:48:57 -0000 1.7 >+++ META-INF/MANIFEST.MF 17 Feb 2012 22:15:02 -0000 >@@ -41,9 +41,12 @@ > org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)", > org.eclipse.wst.common.frameworks.ui;bundle-version="[1.1.200,2.0.0)", > org.eclipse.wst.common.project.facet.ui;bundle-version="[1.3.0,2.0.0)", >+ org.eclipse.wst.sse.core;bundle-version="[1.1.700,2.0.0)", > org.eclipse.wst.sse.ui;bundle-version="[1.1.0,2.0.0)", > org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)", >- org.eclipse.wst.web.ui;bundle-version="[1.1.200,2.0.0)" >+ org.eclipse.wst.web.ui;bundle-version="[1.1.200,2.0.0)", >+ org.eclipse.wst.xml.core;bundle-version="[1.1.700,2.0.0)", >+ org.eclipse.wst.xml.ui;bundle-version="[1.1.300,2.0.0)" > Export-Package: org.eclipse.jpt.jpa.ui, > org.eclipse.jpt.jpa.ui.details, > org.eclipse.jpt.jpa.ui.details.java, >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui/plugin.xml,v >retrieving revision 1.11 >diff -u -r1.11 plugin.xml >--- plugin.xml 15 Feb 2012 16:58:34 -0000 1.11 >+++ plugin.xml 17 Feb 2012 22:15:02 -0000 >@@ -170,6 +170,27 @@ > > </extension> > >+ <extension >+ id="org.eclipse.jpt.jpa.ui.xml.xmlCompletionProposal" >+ point="org.eclipse.wst.sse.ui.completionProposal"> >+ >+ <proposalCategory >+ icon="$nl$/icons/full/eview16/jpa_perspective.gif" >+ id="org.eclipse.jpt.jpa.ui.xml.xmlProposalCategory" >+ name="%JpaProposalCategory"> >+ </proposalCategory> >+ >+ <proposalComputer >+ activate="true" >+ categoryId="org.eclipse.jpt.jpa.ui.xml.xmlProposalCategory" >+ class="org.eclipse.jpt.jpa.ui.internal.JpaXmlCompletionProposalComputer" >+ id="org.eclipse.jpt.jpa.ui.internal.JpaXmlCompletionProposalComputer"> >+ <contentType >+ id="org.eclipse.core.runtime.xml"> >+ </contentType> >+ </proposalComputer> >+ >+ </extension> > > <!-- ***** Dali extensions (eat our own dogfood) ***** --> > >Index: src/org/eclipse/jpt/jpa/ui/internal/AbstractJpaXmlCompletionProposalComputer.java >=================================================================== >RCS file: src/org/eclipse/jpt/jpa/ui/internal/AbstractJpaXmlCompletionProposalComputer.java >diff -N src/org/eclipse/jpt/jpa/ui/internal/AbstractJpaXmlCompletionProposalComputer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jpt/jpa/ui/internal/AbstractJpaXmlCompletionProposalComputer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,1097 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 IBM Corporation and others. >+ * 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 >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ * >+ *******************************************************************************/ >+package org.eclipse.jpt.jpa.ui.internal; >+ >+import java.util.ArrayList; >+import java.util.Arrays; >+import java.util.Collections; >+import java.util.Iterator; >+import java.util.List; >+import java.util.Properties; >+import java.util.Vector; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.jface.text.BadLocationException; >+import org.eclipse.jface.text.ITextViewer; >+import org.eclipse.jface.text.contentassist.ICompletionProposal; >+import org.eclipse.wst.sse.core.StructuredModelManager; >+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; >+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; >+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; >+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; >+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; >+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; >+import org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext; >+import org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer; >+import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; >+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; >+import org.eclipse.wst.xml.ui.internal.Logger; >+import org.eclipse.wst.xml.ui.internal.XMLUIMessages; >+import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; >+import org.w3c.dom.Document; >+import org.w3c.dom.Node; >+import org.w3c.dom.NodeList; >+ >+/** >+ * <p>Implements the framework for making proposals in XML type documents. Deals with >+ * all the nastiness needed to figure out where in an XML type document the content >+ * assist was invoked and then calls one of many abstract methods depending on the >+ * area the content assist was invoked. In this way implementers only have to worry about >+ * implementing what to do in each situation while not having to deal with figuring out >+ * which situation the content assist was invoked in.</p> >+ * >+ * @base org.eclipse.wst.xml.ui.internal.contentassist.AbstractContentAssistProcessor >+ * @see DefaultJpaXmlCompletionProposalComputer >+ * >+ * The code of this class was copied from AbstractXMLCompletionProposalComputer and modified according to >+ * the needs of the XML content assist of Dali. This class can be removed after bug 371939 is addressed. >+ */ >+ >+public abstract class AbstractJpaXmlCompletionProposalComputer implements ICompletionProposalComputer { >+ >+ private String fErrorMessage; >+ private ITextViewer fTextViewer; >+ >+ public AbstractJpaXmlCompletionProposalComputer() { >+ fErrorMessage = null; >+ fTextViewer = null; >+ } >+ >+ /** >+ * <p>Return a list of proposed code completions based on the specified >+ * location within the document that corresponds to the current cursor >+ * position within the text-editor control.</p> >+ * >+ * @see org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext, org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public List<ICompletionProposal> computeCompletionProposals( >+ CompletionProposalInvocationContext context, >+ IProgressMonitor monitor) { >+ >+ ITextViewer textViewer = context.getViewer(); >+ int documentPosition = context.getInvocationOffset(); >+ >+ setErrorMessage(null); >+ >+ fTextViewer = textViewer; >+ >+ IndexedRegion treeNode = ContentAssistUtils.getNodeAt(textViewer, documentPosition); >+ >+ Node node = (Node) treeNode; >+ while ((node != null) && (node.getNodeType() == Node.TEXT_NODE) && (node.getParentNode() != null)) { >+ node = node.getParentNode(); >+ } >+ IDOMNode xmlnode = (IDOMNode) node; >+ >+ ContentAssistRequest contentAssistRequest = null; >+ >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ ITextRegion completionRegion = getCompletionRegion(documentPosition, node); >+ >+ String matchString = null; >+ try { >+ matchString = getMatchString(sdRegion, completionRegion, documentPosition); >+ } catch (BadLocationException e) { >+ e.printStackTrace(); >+ } >+ >+ // Handle empty Documents >+ if (completionRegion == null) { >+ if (((treeNode == null) || (((Node) treeNode).getNodeType() == Node.DOCUMENT_NODE)) && (completionRegion == null) && >+ ((xmlnode == null) || (xmlnode.getChildNodes() == null) || (xmlnode.getChildNodes().getLength() == 0))) { >+ >+ IStructuredModel sModel = null; >+ try { >+ if(textViewer.getDocument() instanceof IStructuredDocument) { >+ sModel = StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument)textViewer.getDocument()); >+ } >+ if (sModel != null) { >+ IDOMDocument docNode = ((IDOMModel) sModel).getDocument(); >+ contentAssistRequest = new ContentAssistRequest(docNode, docNode, sdRegion, completionRegion, documentPosition, 0, null); >+ addEmptyDocumentProposals(contentAssistRequest, context); >+ } >+ } >+ finally { >+ if (sModel != null) { >+ sModel.releaseFromRead(); >+ } >+ } >+ if (contentAssistRequest == null) { >+ Logger.logException(new IllegalStateException("problem getting model")); //$NON-NLS-1$ >+ return new ArrayList<ICompletionProposal>(0); >+ } >+ >+ ICompletionProposal[] props = contentAssistRequest.getCompletionProposals(); >+ return (props != null) ? Arrays.asList(props) : new ArrayList<ICompletionProposal>(0); >+ } >+ // MASSIVE ERROR CONDITION >+ Logger.logException(new IllegalStateException("completion region was null")); //$NON-NLS-1$ >+ setErrorMessage(XMLUIMessages.SEVERE_internal_error_occu_UI_); >+ contentAssistRequest = new ContentAssistRequest((Node) treeNode, node.getParentNode(), sdRegion, completionRegion, documentPosition, 0, ""); //$NON-NLS-1$ >+ ICompletionProposal[] props = contentAssistRequest.getCompletionProposals(); >+ return (props != null) ? Arrays.asList(props) : new ArrayList<ICompletionProposal>(0); >+ } >+ >+ >+ // catch documents where no region can be determined >+ if ((xmlnode.getNodeType() == Node.DOCUMENT_NODE) && ((completionRegion == null) || >+ (xmlnode.getChildNodes() == null) || (xmlnode.getChildNodes().getLength() == 0))) { >+ >+ contentAssistRequest = computeStartDocumentProposals(matchString, completionRegion, >+ (IDOMNode) treeNode,xmlnode, context); >+ ICompletionProposal[] props = contentAssistRequest.getCompletionProposals(); >+ return (props != null) ? Arrays.asList(props) : new ArrayList<ICompletionProposal>(0); >+ } >+ >+ // compute normal proposals >+ contentAssistRequest = computeCompletionProposals(matchString, completionRegion, (IDOMNode) treeNode, xmlnode, context); >+ if (contentAssistRequest == null) { >+ contentAssistRequest = new ContentAssistRequest((Node) treeNode, node.getParentNode(), sdRegion, completionRegion, documentPosition, 0, ""); //$NON-NLS-1$ >+ setErrorMessage(XMLUIMessages.Content_Assist_not_availab_UI_); >+ } >+ >+ /* >+ * Only set this error message if nothing else was already set >+ **/ >+ if (contentAssistRequest.getProposals().size() == 0 && getErrorMessage() == null) { >+ setErrorMessage(XMLUIMessages.Content_Assist_not_availab_UI_); >+ } >+ >+ ICompletionProposal[] props = contentAssistRequest.getCompletionProposals(); >+ return (props != null) ? Arrays.asList(props) : new ArrayList<ICompletionProposal>(0); >+ } >+ >+ /** >+ * <p>Returns information about possible contexts based on the specified >+ * location within the document that corresponds to the current cursor >+ * position within the text viewer.</p> >+ * >+ * @see org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext, org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public List<ICompletionProposal> computeContextInformation( >+ CompletionProposalInvocationContext context, >+ IProgressMonitor monitor) { >+ >+ //no default context info >+ return Collections.emptyList(); >+ } >+ >+ /** >+ * @see org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer#getErrorMessage() >+ */ >+ public String getErrorMessage() { >+ return fErrorMessage; >+ } >+ >+ /** >+ * Add proposals for attribute names >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addAttributeNameProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add proposals for attribute values >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addAttributeValueProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add comment proposals >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addCommentProposal(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add the proposals for a completely empty document >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addEmptyDocumentProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add the proposals for the name in an end tag >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addEndTagNameProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Prompt for end tags to a non-empty Node that hasn't ended Handles these >+ * cases: <br> >+ * <tagOpen>| <br> >+ * <tagOpen>< |<br> >+ * <tagOpen></ | >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addEndTagProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add entity proposals >+ * >+ * @param contentAssistRequest >+ * @param completionRegion >+ * @param treeNode >+ * @param context >+ */ >+ protected abstract void addEntityProposals(ContentAssistRequest contentAssistRequest, >+ ITextRegion completionRegion, IDOMNode treeNode, CompletionProposalInvocationContext context); >+ >+ /** >+ * add entity proposals >+ * >+ * @param proposals >+ * @param map >+ * @param key >+ * @param nodeOffset >+ * @param sdRegion >+ * @param completionRegion >+ * @param context >+ */ >+ protected abstract void addEntityProposals(Vector<ICompletionProposal> proposals, Properties map, String key, >+ int nodeOffset, IStructuredDocumentRegion sdRegion, ITextRegion completionRegion, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add PCData proposals >+ * >+ * @param nodeName >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addPCDATAProposal(String nodeName, ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add start document proposals >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addStartDocumentProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Close an unclosed start tag >+ * >+ * @param contentAssistRequest >+ * @param context >+ */ >+ protected abstract void addTagCloseProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context); >+ >+ /** >+ * Add tag insertion proposals >+ * >+ * @param contentAssistRequest >+ * @param childPosition >+ * @param context >+ */ >+ protected abstract void addTagInsertionProposals(ContentAssistRequest contentAssistRequest, >+ int childPosition, CompletionProposalInvocationContext context); >+ >+ /** >+ * Add tag name proposals >+ * >+ * @param contentAssistRequest >+ * @param childPosition >+ * @param context >+ */ >+ protected abstract void addTagNameProposals(ContentAssistRequest contentAssistRequest, >+ int childPosition, CompletionProposalInvocationContext context); >+ >+ /** >+ * @param errorMessage the reason why computeProposals was not able to find any >+ * completions. >+ */ >+ protected void setErrorMessage(String errorMessage) { >+ fErrorMessage = errorMessage; >+ } >+ >+ /** >+ * <p>This does all the magic of figuring out where in the XML type document >+ * the content assist was invoked and then calling the corresponding method >+ * to add the correct proposals</p> >+ * >+ * <p><b>NOTE: </b>if overriding be sure to make super call back to this method otherwise >+ * you will loose all of the proposals generated by this method</p> >+ * >+ * @param matchString >+ * @param completionRegion >+ * @param treeNode >+ * @param xmlnode >+ * @param context >+ * >+ * @return {@link ContentAssistRequest} that now has all the proposals in it >+ */ >+ protected ContentAssistRequest computeCompletionProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode treeNode, IDOMNode xmlnode, CompletionProposalInvocationContext context) { >+ int documentPosition = context.getInvocationOffset(); >+ >+ ContentAssistRequest contentAssistRequest = null; >+ String regionType = completionRegion.getType(); >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ >+ // Handle the most common and best supported cases >+ if ((xmlnode.getNodeType() == Node.ELEMENT_NODE) || (xmlnode.getNodeType() == Node.DOCUMENT_NODE)) { >+ if (regionType == DOMRegionContext.XML_TAG_OPEN) { >+ contentAssistRequest = computeTagOpenProposals(matchString, completionRegion, treeNode, xmlnode, context); >+ } >+ else if (regionType == DOMRegionContext.XML_TAG_NAME) { >+ contentAssistRequest = computeTagNameProposals(matchString, completionRegion, >+ treeNode, xmlnode, context); >+ } >+ else if (regionType == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { >+ contentAssistRequest = computeAttributeProposals(matchString, completionRegion, treeNode, xmlnode, context); >+ } >+ else if (regionType == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { >+ contentAssistRequest = computeEqualsProposals(matchString, completionRegion, >+ treeNode, xmlnode, context); >+ } >+ else if ((regionType == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) && (documentPosition == sdRegion.getTextEndOffset()) && >+ (sdRegion.getText(completionRegion).endsWith("\"") || sdRegion.getText(completionRegion).endsWith("\'"))) { //$NON-NLS-1$ //$NON-NLS-2$ >+ // this is for when the cursor is at the end of the closing quote for an attribute.. >+ IDOMNode actualNode = (IDOMNode) xmlnode.getModel().getIndexedRegion(sdRegion.getStartOffset(completionRegion)); >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode, sdRegion, completionRegion, documentPosition, 0, matchString); >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ else if (regionType == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { >+ contentAssistRequest = computeAttributeValueProposals(matchString, completionRegion, treeNode, xmlnode, context); >+ } >+ else if ((regionType == DOMRegionContext.XML_TAG_CLOSE) || (regionType == DOMRegionContext.XML_EMPTY_TAG_CLOSE)) { >+ >+ contentAssistRequest = computeTagCloseProposals(matchString, completionRegion, treeNode, xmlnode, context); >+ } >+ else if (regionType == DOMRegionContext.XML_END_TAG_OPEN) { >+ contentAssistRequest = computeEndTagOpenProposals(matchString, completionRegion, >+ treeNode, xmlnode, context); >+ } >+ else if ((regionType == DOMRegionContext.XML_CONTENT) || (regionType == DOMRegionContext.XML_CHAR_REFERENCE) || >+ (regionType == DOMRegionContext.XML_ENTITY_REFERENCE) || (regionType == DOMRegionContext.XML_PE_REFERENCE)) { >+ >+ contentAssistRequest = computeContentProposals(matchString, completionRegion, >+ treeNode, xmlnode, context); >+ } >+ >+ // These ITextRegion types begin DOM Elements as well and although >+ // internally harder to assist, text insertions directly before them can be made >+ else if ((documentPosition == sdRegion.getStartOffset(completionRegion)) && >+ ((regionType == DOMRegionContext.XML_DECLARATION_OPEN) || >+ (regionType == DOMRegionContext.XML_PI_OPEN) || >+ (regionType == DOMRegionContext.XML_COMMENT_OPEN) || >+ (regionType == DOMRegionContext.XML_CDATA_OPEN))) { >+ >+ contentAssistRequest = new ContentAssistRequest(treeNode, xmlnode.getParentNode(), sdRegion, completionRegion, documentPosition, 0, matchString); >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(treeNode), context); >+ addStartDocumentProposals(contentAssistRequest, context); >+ } >+ } >+ // Not a Document or Element >+ else if (isCloseRegion(completionRegion)) { >+ contentAssistRequest = new ContentAssistRequest(treeNode, xmlnode.getParentNode(), sdRegion, completionRegion, sdRegion.getStartOffset(completionRegion) + completionRegion.getLength(), 0, matchString); >+ addStartDocumentProposals(contentAssistRequest, context); >+ if (documentPosition >= sdRegion.getTextEndOffset(completionRegion)) { >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(treeNode) + 1, context); >+ } >+ } >+ else if ((documentPosition == sdRegion.getStartOffset(completionRegion)) && >+ ((regionType == DOMRegionContext.XML_DECLARATION_OPEN) || >+ (regionType == DOMRegionContext.XML_PI_OPEN) || >+ (regionType == DOMRegionContext.XML_COMMENT_OPEN) || >+ (regionType == DOMRegionContext.XML_CDATA_OPEN))) { >+ >+ contentAssistRequest = new ContentAssistRequest(treeNode, xmlnode.getParentNode(), sdRegion, completionRegion, documentPosition, 0, matchString); >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(treeNode), context); >+ addStartDocumentProposals(contentAssistRequest, context); >+ } >+ return contentAssistRequest; >+ } >+ >+ /** >+ * <p>Similar to {@link #computeCompletionProposals(CompletionProposalInvocationContext, IProgressMonitor)} only specificly for >+ * attribute proposals</p> >+ * >+ * <p>Implementers should not override this method, it is made available to implementers so that if they override >+ * {@link #computeCompletionProposals(String, ITextRegion, IDOMNode, IDOMNode, CompletionProposalInvocationContext)} >+ * they can call this method if needed</p> >+ * >+ * @param matchString >+ * @param completionRegion >+ * @param nodeAtOffset >+ * @param node >+ * @param context >+ * @return >+ */ >+ protected final ContentAssistRequest computeAttributeProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ITextViewer viewer = context.getViewer(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ // if the attribute name is selected, replace it instead of creating a new attribute >+ if (documentPosition <= sdRegion.getStartOffset(completionRegion) && (viewer != null && viewer.getSelectedRange().y != (sdRegion.getEndOffset(completionRegion) - sdRegion.getStartOffset(completionRegion)))) { >+ // setup to insert new attributes >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ else { >+ // Setup to replace an existing attribute name >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, sdRegion.getStartOffset(completionRegion), completionRegion.getTextLength(), matchString); >+ } >+ addAttributeNameProposals(contentAssistRequest, context); >+ contentAssistRequest.setReplacementBeginPosition(documentPosition); >+ contentAssistRequest.setReplacementLength(0); >+ if ((node.getFirstStructuredDocumentRegion() != null) && (!node.getFirstStructuredDocumentRegion().isEnded())) { >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ return contentAssistRequest; >+ } >+ >+ /** >+ * <p>this is the position the cursor should be in after the proposal is >+ * applied</p> >+ * >+ * @param proposedText >+ * @return the position the cursor should be in after the proposal is >+ * applied >+ */ >+ protected static int getCursorPositionForProposedText(String proposedText) { >+ int cursorAdjustment; >+ cursorAdjustment = proposedText.indexOf("\"\"") + 1; //$NON-NLS-1$ >+ // otherwise, after the first tag >+ if (cursorAdjustment == 0) { >+ cursorAdjustment = proposedText.indexOf('>') + 1; >+ } >+ if (cursorAdjustment == 0) { >+ cursorAdjustment = proposedText.length() + 1; >+ } >+ >+ return cursorAdjustment; >+ } >+ >+ /** >+ * <p>helpful utility method for determining if one string starts with another one. >+ * This is case insensitive. If either are null then result is <code>true</code></p> >+ * >+ * @param aString the string to check to see if it starts with the given prefix >+ * @param prefix check that the given string starts with this prefix >+ * >+ * @return <code>true</code> if the given string starts with the given prefix, >+ * <code>false</code> otherwise >+ */ >+ protected static boolean beginsWith(String aString, String prefix) { >+ if ((aString == null) || (prefix == null)) { >+ return true; >+ } >+ return aString.toLowerCase().startsWith(prefix.toLowerCase()); >+ } >+ >+ private ContentAssistRequest computeAttributeValueProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ if ((documentPosition > sdRegion.getStartOffset(completionRegion) + completionRegion.getTextLength()) && (sdRegion.getStartOffset(completionRegion) + completionRegion.getTextLength() != sdRegion.getStartOffset(completionRegion) + completionRegion.getLength())) { >+ // setup to add a new attribute at the documentPosition >+ IDOMNode actualNode = (IDOMNode) node.getModel().getIndexedRegion(sdRegion.getStartOffset(completionRegion)); >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode, sdRegion, completionRegion, documentPosition, 0, matchString); >+ addAttributeNameProposals(contentAssistRequest, context); >+ if ((actualNode.getFirstStructuredDocumentRegion() != null) && !actualNode.getFirstStructuredDocumentRegion().isEnded()) { >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ } >+ else { >+ // setup to replace the existing value >+ if (!nodeAtOffset.getFirstStructuredDocumentRegion().isEnded() && (documentPosition < sdRegion.getStartOffset(completionRegion))) { >+ // if the IStructuredDocumentRegion isn't closed and the >+ // cursor is in front of the value, add >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); >+ addAttributeNameProposals(contentAssistRequest, context); >+ } >+ else { >+ int replaceLength = completionRegion.getTextLength(); >+ >+ //if container region, be sure replace length is only the attribute value region not the entire container >+ if(completionRegion instanceof ITextRegionContainer){ >+ ITextRegion openRegion = ((ITextRegionContainer) completionRegion).getFirstRegion(); >+ ITextRegion closeRegion = ((ITextRegionContainer) completionRegion).getLastRegion(); >+ >+ /* >+ * check to see if the container is opened the same way its closed. >+ * Such as: >+ * <img src=' ' >+ * But not: >+ * <img src=' >+ * >+ * </body> >+ * </html> >+ * In the latter case we only want to replace the opening text of the container >+ * Admittedly crude test, but effective. >+ */ >+ if(openRegion.getType() != closeRegion.getType()) { >+ replaceLength = openRegion.getTextLength(); >+ } >+ } >+ >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, >+ completionRegion, sdRegion.getStartOffset(completionRegion), >+ replaceLength, matchString); >+ >+ addAttributeValueProposals(contentAssistRequest, context); >+ } >+ } >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeContentProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ >+ // setup to add children at the content node's position >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, getStructuredDocumentRegion(documentPosition), completionRegion, documentPosition, 0, matchString); >+ if ((node != null) && (node.getNodeType() == Node.DOCUMENT_NODE) && (((Document) node).getDoctype() == null)) { >+ addStartDocumentProposals(contentAssistRequest, context); >+ } >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(nodeAtOffset), context); >+ if (node.getNodeType() != Node.DOCUMENT_NODE) { >+ addEndTagProposals(contentAssistRequest, context); >+ } >+ // entities? >+ addEntityProposals(contentAssistRequest, completionRegion, node, context); >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeEndTagOpenProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ int completionRegionStart = sdRegion.getStartOffset(completionRegion); >+ int completionRegionLength = completionRegion.getLength(); >+ IStructuredDocumentRegion sdRegionAtCompletionOffset = node.getStructuredDocument().getRegionAtCharacterOffset(completionRegionStart + completionRegionLength); >+ ITextRegion regionAtEndOfCompletion = sdRegionAtCompletionOffset.getRegionAtCharacterOffset(completionRegionStart + completionRegionLength); >+ >+ if ((documentPosition != completionRegionStart) && (regionAtEndOfCompletion != null) && (regionAtEndOfCompletion.getType() == DOMRegionContext.XML_TAG_NAME)) { >+ ITextRegion nameRegion = regionAtEndOfCompletion; >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, nodeAtOffset.getParentNode(), sdRegion, completionRegion, sdRegion.getStartOffset(nameRegion), nameRegion.getTextLength(), matchString); >+ } >+ else { >+ if (nodeAtOffset.getFirstStructuredDocumentRegion() == sdRegion) { >+ // abnormal case, this unmatched end tag will be a sibling >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, nodeAtOffset.getParentNode(), sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ else { >+ // normal case, this end tag is the parent >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, nodeAtOffset, sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ } >+ // if (documentPosition >= sdRegion.getStartOffset(completionRegion) + >+ // completionRegion.getTextLength()) >+ addEndTagProposals(contentAssistRequest, context); >+ // else >+ if (completionRegionStart == documentPosition) { >+ // positioned at start of end tag >+ addTagInsertionProposals(contentAssistRequest, node.getChildNodes().getLength(), context); >+ } >+ return contentAssistRequest; >+ } >+ >+ >+ private ContentAssistRequest computeEqualsProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ ITextRegion valueRegion = node.getStartStructuredDocumentRegion().getRegionAtCharacterOffset(sdRegion.getStartOffset(completionRegion) + completionRegion.getLength()); >+ if ((valueRegion != null) && (valueRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) && (sdRegion.getStartOffset(valueRegion) <= documentPosition)) { >+ // replace the adjacent attribute value >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, valueRegion, sdRegion.getStartOffset(valueRegion), valueRegion.getTextLength(), matchString); >+ } >+ else { >+ // append an attribute value after the '=' >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ addAttributeValueProposals(contentAssistRequest, context); >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeStartDocumentProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ int documentPosition = context.getInvocationOffset(); >+ >+ // setup for a non-empty document, but one that hasn't been formally started >+ ContentAssistRequest contentAssistRequest = null; >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, >+ getStructuredDocumentRegion(documentPosition), completionRegion, >+ documentPosition, 0, matchString); >+ addStartDocumentProposals(contentAssistRequest, context); >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeTagCloseProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ >+ if ((node.getNodeType() == Node.DOCUMENT_NODE) || (documentPosition >= sdRegion.getEndOffset())) { >+ // this is a content request as the documentPosition is >+ // AFTER the end of the closing region >+ if ((node == nodeAtOffset) && (node.getParentNode() != null)) { >+ node = (IDOMNode) node.getParentNode(); >+ } >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(nodeAtOffset), context); >+ if ((node.getNodeType() != Node.DOCUMENT_NODE) && (node.getEndStructuredDocumentRegion() == null)) { >+ addEndTagProposals(contentAssistRequest, context); >+ } >+ } >+ else { >+ // at the start of the tag's close or within it >+ ITextRegion closeRegion = sdRegion.getLastRegion(); >+ boolean insideTag = !sdRegion.isEnded() || (documentPosition <= sdRegion.getStartOffset(closeRegion)); >+ if (insideTag) { >+ // this is a request for completions within a tag >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); >+ if ((node.getNodeType() != Node.DOCUMENT_NODE) && (node.getEndStructuredDocumentRegion() != null)) { >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ if (sdRegion == nodeAtOffset.getFirstStructuredDocumentRegion()) { >+ contentAssistRequest.setReplacementBeginPosition(documentPosition); >+ contentAssistRequest.setReplacementLength(0); >+ addAttributeNameProposals(contentAssistRequest, context); >+ } >+ } >+ } >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeTagNameProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ >+ if (sdRegion != nodeAtOffset.getFirstStructuredDocumentRegion()) { >+ // completing the *first* tag in "<tagname1 |<tagname2" >+ IDOMNode actualNode = (IDOMNode) node.getModel().getIndexedRegion(sdRegion.getStartOffset(completionRegion)); >+ if (actualNode != null) { >+ if (actualNode.getFirstStructuredDocumentRegion() == sdRegion) { >+ // start tag >+ if (documentPosition > sdRegion.getStartOffset(completionRegion) + completionRegion.getLength()) { >+ // it's attributes >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode, sdRegion, completionRegion, documentPosition - matchString.length(), matchString.length(), matchString); >+ if (node.getStructuredDocument().getRegionAtCharacterOffset(sdRegion.getStartOffset(completionRegion) - 1).getRegionAtCharacterOffset(sdRegion.getStartOffset(completionRegion) - 1).getType() == DOMRegionContext.XML_TAG_OPEN) { >+ addAttributeNameProposals(contentAssistRequest, context); >+ } >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ else { >+ // it's name >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), >+ sdRegion, completionRegion, documentPosition - matchString.length(), >+ matchString.length(), matchString); >+ addTagNameProposals(contentAssistRequest, getElementPosition(actualNode), >+ context); >+ } >+ } >+ else { >+ if (documentPosition >= sdRegion.getStartOffset(completionRegion) + completionRegion.getLength()) { >+ // insert name >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), >+ sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ else { >+ // replace name >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), >+ sdRegion, completionRegion, sdRegion.getStartOffset(completionRegion), >+ completionRegion.getTextLength(), matchString); >+ } >+ addEndTagNameProposals(contentAssistRequest, context); >+ } >+ } >+ } >+ else { >+ if (documentPosition > sdRegion.getStartOffset(completionRegion) + completionRegion.getTextLength()) { >+ // unclosed tag with only a name; >+ //should prompt for attributes and a close instead >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, >+ documentPosition - matchString.length(), matchString.length(), matchString); >+ addAttributeNameProposals(contentAssistRequest, context); >+ addTagCloseProposals(contentAssistRequest, context); >+ } >+ else { >+ if (sdRegion.getRegions().get(0).getType() != DOMRegionContext.XML_END_TAG_OPEN) { >+ int replaceLength = documentPosition - sdRegion.getStartOffset(completionRegion); >+ contentAssistRequest = new ContentAssistRequest(node, node.getParentNode(), sdRegion, >+ completionRegion, sdRegion.getStartOffset(completionRegion), replaceLength, matchString); >+ addTagNameProposals(contentAssistRequest, getElementPosition(nodeAtOffset), context); >+ } >+ else { >+ IDOMNode actualNode = (IDOMNode) node.getModel().getIndexedRegion(documentPosition); >+ if (actualNode != null) { >+ if (documentPosition >= sdRegion.getStartOffset(completionRegion) + completionRegion.getTextLength()) { >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), >+ sdRegion, completionRegion, documentPosition, 0, matchString); >+ } >+ else { >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), >+ sdRegion, completionRegion, sdRegion.getStartOffset(completionRegion), >+ completionRegion.getTextLength(), matchString); >+ } >+ addEndTagNameProposals(contentAssistRequest, context); >+ } >+ } >+ } >+ } >+ return contentAssistRequest; >+ } >+ >+ private ContentAssistRequest computeTagOpenProposals(String matchString, ITextRegion completionRegion, >+ IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { >+ >+ int documentPosition = context.getInvocationOffset(); >+ ContentAssistRequest contentAssistRequest = null; >+ IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); >+ if (sdRegion != nodeAtOffset.getFirstStructuredDocumentRegion() || sdRegion.getPrevious() != null && sdRegion.getPrevious().getLastRegion().getType() == DOMRegionContext.XML_TAG_OPEN) { >+ // completing the *first* XML_TAG_OPEN in "<<tagname" >+ IDOMNode actualNode = (IDOMNode) node.getModel().getIndexedRegion(sdRegion.getStartOffset(completionRegion)); >+ if (actualNode != null) { >+ if(sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_END_TAG_OPEN) { >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode, sdRegion, completionRegion, documentPosition, 0, matchString); >+ if(actualNode.hasChildNodes()) >+ addTagNameProposals(contentAssistRequest, >+ getElementPosition(actualNode.getLastChild()), context); >+ else >+ addTagNameProposals(contentAssistRequest, 0, context); >+ } >+ else { >+ contentAssistRequest = new ContentAssistRequest(actualNode, actualNode.getParentNode(), sdRegion, completionRegion, documentPosition, 0, matchString); >+ addTagNameProposals(contentAssistRequest, getElementPosition(actualNode), context); >+ } >+ addEndTagProposals(contentAssistRequest, context); // (pa) 220850 >+ } >+ } >+ else { >+ if (documentPosition == sdRegion.getStartOffset(completionRegion)) { >+ if (node.getNodeType() == Node.ELEMENT_NODE) { >+ // at the start of an existing tag, right before the '<' >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node.getParentNode(), sdRegion, >+ completionRegion, documentPosition, 0, matchString); >+ addTagInsertionProposals(contentAssistRequest, getElementPosition(nodeAtOffset), context); >+ addEndTagProposals(contentAssistRequest, context); >+ } >+ else if (node.getNodeType() == Node.DOCUMENT_NODE) { >+ // at the opening of the VERY first tag with a '<' >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node.getParentNode(), sdRegion, >+ completionRegion, sdRegion.getStartOffset(completionRegion), completionRegion.getTextLength(), matchString); >+ addStartDocumentProposals(contentAssistRequest, context); >+ } >+ } >+ else { >+ // within the white space >+ ITextRegion name = getNameRegion(node.getStartStructuredDocumentRegion()); >+ if ((name != null) && >+ ((sdRegion.getStartOffset(name) <= documentPosition) && (sdRegion.getEndOffset(name) >= documentPosition)) && >+ (sdRegion.getLastRegion().getType() == DOMRegionContext.XML_TAG_CLOSE || sdRegion.getLastRegion().getType() == DOMRegionContext.XML_EMPTY_TAG_CLOSE)){ >+ >+ // replace the existing name >+ contentAssistRequest = new ContentAssistRequest(node, node.getParentNode(), sdRegion, completionRegion, sdRegion.getStartOffset(name), name.getTextLength(), matchString); >+ } >+ else { >+ // insert a valid new name, or possibly an end tag >+ contentAssistRequest = new ContentAssistRequest(nodeAtOffset, ((Node) nodeAtOffset).getParentNode(), sdRegion, completionRegion, documentPosition, 0, matchString); >+ addEndTagProposals(contentAssistRequest, context); >+ contentAssistRequest.setReplacementBeginPosition(documentPosition); >+ contentAssistRequest.setReplacementLength(0); >+ } >+ addTagNameProposals(contentAssistRequest, getElementPosition(nodeAtOffset), context); >+ } >+ } >+ return contentAssistRequest; >+ } >+ >+ private ITextRegion getCompletionRegion(int offset, IStructuredDocumentRegion sdRegion) { >+ ITextRegion region = sdRegion.getRegionAtCharacterOffset(offset); >+ if (region == null) { >+ return null; >+ } >+ >+ if (sdRegion.getStartOffset(region) == offset) { >+ // The offset is at the beginning of the region >+ if ((sdRegion.getStartOffset(region) == sdRegion.getStartOffset()) && (sdRegion.getPrevious() != null) && (!sdRegion.getPrevious().isEnded())) { >+ // Is the region also the start of the node? If so, the >+ // previous IStructuredDocumentRegion is >+ // where to look for a useful region. >+ region = sdRegion.getPrevious().getRegionAtCharacterOffset(offset - 1); >+ } >+ else { >+ // Is there no separating whitespace from the previous region? >+ // If not, >+ // then that region is the important one >+ ITextRegion previousRegion = sdRegion.getRegionAtCharacterOffset(offset - 1); >+ if ((previousRegion != null) && (previousRegion != region) && (previousRegion.getTextLength() == previousRegion.getLength())) { >+ region = previousRegion; >+ } >+ } >+ } >+ else { >+ // The offset is NOT at the beginning of the region >+ if (offset > sdRegion.getStartOffset(region) + region.getTextLength()) { >+ // Is the offset within the whitespace after the text in this >+ // region? >+ // If so, use the next region >+ ITextRegion nextRegion = sdRegion.getRegionAtCharacterOffset(sdRegion.getStartOffset(region) + region.getLength()); >+ if (nextRegion != null) { >+ region = nextRegion; >+ } >+ } >+ else { >+ // Is the offset within the important text for this region? >+ // If so, then we've already got the right one. >+ } >+ } >+ >+ // valid WHITE_SPACE region handler (#179924) >+ if ((region != null) && (region.getType() == DOMRegionContext.WHITE_SPACE)) { >+ ITextRegion previousRegion = sdRegion.getRegionAtCharacterOffset(sdRegion.getStartOffset(region) - 1); >+ if (previousRegion != null) { >+ region = previousRegion; >+ } >+ } >+ >+ return region; >+ } >+ >+ /** >+ * Return the region whose content's require completion. This is something >+ * of a misnomer as sometimes the user wants to be prompted for contents >+ * of a non-existant ITextRegion, such as for enumerated attribute values >+ * following an '=' sign. >+ */ >+ private ITextRegion getCompletionRegion(int documentPosition, Node domnode) { >+ if (domnode == null) { >+ return null; >+ } >+ >+ ITextRegion region = null; >+ int offset = documentPosition; >+ IStructuredDocumentRegion flatNode = null; >+ IDOMNode node = (IDOMNode) domnode; >+ >+ if (node.getNodeType() == Node.DOCUMENT_NODE) { >+ if (node.getStructuredDocument().getLength() == 0) { >+ return null; >+ } >+ ITextRegion result = node.getStructuredDocument().getRegionAtCharacterOffset(offset).getRegionAtCharacterOffset(offset); >+ while (result == null) { >+ offset--; >+ result = node.getStructuredDocument().getRegionAtCharacterOffset(offset).getRegionAtCharacterOffset(offset); >+ } >+ return result; >+ } >+ >+ IStructuredDocumentRegion startTag = node.getStartStructuredDocumentRegion(); >+ IStructuredDocumentRegion endTag = node.getEndStructuredDocumentRegion(); >+ >+ // Determine if the offset is within the start >+ // IStructuredDocumentRegion, end IStructuredDocumentRegion, or >+ // somewhere within the Node's XML content. >+ if ((startTag != null) && (startTag.getStartOffset() <= offset) && (offset < startTag.getStartOffset() + startTag.getLength())) { >+ flatNode = startTag; >+ } >+ else if ((endTag != null) && (endTag.getStartOffset() <= offset) && (offset < endTag.getStartOffset() + endTag.getLength())) { >+ flatNode = endTag; >+ } >+ >+ if (flatNode != null) { >+ // the offset is definitely within the start or end tag, continue >+ // on and find the region >+ region = getCompletionRegion(offset, flatNode); >+ } >+ else { >+ // the docPosition is neither within the start nor the end, so it >+ // must be content >+ flatNode = node.getStructuredDocument().getRegionAtCharacterOffset(offset); >+ // (pa) ITextRegion refactor >+ // if (flatNode.contains(documentPosition)) { >+ if ((flatNode.getStartOffset() <= documentPosition) && (flatNode.getEndOffset() >= documentPosition)) { >+ // we're interesting in completing/extending the previous >+ // IStructuredDocumentRegion if the current >+ // IStructuredDocumentRegion isn't plain content or if it's >+ // preceded by an orphan '<' >+ if ((offset == flatNode.getStartOffset()) && >+ (flatNode.getPrevious() != null) && >+ (((flatNode.getRegionAtCharacterOffset(documentPosition) != null) && >+ (flatNode.getRegionAtCharacterOffset(documentPosition).getType() != DOMRegionContext.XML_CONTENT)) || >+ (flatNode.getPrevious().getLastRegion().getType() == DOMRegionContext.XML_TAG_OPEN) || >+ (flatNode.getPrevious().getLastRegion().getType() == DOMRegionContext.XML_END_TAG_OPEN))) { >+ >+ // Is the region also the start of the node? If so, the >+ // previous IStructuredDocumentRegion is >+ // where to look for a useful region. >+ region = flatNode.getPrevious().getLastRegion(); >+ } >+ else if (flatNode.getEndOffset() == documentPosition) { >+ region = flatNode.getLastRegion(); >+ } >+ else { >+ region = flatNode.getFirstRegion(); >+ } >+ } >+ else { >+ // catch end of document positions where the docPosition isn't >+ // in a IStructuredDocumentRegion >+ region = flatNode.getLastRegion(); >+ } >+ } >+ >+ return region; >+ } >+ >+ private int getElementPosition(Node child) { >+ Node parent = child.getParentNode(); >+ if (parent == null) { >+ return 0; >+ } >+ >+ NodeList children = parent.getChildNodes(); >+ if (children == null) { >+ return 0; >+ } >+ int count = 0; >+ >+ for (int i = 0; i < children.getLength(); i++) { >+ if (children.item(i) == child) { >+ return count; >+ } >+ else { >+ // if (children.item(i).getNodeType() == Node.ELEMENT_NODE) >+ count++; >+ } >+ } >+ return 0; >+ } >+ >+ /** >+ * the returned string will be used as the filter to show the proposed values >+ * @throws BadLocationException >+ */ >+ protected String getMatchString(IStructuredDocumentRegion parent, ITextRegion aRegion, int offset) throws BadLocationException { >+ if ((aRegion == null) || isCloseRegion(aRegion)) { >+ return ""; //$NON-NLS-1$ >+ } >+ String matchString = null; >+ String regionType = aRegion.getType(); >+ if ((regionType == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) || (regionType == DOMRegionContext.XML_TAG_OPEN) || (offset > parent.getStartOffset(aRegion) + aRegion.getTextLength())) { >+ matchString = ""; //$NON-NLS-1$ >+ } >+ else if (regionType == DOMRegionContext.XML_CONTENT || regionType == DOMRegionContext.XML_END_TAG_OPEN) { >+ int begin = parent.getPrevious().getStartOffset(); >+ int length = offset-parent.getPrevious().getStart(); >+ matchString = parent.getParentDocument().get(begin, length); >+ >+ // parent.getParentDocument().get(begin, length) could return >+ // something likes <schema> or <schema>a or <schema> a >+ // get the substring as the match string >+ if ((matchString.length() > 0) && (beginsWith(matchString, "<"))) { >+ if (matchString.contains(">")) { >+ matchString = parent.getParentDocument().get(begin + matchString.indexOf('>') + 1, length-matchString.indexOf('>')-1); >+ } else { >+ matchString =""; >+ } >+ } >+ >+ // chop off any leading whitespace(s) from the match string >+ while ((matchString.length() > 0) && (Character.isWhitespace(matchString.charAt(0)))) { >+ matchString = matchString.substring(1); >+ } >+ } >+ else { >+ if ((parent.getText(aRegion).length() > 0) && (parent.getStartOffset(aRegion) < offset)) { >+ matchString = parent.getText(aRegion).substring(0, offset - parent.getStartOffset(aRegion)); >+ } else { >+ matchString = ""; >+ } >+ } >+ return matchString; >+ } >+ >+ @SuppressWarnings("rawtypes") >+ private ITextRegion getNameRegion(IStructuredDocumentRegion flatNode) { >+ if (flatNode == null) { >+ return null; >+ } >+ Iterator regionList = flatNode.getRegions().iterator(); >+ while (regionList.hasNext()) { >+ ITextRegion region = (ITextRegion) regionList.next(); >+ if (isNameRegion(region)) { >+ return region; >+ } >+ } >+ return null; >+ } >+ >+ private boolean isCloseRegion(ITextRegion region) { >+ String type = region.getType(); >+ return ((type == DOMRegionContext.XML_PI_CLOSE) || >+ (type == DOMRegionContext.XML_TAG_CLOSE) || >+ (type == DOMRegionContext.XML_EMPTY_TAG_CLOSE) || >+ (type == DOMRegionContext.XML_CDATA_CLOSE) || >+ (type == DOMRegionContext.XML_COMMENT_CLOSE) || >+ (type == DOMRegionContext.XML_ATTLIST_DECL_CLOSE) || >+ (type == DOMRegionContext.XML_ELEMENT_DECL_CLOSE) || >+ (type == DOMRegionContext.XML_DOCTYPE_DECLARATION_CLOSE) || >+ (type == DOMRegionContext.XML_DECLARATION_CLOSE)); >+ } >+ >+ private boolean isNameRegion(ITextRegion region) { >+ String type = region.getType(); >+ return ((type == DOMRegionContext.XML_TAG_NAME) || >+ (type == DOMRegionContext.XML_ELEMENT_DECL_NAME) || >+ (type == DOMRegionContext.XML_DOCTYPE_NAME) || >+ (type == DOMRegionContext.XML_ATTLIST_DECL_NAME)); >+ } >+ >+ /** >+ * StructuredTextViewer must be set before using this. >+ */ >+ private IStructuredDocumentRegion getStructuredDocumentRegion(int pos) { >+ return ContentAssistUtils.getStructuredDocumentRegion(fTextViewer, pos); >+ } >+} >Index: src/org/eclipse/jpt/jpa/ui/internal/DefaultJpaXmlCompletionProposalComputer.java >=================================================================== >RCS file: src/org/eclipse/jpt/jpa/ui/internal/DefaultJpaXmlCompletionProposalComputer.java >diff -N src/org/eclipse/jpt/jpa/ui/internal/DefaultJpaXmlCompletionProposalComputer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jpt/jpa/ui/internal/DefaultJpaXmlCompletionProposalComputer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,209 @@ >+package org.eclipse.jpt.jpa.ui.internal; >+ >+import java.util.Properties; >+import java.util.Vector; >+ >+import org.eclipse.jface.text.contentassist.ICompletionProposal; >+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; >+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; >+import org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; >+import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; >+ >+/** >+ * <p>Default implementation of the {@link AbstractJpaXmlCompletionProposalComputer}, defaults are to do nothing</p> >+ * >+ * The code of this class was copied from DefaultXMLCompletionProposalComputer and modified according to >+ * the needs of the XML content assist of Dali. This class can be removed after bug 371939 is addressed. >+ */ >+ >+public class DefaultJpaXmlCompletionProposalComputer extends >+ AbstractJpaXmlCompletionProposalComputer { >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer#sessionEnded() >+ */ >+ public void sessionEnded() { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer#sessionStarted() >+ */ >+ public void sessionStarted() { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addAttributeNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addAttributeNameProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addAttributeValueProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addAttributeValueProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addCommentProposal(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addCommentProposal( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addDocTypeProposal(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ protected void addDocTypeProposal( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEmptyDocumentProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addEmptyDocumentProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEndTagNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addEndTagNameProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEndTagProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addEndTagProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEntityProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion, org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addEntityProposals( >+ ContentAssistRequest contentAssistRequest, >+ ITextRegion completionRegion, IDOMNode treeNode, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEntityProposals(java.util.Vector, java.util.Properties, java.lang.String, int, org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion, org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addEntityProposals(Vector<ICompletionProposal> proposals, Properties map, >+ String key, int nodeOffset, IStructuredDocumentRegion sdRegion, >+ ITextRegion completionRegion, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addPCDATAProposal(java.lang.String, org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addPCDATAProposal(String nodeName, >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addStartDocumentProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addStartDocumentProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addTagCloseProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addTagCloseProposals( >+ ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addTagInsertionProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, int, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addTagInsertionProposals( >+ ContentAssistRequest contentAssistRequest, int childPosition, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+ >+ /** >+ * Default behavior is do to nothing. >+ * >+ * @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addTagNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, int, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext) >+ */ >+ @Override >+ protected void addTagNameProposals( >+ ContentAssistRequest contentAssistRequest, int childPosition, >+ CompletionProposalInvocationContext context) { >+ //default behavior is to do nothing >+ } >+} >Index: src/org/eclipse/jpt/jpa/ui/internal/JpaXmlCompletionProposalComputer.java >=================================================================== >RCS file: src/org/eclipse/jpt/jpa/ui/internal/JpaXmlCompletionProposalComputer.java >diff -N src/org/eclipse/jpt/jpa/ui/internal/JpaXmlCompletionProposalComputer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jpt/jpa/ui/internal/JpaXmlCompletionProposalComputer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,254 @@ >+/******************************************************************************* >+ * Copyright (c) 2012 Oracle. All rights reserved. >+ * This program and the accompanying materials are made available under the >+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 >+ * which accompanies this distribution. >+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html >+ * and the Eclipse Distribution License is available at >+ * http://www.eclipse.org/org/documents/edl-v10.php. >+ * >+ * Contributors: >+ * Oracle - initial API and implementation >+ * >+ ******************************************************************************/ >+package org.eclipse.jpt.jpa.ui.internal; >+ >+/** >+ * This computer adds content assist support for a mapping file (ORM Configuration). >+ * >+ * @version 2.4 >+ * @since 2.4 >+ */ >+ >+import java.util.ArrayList; >+import java.util.Collection; >+import java.util.Collections; >+import java.util.List; >+import org.eclipse.core.filebuffers.FileBuffers; >+import org.eclipse.core.filebuffers.ITextFileBuffer; >+import org.eclipse.core.filebuffers.ITextFileBufferManager; >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IWorkspaceRoot; >+import org.eclipse.core.resources.ResourcesPlugin; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.jface.text.contentassist.CompletionProposal; >+import org.eclipse.jface.text.contentassist.ICompletionProposal; >+import org.eclipse.jpt.common.utility.internal.CollectionTools; >+import org.eclipse.jpt.common.utility.internal.StringTools; >+import org.eclipse.jpt.jpa.core.JpaFile; >+import org.eclipse.jpt.jpa.core.JpaStructureNode; >+import org.eclipse.jpt.jpa.core.JpaXmlStructureNode; >+import org.eclipse.jpt.jpa.ui.JptJpaUiPlugin; >+import org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext; >+import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement; >+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; >+import org.eclipse.wst.xml.ui.internal.XMLUIMessages; >+import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; >+import org.eclipse.wst.xml.ui.internal.contentassist.XMLRelevanceConstants; >+import org.w3c.dom.Document; >+import org.w3c.dom.Node; >+ >+public class JpaXmlCompletionProposalComputer extends DefaultJpaXmlCompletionProposalComputer { >+ >+ public JpaXmlCompletionProposalComputer() { >+ } >+ >+ @Override >+ public List<ICompletionProposal> computeCompletionProposals( >+ CompletionProposalInvocationContext context, >+ IProgressMonitor monitor) { >+ try { >+ return super.computeCompletionProposals(context, monitor); >+ } catch (RuntimeException ex) { >+ return Collections.emptyList(); >+ } >+ } >+ >+ @Override >+ protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest, >+ CompletionProposalInvocationContext context) { >+ >+ List<String> proposedValues = getProposedValues(context); >+ >+ if (proposedValues.size() > 0 ) { >+ String matchString = contentAssistRequest.getMatchString(); >+ if (matchString == null) { >+ matchString = ""; //$NON-NLS-1$ >+ } >+ if ((matchString.length() > 0) && (matchString.startsWith("\"") || matchString.startsWith("'"))) { //$NON-NLS-1$ //$NON-NLS-2$ >+ matchString = matchString.substring(1); >+ } >+ //create suggestions for this attribute value declaration >+ int rOffset = contentAssistRequest.getReplacementBeginPosition(); >+ int rLength = contentAssistRequest.getReplacementLength(); >+ for (String possibleValue : proposedValues) { >+ if ((matchString.length() == 0) || StringTools.stringStartsWithIgnoreCase(possibleValue, matchString)) { >+ String rString = "\"" + possibleValue + "\""; //$NON-NLS-1$ //$NON-NLS-2$ >+ CompletionProposal proposal = new CompletionProposal( >+ rString, rOffset, rLength, rString.length()); >+ contentAssistRequest.addProposal(proposal); >+ } >+ } >+ } >+ else { >+ setErrorMessage(XMLUIMessages.Content_Assist_not_availab_UI_); >+ } >+ } >+ >+ @SuppressWarnings("deprecation") >+ @Override >+ protected void addTagInsertionProposals( >+ ContentAssistRequest contentAssistRequest, int childPosition, >+ CompletionProposalInvocationContext context) { >+ >+ Node parent = contentAssistRequest.getParent(); >+ >+ // This is only valid at the document element level >+ // and only valid if it's a XML file >+ if ((parent != null) && (parent.getNodeType() == Node.DOCUMENT_NODE) && >+ ((IDOMDocument) parent).isXMLType() && !isCursorAfterXMLPI(contentAssistRequest)) { >+ return; >+ } >+ // only want completion proposals if cursor is after doctype... >+ if (!isCursorAfterDoctype(contentAssistRequest)) { >+ return; >+ } >+ >+ if ((parent != null) && (parent instanceof IDOMNode) && isCommentNode((IDOMNode) parent)) { >+ // loop and find non comment node? >+ while ((parent != null) && isCommentNode((IDOMNode) parent)) { >+ parent = parent.getParentNode(); >+ } >+ } >+ >+ List<String> proposedValues = getProposedValues(context); >+ >+ if (proposedValues.size() > 0 ) { >+ String matchString = contentAssistRequest.getMatchString(); >+ if (matchString == null) { >+ matchString = ""; //$NON-NLS-1$ >+ } >+ >+ int begin = contentAssistRequest.getReplacementBeginPosition(); >+ int length = contentAssistRequest.getReplacementLength(); >+ if ((parent instanceof IDOMNode) && (parent.getNodeType() == Node.ELEMENT_NODE)) { >+ if (((IDOMNode) parent).getLastStructuredDocumentRegion() != ((IDOMNode) parent).getFirstStructuredDocumentRegion()) { >+ begin = ((IDOMNode) parent).getFirstStructuredDocumentRegion().getEndOffset(); >+ length = ((IDOMNode) parent).getLastStructuredDocumentRegion().getStartOffset() - begin; >+ } >+ } >+ >+ for (String possibleValue : proposedValues) { >+ if ((matchString.length() == 0) || StringTools.stringStartsWithIgnoreCase(possibleValue, matchString)) { >+ CustomCompletionProposal proposal = new CustomCompletionProposal( >+ possibleValue, begin, length, possibleValue.length(), >+ JptJpaUiPlugin.getImage(JptUiIcons.JPA_CONTENT), >+ possibleValue, null, null, XMLRelevanceConstants.R_TAG_INSERTION); >+ contentAssistRequest.addProposal(proposal); >+ } >+ } >+ } >+ else { >+ setErrorMessage(XMLUIMessages.Content_Assist_not_availab_UI_); >+ } >+ } >+ >+ /** >+ * Retrieves all of the possible valid values for this attribute/element declaration >+ */ >+ private List<String> getProposedValues(CompletionProposalInvocationContext context) { >+ List<String> list = new ArrayList<String>(); >+ int documentPosition = context.getInvocationOffset(); >+ if (documentPosition == -1) return Collections.emptyList(); >+ >+ ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager(); >+ ITextFileBuffer buffer = manager.getTextFileBuffer(context.getDocument()); >+ if (buffer == null) return Collections.emptyList(); >+ >+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); >+ IFile file = root.getFile(buffer.getLocation()); >+ >+ JpaFile jpaFile = (JpaFile) file.getAdapter(JpaFile.class); >+ if (jpaFile == null) return Collections.emptyList(); >+ >+ Collection<JpaStructureNode> rootStructureNodes = CollectionTools.collection(jpaFile.getRootStructureNodes()); >+ if (rootStructureNodes.isEmpty()) { >+ return Collections.emptyList(); >+ } >+ >+ for (JpaStructureNode node : rootStructureNodes) { >+ Iterable<String> strings = ((JpaXmlStructureNode) node).getXmlCompletionProposals(documentPosition); >+ if (strings != null) { >+ CollectionTools.addAll(list, strings); >+ } else { >+ return Collections.emptyList(); >+ } >+ >+ } >+ return list; >+ } >+ >+ /** >+ * This method can check if the cursor is after the XMLPI >+ * >+ * @param ContentAssistRequest car >+ */ >+ protected boolean isCursorAfterXMLPI(ContentAssistRequest car) { >+ Node aNode = car.getNode(); >+ boolean xmlpiFound = false; >+ Document parent = aNode.getOwnerDocument(); >+ int xmlpiNodePosition = -1; >+ boolean isAfterXMLPI = false; >+ >+ if (parent == null) { >+ return true; // blank document case >+ } >+ >+ for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { >+ boolean xmlpi = ((child.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) && child.getNodeName().equals("xml")); //$NON-NLS-1$ >+ xmlpiFound = xmlpiFound || xmlpi; >+ if (xmlpiFound) { >+ if (child instanceof IDOMNode) { >+ xmlpiNodePosition = ((IDOMNode) child).getEndOffset(); >+ isAfterXMLPI = (car.getReplacementBeginPosition() >= xmlpiNodePosition); >+ } >+ break; >+ } >+ } >+ return isAfterXMLPI; >+ } >+ >+ private boolean isCursorAfterDoctype(ContentAssistRequest car) { >+ Node aNode = car.getNode(); >+ Document parent = aNode.getOwnerDocument(); >+ int xmldoctypeNodePosition = -1; >+ boolean isAfterDoctype = true; >+ >+ if (parent == null) { >+ return true; // blank document case >+ } >+ >+ for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) { >+ if (child instanceof IDOMNode) { >+ if (child.getNodeType() == Node.DOCUMENT_TYPE_NODE) { >+ xmldoctypeNodePosition = ((IDOMNode) child).getEndOffset(); >+ isAfterDoctype = (car.getReplacementBeginPosition() >= xmldoctypeNodePosition); >+ break; >+ } >+ } >+ } >+ return isAfterDoctype; >+ } >+ >+ /** >+ * This is to determine if a tag is a special meta-info comment tag that >+ * shows up as an ELEMENT >+ * >+ * @param node >+ */ >+ private boolean isCommentNode(IDOMNode node) { >+ return ((node != null) && (node instanceof IDOMElement) && ((IDOMElement) node).isCommentTag()); >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 188940
:
211221
|
211771
|
211772
|
212164