Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2012-03-02 16:13:55 +0000
committerpfullbright2012-03-02 16:13:55 +0000
commita3b357a3b1561983daa0bc136603840f50f29efb (patch)
tree42c92603749618d7455b505ec411ea1a447d68be /jaxb/plugins
parente82b6be189a47910cb727765f82b11277bba59ff (diff)
downloadwebtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.tar.gz
webtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.tar.xz
webtools.dali-a3b357a3b1561983daa0bc136603840f50f29efb.zip
XmlDiscriminatorValue context model support
Diffstat (limited to 'jaxb/plugins')
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties5
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELClassMapping.java11
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/java/ELXmlDiscriminatorValue.java44
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaClassMapping.java76
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorNode.java4
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/java/ELJavaXmlDiscriminatorValue.java108
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java5
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";

Back to the top