Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/property_files/jaxb_validation.properties7
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbFactory.java4
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbAttributeMapping.java7
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPackageInfo.java11
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentAttribute.java8
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentClass.java4
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAdaptable.java30
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAttributeMapping.java27
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlElementMapping.java2
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlJavaTypeAdapter.java13
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbFactory.java7
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericPackage.java7
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaAttributeMapping.java16
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaXmlJavaTypeAdapter.java (renamed from jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlJavaTypeAdapter.java)65
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapter.java62
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageInfo.java57
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageXmlJavaTypeAdapter.java49
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentAttribute.java38
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentClass.java70
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentField.java4
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentProperty.java7
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaRegistry.java4
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaTypeXmlJavaTypeAdapter.java34
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAdaptable.java122
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAttributeMapping.java60
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlElementMapping.java59
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceAttribute.java28
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceField.java43
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceMethod.java83
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/validation/JaxbValidationMessages.java9
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceAttribute.java70
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceField.java71
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceMethod.java68
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapterTests.java171
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPackageXmlJavaTypeAdapterTests.java (renamed from jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlJavaTypeAdapterTests.java)24
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPersistentClassTests.java55
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaTypeXmlJavaTypeAdapterTests.java171
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlAttributeMappingTests.java56
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlElementMappingTests.java57
-rw-r--r--jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/JaxbCoreJavaContextModelTests.java6
40 files changed, 1329 insertions, 357 deletions
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/property_files/jaxb_validation.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.core/property_files/jaxb_validation.properties
index 87ef3be360..ec96510a0d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/property_files/jaxb_validation.properties
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/property_files/jaxb_validation.properties
@@ -1,5 +1,5 @@
################################################################################
-# Copyright (c) 2010 Oracle. All rights reserved.
+# Copyright (c) 2010, 2011 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.
@@ -11,9 +11,12 @@
NO_JAXB_PROJECT = This project has the JAXB facet, but no JAXB content could be created. See the error log for more details.
PACKAGE_NO_SCHEMA_FOR_NAMESPACE = There is no schema specified on the project for the namespace ''{0}'' on the package ''{1}''. No schema-specific validation will be performed.
+PACKAGE_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_SPECIFIED = The type must be specified for an XML Java type adapter on a package
XML_TYPE_UNMATCHING_NAMESPACE_FOR_ANONYMOUS_TYPE = The namespace for an anonymous type should not be different from its package.
XML_TYPE_UNRESOLVED_SCHEMA_TYPE = The type definition with name ''{0}'' and namespace ''{1}'' cannot be resolved
XML_ROOT_ELEMENT_UNRESOLVED_SCHEMA_ELEMENT = The element declaration with name ''{0}'' and namespace ''{1}'' cannot be resolved
-XML_ROOT_ELEMENT_TYPE_CONFLICTS_WITH_XML_TYPE = The xml type of the element declaration with name ''{0}'' and namespace ''{1}'' conflicts with the xml type of the associated class \ No newline at end of file
+XML_ROOT_ELEMENT_TYPE_CONFLICTS_WITH_XML_TYPE = The xml type of the element declaration with name ''{0}'' and namespace ''{1}'' conflicts with the xml type of the associated class
+
+ATTRIBUTE_MAPPING_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_DEFINED = The type for XML Java type adapter is not defined \ No newline at end of file
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbFactory.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbFactory.java
index 625c37100e..2017f3eca4 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbFactory.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbFactory.java
@@ -31,7 +31,6 @@ import org.eclipse.jpt.jaxb.core.context.JaxbPersistentType;
import org.eclipse.jpt.jaxb.core.context.JaxbRegistry;
import org.eclipse.jpt.jaxb.core.context.XmlAttributeMapping;
import org.eclipse.jpt.jaxb.core.context.XmlElementMapping;
-import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.context.XmlNs;
import org.eclipse.jpt.jaxb.core.context.XmlRootElement;
import org.eclipse.jpt.jaxb.core.context.XmlSchema;
@@ -42,7 +41,6 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceField;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMethod;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
-import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlNsAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlRootElementAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlSchemaTypeAnnotation;
@@ -122,8 +120,6 @@ public interface JaxbFactory {
XmlSchemaType buildJavaXmlSchemaType(JaxbContextNode parent, XmlSchemaTypeAnnotation xmlSchemaTypeAnnotation);
- XmlJavaTypeAdapter buildJavaXmlJavaTypeAdapter(JaxbContextNode parent, XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation);
-
XmlNs buildJavaXmlNs(XmlSchema parent, XmlNsAnnotation xmlNsAnnotation);
XmlRootElement buildJavaXmlRootElement(JaxbPersistentType parent, XmlRootElementAnnotation xmlRootElementAnnotation);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbAttributeMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbAttributeMapping.java
index 575a957388..62c10ee6fa 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbAttributeMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbAttributeMapping.java
@@ -9,6 +9,9 @@
*******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;
+import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
+
/**
* Represents a JAXB attribute mapping.
@@ -23,10 +26,12 @@ package org.eclipse.jpt.jaxb.core.context;
* @since 3.0
*/
public interface JaxbAttributeMapping
- extends JaxbContextNode {
+ extends JavaContextNode {
JaxbPersistentAttribute getParent();
+ JavaResourceAttribute getJavaResourceAttribute();
+
String getKey();
/**
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPackageInfo.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPackageInfo.java
index 55d43b2553..f6a265af0a 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPackageInfo.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPackageInfo.java
@@ -9,9 +9,12 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;
+import java.util.List;
import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
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;
/**
*
@@ -60,4 +63,12 @@ public interface JaxbPackageInfo
void moveXmlJavaTypeAdapter(int targetIndex, int sourceIndex);
String XML_JAVA_TYPE_ADAPTERS_LIST = "xmlJavaTypeAdapters"; //$NON-NLS-1$
+
+ // **************** validation ********************************************
+
+ /**
+ * Add validation messages to the specified list.
+ */
+ void validate(List<IMessage> messages, IReporter reporter);
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentAttribute.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentAttribute.java
index b5c6d72d22..10f5f3f5db 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentAttribute.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentAttribute.java
@@ -9,6 +9,7 @@
*******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;
+import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceField;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMethod;
@@ -26,7 +27,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMethod;
* @since 3.0
*/
public interface JaxbPersistentAttribute
- extends JaxbContextNode {
+ extends JavaContextNode {
// ********** name **********
@@ -43,6 +44,11 @@ public interface JaxbPersistentAttribute
JavaResourceAttribute getJavaResourceAttribute();
+ /**
+ * Return the type name of the java resource attribute
+ * This might not return the same thing as getJavaResourceAttribute().getTypeName().
+ */
+ String getJavaResourceAttributeTypeName();
// ********** mapping **********
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentClass.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentClass.java
index b3989eab95..92c790f79e 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentClass.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/JaxbPersistentClass.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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
@@ -25,7 +25,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
* @since 3.0
*/
public interface JaxbPersistentClass
- extends JaxbPersistentType, XmlAccessTypeHolder, XmlAccessOrderHolder {
+ extends JaxbPersistentType, XmlAccessTypeHolder, XmlAccessOrderHolder, XmlAdaptable {
/**
* covariant override
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAdaptable.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAdaptable.java
new file mode 100644
index 0000000000..d0d03b92c1
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAdaptable.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.context;
+
+import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAnnotatedElement;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+
+public interface XmlAdaptable
+ extends JavaContextNode
+{
+ /********** XmlJavaTypeAdapter **********/
+ XmlJavaTypeAdapter getXmlJavaTypeAdapter();
+ XmlJavaTypeAdapter addXmlJavaTypeAdapter();
+ void removeXmlJavaTypeAdapter();
+ String XML_JAVA_TYPE_ADAPTER_PROPERTY = "xmlJavaTypeAdapter"; //$NON-NLS-1$
+
+ interface Owner {
+ JavaResourceAnnotatedElement getResource();
+ XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation adapterAnnotation);
+ void fireXmlAdapterChanged(XmlJavaTypeAdapter oldAdapter, XmlJavaTypeAdapter newAdapter);
+ }
+}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAttributeMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAttributeMapping.java
index 0d7fb7eadb..0890e0f6c7 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAttributeMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlAttributeMapping.java
@@ -23,7 +23,7 @@ package org.eclipse.jpt.jaxb.core.context;
* @since 3.0
*/
public interface XmlAttributeMapping
- extends JaxbAttributeMapping {
+ extends JaxbAttributeMapping, XmlAdaptable {
String getName();
@@ -44,4 +44,29 @@ public interface XmlAttributeMapping
String getSpecifiedNamespace();
void setSpecifiedNamespace(String namespace);
String SPECIFIED_NAMESPACE_PROPERTY = "specifiedNamespace"; //$NON-NLS-1$
+
+
+// // ********** xml schema type ************
+// /**
+// * Return whether this class has an XmlSchemaType annotation)
+// */
+// boolean hasXmlSchemaType();
+//
+// /**
+// * Return the xml schema type or null.
+// */
+// XmlSchemaType getXmlSchemaType();
+//
+// /**
+// * Set the xml schema type name, this will add the XmlSchemaType annotation
+// * and set its name to the specified name.
+// * To remove the XmlSchemaType annotation, pass in null.
+// * To set the name when the class already has an XmlSchemaType,
+// * set it directly on the XmlSchemaType.
+// */
+//
+// XmlSchemaType setXmlSchemaTypeName(String name);
+// String XML_SCHEMA_TYPE = "xmlSchemaType"; //$NON-NLS-1$
+//
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlElementMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlElementMapping.java
index d28f9402cb..e5d83bf2af 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlElementMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlElementMapping.java
@@ -23,7 +23,7 @@ package org.eclipse.jpt.jaxb.core.context;
* @since 3.0
*/
public interface XmlElementMapping
- extends JaxbAttributeMapping {
+ extends JaxbAttributeMapping, XmlAdaptable {
String getName();
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlJavaTypeAdapter.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlJavaTypeAdapter.java
index cfbe0b70aa..76d3d69158 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlJavaTypeAdapter.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/context/XmlJavaTypeAdapter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;
+import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
/**
@@ -25,7 +26,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
*/
public interface XmlJavaTypeAdapter
extends
- JaxbContextNode
+ JavaContextNode
{
XmlJavaTypeAdapterAnnotation getResourceXmlJavaTypeAdapter();
@@ -40,7 +41,11 @@ public interface XmlJavaTypeAdapter
/**************** type *****************/
String getType();
- void setType(String type);
- String TYPE_PROPERTY = "type"; //$NON-NLS-1$
+ String getDefaultType();
+ String DEFAULT_TYPE_PROPERTY = "defaultType"; //$NON-NLS-1$
+ String getSpecifiedType();
+ void setSpecifiedType(String type);
+ String SPECIFIED_TYPE_PROPERTY = "specifiedType"; //$NON-NLS-1$
String DEFAULT_TYPE = "javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT"; //$NON-NLS-1$
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbFactory.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbFactory.java
index e1760b6ec7..f66ae2ab06 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbFactory.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbFactory.java
@@ -32,7 +32,6 @@ import org.eclipse.jpt.jaxb.core.context.JaxbPersistentType;
import org.eclipse.jpt.jaxb.core.context.JaxbRegistry;
import org.eclipse.jpt.jaxb.core.context.XmlAttributeMapping;
import org.eclipse.jpt.jaxb.core.context.XmlElementMapping;
-import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.context.XmlNs;
import org.eclipse.jpt.jaxb.core.context.XmlRootElement;
import org.eclipse.jpt.jaxb.core.context.XmlSchema;
@@ -50,7 +49,6 @@ import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaPersistentProp
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaRegistry;
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlAttributeMapping;
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlElementMapping;
-import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlNs;
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlRootElement;
import org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlSchema;
@@ -62,7 +60,6 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceField;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMethod;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
-import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlNsAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlRootElementAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlSchemaTypeAnnotation;
@@ -127,10 +124,6 @@ public abstract class AbstractJaxbFactory
return new GenericJavaXmlSchemaType(parent, resourceXmlSchemaType);
}
- public XmlJavaTypeAdapter buildJavaXmlJavaTypeAdapter(JaxbContextNode parent, XmlJavaTypeAdapterAnnotation resourceXmlJavaTypeAdapter) {
- return new GenericJavaXmlJavaTypeAdapter(parent, resourceXmlJavaTypeAdapter);
- }
-
public JaxbEnumConstant buildJavaEnumConstant(JaxbPersistentEnum parent, JavaResourceEnumConstant resourceEnumConstant) {
return new GenericJavaEnumConstant(parent, resourceEnumConstant);
}
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 1ac1d13623..7fa947fedd 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -18,6 +18,7 @@ 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.jst.j2ee.model.internal.validation.ValidationCancelledException;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.eclipse.xsd.XSDSchema;
@@ -117,5 +118,9 @@ public class GenericPackage
new String[] {getNamespace(), this.name},
this));
}
+ if (reporter.isCancelled()) {
+ throw new ValidationCancelledException();
+ }
+ this.getPackageInfo().validate(messages, reporter);
}
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaAttributeMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaAttributeMapping.java
index 3f58a9e991..d53e1170d8 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaAttributeMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaAttributeMapping.java
@@ -9,14 +9,15 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.jaxb.core.context.JaxbAttributeMapping;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
-import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
import org.eclipse.jpt.jaxb.core.resource.java.Annotation;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
public abstract class AbstractJavaAttributeMapping<A extends Annotation>
- extends AbstractJaxbContextNode
+ extends AbstractJavaContextNode
implements JaxbAttributeMapping
{
@@ -88,6 +89,14 @@ public abstract class AbstractJavaAttributeMapping<A extends Annotation>
}
+ // ********** validation **********
+
+ @Override
+ public TextRange getValidationTextRange(CompilationUnit astRoot) {
+ return getAnnotation_() == null ? getJavaResourceAttribute().getNameTextRange(astRoot) : getAnnotation_().getTextRange(astRoot);
+ }
+
+
// ********** misc **********
@Override
@@ -103,4 +112,7 @@ public abstract class AbstractJavaAttributeMapping<A extends Annotation>
return this.getPersistentAttribute().getJavaResourceAttribute();
}
+ public String getJavaResourceAttributeType() {
+ return this.getPersistentAttribute().getJavaResourceAttributeTypeName();
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlJavaTypeAdapter.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaXmlJavaTypeAdapter.java
index 2a899e016c..e43ff59e9b 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlJavaTypeAdapter.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/AbstractJavaXmlJavaTypeAdapter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2011 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.
@@ -9,13 +9,14 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.jaxb.core.context.JaxbContextNode;
import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
-import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
-public class GenericJavaXmlJavaTypeAdapter
- extends AbstractJaxbContextNode
+public abstract class AbstractJavaXmlJavaTypeAdapter
+ extends AbstractJavaContextNode
implements XmlJavaTypeAdapter
{
@@ -23,13 +24,16 @@ public class GenericJavaXmlJavaTypeAdapter
protected String value;
- protected String type;
+ protected String specifiedType;
- public GenericJavaXmlJavaTypeAdapter(JaxbContextNode parent, XmlJavaTypeAdapterAnnotation resource) {
+ protected String defaultType;
+
+ public AbstractJavaXmlJavaTypeAdapter(JaxbContextNode parent, XmlJavaTypeAdapterAnnotation resource) {
super(parent);
this.resourceXmlJavaTypeAdapter = resource;
this.value = this.getResourceValue();
- this.type = this.getResourceTypeString();
+ this.specifiedType = this.getResourceTypeString();
+ this.defaultType = this.buildDefaultType();
}
@@ -37,7 +41,8 @@ public class GenericJavaXmlJavaTypeAdapter
public void synchronizeWithResourceModel() {
this.setValue_(this.getResourceValue());
- this.setType_(this.getResourceTypeString());
+ this.setSpecifiedType_(this.getResourceTypeString());
+ this.setDefaultType(this.buildDefaultType());
}
public void update() {
@@ -76,22 +81,52 @@ public class GenericJavaXmlJavaTypeAdapter
// ********** type **********
public String getType() {
- return this.type;
+ return this.specifiedTypeNotSet() ? this.getDefaultType() : this.getSpecifiedType();
+ }
+
+ /**
+ * @see javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT
+ */
+ protected boolean specifiedTypeNotSet() {
+ return getSpecifiedType() == null || getSpecifiedType().equals(DEFAULT_TYPE);
+ }
+
+ public String getDefaultType() {
+ return this.defaultType;
+ }
+
+ protected void setDefaultType(String defaultType) {
+ String oldDefaultType = this.defaultType;
+ this.defaultType = defaultType;
+ firePropertyChanged(DEFAULT_TYPE_PROPERTY, oldDefaultType, defaultType);
}
- public void setType(String location) {
+ protected abstract String buildDefaultType();
+
+ public String getSpecifiedType() {
+ return this.specifiedType;
+ }
+
+ public void setSpecifiedType(String location) {
this.resourceXmlJavaTypeAdapter.setType(location);
- this.setType_(location);
+ this.setSpecifiedType_(location);
}
- protected void setType_(String type) {
- String old = this.type;
- this.type = type;
- this.firePropertyChanged(TYPE_PROPERTY, old, type);
+ protected void setSpecifiedType_(String type) {
+ String old = this.specifiedType;
+ this.specifiedType = type;
+ this.firePropertyChanged(SPECIFIED_TYPE_PROPERTY, old, type);
}
protected String getResourceTypeString() {
return this.resourceXmlJavaTypeAdapter.getType();
}
+
+ // ********** validation **********
+
+ @Override
+ public TextRange getValidationTextRange(CompilationUnit astRoot) {
+ return getResourceXmlJavaTypeAdapter().getTextRange(astRoot);
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapter.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapter.java
new file mode 100644
index 0000000000..df7840cd84
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapter.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.internal.context.java;
+
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.jaxb.core.context.JaxbAttributeMapping;
+import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+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.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+public class GenericJavaAttributeXmlJavaTypeAdapter
+ extends AbstractJavaXmlJavaTypeAdapter
+{
+
+ public GenericJavaAttributeXmlJavaTypeAdapter(JaxbAttributeMapping parent, XmlJavaTypeAdapterAnnotation resource) {
+ super(parent, resource);
+ }
+
+ @Override
+ public JaxbAttributeMapping getParent() {
+ return (JaxbAttributeMapping) super.getParent();
+ }
+
+ protected JaxbPersistentAttribute getPersistentAttribute() {
+ return getParent().getParent();
+ }
+
+ // ********** type **********
+
+ @Override
+ protected String buildDefaultType() {
+ return this.getPersistentAttribute().getJavaResourceAttributeTypeName();
+ }
+
+
+ // ********** validation **********
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ if (getType() == null || getType().equals(XmlJavaTypeAdapter.DEFAULT_TYPE)) {
+ messages.add(
+ DefaultValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JaxbValidationMessages.ATTRIBUTE_MAPPING_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_DEFINED,
+ this,
+ getResourceXmlJavaTypeAdapter().getTypeTextRange(astRoot)));
+ }
+ }
+}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageInfo.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageInfo.java
index 81df5c4f46..5d62edf7fb 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageInfo.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageInfo.java
@@ -9,6 +9,9 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.jaxb.core.context.JaxbPackage;
@@ -18,14 +21,16 @@ import org.eclipse.jpt.jaxb.core.context.XmlAccessType;
import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.context.XmlSchema;
import org.eclipse.jpt.jaxb.core.context.XmlSchemaType;
+import org.eclipse.jpt.jaxb.core.internal.resource.java.source.SourceNode;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorOrderAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorTypeAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlSchemaTypeAnnotation;
-import org.eclipse.jpt.utility.Filter;
-import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.iterables.ListIterable;
+import org.eclipse.jst.j2ee.model.internal.validation.ValidationCancelledException;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class GenericJavaPackageInfo
extends AbstractJavaContextNode
@@ -53,6 +58,13 @@ public class GenericJavaPackageInfo
this.xmlJavaTypeAdapterContainer = new XmlJavaTypeAdapterContainer();
}
+ // **************** AbstractJaxbNode impl *********************************
+
+ @Override
+ public IResource getResource() {
+ return this.resourcePackage.getFile();
+ }
+
// ********** synchronize/update **********
@@ -221,8 +233,8 @@ public class GenericJavaPackageInfo
this.xmlJavaTypeAdapterContainer.moveContextElement(targetIndex, sourceIndex);
}
- protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlSchemaTypeAnnotation) {
- return this.getFactory().buildJavaXmlJavaTypeAdapter(this, xmlSchemaTypeAnnotation);
+ protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation) {
+ return new GenericJavaPackageXmlJavaTypeAdapter(this, xmlJavaTypeAdapterAnnotation);
}
protected void syncXmlJavaTypeAdapters() {
@@ -233,16 +245,47 @@ public class GenericJavaPackageInfo
protected ListIterable<XmlJavaTypeAdapterAnnotation> getXmlJavaTypeAdapterAnnotations() {
return (ListIterable<XmlJavaTypeAdapterAnnotation>) this.resourcePackage.getAnnotations(XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
}
+
+
+ // **************** misc **************************************************
-
+ protected CompilationUnit buildASTRoot() {
+ return this.resourcePackage.getJavaResourceCompilationUnit().buildASTRoot();
+ }
+
+
// **************** validation ********************************************
+ public void validate(List<IMessage> messages, IReporter reporter) {
+ if (reporter.isCancelled()) {
+ throw new ValidationCancelledException();
+ }
+ IFile file = this.resourcePackage.getFile();
+ // 'file' will be null if the type is "external" and binary;
+ // the file will be in a different project if the type is "external" and source;
+ // the type will be binary if it is in a JAR in the current project
+ if ((file != null)
+ && file.getProject().equals(getJaxbProject().getProject())
+ && (this.resourcePackage instanceof SourceNode)) {
+ // build the AST root here to pass down
+ this.validate(messages, reporter, this.buildASTRoot());
+ }
+ }
+
@Override
public TextRange getValidationTextRange(CompilationUnit astRoot) {
return this.resourcePackage.getNameTextRange(astRoot);
}
-
-
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ for (XmlJavaTypeAdapter adapter : getXmlJavaTypeAdapters()) {
+ adapter.validate(messages, reporter, astRoot);
+ }
+ }
+
+
/**
* xml schema type container
*/
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageXmlJavaTypeAdapter.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageXmlJavaTypeAdapter.java
new file mode 100644
index 0000000000..14f9daf4ab
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPackageXmlJavaTypeAdapter.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.internal.context.java;
+
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.jaxb.core.context.JaxbPackageInfo;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+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.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+public class GenericJavaPackageXmlJavaTypeAdapter
+ extends AbstractJavaXmlJavaTypeAdapter
+{
+
+ public GenericJavaPackageXmlJavaTypeAdapter(JaxbPackageInfo parent, XmlJavaTypeAdapterAnnotation resource) {
+ super(parent, resource);
+ }
+
+ @Override
+ protected String buildDefaultType() {
+ //there is no default type on a package level XmlJavaTypeAdapter, it must be specified
+ return null;
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ if (getSpecifiedType() == null || getSpecifiedType().equals(XmlJavaTypeAdapter.DEFAULT_TYPE)) {
+ messages.add(
+ DefaultValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JaxbValidationMessages.PACKAGE_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_SPECIFIED,
+ this,
+ getResourceXmlJavaTypeAdapter().getTypeTextRange(astRoot)));
+ }
+
+ }
+}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentAttribute.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentAttribute.java
index 67489b270d..3efd156e0d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentAttribute.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentAttribute.java
@@ -9,17 +9,23 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import java.util.Collection;
+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.JaxbAttributeMapping;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentClass;
import org.eclipse.jpt.jaxb.core.context.java.DefaultJavaAttributeMappingDefinition;
import org.eclipse.jpt.jaxb.core.context.java.JavaAttributeMappingDefinition;
-import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
import org.eclipse.jpt.utility.internal.Tools;
import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public abstract class GenericJavaPersistentAttribute
- extends AbstractJaxbContextNode
+ extends AbstractJavaContextNode
implements JaxbPersistentAttribute {
protected JaxbAttributeMapping mapping; // never null
@@ -310,4 +316,32 @@ public abstract class GenericJavaPersistentAttribute
public void toString(StringBuilder sb) {
sb.append(this.getName());
}
+
+
+ @Override
+ public TextRange getValidationTextRange(CompilationUnit astRoot) {
+ return this.getJavaResourceAttribute().getTextRange(astRoot);
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ this.getMapping().validate(messages, reporter, astRoot);
+ }
+
+
+ //**************** static methods *****************
+
+ protected static String getJavaResourceAttributeType(JavaResourceAttribute attribute) {
+ if (attribute.typeIsSubTypeOf(COLLECTION_CLASS_NAME)) {
+ if (attribute.getTypeTypeArgumentNamesSize() == 1) {
+ return attribute.getTypeTypeArgumentName(0);
+ }
+ return null;
+ }
+ return attribute.getTypeName();
+ }
+
+ private static final String COLLECTION_CLASS_NAME = Collection.class.getName();
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentClass.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentClass.java
index 18300e39ef..e12a679b2f 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentClass.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentClass.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -13,7 +13,9 @@ import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Vector;
+import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.jaxb.core.context.JaxbContextRoot;
import org.eclipse.jpt.jaxb.core.context.JaxbPackageInfo;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
@@ -22,12 +24,16 @@ import org.eclipse.jpt.jaxb.core.context.JaxbPersistentField;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentProperty;
import org.eclipse.jpt.jaxb.core.context.XmlAccessOrder;
import org.eclipse.jpt.jaxb.core.context.XmlAccessType;
+import org.eclipse.jpt.jaxb.core.context.XmlAdaptable;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAnnotatedElement;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceField;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMember;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceMethod;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorOrderAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorTypeAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.utility.Filter;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.StringTools;
@@ -35,6 +41,8 @@ import org.eclipse.jpt.utility.internal.iterables.ChainIterable;
import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
import org.eclipse.jpt.utility.internal.iterables.ListIterable;
import org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class GenericJavaPersistentClass
extends AbstractJavaPersistentType
@@ -50,6 +58,8 @@ public class GenericJavaPersistentClass
protected final Vector<JaxbPersistentAttribute> attributes = new Vector<JaxbPersistentAttribute>();
+ protected final XmlAdaptable xmlAdaptable;
+
public GenericJavaPersistentClass(JaxbContextRoot parent, JavaResourceType resourceType) {
super(parent, resourceType);
this.superPersistentClass = this.buildSuperPersistentClass();
@@ -57,6 +67,7 @@ public class GenericJavaPersistentClass
this.specifiedAccessOrder = this.getResourceAccessOrder();
this.defaultAccessType = this.buildDefaultAccessType();
this.defaultAccessOrder = this.buildDefaultAccessOrder();
+ this.xmlAdaptable = this.buildXmlAdaptable();
this.initializeAttributes();
}
@@ -72,6 +83,7 @@ public class GenericJavaPersistentClass
super.synchronizeWithResourceModel();
this.setSpecifiedAccessType_(this.getResourceAccessType());
this.setSpecifiedAccessOrder_(this.getResourceAccessOrder());
+ this.xmlAdaptable.synchronizeWithResourceModel();
this.syncAttributes();
}
@@ -80,6 +92,7 @@ public class GenericJavaPersistentClass
this.setSuperPersistentClass(this.buildSuperPersistentClass());
this.setDefaultAccessType(this.buildDefaultAccessType());
this.setDefaultAccessOrder(this.buildDefaultAccessOrder());
+ this.xmlAdaptable.update();
this.updateAttributes();
}
@@ -426,7 +439,7 @@ public class GenericJavaPersistentClass
return true;
}
//Lists do not have to have a corresponding setter method
- else if (getterMethod.getReturnTypeName().equals("java.util.List")) { //$NON-NLS-1$
+ else if (getterMethod.getTypeName().equals("java.util.List")) { //$NON-NLS-1$
return true;
}
else if (getterMethod.isAnnotated()) {
@@ -444,7 +457,7 @@ public class GenericJavaPersistentClass
}
}
//Lists do not have to have a corresponding setter method
- else if (getterMethod.getReturnTypeName().equals("java.util.List")) { //$NON-NLS-1$
+ else if (getterMethod.getTypeName().equals("java.util.List")) { //$NON-NLS-1$
return true;
}
else if (getterMethod.isAnnotated()) {
@@ -731,7 +744,7 @@ public class GenericJavaPersistentClass
return false;
}
- String returnTypeName = resourceMethod.getReturnTypeName();
+ String returnTypeName = resourceMethod.getTypeName();
if (returnTypeName == null) {
return false; // DOM method bindings can have a null name
}
@@ -757,7 +770,7 @@ public class GenericJavaPersistentClass
}
private static boolean methodIsBooleanGetter(JavaResourceMethod resourceMethod) {
- String returnTypeName = resourceMethod.getReturnTypeName();
+ String returnTypeName = resourceMethod.getTypeName();
String name = resourceMethod.getMethodName();
boolean booleanGetter = false;
if (name.startsWith("is")) { //$NON-NLS-1$
@@ -780,7 +793,7 @@ public class GenericJavaPersistentClass
* from being a getter or setter for a "persistent" property.
*/
private static boolean methodHasInvalidModifiers(JavaResourceMethod resourceMethod) {
- int modifiers = resourceMethod.getReturnTypeModifiers();
+ int modifiers = resourceMethod.getModifiers();
if (Modifier.isStatic(modifiers)) {
return true;
}
@@ -815,7 +828,7 @@ public class GenericJavaPersistentClass
*/
private static JavaResourceMethod getValidSiblingSetMethod(JavaResourceMethod getMethod, Collection<JavaResourceMethod> resourceMethods) {
String capitalizedAttributeName = StringTools.capitalize(getMethod.getName());
- String parameterTypeErasureName = getMethod.getReturnTypeName();
+ String parameterTypeErasureName = getMethod.getTypeName();
for (JavaResourceMethod sibling : resourceMethods) {
ListIterable<String> siblingParmTypeNames = sibling.getParameterTypeNames();
if ((sibling.getParametersSize() == 1)
@@ -841,11 +854,52 @@ public class GenericJavaPersistentClass
if (resourceMethod.isConstructor()) {
return false;
}
- String rtName = resourceMethod.getReturnTypeName();
+ String rtName = resourceMethod.getTypeName();
if (rtName == null) {
return false; // DOM method bindings can have a null name
}
return rtName.equals(returnTypeName);
}
+
+ //****************** XmlJavaTypeAdapter *********************
+
+ public XmlAdaptable buildXmlAdaptable() {
+ return new GenericJavaXmlAdaptable(this, new XmlAdaptable.Owner() {
+ public JavaResourceAnnotatedElement getResource() {
+ return getJavaResourceType();
+ }
+ public XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation adapterAnnotation) {
+ return GenericJavaPersistentClass.this.buildXmlJavaTypeAdapter(adapterAnnotation);
+ }
+ public void fireXmlAdapterChanged(XmlJavaTypeAdapter oldAdapter, XmlJavaTypeAdapter newAdapter) {
+ GenericJavaPersistentClass.this.firePropertyChanged(XML_JAVA_TYPE_ADAPTER_PROPERTY, oldAdapter, newAdapter);
+ }
+ });
+ }
+
+ public XmlJavaTypeAdapter getXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.getXmlJavaTypeAdapter();
+ }
+
+ public XmlJavaTypeAdapter addXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.addXmlJavaTypeAdapter();
+ }
+
+ protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation) {
+ return new GenericJavaTypeXmlJavaTypeAdapter(this, xmlJavaTypeAdapterAnnotation);
+ }
+
+ public void removeXmlJavaTypeAdapter() {
+ this.xmlAdaptable.removeXmlJavaTypeAdapter();
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ this.xmlAdaptable.validate(messages, reporter, astRoot);
+ for (JaxbPersistentAttribute attribute : getAttributes()) {
+ attribute.validate(messages, reporter, astRoot);
+ }
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentField.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentField.java
index dabb08e173..1103091ef5 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentField.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentField.java
@@ -32,6 +32,10 @@ public class GenericJavaPersistentField
return this.getResourceField();
}
+ public String getJavaResourceAttributeTypeName() {
+ return getJavaResourceAttributeType(this.getJavaResourceAttribute());
+ }
+
public JavaResourceField getResourceField() {
return this.resourceField;
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentProperty.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentProperty.java
index 6298673ac5..fcf33f4bf2 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentProperty.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaPersistentProperty.java
@@ -35,6 +35,13 @@ public class GenericJavaPersistentProperty
return this.calculateResourceMethodToAnnotate();
}
+ public String getJavaResourceAttributeTypeName() {
+ JavaResourceAttribute getterMethod = getResourceGetterMethod();
+ //it's invalid to have a setter without a getter, so just return null in this case
+ //rather than attempting to define the type from the setter's parameters
+ return getterMethod == null ? null : getJavaResourceAttributeType(getterMethod);
+ }
+
public JavaResourceMethod getResourceGetterMethod() {
return this.resourceGetter;
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaRegistry.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaRegistry.java
index c931547ac7..6fdba9a998 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaRegistry.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaRegistry.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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
@@ -98,7 +98,7 @@ public class GenericJavaRegistry
}
protected static boolean methodReturnTypeIsJAXBElement(JavaResourceMethod method) {
- return method.returnTypeIsSubTypeOf(JAXB_ELEMENT_TYPE_NAME);
+ return method.typeIsSubTypeOf(JAXB_ELEMENT_TYPE_NAME);
}
protected static final String JAXB_ELEMENT_TYPE_NAME = "javax.xml.bind.JAXBElement"; //$NON-NLS-1$
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaTypeXmlJavaTypeAdapter.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaTypeXmlJavaTypeAdapter.java
new file mode 100644
index 0000000000..4932837849
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaTypeXmlJavaTypeAdapter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.internal.context.java;
+
+import org.eclipse.jpt.jaxb.core.context.JaxbPersistentClass;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+
+public class GenericJavaTypeXmlJavaTypeAdapter
+ extends AbstractJavaXmlJavaTypeAdapter
+{
+
+ public GenericJavaTypeXmlJavaTypeAdapter(JaxbPersistentClass parent, XmlJavaTypeAdapterAnnotation resource) {
+ super(parent, resource);
+ }
+
+ @Override
+ public JaxbPersistentClass getParent() {
+ return (JaxbPersistentClass) super.getParent();
+ }
+
+ // ********** type **********
+ @Override
+ protected String buildDefaultType() {
+ return getParent().getJavaResourceType().getQualifiedName();
+ }
+
+}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAdaptable.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAdaptable.java
new file mode 100644
index 0000000000..c3456f6433
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAdaptable.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.internal.context.java;
+
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.jpt.jaxb.core.JaxbNode;
+import org.eclipse.jpt.jaxb.core.context.XmlAdaptable;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+
+class GenericJavaXmlAdaptable
+ extends AbstractJavaContextNode
+ implements XmlAdaptable {
+
+ protected XmlJavaTypeAdapter xmlJavaTypeAdapter;
+
+ protected XmlAdaptable.Owner owner;
+
+ GenericJavaXmlAdaptable(JaxbNode parent, XmlAdaptable.Owner owner) {
+ super(parent);
+ this.owner = owner;
+ this.initializeXmlJavaTypeAdapter();
+ }
+
+ public void synchronizeWithResourceModel() {
+ this.syncXmlJavaTypeAdapter();
+ }
+
+ public void update() {
+ this.updateXmlJavaTypeAdapter();
+ }
+
+ @Override
+ public TextRange getValidationTextRange(CompilationUnit astRoot) {
+ return this.xmlJavaTypeAdapter == null ? this.owner.getResource().getTextRange(astRoot) : this.xmlJavaTypeAdapter.getResourceXmlJavaTypeAdapter().getTextRange(astRoot);
+ }
+
+ public XmlJavaTypeAdapter getXmlJavaTypeAdapter() {
+ return this.xmlJavaTypeAdapter;
+ }
+
+ public XmlJavaTypeAdapter addXmlJavaTypeAdapter() {
+ if (this.xmlJavaTypeAdapter != null) {
+ throw new IllegalStateException();
+ }
+ XmlJavaTypeAdapterAnnotation annotation = (XmlJavaTypeAdapterAnnotation) this.owner.getResource().addAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+
+ XmlJavaTypeAdapter xmlJavaTypeAdapter = this.buildXmlJavaTypeAdapter(annotation);
+ this.setXmlJavaTypeAdapter_(xmlJavaTypeAdapter);
+ return xmlJavaTypeAdapter;
+ }
+
+ protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation) {
+ return this.owner.buildXmlJavaTypeAdapter(xmlJavaTypeAdapterAnnotation);
+ }
+
+ public void removeXmlJavaTypeAdapter() {
+ if (this.xmlJavaTypeAdapter == null) {
+ throw new IllegalStateException();
+ }
+ this.owner.getResource().removeAnnotation(XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ this.setXmlJavaTypeAdapter_(null);
+ }
+
+ protected void initializeXmlJavaTypeAdapter() {
+ XmlJavaTypeAdapterAnnotation annotation = this.getXmlJavaTypeAdapterAnnotation();
+ if (annotation != null) {
+ this.xmlJavaTypeAdapter = this.buildXmlJavaTypeAdapter(annotation);
+ }
+ }
+
+ protected XmlJavaTypeAdapterAnnotation getXmlJavaTypeAdapterAnnotation() {
+ return (XmlJavaTypeAdapterAnnotation) this.owner.getResource().getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ protected void syncXmlJavaTypeAdapter() {
+ XmlJavaTypeAdapterAnnotation annotation = this.getXmlJavaTypeAdapterAnnotation();
+ if (annotation != null) {
+ if (this.getXmlJavaTypeAdapter() != null) {
+ this.getXmlJavaTypeAdapter().synchronizeWithResourceModel();
+ }
+ else {
+ this.setXmlJavaTypeAdapter_(this.buildXmlJavaTypeAdapter(annotation));
+ }
+ }
+ else {
+ this.setXmlJavaTypeAdapter_(null);
+ }
+ }
+
+ protected void updateXmlJavaTypeAdapter() {
+ if (this.getXmlJavaTypeAdapter() != null) {
+ this.getXmlJavaTypeAdapter().update();
+ }
+ }
+
+ protected void setXmlJavaTypeAdapter_(XmlJavaTypeAdapter xmlJavaTypeAdapter) {
+ XmlJavaTypeAdapter oldXmlJavaTypeAdapter = this.xmlJavaTypeAdapter;
+ this.xmlJavaTypeAdapter = xmlJavaTypeAdapter;
+ this.owner.fireXmlAdapterChanged(oldXmlJavaTypeAdapter, xmlJavaTypeAdapter);
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ if (getXmlJavaTypeAdapter() != null) {
+ this.getXmlJavaTypeAdapter().validate(messages, reporter, astRoot);
+ }
+ }
+}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAttributeMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAttributeMapping.java
index 35f587e393..4ac6236112 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAttributeMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlAttributeMapping.java
@@ -9,10 +9,18 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.jaxb.core.MappingKeys;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
+import org.eclipse.jpt.jaxb.core.context.XmlAdaptable;
import org.eclipse.jpt.jaxb.core.context.XmlAttributeMapping;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAnnotatedElement;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAttributeAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class GenericJavaXmlAttributeMapping
extends AbstractJavaAttributeMapping<XmlAttributeAnnotation>
@@ -25,9 +33,12 @@ public class GenericJavaXmlAttributeMapping
protected String specifiedNamespace;
+ protected final XmlAdaptable xmlAdaptable;
+
public GenericJavaXmlAttributeMapping(JaxbPersistentAttribute parent) {
super(parent);
this.specifiedRequired = this.buildSpecifiedRequired();
+ this.xmlAdaptable = this.buildXmlAdaptable();
}
public String getKey() {
@@ -45,6 +56,13 @@ public class GenericJavaXmlAttributeMapping
this.setSpecifiedName_(this.buildSpecifiedName());
this.setSpecifiedRequired_(this.buildSpecifiedRequired());
this.setSpecifiedNamespace_(this.buildSpecifiedNamespace());
+ this.xmlAdaptable.synchronizeWithResourceModel();
+ }
+
+ @Override
+ public void update() {
+ super.update();
+ this.xmlAdaptable.update();
}
//************ XmlAttribute.name ***************
@@ -135,4 +153,46 @@ public class GenericJavaXmlAttributeMapping
protected String buildSpecifiedNamespace() {
return getMappingAnnotation() == null ? null : getMappingAnnotation().getNamespace();
}
+
+
+ //****************** XmlJavaTypeAdapter *********************
+
+ public XmlAdaptable buildXmlAdaptable() {
+ return new GenericJavaXmlAdaptable(this, new XmlAdaptable.Owner() {
+ public JavaResourceAnnotatedElement getResource() {
+ return getJavaResourceAttribute();
+ }
+ public XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation adapterAnnotation) {
+ return GenericJavaXmlAttributeMapping.this.buildXmlJavaTypeAdapter(adapterAnnotation);
+ }
+ public void fireXmlAdapterChanged(XmlJavaTypeAdapter oldAdapter, XmlJavaTypeAdapter newAdapter) {
+ GenericJavaXmlAttributeMapping.this.firePropertyChanged(XML_JAVA_TYPE_ADAPTER_PROPERTY, oldAdapter, newAdapter);
+ }
+ });
+ }
+
+ public XmlJavaTypeAdapter getXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.getXmlJavaTypeAdapter();
+ }
+
+ public XmlJavaTypeAdapter addXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.addXmlJavaTypeAdapter();
+ }
+
+ protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation) {
+ return new GenericJavaAttributeXmlJavaTypeAdapter(this, xmlJavaTypeAdapterAnnotation);
+ }
+
+ public void removeXmlJavaTypeAdapter() {
+ this.xmlAdaptable.removeXmlJavaTypeAdapter();
+ }
+
+
+ // ********** validation **********
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ this.xmlAdaptable.validate(messages, reporter, astRoot);
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlElementMapping.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlElementMapping.java
index 88c36c8a55..9e16810474 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlElementMapping.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/java/GenericJavaXmlElementMapping.java
@@ -9,10 +9,18 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.context.java;
+import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.jaxb.core.MappingKeys;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
+import org.eclipse.jpt.jaxb.core.context.XmlAdaptable;
import org.eclipse.jpt.jaxb.core.context.XmlElementMapping;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAnnotatedElement;
import org.eclipse.jpt.jaxb.core.resource.java.XmlElementAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class GenericJavaXmlElementMapping
extends AbstractJavaAttributeMapping<XmlElementAnnotation>
@@ -31,6 +39,8 @@ public class GenericJavaXmlElementMapping
protected String specifiedType;
+ protected final XmlAdaptable xmlAdaptable;
+
public GenericJavaXmlElementMapping(JaxbPersistentAttribute parent) {
super(parent);
this.specifiedName = this.buildSpecifiedName();
@@ -39,6 +49,7 @@ public class GenericJavaXmlElementMapping
this.specifiedNamespace = this.buildSpecifiedNamespace();
this.defaultValue = this.buildDefaultValue();
this.specifiedType = this.buildSpecifiedType();
+ this.xmlAdaptable = this.buildXmlAdaptable();
}
public String getKey() {
@@ -59,6 +70,13 @@ public class GenericJavaXmlElementMapping
this.setSpecifiedNamespace_(this.buildSpecifiedNamespace());
this.setDefaultValue_(this.buildDefaultValue());
this.setSpecifiedType_(this.buildSpecifiedType());
+ this.xmlAdaptable.synchronizeWithResourceModel();
+ }
+
+ @Override
+ public void update() {
+ super.update();
+ this.xmlAdaptable.update();
}
//************ XmlElement.name ***************
@@ -231,4 +249,45 @@ public class GenericJavaXmlElementMapping
return getMappingAnnotation() == null ? null : getMappingAnnotation().getType();
}
+
+ //****************** XmlJavaTypeAdapter *********************
+
+ public XmlAdaptable buildXmlAdaptable() {
+ return new GenericJavaXmlAdaptable(this, new XmlAdaptable.Owner() {
+ public JavaResourceAnnotatedElement getResource() {
+ return getJavaResourceAttribute();
+ }
+ public XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation adapterAnnotation) {
+ return GenericJavaXmlElementMapping.this.buildXmlJavaTypeAdapter(adapterAnnotation);
+ }
+ public void fireXmlAdapterChanged(XmlJavaTypeAdapter oldAdapter, XmlJavaTypeAdapter newAdapter) {
+ GenericJavaXmlElementMapping.this.firePropertyChanged(XML_JAVA_TYPE_ADAPTER_PROPERTY, oldAdapter, newAdapter);
+ }
+ });
+ }
+
+ public XmlJavaTypeAdapter getXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.getXmlJavaTypeAdapter();
+ }
+
+ public XmlJavaTypeAdapter addXmlJavaTypeAdapter() {
+ return this.xmlAdaptable.addXmlJavaTypeAdapter();
+ }
+
+ protected XmlJavaTypeAdapter buildXmlJavaTypeAdapter(XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation) {
+ return new GenericJavaAttributeXmlJavaTypeAdapter(this, xmlJavaTypeAdapterAnnotation);
+ }
+
+ public void removeXmlJavaTypeAdapter() {
+ this.xmlAdaptable.removeXmlJavaTypeAdapter();
+ }
+
+
+ // ********** validation **********
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
+ super.validate(messages, reporter, astRoot);
+ this.xmlAdaptable.validate(messages, reporter, astRoot);
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceAttribute.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceAttribute.java
index 465b6aad93..a713742487 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceAttribute.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceAttribute.java
@@ -129,11 +129,9 @@ abstract class SourceAttribute<A extends Attribute>
private void syncModifiers(int astModifiers) {
int old = this.modifiers;
this.modifiers = astModifiers;
- this.firePropertyChanged(getModifiersProperty(), old, astModifiers);
+ this.firePropertyChanged(MODIFIERS_PROPERTY, old, astModifiers);
}
- protected abstract String getModifiersProperty();
-
/**
* zero seems like a reasonable default...
*/
@@ -150,11 +148,9 @@ abstract class SourceAttribute<A extends Attribute>
private void syncTypeName(String astTypeName) {
String old = this.typeName;
this.typeName = astTypeName;
- this.firePropertyChanged(getTypeNameProperty(), old, astTypeName);
+ this.firePropertyChanged(TYPE_NAME_PROPERTY, old, astTypeName);
}
- protected abstract String getTypeNameProperty();
-
/**
* this can be an array (e.g. "java.lang.String[]");
* but no generic type arguments
@@ -182,11 +178,9 @@ abstract class SourceAttribute<A extends Attribute>
private void syncTypeIsInterface(boolean astTypeIsInterface) {
boolean old = this.typeIsInterface;
this.typeIsInterface = astTypeIsInterface;
- this.firePropertyChanged(getTypeIsInterfaceProperty(), old, astTypeIsInterface);
+ this.firePropertyChanged(TYPE_IS_INTERFACE_PROPERTY, old, astTypeIsInterface);
}
- protected abstract String getTypeIsInterfaceProperty();
-
private boolean buildTypeIsInterface(ITypeBinding typeBinding) {
return (typeBinding != null) && ( ! typeBinding.isArray()) && typeBinding.isInterface();
}
@@ -199,11 +193,9 @@ abstract class SourceAttribute<A extends Attribute>
private void syncTypeIsEnum(boolean astTypeIsEnum) {
boolean old = this.typeIsEnum;
this.typeIsEnum = astTypeIsEnum;
- this.firePropertyChanged(getTypeIsEnumProperty(), old, astTypeIsEnum);
+ this.firePropertyChanged(TYPE_IS_ENUM_PROPERTY, old, astTypeIsEnum);
}
- protected abstract String getTypeIsEnumProperty();
-
private boolean buildTypeIsEnum(ITypeBinding typeBinding) {
return (typeBinding != null) && ( ! typeBinding.isArray()) && typeBinding.isEnum();
}
@@ -214,11 +206,9 @@ abstract class SourceAttribute<A extends Attribute>
}
private void syncTypeSuperclassNames(List<String> astTypeSuperclassNames) {
- this.synchronizeList(astTypeSuperclassNames, this.typeSuperclassNames, getTypeSuperclassNamesProperty());
+ this.synchronizeList(astTypeSuperclassNames, this.typeSuperclassNames, TYPE_SUPERCLASS_NAMES_LIST);
}
- protected abstract String getTypeSuperclassNamesProperty();
-
private List<String> buildTypeSuperclassNames(ITypeBinding typeBinding) {
if (typeBinding == null) {
return Collections.emptyList();
@@ -242,11 +232,9 @@ abstract class SourceAttribute<A extends Attribute>
// }
//
private void syncTypeInterfaceNames(Collection<String> astTypeInterfaceNames) {
- this.synchronizeCollection(astTypeInterfaceNames, this.typeInterfaceNames, getTypeInterfaceNamesProperty());
+ this.synchronizeCollection(astTypeInterfaceNames, this.typeInterfaceNames, TYPE_INTERFACE_NAMES_COLLECTION);
}
- protected abstract String getTypeInterfaceNamesProperty();
-
private Collection<String> buildTypeInterfaceNames(ITypeBinding typeBinding) {
if (typeBinding == null) {
return Collections.emptySet();
@@ -280,11 +268,9 @@ abstract class SourceAttribute<A extends Attribute>
}
private void syncTypeTypeArgumentNames(List<String> astTypeTypeArgumentNames) {
- this.synchronizeList(astTypeTypeArgumentNames, this.typeTypeArgumentNames, this.getTypeTypeArgumentNamesProperty());
+ this.synchronizeList(astTypeTypeArgumentNames, this.typeTypeArgumentNames, TYPE_TYPE_ARGUMENT_NAMES_LIST);
}
- protected abstract String getTypeTypeArgumentNamesProperty();
-
/**
* these types can be arrays (e.g. "java.lang.String[]");
* but they won't have any further nested generic type arguments
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceField.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceField.java
index c735914213..742fac982e 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceField.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceField.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2010 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2011 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.
@@ -50,45 +50,4 @@ final class SourceField
private SourceField(JavaResourceType parent, FieldAttribute field){
super(parent, field);
}
-
-
- // ******** SourceAttribute implementation ********
-
- @Override
- protected String getModifiersProperty() {
- return MODIFIERS_PROPERTY;
- }
-
- @Override
- protected String getTypeNameProperty() {
- return TYPE_NAME_PROPERTY;
- }
-
- @Override
- protected String getTypeIsInterfaceProperty() {
- return TYPE_IS_INTERFACE_PROPERTY;
- }
-
- @Override
- protected String getTypeIsEnumProperty() {
- return TYPE_IS_ENUM_PROPERTY;
- }
-
- @Override
- protected String getTypeSuperclassNamesProperty() {
- return TYPE_SUPERCLASS_NAMES_LIST;
- }
-
- @Override
- protected String getTypeInterfaceNamesProperty() {
- return TYPE_INTERFACE_NAMES_COLLECTION;
- }
-
- @Override
- protected String getTypeTypeArgumentNamesProperty() {
- return TYPE_TYPE_ARGUMENT_NAMES_LIST;
- }
-
-
-
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceMethod.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceMethod.java
index 7aa53a80e4..47cd24497e 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceMethod.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/java/source/SourceMethod.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -123,85 +123,6 @@ final class SourceMethod
return this.annotatedElement.matches(signature, occurrence);
}
- public boolean returnTypeIsSubTypeOf(String tn) {
- return this.typeIsSubTypeOf(tn);
- }
-
- public boolean returnTypeIsVariablePrimitive() {
- return this.typeIsVariablePrimitive();
- }
-
- public int getReturnTypeModifiers() {
- return this.getModifiers();
- }
-
- @Override
- protected String getModifiersProperty() {
- return RETURN_TYPE_MODIFIERS_PROPERTY;
- }
-
- public String getReturnTypeName() {
- return this.getTypeName();
- }
-
- @Override
- protected String getTypeNameProperty() {
- return RETURN_TYPE_NAME_PROPERTY;
- }
-
- public boolean returnTypeIsInterface() {
- return this.typeIsInterface();
- }
-
- @Override
- protected String getTypeIsInterfaceProperty() {
- return RETURN_TYPE_IS_INTERFACE_PROPERTY;
- }
-
- public boolean returnTypeIsEnum() {
- return this.typeIsEnum();
- }
-
- @Override
- protected String getTypeIsEnumProperty() {
- return RETURN_TYPE_IS_ENUM_PROPERTY;
- }
-
- public ListIterable<String> getReturnTypeSuperclassNames() {
- return this.getTypeSuperclassNames();
- }
-
- @Override
- protected String getTypeSuperclassNamesProperty() {
- return RETURN_TYPE_SUPERCLASS_NAMES_LIST;
- }
-
- public Iterable<String> getReturnTypeInterfaceNames() {
- return this.getTypeInterfaceNames();
- }
-
- @Override
- protected String getTypeInterfaceNamesProperty() {
- return RETURN_TYPE_INTERFACE_NAMES_COLLECTION;
- }
-
- public ListIterable<String> getReturnTypeTypeArgumentNames() {
- return this.getTypeTypeArgumentNames();
- }
-
- @Override
- protected String getTypeTypeArgumentNamesProperty() {
- return RETURN_TYPE_TYPE_ARGUMENT_NAMES_LIST;
- }
-
- public int getReturnTypeTypeArgumentNamesSize() {
- return this.getTypeTypeArgumentNamesSize();
- }
-
- public String getReturnTypeTypeArgumentName(int index) {
- return this.getTypeTypeArgumentName(index);
- }
-
// ***** parameter type names
public ListIterable<String> getParameterTypeNames() {
return new LiveCloneListIterable<String>(this.parameterTypeNames);
@@ -212,7 +133,7 @@ final class SourceMethod
}
private void syncParameterTypeNames(List<String> astParameterTypeNames) {
- this.synchronizeList(astParameterTypeNames, this.parameterTypeNames, getTypeSuperclassNamesProperty());
+ this.synchronizeList(astParameterTypeNames, this.parameterTypeNames, PARAMETER_TYPE_NAMES_LIST);
}
private List<String> buildParameterTypeNames(IMethodBinding methodBinding) {
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/validation/JaxbValidationMessages.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/validation/JaxbValidationMessages.java
index 901e384784..1af5966d28 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/validation/JaxbValidationMessages.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/validation/JaxbValidationMessages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -20,11 +20,16 @@ public interface JaxbValidationMessages {
// validation on package
public static final String PACKAGE_NO_SCHEMA_FOR_NAMESPACE = "PACKAGE_NO_SCHEMA_FOR_NAMESPACE";
+ public static final String PACKAGE_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_SPECIFIED = "PACKAGE_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_SPECIFIED";
// validation on type
public static final String XML_TYPE_UNMATCHING_NAMESPACE_FOR_ANONYMOUS_TYPE = "XML_TYPE_UNMATCHING_NAMESPACE_FOR_ANONYMOUS_TYPE";
public static final String XML_TYPE_UNRESOLVED_SCHEMA_TYPE = "XML_TYPE_UNRESOLVED_SCHEMA_TYPE";
-
+
public static final String XML_ROOT_ELEMENT_UNRESOLVED_SCHEMA_ELEMENT = "XML_ROOT_ELEMENT_UNRESOLVED_SCHEMA_ELEMENT";
public static final String XML_ROOT_ELEMENT_TYPE_CONFLICTS_WITH_XML_TYPE = "XML_ROOT_ELEMENT_TYPE_CONFLICTS_WITH_XML_TYPE";
+
+ // validation on attribute mapping
+ public static final String ATTRIBUTE_MAPPING_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_DEFINED = "ATTRIBUTE_MAPPING_XML_JAVA_TYPE_ADAPTER_TYPE_NOT_DEFINED";
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceAttribute.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceAttribute.java
index b8d41b2419..23385f889d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceAttribute.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceAttribute.java
@@ -9,6 +9,8 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.resource.java;
+import org.eclipse.jpt.utility.internal.iterables.ListIterable;
+
/**
* Java source code or binary attribute (field/method)
*
@@ -25,4 +27,72 @@ public interface JavaResourceAttribute
extends JavaResourceMember
{
+ /**
+ * Return whether the attribute's type implements or extends the specified
+ * type.
+ */
+ boolean typeIsSubTypeOf(String typeName);
+
+ /**
+ * Return whether the attribute's type is a "variable" primitive type
+ * (i.e. any primitive type except 'void').
+ */
+ boolean typeIsVariablePrimitive();
+
+ /**
+ * @see java.lang.reflect.Modifier
+ */
+ int getModifiers();
+ String MODIFIERS_PROPERTY = "modifiers"; //$NON-NLS-1$
+
+ /**
+ * Return the resolved, qualified name of the attribute's type
+ * (e.g. "java.util.Collection" or "byte[]").
+ * If the type is an array, this name will include the appropriate number
+ * of bracket pairs.
+ * This name will not include the type's generic type arguments
+ * (e.g. "java.util.Collection<java.lang.String>" will only return
+ * "java.util.Collection").
+ * @see #typeTypeArgumentNames()
+ */
+ String getTypeName();
+ String TYPE_NAME_PROPERTY = "typeName"; //$NON-NLS-1$
+
+ /**
+ * Return whether the attribute type is an interface.
+ */
+ boolean typeIsInterface();
+ String TYPE_IS_INTERFACE_PROPERTY = "typeIsInterface"; //$NON-NLS-1$
+
+ /**
+ * Return whether the attribute type is an enum.
+ */
+ boolean typeIsEnum();
+ String TYPE_IS_ENUM_PROPERTY = "typeIsEnum"; //$NON-NLS-1$
+
+ /**
+ * Return the names of the attribute type's superclasses.
+ */
+ ListIterable<String> getTypeSuperclassNames();
+ String TYPE_SUPERCLASS_NAMES_LIST = "typeSuperclassNames"; //$NON-NLS-1$
+
+ /**
+ * Return the names of the attribute type's interfaces.
+ */
+ Iterable<String> getTypeInterfaceNames();
+ String TYPE_INTERFACE_NAMES_COLLECTION = "typeInterfaceNames"; //$NON-NLS-1$
+
+ /**
+ * Return the names of the attribute type's type arguments.
+ * The name for any argument that is an array will contain the appropriate
+ * number of bracket pairs.
+ * The names will not include any further generic type arguments.
+ */
+ ListIterable<String> getTypeTypeArgumentNames();
+ String TYPE_TYPE_ARGUMENT_NAMES_LIST = "typeTypeArgumentNames"; //$NON-NLS-1$
+
+ int getTypeTypeArgumentNamesSize();
+
+ String getTypeTypeArgumentName(int index);
+
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceField.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceField.java
index 03cd4ca78a..a5c82bd549 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceField.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceField.java
@@ -9,8 +9,6 @@
******************************************************************************/
package org.eclipse.jpt.jaxb.core.resource.java;
-import org.eclipse.jpt.utility.internal.iterables.ListIterable;
-
/**
* Java source code or binary field
*
@@ -26,73 +24,4 @@ import org.eclipse.jpt.utility.internal.iterables.ListIterable;
public interface JavaResourceField
extends JavaResourceAttribute
{
-
- /**
- * Return whether the attribute's type implements or extends the specified
- * type.
- */
- boolean typeIsSubTypeOf(String typeName);
-
- /**
- * Return whether the attribute's type is a "variable" primitive type
- * (i.e. any primitive type except 'void').
- */
- boolean typeIsVariablePrimitive();
-
- /**
- * @see java.lang.reflect.Modifier
- */
- int getModifiers();
- String MODIFIERS_PROPERTY = "modifiers"; //$NON-NLS-1$
-
- /**
- * Return the resolved, qualified name of the attribute's type
- * (e.g. "java.util.Collection" or "byte[]").
- * If the type is an array, this name will include the appropriate number
- * of bracket pairs.
- * This name will not include the type's generic type arguments
- * (e.g. "java.util.Collection<java.lang.String>" will only return
- * "java.util.Collection").
- * @see #typeTypeArgumentNames()
- */
- String getTypeName();
- String TYPE_NAME_PROPERTY = "typeName"; //$NON-NLS-1$
-
- /**
- * Return whether the attribute type is an interface.
- */
- boolean typeIsInterface();
- String TYPE_IS_INTERFACE_PROPERTY = "typeIsInterface"; //$NON-NLS-1$
-
- /**
- * Return whether the attribute type is an enum.
- */
- boolean typeIsEnum();
- String TYPE_IS_ENUM_PROPERTY = "typeIsEnum"; //$NON-NLS-1$
-
- /**
- * Return the names of the attribute type's superclasses.
- */
- ListIterable<String> getTypeSuperclassNames();
- String TYPE_SUPERCLASS_NAMES_LIST = "typeSuperclassNames"; //$NON-NLS-1$
-
- /**
- * Return the names of the attribute type's interfaces.
- */
- Iterable<String> getTypeInterfaceNames();
- String TYPE_INTERFACE_NAMES_COLLECTION = "typeInterfaceNames"; //$NON-NLS-1$
-
- /**
- * Return the names of the attribute type's type arguments.
- * The name for any argument that is an array will contain the appropriate
- * number of bracket pairs.
- * The names will not include any further generic type arguments.
- */
- ListIterable<String> getTypeTypeArgumentNames();
- String TYPE_TYPE_ARGUMENT_NAMES_LIST = "typeTypeArgumentNames"; //$NON-NLS-1$
-
- int getTypeTypeArgumentNamesSize();
-
- String getTypeTypeArgumentName(int index);
-
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceMethod.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceMethod.java
index 55e0f2c99c..f1f3c77195 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceMethod.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/java/JavaResourceMethod.java
@@ -39,74 +39,6 @@ public interface JavaResourceMethod
*/
boolean isFor(MethodSignature methodSignature, int occurrence);
- /**
- * Return whether the method's return type implements or extends the specified
- * type.
- */
- boolean returnTypeIsSubTypeOf(String typeName);
-
- /**
- * Return whether the method's return type is a "variable" primitive type
- * (i.e. any primitive type except 'void').
- */
- boolean returnTypeIsVariablePrimitive();
-
- /**
- * @see java.lang.reflect.Modifier
- */
- int getReturnTypeModifiers();
- String RETURN_TYPE_MODIFIERS_PROPERTY = "returnTypeModifiers"; //$NON-NLS-1$
-
- /**
- * Return the resolved, qualified name of the method's return type
- * (e.g. "java.util.Collection" or "byte[]").
- * If the return type is an array, this name will include the appropriate number
- * of bracket pairs.
- * This name will not include the return type's generic type arguments
- * (e.g. "java.util.Collection<java.lang.String>" will only return
- * "java.util.Collection").
- * @see #returnTypeTypeArgumentNames()
- */
- String getReturnTypeName();
- String RETURN_TYPE_NAME_PROPERTY = "returnTypeName"; //$NON-NLS-1$
-
- /**
- * Return whether the method return type is an interface.
- */
- boolean returnTypeIsInterface();
- String RETURN_TYPE_IS_INTERFACE_PROPERTY = "returnTypeIsInterface"; //$NON-NLS-1$
-
- /**
- * Return whether the method return type is an enum.
- */
- boolean returnTypeIsEnum();
- String RETURN_TYPE_IS_ENUM_PROPERTY = "returnTypeIsEnum"; //$NON-NLS-1$
-
- /**
- * Return the names of the method return type's superclasses.
- */
- ListIterable<String> getReturnTypeSuperclassNames();
- String RETURN_TYPE_SUPERCLASS_NAMES_LIST = "returnTypeSuperclassNames"; //$NON-NLS-1$
-
- /**
- * Return the names of the method return type's interfaces.
- */
- Iterable<String> getReturnTypeInterfaceNames();
- String RETURN_TYPE_INTERFACE_NAMES_COLLECTION = "returnTypeInterfaceNames"; //$NON-NLS-1$
-
- /**
- * Return the names of the method return type's type arguments.
- * The name for any argument that is an array will contain the appropriate
- * number of bracket pairs.
- * The names will not include any further generic type arguments.
- */
- ListIterable<String> getReturnTypeTypeArgumentNames();
- String RETURN_TYPE_TYPE_ARGUMENT_NAMES_LIST = "returnTypeTypeArgumentNames"; //$NON-NLS-1$
-
- int getReturnTypeTypeArgumentNamesSize();
-
- String getReturnTypeTypeArgumentName(int index);
-
ListIterable<String> getParameterTypeNames();
String PARAMETER_TYPE_NAMES_LIST = "parameterTypeNames"; //$NON-NLS-1$
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapterTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapterTests.java
new file mode 100644
index 0000000000..98a7abd548
--- /dev/null
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaAttributeXmlJavaTypeAdapterTests.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.tests.internal.context.java;
+
+import java.util.Iterator;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.dom.Annotation;
+import org.eclipse.jdt.core.dom.MarkerAnnotation;
+import org.eclipse.jpt.core.utility.jdt.AnnotatedElement;
+import org.eclipse.jpt.core.utility.jdt.Member;
+import org.eclipse.jpt.core.utility.jdt.ModifiedDeclaration;
+import org.eclipse.jpt.jaxb.core.context.XmlAttributeMapping;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
+
+
+@SuppressWarnings("nls")
+public class GenericJavaAttributeXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
+{
+
+ public GenericJavaAttributeXmlJavaTypeAdapterTests(String name) {
+ super(name);
+ }
+
+ private ICompilationUnit createTypeWithXmlTypeWithXmlJavaTypeAdapter() throws Exception {
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JAXB.XML_TYPE, JAXB.XML_ATTRIBUTE, JAXB.XML_JAVA_TYPE_ADAPTER);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@XmlType").append(CR);
+ }
+ @Override
+ public void appendIdFieldAnnotationTo(StringBuilder sb) {
+ sb.append("@XmlAttribute").append(CR);
+ sb.append("@XmlJavaTypeAdapter");
+ }
+ });
+ }
+
+ public void testModifyValue() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ XmlAttributeMapping contextAttributeMapping = (XmlAttributeMapping) CollectionTools.get(CollectionTools.get(getContextRoot().getPersistentClasses(), 0).getAttributes(), 0).getMapping();
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextAttributeMapping.getXmlJavaTypeAdapter();
+ JavaResourceAttribute resourceAttribute = contextAttributeMapping.getJavaResourceAttribute();
+
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+
+ contextXmlJavaTypeAdapter.setValue("foo");
+ XmlJavaTypeAdapterAnnotation javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertEquals("foo", javaTypeAdapterAnnotation.getValue());
+ assertEquals("foo", contextXmlJavaTypeAdapter.getValue());
+
+ //verify the xml schema type annotation is not removed when the value is set to null
+ contextXmlJavaTypeAdapter.setValue(null);
+ javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(javaTypeAdapterAnnotation.getValue());
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+ }
+
+ public void testUpdateValue() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ XmlAttributeMapping contextAttributeMapping = (XmlAttributeMapping) CollectionTools.get(CollectionTools.get(getContextRoot().getPersistentClasses(), 0).getAttributes(), 0).getMapping();
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextAttributeMapping.getXmlJavaTypeAdapter();
+ JavaResourceAttribute resourceAttribute = contextAttributeMapping.getJavaResourceAttribute();
+
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+
+ //add a value member value pair
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceAttribute);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaAttributeXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__VALUE, "String");
+ }
+ });
+ assertEquals("String", contextXmlJavaTypeAdapter.getValue());
+
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaAttributeXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ }
+ });
+ assertNull(contextAttributeMapping.getXmlJavaTypeAdapter());
+ }
+
+ public void testModifyType() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ XmlAttributeMapping contextAttributeMapping = (XmlAttributeMapping) CollectionTools.get(CollectionTools.get(getContextRoot().getPersistentClasses(), 0).getAttributes(), 0).getMapping();
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextAttributeMapping.getXmlJavaTypeAdapter();
+ JavaResourceAttribute resourceAttribute = contextAttributeMapping.getJavaResourceAttribute();
+
+ assertEquals("int", contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getDefaultType());
+
+ contextXmlJavaTypeAdapter.setSpecifiedType("foo");
+ XmlJavaTypeAdapterAnnotation javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertEquals("foo", javaTypeAdapterAnnotation.getType());
+ assertEquals("foo", contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getDefaultType());
+
+ contextXmlJavaTypeAdapter.setSpecifiedType(null);
+ javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(javaTypeAdapterAnnotation.getType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getDefaultType());
+ }
+
+ public void testUpdateType() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ XmlAttributeMapping contextAttributeMapping = (XmlAttributeMapping) CollectionTools.get(CollectionTools.get(getContextRoot().getPersistentClasses(), 0).getAttributes(), 0).getMapping();
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextAttributeMapping.getXmlJavaTypeAdapter();
+ JavaResourceAttribute resourceAttribute = contextAttributeMapping.getJavaResourceAttribute();
+
+ assertEquals("int", contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getDefaultType());
+
+ //add a type member value pair
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceAttribute);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaAttributeXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__TYPE, "String");
+ }
+ });
+ assertEquals("String", contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("String", contextXmlJavaTypeAdapter.getType());
+ assertEquals("int", contextXmlJavaTypeAdapter.getDefaultType());
+
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaAttributeXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ }
+ });
+ assertNull(contextAttributeMapping.getXmlJavaTypeAdapter());
+ }
+
+ protected void addXmlJavaTypeAdapterTypeMemberValuePair(ModifiedDeclaration declaration, String name, String typeName) {
+ this.addMemberValuePair(
+ (MarkerAnnotation) this.getXmlJavaTypeAdapterAnnotation(declaration),
+ name,
+ this.newTypeLiteral(declaration.getAst(), typeName));
+ }
+
+ protected void addXmlJavaTypeAdapterMemberValuePair(ModifiedDeclaration declaration, String name, String value) {
+ this.addMemberValuePair((MarkerAnnotation) this.getXmlJavaTypeAdapterAnnotation(declaration), name, value);
+ }
+
+ protected void removeXmlJavaTypeAdapterAnnotation(ModifiedDeclaration declaration) {
+ this.removeAnnotation(declaration, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ protected Annotation getXmlJavaTypeAdapterAnnotation(ModifiedDeclaration declaration) {
+ return declaration.getAnnotationNamed(XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+}
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlJavaTypeAdapterTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPackageXmlJavaTypeAdapterTests.java
index 9501b0796b..5331da05dc 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlJavaTypeAdapterTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPackageXmlJavaTypeAdapterTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -27,10 +27,10 @@ import org.eclipse.jpt.utility.internal.CollectionTools;
@SuppressWarnings("nls")
-public class GenericJavaXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
+public class GenericJavaPackageXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
{
- public GenericJavaXmlJavaTypeAdapterTests(String name) {
+ public GenericJavaPackageXmlJavaTypeAdapterTests(String name) {
super(name);
}
@@ -73,14 +73,14 @@ public class GenericJavaXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
AnnotatedElement annotatedElement = this.annotatedElement(resourcePackage);
annotatedElement.edit(new Member.Editor() {
public void edit(ModifiedDeclaration declaration) {
- GenericJavaXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__VALUE, "String");
+ GenericJavaPackageXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__VALUE, "String");
}
});
assertEquals("String", contextXmlJavaTypeAdapter.getValue());
annotatedElement.edit(new Member.Editor() {
public void edit(ModifiedDeclaration declaration) {
- GenericJavaXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ GenericJavaPackageXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
}
});
assertFalse(contextPackageInfo.getXmlJavaTypeAdapters().iterator().hasNext());
@@ -93,17 +93,21 @@ public class GenericJavaXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
JavaResourcePackage resourcePackage = contextPackageInfo.getResourcePackage();
assertNull(contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertNull(contextXmlJavaTypeAdapter.getDefaultType());
- contextXmlJavaTypeAdapter.setType("foo");
+ contextXmlJavaTypeAdapter.setSpecifiedType("foo");
XmlJavaTypeAdapterAnnotation javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourcePackage.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
assertEquals("foo", javaTypeAdapterAnnotation.getType());
assertEquals("foo", contextXmlJavaTypeAdapter.getType());
//verify the xml schema type annotation is not removed when the type is set to null
- contextXmlJavaTypeAdapter.setType(null);
+ contextXmlJavaTypeAdapter.setSpecifiedType(null);
javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourcePackage.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
assertNull(javaTypeAdapterAnnotation.getType());
assertNull(contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertNull(contextXmlJavaTypeAdapter.getDefaultType());
}
public void testUpdateType() throws Exception {
@@ -113,19 +117,21 @@ public class GenericJavaXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
JavaResourcePackage resourcePackage = contextPackageInfo.getResourcePackage();
assertNull(contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertNull(contextXmlJavaTypeAdapter.getDefaultType());
//add a type member value pair
AnnotatedElement annotatedElement = this.annotatedElement(resourcePackage);
annotatedElement.edit(new Member.Editor() {
public void edit(ModifiedDeclaration declaration) {
- GenericJavaXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__TYPE, "String");
+ GenericJavaPackageXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__TYPE, "String");
}
});
assertEquals("String", contextXmlJavaTypeAdapter.getType());
annotatedElement.edit(new Member.Editor() {
public void edit(ModifiedDeclaration declaration) {
- GenericJavaXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ GenericJavaPackageXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
}
});
assertFalse(contextPackageInfo.getXmlJavaTypeAdapters().iterator().hasNext());
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPersistentClassTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPersistentClassTests.java
index 4596b2836d..88fa5808f5 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPersistentClassTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaPersistentClassTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -42,6 +42,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorOrderAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorTypeAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAttributeAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlRootElementAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlTransientAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlTypeAnnotation;
@@ -2012,6 +2013,58 @@ public class GenericJavaPersistentClassTests extends JaxbContextModelTestCase
this.addModifiers(resourceSetter, ModifierKeyword.PUBLIC_KEYWORD);
}
+ public void testModifyXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlType();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ AbstractJavaResourceType resourceType = persistentClass.getJavaResourceType();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(persistentClass.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+ persistentClass.addXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(persistentClass.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ persistentClass.removeXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ public void testUpdateXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlType();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ AbstractJavaResourceType resourceType = persistentClass.getJavaResourceType();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(persistentClass.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+
+ //add an XmlJavaTypeAdapter annotation
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceType);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaPersistentClassTests.this.addMarkerAnnotation(declaration.getDeclaration(), XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(persistentClass.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ //remove the XmlJavaTypeAdapter annotation
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaPersistentClassTests.this.removeAnnotation(declaration, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(persistentClass.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+ }
+
protected void addModifiers(JavaResourceMember resourceMember, final ModifierKeyword... modifiers) {
AnnotatedElement annotatedElement = this.annotatedElement(resourceMember);
annotatedElement.edit(new Member.Editor() {
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaTypeXmlJavaTypeAdapterTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaTypeXmlJavaTypeAdapterTests.java
new file mode 100644
index 0000000000..a295d82b09
--- /dev/null
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaTypeXmlJavaTypeAdapterTests.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.core.tests.internal.context.java;
+
+import java.util.Iterator;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.dom.Annotation;
+import org.eclipse.jdt.core.dom.MarkerAnnotation;
+import org.eclipse.jpt.core.utility.jdt.AnnotatedElement;
+import org.eclipse.jpt.core.utility.jdt.Member;
+import org.eclipse.jpt.core.utility.jdt.ModifiedDeclaration;
+import org.eclipse.jpt.jaxb.core.context.JaxbPersistentClass;
+import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
+import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlAccessorOrderAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
+import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
+
+
+@SuppressWarnings("nls")
+public class GenericJavaTypeXmlJavaTypeAdapterTests extends JaxbContextModelTestCase
+{
+
+ public GenericJavaTypeXmlJavaTypeAdapterTests(String name) {
+ super(name);
+ }
+
+ private ICompilationUnit createTypeWithXmlTypeWithXmlJavaTypeAdapter() throws Exception {
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JAXB.XML_TYPE, JAXB.XML_JAVA_TYPE_ADAPTER);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@XmlType").append(CR);
+ sb.append("@XmlJavaTypeAdapter");
+ }
+ });
+ }
+
+ public void testModifyValue() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ JaxbPersistentClass contextPersistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextPersistentClass.getXmlJavaTypeAdapter();
+ JavaResourceType resourceType = contextPersistentClass.getJavaResourceType();
+
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+
+ contextXmlJavaTypeAdapter.setValue("foo");
+ XmlJavaTypeAdapterAnnotation javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertEquals("foo", javaTypeAdapterAnnotation.getValue());
+ assertEquals("foo", contextXmlJavaTypeAdapter.getValue());
+
+ //verify the xml schema type annotation is not removed when the value is set to null
+ contextXmlJavaTypeAdapter.setValue(null);
+ javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(javaTypeAdapterAnnotation.getValue());
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+ }
+
+ public void testUpdateValue() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ JaxbPersistentClass contextPersistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextPersistentClass.getXmlJavaTypeAdapter();
+ JavaResourceType resourceType = contextPersistentClass.getJavaResourceType();
+
+ assertNull(contextXmlJavaTypeAdapter.getValue());
+
+ //add a value member value pair
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceType);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaTypeXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__VALUE, "String");
+ }
+ });
+ assertEquals("String", contextXmlJavaTypeAdapter.getValue());
+
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaTypeXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ }
+ });
+ assertNull(contextPersistentClass.getXmlJavaTypeAdapter());
+ }
+
+ public void testModifyType() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ JaxbPersistentClass contextPersistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextPersistentClass.getXmlJavaTypeAdapter();
+ JavaResourceType resourceType = contextPersistentClass.getJavaResourceType();
+
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getDefaultType());
+
+ contextXmlJavaTypeAdapter.setSpecifiedType("foo");
+ XmlJavaTypeAdapterAnnotation javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertEquals("foo", javaTypeAdapterAnnotation.getType());
+ assertEquals("foo", contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getDefaultType());
+
+ contextXmlJavaTypeAdapter.setSpecifiedType(null);
+ javaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceType.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(javaTypeAdapterAnnotation.getType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getDefaultType());
+ }
+
+ public void testUpdateType() throws Exception {
+ this.createTypeWithXmlTypeWithXmlJavaTypeAdapter();
+ JaxbPersistentClass contextPersistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ XmlJavaTypeAdapter contextXmlJavaTypeAdapter = contextPersistentClass.getXmlJavaTypeAdapter();
+ JavaResourceType resourceType = contextPersistentClass.getJavaResourceType();
+
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getType());
+ assertNull(contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getDefaultType());
+
+ //add a type member value pair
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceType);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaTypeXmlJavaTypeAdapterTests.this.addXmlJavaTypeAdapterTypeMemberValuePair(declaration, JAXB.XML_JAVA_TYPE_ADAPTER__TYPE, "String");
+ }
+ });
+ assertEquals("String", contextXmlJavaTypeAdapter.getSpecifiedType());
+ assertEquals("String", contextXmlJavaTypeAdapter.getType());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, contextXmlJavaTypeAdapter.getDefaultType());
+
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaTypeXmlJavaTypeAdapterTests.this.removeXmlJavaTypeAdapterAnnotation(declaration);
+ }
+ });
+ assertNull(contextPersistentClass.getXmlJavaTypeAdapter());
+ }
+
+ protected void addXmlJavaTypeAdapterTypeMemberValuePair(ModifiedDeclaration declaration, String name, String typeName) {
+ this.addMemberValuePair(
+ (MarkerAnnotation) this.getXmlJavaTypeAdapterAnnotation(declaration),
+ name,
+ this.newTypeLiteral(declaration.getAst(), typeName));
+ }
+
+ protected void addXmlJavaTypeAdapterMemberValuePair(ModifiedDeclaration declaration, String name, String value) {
+ this.addMemberValuePair((MarkerAnnotation) this.getXmlJavaTypeAdapterAnnotation(declaration), name, value);
+ }
+
+ //add another package annotation so that the context model object doesn't get removed when
+ //removing the XmlJavaTypeAdapter annotation. Only "annotated" packages are added to the context model
+ protected void removeXmlJavaTypeAdapterAnnotation(ModifiedDeclaration declaration) {
+ this.addMarkerAnnotation(declaration.getDeclaration(), XmlAccessorOrderAnnotation.ANNOTATION_NAME);
+ this.removeAnnotation(declaration, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ protected Annotation getXmlJavaTypeAdapterAnnotation(ModifiedDeclaration declaration) {
+ return declaration.getAnnotationNamed(XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+}
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlAttributeMappingTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlAttributeMappingTests.java
index db829b0989..c5d0799409 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlAttributeMappingTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlAttributeMappingTests.java
@@ -26,6 +26,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAttributeAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlElementAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
@@ -244,6 +245,61 @@ public class GenericJavaXmlAttributeMappingTests extends JaxbContextModelTestCas
assertNull(resourceAttribute.getAnnotation(XmlElementAnnotation.ANNOTATION_NAME));
}
+ public void testModifyXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlAttribute();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ JaxbPersistentAttribute persistentAttribute = CollectionTools.get(persistentClass.getAttributes(), 0);
+ XmlAttributeMapping xmlAttributeMapping = (XmlAttributeMapping) persistentAttribute.getMapping();
+ JavaResourceAttribute resourceAttribute = xmlAttributeMapping.getParent().getJavaResourceAttribute();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlAttributeMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+ xmlAttributeMapping.addXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(xmlAttributeMapping.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ xmlAttributeMapping.removeXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ public void testUpdateXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlAttribute();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ JaxbPersistentAttribute persistentAttribute = CollectionTools.get(persistentClass.getAttributes(), 0);
+ XmlAttributeMapping xmlAttributeMapping = (XmlAttributeMapping) persistentAttribute.getMapping();
+ JavaResourceAttribute resourceAttribute = xmlAttributeMapping.getParent().getJavaResourceAttribute();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlAttributeMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+
+ //add an XmlJavaTypeAdapter annotation
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceAttribute);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaXmlAttributeMappingTests.this.addMarkerAnnotation(declaration.getDeclaration(), XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(xmlAttributeMapping.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ //remove the XmlJavaTypeAdapter annotation
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaXmlAttributeMappingTests.this.removeAnnotation(declaration, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlAttributeMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+ }
protected void addXmlAttributeMemberValuePair(ModifiedDeclaration declaration, String name, String value) {
this.addMemberValuePair((MarkerAnnotation) this.getXmlAttributeAnnotation(declaration), name, value);
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlElementMappingTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlElementMappingTests.java
index 5f389f2b92..132ba6c96e 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlElementMappingTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/GenericJavaXmlElementMappingTests.java
@@ -26,6 +26,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAttribute;
import org.eclipse.jpt.jaxb.core.resource.java.XmlAttributeAnnotation;
import org.eclipse.jpt.jaxb.core.resource.java.XmlElementAnnotation;
+import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
@@ -403,6 +404,62 @@ public class GenericJavaXmlElementMappingTests extends JaxbContextModelTestCase
assertNull(resourceAttribute.getAnnotation(XmlAttributeAnnotation.ANNOTATION_NAME));
}
+ public void testModifyXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlElement();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ JaxbPersistentAttribute persistentAttribute = CollectionTools.get(persistentClass.getAttributes(), 0);
+ XmlElementMapping xmlElementMapping = (XmlElementMapping) persistentAttribute.getMapping();
+ JavaResourceAttribute resourceAttribute = xmlElementMapping.getParent().getJavaResourceAttribute();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlElementMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+ xmlElementMapping.addXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(xmlElementMapping.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ xmlElementMapping.removeXmlJavaTypeAdapter();
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+
+ public void testUpdateXmlJavaTypeAdapter() throws Exception {
+ createTypeWithXmlElement();
+
+ JaxbPersistentClass persistentClass = CollectionTools.get(getContextRoot().getPersistentClasses(), 0);
+ JaxbPersistentAttribute persistentAttribute = CollectionTools.get(persistentClass.getAttributes(), 0);
+ XmlElementMapping xmlElementMapping = (XmlElementMapping) persistentAttribute.getMapping();
+ JavaResourceAttribute resourceAttribute = xmlElementMapping.getParent().getJavaResourceAttribute();
+
+ XmlJavaTypeAdapterAnnotation xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlElementMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+
+
+ //add an XmlJavaTypeAdapter annotation
+ AnnotatedElement annotatedElement = this.annotatedElement(resourceAttribute);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaXmlElementMappingTests.this.addMarkerAnnotation(declaration.getDeclaration(), XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNotNull(xmlElementMapping.getXmlJavaTypeAdapter());
+ assertNotNull(xmlJavaTypeAdapterAnnotation);
+
+ //remove the XmlJavaTypeAdapter annotation
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericJavaXmlElementMappingTests.this.removeAnnotation(declaration, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ }
+ });
+ xmlJavaTypeAdapterAnnotation = (XmlJavaTypeAdapterAnnotation) resourceAttribute.getAnnotation(0, XmlJavaTypeAdapterAnnotation.ANNOTATION_NAME);
+ assertNull(xmlElementMapping.getXmlJavaTypeAdapter());
+ assertNull(xmlJavaTypeAdapterAnnotation);
+ }
+
protected void addXmlElementMemberValuePair(ModifiedDeclaration declaration, String name, String value) {
this.addMemberValuePair((MarkerAnnotation) this.getXmlElementAnnotation(declaration), name, value);
}
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/JaxbCoreJavaContextModelTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/JaxbCoreJavaContextModelTests.java
index c7dec953ea..e9c0bee16d 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/JaxbCoreJavaContextModelTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/java/JaxbCoreJavaContextModelTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2011 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.
@@ -20,12 +20,14 @@ public class JaxbCoreJavaContextModelTests extends TestCase
suite.addTestSuite(GenericJavaElementFactoryMethodTests.class);
suite.addTestSuite(GenericJavaEnumConstantTests.class);
suite.addTestSuite(GenericJavaPackageInfoTests.class);
+ suite.addTestSuite(GenericJavaPackageXmlJavaTypeAdapterTests.class);
+ suite.addTestSuite(GenericJavaTypeXmlJavaTypeAdapterTests.class);
+ suite.addTestSuite(GenericJavaAttributeXmlJavaTypeAdapterTests.class);
suite.addTestSuite(GenericJavaPersistentClassTests.class);
suite.addTestSuite(GenericJavaPersistentEnumTests.class);
suite.addTestSuite(GenericJavaRegistryTests.class);
suite.addTestSuite(GenericJavaXmlAttributeMappingTests.class);
suite.addTestSuite(GenericJavaXmlElementMappingTests.class);
- suite.addTestSuite(GenericJavaXmlJavaTypeAdapterTests.class);
suite.addTestSuite(GenericJavaXmlRootElementTests.class);
suite.addTestSuite(GenericJavaXmlSchemaTests.class);
suite.addTestSuite(GenericJavaXmlSchemaTypeTests.class);

Back to the top