diff options
author | pfullbright | 2012-03-02 16:13:55 +0000 |
---|---|---|
committer | pfullbright | 2012-03-02 16:13:55 +0000 |
commit | a3b357a3b1561983daa0bc136603840f50f29efb (patch) | |
tree | 42c92603749618d7455b505ec411ea1a447d68be /jaxb/plugins | |
parent | e82b6be189a47910cb727765f82b11277bba59ff (diff) | |
download | webtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.tar.gz webtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.tar.xz webtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.zip |
XmlDiscriminatorValue context model support
Diffstat (limited to 'jaxb/plugins')
7 files changed, 251 insertions, 2 deletions
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties index bf4c3c49dd..b21b7d8f4b 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties @@ -10,6 +10,11 @@ PROJECT_MISSING_ECLIPSELINK_JAXB_CONTEXT_FACTORY = Project is missing a jaxb.properties file specifying the EclipseLink JAXB context factory +XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = XmlDiscriminatorNode not specified. +XML_DISCRIMINATOR_NODE__ROOT_NOT_SUPPORTED = Root XPath not supported. + +XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED = XmlDiscriminatorValue not specified. + XML_ELEMENT_DECL__INVALID_METHOD_SIGNATURE_RETURN_TYPE = An element factory method must have a return type consistent with ''javax.xml.bind.JAXBElement''. XML_PATH__NOT_SPECIFIED = XmlPath not specified. diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELClassMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELClassMapping.java index c3df86674d..c1fb95d5bb 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELClassMapping.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELClassMapping.java @@ -35,4 +35,15 @@ public interface ELClassMapping ELXmlDiscriminatorNode addXmlDiscriminatorNode(); void removeXmlDiscriminatorNode(); + + + // ***** XmlDiscriminatorValue ***** + + String XML_DISCRIMINATOR_VALUE_PROPERTY = "xmlDiscriminatorValue"; //$NON-NLS-1$ + + ELXmlDiscriminatorValue getXmlDiscriminatorValue(); + + ELXmlDiscriminatorValue addXmlDiscriminatorValue(); + + void removeXmlDiscriminatorValue(); } diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELXmlDiscriminatorValue.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELXmlDiscriminatorValue.java new file mode 100644 index 0000000000..3074d0ab89 --- /dev/null +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELXmlDiscriminatorValue.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * 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, 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.jaxb.eclipselink.core.context.java; + +/** + * Corresponds to XmlDiscriminatorValue annotation + * + * 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 3.2 + * @since 3.2 + */ +public interface ELXmlDiscriminatorValue { + + // ***** value ***** + + /** + * String associated with changes to the value property + */ + String VALUE_PROPERTY = "value"; ///$NON-NLS-1$ + + /** + * Return the value property value. + * A null indicates it is not specified. + */ + String getValue(); + + /** + * Set the value property value. + * Null unspecifies the value. + */ + void setValue(String value); +} diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaClassMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaClassMapping.java index 1f19c058e8..2fcc36fcd6 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaClassMapping.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaClassMapping.java @@ -9,8 +9,10 @@ import org.eclipse.jpt.jaxb.core.context.JaxbClass; import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaClassMapping; import org.eclipse.jpt.jaxb.eclipselink.core.context.java.ELClassMapping; import org.eclipse.jpt.jaxb.eclipselink.core.context.java.ELXmlDiscriminatorNode; +import org.eclipse.jpt.jaxb.eclipselink.core.context.java.ELXmlDiscriminatorValue; import org.eclipse.jpt.jaxb.eclipselink.core.resource.java.ELJaxb; import org.eclipse.jpt.jaxb.eclipselink.core.resource.java.XmlDiscriminatorNodeAnnotation; +import org.eclipse.jpt.jaxb.eclipselink.core.resource.java.XmlDiscriminatorValueAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -21,10 +23,13 @@ public class ELJavaClassMapping protected ELJavaXmlDiscriminatorNode xmlDiscriminatorNode; + protected ELJavaXmlDiscriminatorValue xmlDiscriminatorValue; + public ELJavaClassMapping(JaxbClass parent) { super(parent); initXmlDiscriminatorNode(); + initXmlDiscriminatorValue(); } @@ -34,12 +39,14 @@ public class ELJavaClassMapping public void synchronizeWithResourceModel() { super.synchronizeWithResourceModel(); syncXmlDiscriminatorNode(); + syncXmlDiscriminatorValue(); } @Override public void update() { super.update(); updateXmlDiscriminatorNode(); + updateXmlDiscriminatorValue(); } @@ -108,6 +115,71 @@ public class ELJavaClassMapping } + // ***** xmlDiscriminatorValue ***** + + public ELXmlDiscriminatorValue getXmlDiscriminatorValue() { + return this.xmlDiscriminatorValue; + } + + protected void setXmlDiscriminatorValue_(ELJavaXmlDiscriminatorValue xmlDiscriminatorValue) { + ELXmlDiscriminatorValue old = this.xmlDiscriminatorValue; + this.xmlDiscriminatorValue = xmlDiscriminatorValue; + firePropertyChanged(XML_DISCRIMINATOR_VALUE_PROPERTY, old, xmlDiscriminatorValue); + } + + public ELXmlDiscriminatorValue addXmlDiscriminatorValue() { + if (this.xmlDiscriminatorValue != null) { + throw new IllegalStateException(); + } + getJavaResourceType().addAnnotation(ELJaxb.XML_DISCRIMINATOR_VALUE); + ELJavaXmlDiscriminatorValue xmlDiscriminatorValue = buildXmlDiscriminatorValue(); + setXmlDiscriminatorValue_(xmlDiscriminatorValue); + return xmlDiscriminatorValue; + } + + public void removeXmlDiscriminatorValue() { + if (this.xmlDiscriminatorValue == null) { + throw new IllegalStateException(); + } + getJavaResourceType().removeAnnotation(ELJaxb.XML_DISCRIMINATOR_VALUE); + setXmlDiscriminatorValue_(null); + } + + public XmlDiscriminatorValueAnnotation getXmlDiscriminatorValueAnnotation() { + return (XmlDiscriminatorValueAnnotation) getJavaResourceType().getAnnotation(ELJaxb.XML_DISCRIMINATOR_VALUE); + } + + protected ELJavaXmlDiscriminatorValue buildXmlDiscriminatorValue() { + return new ELJavaXmlDiscriminatorValue(this); + } + + protected void initXmlDiscriminatorValue() { + XmlDiscriminatorValueAnnotation annotation = getXmlDiscriminatorValueAnnotation(); + this.xmlDiscriminatorValue = (annotation == null) ? null : buildXmlDiscriminatorValue(); + } + + protected void syncXmlDiscriminatorValue() { + XmlDiscriminatorValueAnnotation annotation = getXmlDiscriminatorValueAnnotation(); + if (annotation != null) { + if (this.xmlDiscriminatorValue != null) { + this.xmlDiscriminatorValue.synchronizeWithResourceModel(); + } + else { + setXmlDiscriminatorValue_(buildXmlDiscriminatorValue()); + } + } + else { + setXmlDiscriminatorValue_(null); + } + } + + protected void updateXmlDiscriminatorValue() { + if (this.xmlDiscriminatorValue != null) { + this.xmlDiscriminatorValue.update(); + } + } + + // ***** content assist ***** @Override @@ -139,5 +211,9 @@ public class ELJavaClassMapping if (this.xmlDiscriminatorNode != null) { this.xmlDiscriminatorNode.validate(messages, reporter, astRoot); } + + if (this.xmlDiscriminatorValue != null) { + this.xmlDiscriminatorValue.validate(messages, reporter, astRoot); + } } } diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorNode.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorNode.java index ae5c9118d3..30f811468e 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorNode.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorNode.java @@ -112,7 +112,7 @@ public class ELJavaXmlDiscriminatorNode messages.add( ELJaxbValidationMessageBuilder.buildMessage( IMessage.HIGH_SEVERITY, - ELJaxbValidationMessages.XML_PATH__NOT_SPECIFIED, + ELJaxbValidationMessages.XML_DISCRIMINATOR_NODE__NOT_SPECIFIED, ELJavaXmlDiscriminatorNode.this, getValueTextRange(astRoot))); return; @@ -122,7 +122,7 @@ public class ELJavaXmlDiscriminatorNode messages.add( ELJaxbValidationMessageBuilder.buildMessage( IMessage.HIGH_SEVERITY, - ELJaxbValidationMessages.XML_PATH__ROOT_NOT_SUPPORTED, + ELJaxbValidationMessages.XML_DISCRIMINATOR_NODE__ROOT_NOT_SUPPORTED, ELJavaXmlDiscriminatorNode.this, getValueTextRange(astRoot))); return; diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorValue.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorValue.java new file mode 100644 index 0000000000..e05479037a --- /dev/null +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorValue.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * 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, 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.jaxb.eclipselink.core.internal.context.java; + +import java.util.List; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.jaxb.core.internal.context.java.AbstractJavaContextNode; +import org.eclipse.jpt.jaxb.eclipselink.core.context.java.ELXmlDiscriminatorValue; +import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder; +import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages; +import org.eclipse.jpt.jaxb.eclipselink.core.resource.java.XmlDiscriminatorValueAnnotation; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; + + +public class ELJavaXmlDiscriminatorValue + extends AbstractJavaContextNode + implements ELXmlDiscriminatorValue { + + protected String value; + + + public ELJavaXmlDiscriminatorValue(ELJavaClassMapping parent) { + super(parent); + initValue(); + } + + + protected ELJavaClassMapping getClassMapping() { + return (ELJavaClassMapping) getParent(); + } + + + // ***** sync/update ***** + + @Override + public void synchronizeWithResourceModel() { + super.synchronizeWithResourceModel(); + syncValue(); + } + + + // ***** value ***** + + public String getValue() { + return this.value; + } + + public void setValue(String value) { + getAnnotation().setValue(value); + setValue_(value); + } + + protected void setValue_(String value) { + String old = this.value; + this.value = value; + firePropertyChanged(VALUE_PROPERTY, old, this.value); + } + + protected void initValue() { + this.value = getAnnotation().getValue(); + } + + protected void syncValue() { + setValue_(getAnnotation().getValue()); + } + + protected XmlDiscriminatorValueAnnotation getAnnotation() { + return getClassMapping().getXmlDiscriminatorValueAnnotation(); + } + + + // ***** validation ***** + + @Override + public TextRange getValidationTextRange(CompilationUnit astRoot) { + return getAnnotation().getTextRange(astRoot); + } + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + + if (StringTools.stringIsEmpty(this.value)) { + messages.add( + ELJaxbValidationMessageBuilder.buildMessage( + IMessage.HIGH_SEVERITY, + ELJaxbValidationMessages.XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED, + ELJavaXmlDiscriminatorValue.this, + getValueTextRange(astRoot))); + return; + } + } + + protected TextRange getValueTextRange(CompilationUnit astRoot) { + // should never be null + return getAnnotation().getValueTextRange(astRoot); + } +} diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java index e4d36d8927..45f25e7d65 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java @@ -19,6 +19,11 @@ public interface ELJaxbValidationMessages { // validation on project String PROJECT_MISSING_ECLIPSELINK_JAXB_CONTEXT_FACTORY = "PROJECT_MISSING_ECLIPSELINK_JAXB_CONTEXT_FACTORY"; + String XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = "XML_DISCRIMINATOR_NODE__NOT_SPECIFIED"; + String XML_DISCRIMINATOR_NODE__ROOT_NOT_SUPPORTED = "XML_DISCRIMINATOR_NODE__ROOT_NOT_SUPPORTED"; + + String XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED = "XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED"; + String XML_ELEMENT_DECL__INVALID_METHOD_SIGNATURE_RETURN_TYPE = "XML_ELEMENT_DECL__INVALID_METHOD_SIGNATURE_RETURN_TYPE"; String XML_PATH__NOT_SPECIFIED = "XML_PATH__NOT_SPECIFIED"; |