diff options
author | kmoore | 2008-03-06 16:37:13 +0000 |
---|---|---|
committer | kmoore | 2008-03-06 16:37:13 +0000 |
commit | a5ea823419be066e730686b5326c2f5eb6411523 (patch) | |
tree | 1f6e8fc76948542d8f5c98e84a3a4194fd5b4044 /jpa/plugins/org.eclipse.jpt.core | |
parent | 5b9da5f98519e01c40a9876627389b0dad85c153 (diff) | |
download | webtools.dali-a5ea823419be066e730686b5326c2f5eb6411523.tar.gz webtools.dali-a5ea823419be066e730686b5326c2f5eb6411523.tar.xz webtools.dali-a5ea823419be066e730686b5326c2f5eb6411523.zip |
orm.xml id mapping validation, generator validation not complete, need the generator repository
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core')
7 files changed, 124 insertions, 14 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmGeneratedValue.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmGeneratedValue.java index e8a730fc9c..6980a31342 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmGeneratedValue.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmGeneratedValue.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.core.context.orm; +import org.eclipse.jpt.core.TextRange; import org.eclipse.jpt.core.context.GeneratedValue; import org.eclipse.jpt.core.resource.orm.XmlGeneratedValue; @@ -23,6 +24,11 @@ import org.eclipse.jpt.core.resource.orm.XmlGeneratedValue; */ public interface OrmGeneratedValue extends GeneratedValue, OrmJpaContextNode { + /** + * Return the (best guess) text location of the generator. + */ + TextRange generatorTextRange(); + void initialize(XmlGeneratedValue generatedValue); void update(XmlGeneratedValue generatedValue); diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaGeneratedValue.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaGeneratedValue.java index 957b775f71..4b3372ee2b 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaGeneratedValue.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaGeneratedValue.java @@ -89,7 +89,7 @@ public class GenericJavaGeneratedValue extends AbstractJavaJpaContextNode implem } public TextRange validationTextRange(CompilationUnit astRoot) { - return null;//TODO //this.member.annotationTextRange(DECLARATION_ANNOTATION_ADAPTER); + return this.generatedValueResource.textRange(astRoot); } public TextRange generatorTextRange(CompilationUnit astRoot) { diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmGeneratedValue.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmGeneratedValue.java index ae316c0230..7e30414239 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmGeneratedValue.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmGeneratedValue.java @@ -87,16 +87,9 @@ public class GenericOrmGeneratedValue extends AbstractOrmJpaContextNode implemen } public TextRange generatorTextRange() { - // TODO Auto-generated method stub - return null; - } -// public ITextRange generatorTextRange() { -// if (node == null) { -// return ((XmlEObject) eContainer()).validationTextRange(); -// } -// IDOMNode nameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.GENERATED_VALUE__GENERATOR); -// return (nameNode == null) ? validationTextRange() : buildTextRange(nameNode); -// } + return this.generatedValue.generatorTextRange(); + } + // ********** resource model -> java context model ********** diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdMapping.java index abda6460d4..589fa3ef53 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdMapping.java @@ -9,9 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.core.internal.context.orm; +import java.util.List; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.ColumnMapping; import org.eclipse.jpt.core.context.TemporalType; +import org.eclipse.jpt.core.context.TypeMapping; import org.eclipse.jpt.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.core.context.orm.OrmColumn; import org.eclipse.jpt.core.context.orm.OrmColumnMapping; @@ -20,6 +22,8 @@ import org.eclipse.jpt.core.context.orm.OrmIdMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmSequenceGenerator; import org.eclipse.jpt.core.context.orm.OrmTableGenerator; +import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages; +import org.eclipse.jpt.core.internal.validation.JpaValidationMessages; import org.eclipse.jpt.core.resource.orm.AbstractXmlTypeMapping; import org.eclipse.jpt.core.resource.orm.OrmFactory; import org.eclipse.jpt.core.resource.orm.XmlColumn; @@ -28,6 +32,7 @@ import org.eclipse.jpt.core.resource.orm.XmlId; import org.eclipse.jpt.core.resource.orm.XmlSequenceGenerator; import org.eclipse.jpt.core.resource.orm.XmlTableGenerator; import org.eclipse.jpt.db.internal.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class GenericOrmIdMapping extends AbstractOrmAttributeMapping<XmlId> @@ -344,4 +349,95 @@ public class GenericOrmIdMapping extends AbstractOrmAttributeMapping<XmlId> public void removeColumnResource() { this.attributeMapping().setColumn(null); } + + // ****************** validation **************** + + @Override + public void addToMessages(List<IMessage> messages) { + super.addToMessages(messages); + + if (entityOwned()) { + addColumnMessages(messages); + } + addGeneratorMessages(messages); + } + + protected void addColumnMessages(List<IMessage> messages) { + TypeMapping typeMapping = typeMapping(); + OrmColumn column = getColumn(); + String table = column.getTable(); + boolean doContinue = isConnected(); + + if (doContinue && typeMapping.tableNameIsInvalid(table)) { + if (persistentAttribute().isVirtual()) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_TABLE, + new String[] {persistentAttribute().getName(), table, column.getName()}, + column, + column.tableTextRange()) + ); + } + else { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.COLUMN_UNRESOLVED_TABLE, + new String[] {table, column.getName()}, + column, + column.tableTextRange()) + ); + } + doContinue = false; + } + + if (doContinue && ! column.isResolved()) { + if (persistentAttribute().isVirtual()) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_NAME, + new String[] {persistentAttribute().getName(), column.getName()}, + column, + column.nameTextRange()) + ); + } + else { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.COLUMN_UNRESOLVED_NAME, + new String[] {column.getName()}, + column, + column.nameTextRange()) + ); + } + } + } + + protected void addGeneratorMessages(List<IMessage> messages) { + OrmGeneratedValue generatedValue = getGeneratedValue(); + if (generatedValue == null) { + return; + } + String generatorName = generatedValue.getGenerator(); + if (generatorName == null) { + return; + } + //TODO generator validation +// IGeneratorRepository generatorRepository = getPersistenceUnitContext().getGeneratorRepository(); +// IGenerator generator = generatorRepository.generator(generatorName); +// +// if (generator == null) { +// messages.add( +// JpaValidationMessages.buildMessage( +// IMessage.HIGH_SEVERITY, +// IJpaValidationMessages.GENERATED_VALUE_UNRESOLVED_GENERATOR, +// new String[] {generatorName}, +// generatedValue, +// generatedValue.generatorTextRange()) +// ); +// } + } } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlGeneratedValue.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlGeneratedValue.java index df2fd65e5a..7b1fb94d3b 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlGeneratedValue.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlGeneratedValue.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.core.internal.context.orm; +import org.eclipse.jpt.core.TextRange; import org.eclipse.jpt.core.context.java.JavaGeneratedValue; import org.eclipse.jpt.core.resource.common.AbstractJpaEObject; import org.eclipse.jpt.core.resource.orm.GenerationType; @@ -50,11 +51,11 @@ public class VirtualXmlGeneratedValue extends AbstractJpaEObject implements XmlG throw new UnsupportedOperationException("cannot set values on a virtual mapping"); } - + public TextRange generatorTextRange() { + return null; + } public void update(JavaGeneratedValue javaGeneratedValue) { this.javaGeneratedValue = javaGeneratedValue; } - - } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValue.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValue.java index 69761ac340..8113671cab 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValue.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValue.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.core.resource.orm; +import org.eclipse.jpt.core.TextRange; import org.eclipse.jpt.core.resource.common.JpaEObject; /** @@ -93,4 +94,9 @@ public interface XmlGeneratedValue extends JpaEObject */ void setStrategy(GenerationType value); + /** + * Return the {@link TextRange} for the generator attibute. If the generator attibute + * does not exist return the {@link TextRange} for the generated-value element. + */ + TextRange generatorTextRange(); } // GeneratedValue diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValueImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValueImpl.java index e4c9eb1bbc..5d1e07d773 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValueImpl.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlGeneratedValueImpl.java @@ -12,7 +12,11 @@ package org.eclipse.jpt.core.resource.orm; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.jpt.core.TextRange; +import org.eclipse.jpt.core.internal.emfutility.DOMUtilities; +import org.eclipse.jpt.core.internal.resource.orm.translators.OrmXmlMapper; import org.eclipse.jpt.core.resource.common.AbstractJpaEObject; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; /** * <!-- begin-user-doc --> @@ -258,4 +262,8 @@ public class XmlGeneratedValueImpl extends AbstractJpaEObject implements XmlGene return result.toString(); } + public TextRange generatorTextRange() { + IDOMNode generatorNode = (IDOMNode) DOMUtilities.getChildAttributeNode(this.node, OrmXmlMapper.GENERATOR); + return (generatorNode == null) ? validationTextRange() : buildTextRange(generatorNode); + } } // GeneratedValue |