Class DefaultContentAssistProposals
- java.lang.Object
-
- org.eclipse.persistence.jpa.jpql.tools.DefaultContentAssistProposals
-
- All Implemented Interfaces:
ContentAssistProposals
public final class DefaultContentAssistProposals extends java.lang.Object implements ContentAssistProposals
The default implementation ofContentAssistProposals
which stores the valid proposals.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.5
- Author:
- Pascal Filion
- Since:
- 2.3
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.eclipse.persistence.jpa.jpql.tools.ContentAssistProposals
ContentAssistProposals.ClassType, ContentAssistProposals.EnumProposals
-
-
Constructor Summary
Constructors Constructor Description DefaultContentAssistProposals(JPQLGrammar jpqlGrammar, ContentAssistExtension extension)
Creates a newDefaultContentAssistProposals
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Iterable<IEntity>
abstractSchemaTypes()
Returns the collection of possible abstract schema types.void
addEntity(IEntity abstractSchemaType)
Adds the givenIEntity
as a possible abstract schema type.void
addEnumConstant(IType enumType, java.lang.String enumConstant)
Adds the constants of the given enum constant as a valid proposal.void
addIdentificationVariable(java.lang.String identificationVariable)
Adds the given identification variable as a proposal.void
addIdentifier(java.lang.String identifier)
Adds the given JPQL identifier as a proposal.void
addMapping(IMapping mapping)
Adds the givenmapping
(state field, association field or collection field) as a valid proposal.void
addMappings(java.util.Collection<IMapping> mappings)
Adds the givenmappings
(state fields, association fields or collection fields) as valid proposals.void
addRangeIdentificationVariable(java.lang.String identificationVariable, IEntity entity)
Adds the given range identification variable that is mapping the given abstract schema type.org.eclipse.persistence.jpa.jpql.tools.DefaultContentAssistProposals.Result
buildEscapedQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position.int[]
buildPositions(WordParser wordParser, java.lang.String proposal, boolean insert)
Calculates the start and end position for correctly inserting the proposal into the query.org.eclipse.persistence.jpa.jpql.tools.DefaultContentAssistProposals.Result
buildQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position.ResultQuery
buildXmlQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position.java.lang.Iterable<java.lang.String>
classNames()
Returns the filtered list of possible class names.java.lang.Iterable<java.lang.String>
columnNames()
Returns the filtered list of possible column names.java.lang.Iterable<ContentAssistProposals.EnumProposals>
enumConstant()
Returns the filtered list of possible enum constant names.IEntity
getAbstractSchemaType(java.lang.String identificationVariable)
Retrieves the abstract schema type that is mapped with the given identification variable.java.lang.String
getClassNamePrefix()
Returns the prefix that will be used to filter the list of possible class names.ContentAssistProposals.ClassType
getClassType()
java.lang.String
getColumnNamePrefix()
Returns the prefix that will be used byContentAssistExtension
to filter the column names if the table name is notnull
.JPQLGrammar
getGrammar()
Returns theJPQLGrammar
that defines how the JPQL query was parsed.IdentifierRole
getIdentifierRole(java.lang.String identifier)
Returns the role of the given JPQL identifier.java.lang.String
getTableName()
Returns the table name that will be used byContentAssistExtension
to retrieve the column names.java.lang.String
getTableNamePrefix()
Returns the prefix that will be used to filter the list of possible table names.boolean
hasProposals()
Determines whether there is at least one proposals.java.lang.Iterable<java.lang.String>
identificationVariables()
Returns the collection of possible identification variables.java.lang.Iterable<java.lang.String>
identifiers()
Returns the collection of possible JPQL identifiers.protected void
initialize(JPQLGrammar jpqlGrammar, ContentAssistExtension extension)
boolean
isColumnName(java.lang.String proposal)
Determines whether the given proposal is a column name (which should be unqualified).boolean
isEnumConstant(java.lang.String proposal)
Determines whether the given proposal is an enum constant name (which should be unqualified).boolean
isMappingName(java.lang.String proposal)
Determines whether the given proposal is a mapping name.java.lang.String
longuestIdentifier(java.lang.String proposal)
Returns the longest possible JPQL identifier that is related to the given proposal if the proposal is a JPQL identifier and contains multiple words.java.lang.Iterable<IMapping>
mappings()
Returns the collection of possiblemappings
, which can be state fields, association fields and/or collection fields depending on the location used to retrieve the possible proposals.protected void
removeIdentifier(java.lang.String identifier)
Removes the given JPQL identifier.void
setClassNamePrefix(java.lang.String prefix, ContentAssistProposals.ClassType classType)
Adds the given prefix that will be used to filter the list of possible class names.void
setTableName(java.lang.String tableName, java.lang.String prefix)
Sets the table name and a prefix that will be used to filter the names of the table's columns.void
setTableNamePrefix(java.lang.String tableNamePrefix)
Adds the given prefix that will be used to filter the list of possible columns names.int
startPosition(WordParser wordParser, java.lang.String proposal)
java.lang.Iterable<java.lang.String>
tableNames()
Returns the filtered list of possible table names.java.lang.String
toString()
-
-
-
Constructor Detail
-
DefaultContentAssistProposals
public DefaultContentAssistProposals(JPQLGrammar jpqlGrammar, ContentAssistExtension extension)
Creates a newDefaultContentAssistProposals
.- Parameters:
jpqlGrammar
- TheJPQLGrammar
that defines how the JPQL query was parsedextension
- This extension can be used to provide additional support to JPQL content assist that is outside the scope of providing proposals related to JPA metadata. It adds support for providing suggestions related to class names, enum constants, table names, column names
-
-
Method Detail
-
abstractSchemaTypes
public java.lang.Iterable<IEntity> abstractSchemaTypes()
Returns the collection of possible abstract schema types.- Specified by:
abstractSchemaTypes
in interfaceContentAssistProposals
- Returns:
- The
entities
defined in the persistence context
-
addEntity
public void addEntity(IEntity abstractSchemaType)
Adds the givenIEntity
as a possible abstract schema type.- Parameters:
abstractSchemaType
- The abstract schema type that is a valid proposal
-
addEnumConstant
public void addEnumConstant(IType enumType, java.lang.String enumConstant)
Adds the constants of the given enum constant as a valid proposal.- Parameters:
enumType
- TheIType
of the enum typeenumConstant
- The enum constant to be added as a valid proposal- Since:
- 2.5
-
addIdentificationVariable
public void addIdentificationVariable(java.lang.String identificationVariable)
Adds the given identification variable as a proposal.- Parameters:
identificationVariable
- The identification variable that is a valid proposal
-
addIdentifier
public void addIdentifier(java.lang.String identifier)
Adds the given JPQL identifier as a proposal.- Parameters:
identifier
- The JPQL identifier that is a valid proposal
-
addMapping
public void addMapping(IMapping mapping)
Adds the givenmapping
(state field, association field or collection field) as a valid proposal.- Parameters:
mapping
- TheIMapping
of the state field, association field or collection field
-
addMappings
public void addMappings(java.util.Collection<IMapping> mappings)
Adds the givenmappings
(state fields, association fields or collection fields) as valid proposals.- Parameters:
mappings
- Themappings
of the state fields, association fields or collection fields
-
addRangeIdentificationVariable
public void addRangeIdentificationVariable(java.lang.String identificationVariable, IEntity entity)
Adds the given range identification variable that is mapping the given abstract schema type.- Parameters:
identificationVariable
- The range identification variable mapping the abstract schema nameentity
- The abstract type name that identifies the type of the variable
-
buildEscapedQuery
public org.eclipse.persistence.jpa.jpql.tools.DefaultContentAssistProposals.Result buildEscapedQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position. The updated JPQL query and position will be adjusted by converting some characters into their corresponding escaped characters, for instance '\r' will be converted to '\\r.The replacement will also handle compound JPQL identifiers when updating the JPQL query.
Example: If the cursor is within "IS NOT N|" and the proposal is "IS NOT NULL", then "IS NOT" will not be added twice. If the word to replace is "IS NULL" and the proposal is "IS NOT NULL", then "NOT" will be inserted between "IS" and "NULL".
- Specified by:
buildEscapedQuery
in interfaceContentAssistProposals
- Parameters:
jpqlQuery
- The JPQL query to modify with the given proposalproposal
- The proposal to insert into the queryposition
- The position of insertioninsert
- Flag that determines if the partial word following the cursor should be left intact or should be replaced by the proposal- Returns:
- The result of inserting the proposal into the query, including the adjust position, if it was required
-
buildPositions
public int[] buildPositions(WordParser wordParser, java.lang.String proposal, boolean insert)
Calculates the start and end position for correctly inserting the proposal into the query.- Parameters:
wordParser
- This parser can be used to retrieve words from the cursor positionproposal
- The proposal to be inserted into the queryinsert
- Flag that determines if the proposal is simply inserted or it should also replace the partial word following the position of the cursor- Returns:
- The start and end positions
-
buildQuery
public org.eclipse.persistence.jpa.jpql.tools.DefaultContentAssistProposals.Result buildQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position.The replacement will also handle compound JPQL identifiers when updating the JPQL query.
Example: If the cursor is within "IS NOT N|" and the proposal is "IS NOT NULL", then "IS NOT" will not be added twice. If the word to replace is "IS NULL" and the proposal is "IS NOT NULL", then "NOT" will be inserted between "IS" and "NULL".
- Specified by:
buildQuery
in interfaceContentAssistProposals
- Parameters:
jpqlQuery
- The JPQL query to modify with the given proposalproposal
- The proposal to insert into the queryposition
- The position of insertioninsert
- Flag that determines if the partial word following the cursor should be left intact or should be replaced by the proposal- Returns:
- The result of inserting the proposal into the query, including the adjust position, if it was required
-
buildXmlQuery
public ResultQuery buildXmlQuery(java.lang.String jpqlQuery, java.lang.String proposal, int position, boolean insert)
Creates a new JPQL query by inserting the given proposal at the given position. The updated JPQL query and position will be adjusted by converting some characters into their corresponding escaped characters, for instance '>' will be converted to '>'.The replacement will also handle compound JPQL identifiers when updating the JPQL query.
Example: If the cursor is within "IS NOT N|" and the proposal is "IS NOT NULL", then "IS NOT" will not be added twice. If the word to replace is "IS NULL" and the proposal is "IS NOT NULL", then "NOT" will be inserted between "IS" and "NULL".
- Specified by:
buildXmlQuery
in interfaceContentAssistProposals
- Parameters:
jpqlQuery
- The JPQL query to modify with the given proposal, which should be the non- converted string, i.e. any escaped characters should not be convertedproposal
- The proposal to insert into the queryposition
- The position of insertion, which was derived from the parsed tree representation of the JPQL queryinsert
- Flag that determines if the partial word following the cursor should be left intact or should be replaced by the proposal- Returns:
- The result of inserting the proposal into the query, including the adjust position, if it was required
-
classNames
public java.lang.Iterable<java.lang.String> classNames()
Returns the filtered list of possible class names. This is usually available when the cursor is within the constructor name of the constructor expression.- Specified by:
classNames
in interfaceContentAssistProposals
- Returns:
- The filtered list of possible class names
- See Also:
ConstructorExpression
-
columnNames
public java.lang.Iterable<java.lang.String> columnNames()
Returns the filtered list of possible column names.- Specified by:
columnNames
in interfaceContentAssistProposals
- Returns:
- The filtered list of possible column names
-
enumConstant
public java.lang.Iterable<ContentAssistProposals.EnumProposals> enumConstant()
Returns the filtered list of possible enum constant names. This is usually available when the cursor is after the dot separating a fully qualified enum type and the enum constant.- Specified by:
enumConstant
in interfaceContentAssistProposals
- Returns:
- The filtered list of possible enum constant names associated with its enum type
-
getAbstractSchemaType
public IEntity getAbstractSchemaType(java.lang.String identificationVariable)
Retrieves the abstract schema type that is mapped with the given identification variable.- Specified by:
getAbstractSchemaType
in interfaceContentAssistProposals
- Parameters:
identificationVariable
- The identification variable that, if defined as a range variable, will be mapped to a managed type- Returns:
- The abstract schema type mapped with the given identification variable or
null
if the given variable is mapped to something else or not mapped to anything
-
getClassNamePrefix
public java.lang.String getClassNamePrefix()
Returns the prefix that will be used to filter the list of possible class names.- Returns:
- The prefix that is used to filter the list of class names or
null
if it was not set for the cursor position within the JPQL query - Since:
- 2.5
-
getClassType
public ContentAssistProposals.ClassType getClassType()
- Specified by:
getClassType
in interfaceContentAssistProposals
-
getColumnNamePrefix
public java.lang.String getColumnNamePrefix()
Returns the prefix that will be used byContentAssistExtension
to filter the column names if the table name is notnull
.- Returns:
- The prefix that is used to filter the list of columns names, which is
null
if it has not been set along with the table name - Since:
- 2.5
-
getGrammar
public JPQLGrammar getGrammar()
Returns theJPQLGrammar
that defines how the JPQL query was parsed.- Returns:
- The
JPQLGrammar
that was used to parse thisExpression
-
getIdentifierRole
public IdentifierRole getIdentifierRole(java.lang.String identifier)
Returns the role of the given JPQL identifier.- Specified by:
getIdentifierRole
in interfaceContentAssistProposals
- Parameters:
identifier
- The JPQL identifier to retrieve its role- Returns:
- The
IdentifierRole
for the given JPQL identifier ornull
if no role was defined or if the given string is not a valid JPQL identifier
-
getTableName
public java.lang.String getTableName()
Returns the table name that will be used byContentAssistExtension
to retrieve the column names.- Returns:
- The name of the table for which its column names should be retrieve as possible proposals
- Since:
- 2.5
-
getTableNamePrefix
public java.lang.String getTableNamePrefix()
Returns the prefix that will be used to filter the list of possible table names.- Returns:
- The prefix that is used to filter the list of table names or
null
if it was not set for the cursor position within the JPQL query - Since:
- 2.5
-
hasProposals
public boolean hasProposals()
Determines whether there is at least one proposals.- Specified by:
hasProposals
in interfaceContentAssistProposals
- Returns:
true
if there is at least one proposal; otherwisefalse
-
identificationVariables
public java.lang.Iterable<java.lang.String> identificationVariables()
Returns the collection of possible identification variables.- Specified by:
identificationVariables
in interfaceContentAssistProposals
- Returns:
- The list of possible identification variables
-
identifiers
public java.lang.Iterable<java.lang.String> identifiers()
Returns the collection of possible JPQL identifiers.- Specified by:
identifiers
in interfaceContentAssistProposals
- Returns:
- The list of possible JPQL identifiers
-
initialize
protected void initialize(JPQLGrammar jpqlGrammar, ContentAssistExtension extension)
-
isColumnName
public boolean isColumnName(java.lang.String proposal)
Determines whether the given proposal is a column name (which should be unqualified).- Parameters:
proposal
- The proposal that is being inserted into the JPQL query- Returns:
true
if the given proposal is a column name;false
otherwise- Since:
- 2.5
-
isEnumConstant
public boolean isEnumConstant(java.lang.String proposal)
Determines whether the given proposal is an enum constant name (which should be unqualified).- Parameters:
proposal
- The proposal that is being inserted into the JPQL query- Returns:
true
if the given proposal is a unqualified enum constant name;false
otherwise- Since:
- 2.5
-
isMappingName
public boolean isMappingName(java.lang.String proposal)
Determines whether the given proposal is a mapping name.- Parameters:
proposal
- The proposal that is being inserted into the JPQL query- Returns:
true
if the given proposal is a mapping name;false
otherwise- Since:
- 2.5
-
longuestIdentifier
public java.lang.String longuestIdentifier(java.lang.String proposal)
Returns the longest possible JPQL identifier that is related to the given proposal if the proposal is a JPQL identifier and contains multiple words. For instance, the longest form ofJOIN
orJOIN FETCH
isLEFT OUTER JOIN FETCH
.- Parameters:
proposal
- The proposal to retrieve its longest form if one is associated with it- Returns:
- Either the given proposal if it's not a JPQL identifier or it does not have a longer form or the longest version of the JPQL identifier
-
mappings
public java.lang.Iterable<IMapping> mappings()
Returns the collection of possiblemappings
, which can be state fields, association fields and/or collection fields depending on the location used to retrieve the possible proposals.- Specified by:
mappings
in interfaceContentAssistProposals
- Returns:
- The list of possible proposals
mappings
-
removeIdentifier
protected void removeIdentifier(java.lang.String identifier)
Removes the given JPQL identifier.- Parameters:
identifier
- The identifier that was added but actually needs to be removed
-
setClassNamePrefix
public void setClassNamePrefix(java.lang.String prefix, ContentAssistProposals.ClassType classType)
Adds the given prefix that will be used to filter the list of possible class names.- Parameters:
prefix
- The prefix that is used to filter the list of class namesclassType
- Determines how to filter the various types of classes- Since:
- 2.5
-
setTableName
public void setTableName(java.lang.String tableName, java.lang.String prefix)
Sets the table name and a prefix that will be used to filter the names of the table's columns.- Parameters:
tableName
- The name of the table for which its column names should be retrieve as possible proposalsprefix
- The prefix that is used to filter the list of columns names, which is nevernull
but can be an empty string- Since:
- 2.5
-
setTableNamePrefix
public void setTableNamePrefix(java.lang.String tableNamePrefix)
Adds the given prefix that will be used to filter the list of possible columns names.- Parameters:
tableNamePrefix
- The prefix that is used to filter the list of columns names- Since:
- 2.5
-
startPosition
public int startPosition(WordParser wordParser, java.lang.String proposal)
-
tableNames
public java.lang.Iterable<java.lang.String> tableNames()
Returns the filtered list of possible table names.- Specified by:
tableNames
in interfaceContentAssistProposals
- Returns:
- The filtered list of possible table names
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-