Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2011-01-11 22:50:47 +0000
committerpfullbright2011-01-11 22:50:47 +0000
commite0b6a624b02096217d08785eb6ca562f5af01fb2 (patch)
tree556c155a11dbf89ad09eafdf6096f1276503f0c5 /jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context
parent6794f2c33e82d884d9f0813172f748c2ae7e5d20 (diff)
downloadwebtools.dali-e0b6a624b02096217d08785eb6ca562f5af01fb2.tar.gz
webtools.dali-e0b6a624b02096217d08785eb6ca562f5af01fb2.tar.xz
webtools.dali-e0b6a624b02096217d08785eb6ca562f5af01fb2.zip
added validation for XmlType
Diffstat (limited to 'jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context')
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java5
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java8
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaPersistentType.java115
3 files changed, 105 insertions, 23 deletions
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java
index 8fbfe071cf..b05bddcec5 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java
@@ -24,8 +24,8 @@ import org.eclipse.jpt.jaxb.core.context.JaxbPersistentEnum;
import org.eclipse.jpt.jaxb.core.context.JaxbRegistry;
import org.eclipse.jpt.jaxb.core.context.JaxbType;
import org.eclipse.jpt.jaxb.core.context.JaxbType.Kind;
-import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.resource.java.AbstractJavaResourceType;
+import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceEnum;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
@@ -505,5 +505,8 @@ public class GenericContextRoot
for (JaxbPackage pkg : this.packages.values()) {
pkg.validate(messages, reporter);
}
+ for (JaxbType type : this.types.values()) {
+ type.validate(messages, reporter);
+ }
}
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java
index 6b3312af0d..1ac1d13623 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java
@@ -16,8 +16,11 @@ import org.eclipse.jpt.jaxb.core.context.JaxbPackageInfo;
import org.eclipse.jpt.jaxb.core.internal.validation.DefaultValidationMessages;
import org.eclipse.jpt.jaxb.core.internal.validation.JaxbValidationMessages;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
+import org.eclipse.jpt.jaxb.core.xsd.XsdSchema;
+import org.eclipse.jpt.jaxb.core.xsd.XsdUtil;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.xsd.XSDSchema;
public class GenericPackage
extends AbstractJaxbContextNode
@@ -97,6 +100,11 @@ public class GenericPackage
return (getPackageInfo() == null) ? "" : getPackageInfo().getXmlSchema().getNamespace();
}
+ public XsdSchema getXsdSchema() {
+ XSDSchema emfSchema = getJaxbProject().getSchemaLibrary().getSchema(getNamespace());
+ return (emfSchema == null) ? null : (XsdSchema) XsdUtil.getAdapter(emfSchema);
+ }
+
// **************** validation ********************************************
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaPersistentType.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaPersistentType.java
index 900867d5b7..bf98058332 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaPersistentType.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaPersistentType.java
@@ -9,15 +9,26 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import java.beans.Introspector;
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.jaxb.core.context.JaxbContextRoot;
import org.eclipse.jpt.jaxb.core.context.JaxbPackage;
import org.eclipse.jpt.jaxb.core.context.JaxbPackageInfo;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentType;
import org.eclipse.jpt.jaxb.core.context.XmlRootElement;
+import org.eclipse.jpt.jaxb.core.internal.validation.DefaultValidationMessages;
+import org.eclipse.jpt.jaxb.core.internal.validation.JaxbValidationMessages;
import org.eclipse.jpt.jaxb.core.resource.java.AbstractJavaResourceType;
import org.eclipse.jpt.jaxb.core.resource.java.XmlRootElementAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlTypeAnnotation;
+import org.eclipse.jpt.jaxb.core.xsd.XsdSchema;
+import org.eclipse.jpt.jaxb.core.xsd.XsdTypeDefinition;
+import org.eclipse.jpt.utility.internal.StringTools;
import org.eclipse.jpt.utility.internal.iterables.ListIterable;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public abstract class AbstractJavaPersistentType
extends AbstractJavaType
@@ -25,7 +36,7 @@ public abstract class AbstractJavaPersistentType
protected String factoryClass;
protected String factoryMethod;
- protected String schemaTypeName;
+ protected String specifiedXmlTypeName;
protected String namespace;
protected final PropOrderContainer propOrderContainer;
@@ -35,7 +46,7 @@ public abstract class AbstractJavaPersistentType
super(parent, resourceType);
this.factoryClass = this.getResourceFactoryClass();
this.factoryMethod = this.getResourceFactoryMethod();
- this.schemaTypeName = this.getResourceSchemaTypeName();
+ this.specifiedXmlTypeName = this.getResourceXmlTypeName();
this.namespace = this.getResourceNamespace();
this.propOrderContainer = new PropOrderContainer();
this.rootElement = this.buildRootElement();
@@ -54,10 +65,10 @@ public abstract class AbstractJavaPersistentType
// ********** synchronize/update **********
public void synchronizeWithResourceModel() {
- this.setFactoryClass_(this.getResourceFactoryClass());
- this.setFactoryMethod_(this.getResourceFactoryMethod());
- this.setSchemaTypeName_(this.getResourceSchemaTypeName());
- this.setNamespace_(this.getResourceNamespace());
+ this.setFactoryClass_(getResourceFactoryClass());
+ this.setFactoryMethod_(getResourceFactoryMethod());
+ this.setSpecifiedXmlTypeName_(getResourceXmlTypeName());
+ this.setNamespace_(getResourceNamespace());
this.syncPropOrder();
this.syncRootElement();
}
@@ -116,26 +127,35 @@ public abstract class AbstractJavaPersistentType
}
// ********** name **********
-
- public String getSchemaTypeName() {
- return this.schemaTypeName;
+
+ public String getXmlTypeName() {
+ return (this.specifiedXmlTypeName != null) ? this.specifiedXmlTypeName : getDefaultXmlTypeName();
}
-
- public void setSchemaTypeName(String schemaTypeName) {
- this.getXmlTypeAnnotation().setName(schemaTypeName);
- this.setSchemaTypeName_(schemaTypeName);
+
+ public String getSpecifiedXmlTypeName() {
+ return this.specifiedXmlTypeName;
}
-
- protected void setSchemaTypeName_(String schemaTypeName) {
- String old = this.schemaTypeName;
- this.schemaTypeName = schemaTypeName;
- this.firePropertyChanged(SCHEMA_TYPE_NAME_PROPERTY, old, schemaTypeName);
+
+ public void setSpecifiedXmlTypeName(String xmlTypeName) {
+ this.getXmlTypeAnnotation().setName(xmlTypeName);
+ this.setSpecifiedXmlTypeName_(xmlTypeName);
}
-
- protected String getResourceSchemaTypeName() {
+
+ protected void setSpecifiedXmlTypeName_(String xmlTypeName) {
+ String old = this.specifiedXmlTypeName;
+ this.specifiedXmlTypeName = xmlTypeName;
+ this.firePropertyChanged(SPECIFIED_XML_TYPE_NAME_PROPERTY, old, xmlTypeName);
+ }
+
+ public String getDefaultXmlTypeName() {
+ return Introspector.decapitalize(getSimpleName());
+ }
+
+ protected String getResourceXmlTypeName() {
return this.getXmlTypeAnnotation().getName();
}
-
+
+
// ********** namespace **********
public String getNamespace() {
@@ -251,7 +271,58 @@ public abstract class AbstractJavaPersistentType
protected XmlRootElementAnnotation getRootElementAnnotation() {
return (XmlRootElementAnnotation) this.getJavaResourceType().getAnnotation(XmlRootElementAnnotation.ANNOTATION_NAME);
}
-
+
+
+ // **************** validation ********************************************
+
+ @Override
+ public TextRange getValidationTextRange(CompilationUnit astRoot) {
+ TextRange textRange = getXmlTypeAnnotation().getTextRange(astRoot);
+ return (textRange != null) ? textRange : super.getValidationTextRange(astRoot);
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+
+ // 1. if name is absent (""), namespace cannot be different from package namespace
+ // 2. if name is not absent (""), type must be from schema associated with this package
+
+ String name = getXmlTypeName();
+ String namespace = getNamespaceForValidation();
+ if ("".equals(name)) {
+ if (! StringTools.stringsAreEqual(namespace, getJaxbPackage().getNamespace())) {
+ messages.add(
+ DefaultValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JaxbValidationMessages.XML_TYPE_UNMATCHING_NAMESPACE_FOR_ANONYMOUS_TYPE,
+ this,
+ getXmlTypeAnnotation().getNamespaceTextRange(astRoot)));
+ }
+ }
+ else {
+ XsdSchema schema = getJaxbPackage().getXsdSchema();
+
+ if (schema != null) {
+ XsdTypeDefinition schemaType = schema.getTypeDefinition(namespace, name);
+ if (schemaType == null) {
+ messages.add(
+ DefaultValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JaxbValidationMessages.XML_TYPE_UNRESOLVED_SCHEMA_TYPE,
+ new String[] {name, namespace},
+ this,
+ getXmlTypeAnnotation().getTextRange(astRoot)));
+ }
+ }
+ }
+ }
+
+ protected String getNamespaceForValidation() {
+ return (this.namespace != null) ? this.namespace : getJaxbPackage().getNamespace();
+ }
+
+
@Override
public void toString(StringBuilder sb) {
super.toString(sb);

Back to the top