Added implied packages and type name validation on OxmJavaTypes
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
index a122081..4f14e7d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
@@ -12,6 +12,9 @@
OXM_FILE__VERSION_NOT_SUPPORTED = Only OXM files version 2.2 and later are supported.
+OXM_JAVA_TYPE__NAME_NOT_SPECIFIED = The java type name must be specified.
+OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM = The package name of java types must be uniform within an OXM file.
+
XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = XmlDiscriminatorNode not specified.
XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED = XmlDiscriminatorValue not specified.
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
index e024245..fbd778f 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
@@ -29,5 +29,10 @@
String getPackageName();
+
+ // ***** xml bindings *****
+
+ static final String XML_BINDINGS_PROPERTY = "xmlBindings"; //$NON-NLS-1$
+
OxmXmlBindings getXmlBindings();
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
index e59c75c..96943ae 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
@@ -13,6 +13,7 @@
import org.eclipse.jpt.jaxb.core.context.JaxbContextNode;
import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessOrderHolder;
import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessTypeHolder;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
/**
* Provisional API: This interface is part of an interim API that is still
@@ -27,6 +28,9 @@
public interface OxmXmlBindings
extends JaxbContextNode, ELXmlAccessTypeHolder, ELXmlAccessOrderHolder {
+ EXmlBindings getEXmlBindings();
+
+
// ***** mapping metadata complete *****
final static String XML_MAPPING_METADATA_COMPLETE_PROPERTY = "xmlMappingMetadataComplete"; //$NON-NLS-1$
@@ -38,15 +42,26 @@
// ***** package name *****
- final static String PACKAGE_NAME_PROPERTY = "packageName"; //$NON-NLS-1$
+ /** string associated with specifiedPackageName property */
+ final static String SPECIFIED_PACKAGE_NAME_PROPERTY = "specifiedPackageName"; //$NON-NLS-1$
+ /** return the package name specified on the xml-bindings node */
+ String getSpecifiedPackageName();
+
+ /** set the package name on the xml-bindings node */
+ void setSpecifiedPackageName(String packageName);
+
+ /** string associated with impliedPackageName property */
+ final static String IMPLIED_PACKAGE_NAME_PROPERTY = "impliedPackageName"; //$NON-NLS-1$
+
+ /** return the package name implied by querying java types included in this document */
+ String getImpliedPackageName();
+
+ /** return the specified package name if specified, otherwise the implied package name */
String getPackageName();
- void setPackageName(String packageName);
-
- /**
- * Return a qualified name for the given child type
- */
+ /** Return a qualified name for the given (qualified or unqualified) child type name,
+ * prepending a package name if applicable */
String getQualifiedName(String childTypeName);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
index 6f098e8..186d44d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
@@ -100,6 +100,9 @@
if (! unmatchedOxmResources.remove(oxmResource)) {
removeOxmFile(oxmFile);
}
+ else {
+ oxmFile.update();
+ }
}
for (JptXmlResource oxmResource : unmatchedOxmResources) {
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
index 36d62e4..d753062 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
@@ -9,21 +9,21 @@
*******************************************************************************/
package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
-import java.util.List;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jpt.common.core.JptResourceType;
-import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
-import org.eclipse.jpt.common.core.utility.TextRange;
-import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
-import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
-import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
-import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
-import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.Oxm;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import java.util.List;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jpt.common.core.JptResourceType;
+import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
+import org.eclipse.jpt.common.core.utility.TextRange;
+import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.Oxm;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class OxmFileImpl
extends AbstractJaxbContextNode
@@ -77,11 +77,17 @@
@Override
public void synchronizeWithResourceModel() {
super.synchronizeWithResourceModel();
- this.resourceType = oxmResource.getResourceType();
-
- if (this.xmlBindings != null) {
- this.xmlBindings.synchronizeWithResourceModel();
- }
+ this.resourceType = this.oxmResource.getResourceType();
+ syncXmlBindings();
+ }
+
+ @Override
+ public void update() {
+ super.update();
+
+ if (this.xmlBindings != null) {
+ this.xmlBindings.update();
+ }
}
@@ -90,6 +96,22 @@
public OxmXmlBindings getXmlBindings() {
return this.xmlBindings;
}
+
+ protected void setXmlBindings(OxmXmlBindings xmlBindings) {
+ OxmXmlBindings oldXmlBindings = this.xmlBindings;
+ this.xmlBindings = xmlBindings;
+ firePropertyChanged(XML_BINDINGS_PROPERTY, oldXmlBindings, xmlBindings);
+ }
+
+ protected void syncXmlBindings() {
+ EXmlBindings eXmlBindings = (EXmlBindings) this.oxmResource.getRootObject();
+ if (this.xmlBindings == null || this.xmlBindings.getEXmlBindings() != eXmlBindings) {
+ setXmlBindings(buildXmlBindings());
+ }
+ if (this.xmlBindings != null) {
+ this.xmlBindings.synchronizeWithResourceModel();
+ }
+ }
protected OxmXmlBindings buildXmlBindings() {
// if less than 2.3, then there is no context model support
@@ -124,6 +146,10 @@
ELJaxbValidationMessages.OXM_FILE__VERSION_NOT_SUPPORTED,
OxmFileImpl.this,
getVersionTextRange()));
+ }
+
+ if (this.xmlBindings != null) {
+ this.xmlBindings.validate(messages, reporter);
}
}
}
\ No newline at end of file
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
index 4a4bac2..14504d7 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
@@ -9,11 +9,19 @@
*******************************************************************************/
package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
+import java.util.List;
+import org.eclipse.jpt.common.core.utility.TextRange;
+import org.eclipse.jpt.common.utility.internal.ObjectTools;
+import org.eclipse.jpt.common.utility.internal.StringTools;
import org.eclipse.jpt.common.utility.internal.TypeDeclarationTools;
import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmJavaType;
import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EJavaType;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class OxmJavaTypeImpl
extends AbstractJaxbContextNode
@@ -90,4 +98,49 @@
public String getSimpleName() {
return TypeDeclarationTools.simpleName(this.qualifiedName);
}
+
+
+ // ***** validation *****
+
+ @Override
+ public TextRange getValidationTextRange() {
+ TextRange textRange = this.eJavaType.getValidationTextRange();
+ return (textRange != null) ? textRange : this.getParent().getValidationTextRange();
+ }
+
+ protected TextRange getNameTextRange() {
+ return this.eJavaType.getNameTextRange();
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter) {
+ super.validate(messages, reporter);
+
+ validateName(messages, reporter);
+
+ }
+
+ protected void validateName(List<IMessage> messages, IReporter reporter) {
+ // type name must be specified
+ if (StringTools.isBlank(this.specifiedName)) {
+ messages.add(
+ ELJaxbValidationMessageBuilder.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ ELJaxbValidationMessages.OXM_JAVA_TYPE__NAME_NOT_SPECIFIED,
+ this,
+ getNameTextRange()));
+ return;
+ }
+
+ // package name must be uniform across oxm file
+ String packageName = TypeDeclarationTools.packageName(this.specifiedName);
+ if (! StringTools.isBlank(packageName) && ! ObjectTools.equals(packageName, getXmlBindings().getPackageName())) {
+ messages.add(
+ ELJaxbValidationMessageBuilder.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ ELJaxbValidationMessages.OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM,
+ this,
+ getNameTextRange()));
+ }
+ }
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
index 7ce3683..bdb0386 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
@@ -9,6 +9,7 @@
*******************************************************************************/
package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
+import java.util.List;
import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.internal.ClassNameTools;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
@@ -25,6 +26,8 @@
import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EJavaType;
import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.OxmFactory;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
public class OxmXmlBindingsImpl
extends AbstractJaxbContextNode
@@ -38,7 +41,8 @@
protected boolean xmlMappingMetadataComplete;
- protected String packageName;
+ protected String specifiedPackageName;
+ protected String impliedPackageName;
protected final ContextListContainer<OxmJavaType, EJavaType> javaTypeContainer;
@@ -49,10 +53,15 @@
this.specifiedAccessType = buildSpecifiedAccessType();
this.specifiedAccessOrder = buildSpecifiedAccessOrder();
this.xmlMappingMetadataComplete = buildXmlMappingMetadataComplete();
- this.packageName = buildPackageName();
+ this.specifiedPackageName = buildSpecifiedPackageName();
+ // impliedPackageName not built until update, as it depends on sub-nodes
this.javaTypeContainer = buildJavaTypeContainer();
}
+
+ public EXmlBindings getEXmlBindings() {
+ return this.eXmlBindings;
+ }
// ***** sync/update *****
@@ -62,13 +71,14 @@
setSpecifiedAccessType_(buildSpecifiedAccessType());
setSpecifiedAccessOrder_(buildSpecifiedAccessOrder());
setXmlMappingMetadataComplete_(buildXmlMappingMetadataComplete());
- setPackageName_(buildPackageName());
+ setSpecifiedPackageName_(buildSpecifiedPackageName());
this.javaTypeContainer.synchronizeWithResourceModel();
}
@Override
public void update() {
super.update();
+ setImpliedPackageName_(buildImpliedPackageName());
this.javaTypeContainer.update();
}
@@ -158,25 +168,49 @@
// ***** package name *****
- public String getPackageName() {
- return this.packageName;
+ public String getSpecifiedPackageName() {
+ return this.specifiedPackageName;
}
- public void setPackageName(String packageName) {
+ public void setSpecifiedPackageName(String packageName) {
this.eXmlBindings.setPackageName(packageName);
- setPackageName_(packageName);
+ setSpecifiedPackageName_(packageName);
}
- protected void setPackageName_(String packageName) {
- String oldPackageName = this.packageName;
- this.packageName = packageName;
- firePropertyChanged(PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
- }
-
- protected String buildPackageName() {
- return this.eXmlBindings.getPackageName();
+ protected void setSpecifiedPackageName_(String packageName) {
+ String oldPackageName = this.specifiedPackageName;
+ this.specifiedPackageName = packageName;
+ firePropertyChanged(SPECIFIED_PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
}
+ protected String buildSpecifiedPackageName() {
+ return this.eXmlBindings.getPackageName();
+ }
+
+ public String getImpliedPackageName() {
+ return this.impliedPackageName;
+ }
+
+ protected void setImpliedPackageName_(String packageName) {
+ String oldPackageName = this.impliedPackageName;
+ this.impliedPackageName = packageName;
+ firePropertyChanged(IMPLIED_PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
+ }
+
+ protected String buildImpliedPackageName() {
+ for (OxmJavaType javaType : getJavaTypes()) {
+ String packageName = TypeDeclarationTools.packageName(javaType.getSpecifiedName());
+ if (! StringTools.isBlank(packageName)) {
+ return packageName;
+ }
+ }
+ return StringTools.EMPTY_STRING;
+ }
+
+ public String getPackageName() {
+ return (this.specifiedPackageName != null) ? this.specifiedPackageName : this.impliedPackageName;
+ }
+
/**
* append package if the name is not qualified
*/
@@ -200,7 +234,11 @@
return StringTools.concatenate("java.lang.", className);
}
- return StringTools.concatenate(this.packageName, ".", className);
+ if (StringTools.isBlank(this.specifiedPackageName)) {
+ return className;
+ }
+
+ return StringTools.concatenate(this.specifiedPackageName, ".", className);
}
@@ -288,5 +326,14 @@
public TextRange getValidationTextRange() {
TextRange textRange = this.eXmlBindings.getValidationTextRange();
return (textRange != null) ? textRange : this.getParent().getValidationTextRange();
+ }
+
+ @Override
+ public void validate(List<IMessage> messages, IReporter reporter) {
+ super.validate(messages, reporter);
+
+ for (OxmJavaType javaType : getJavaTypes()) {
+ javaType.validate(messages, reporter);
+ }
}
}
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
index 0977c7c..0918ebb 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
@@ -22,6 +22,10 @@
// oxm file
String OXM_FILE__VERSION_NOT_SUPPORTED = "OXM_FILE__VERSION_NOT_SUPPORTED";
+ // oxm java type
+ String OXM_JAVA_TYPE__NAME_NOT_SPECIFIED = "OXM_JAVA_TYPE__NAME_NOT_SPECIFIED";
+ String OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM = "OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM";
+
// xml discriminator node
String XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = "XML_DISCRIMINATOR_NODE__NOT_SPECIFIED";
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
index 8ad6164..760ee0f 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
@@ -21,6 +21,7 @@
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator;
import org.eclipse.jpt.common.core.resource.xml.EBaseObjectImpl;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.wst.common.internal.emf.resource.Translator;
/**
@@ -1381,6 +1382,14 @@
result.append(')');
return result.toString();
}
+
+
+ // ***** text range *****
+
+ public TextRange getNameTextRange() {
+ return getAttributeTextRange(Oxm.NAME);
+ }
+
// ***** translators *****
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
index 77bd82a..a6624ff 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
@@ -905,7 +905,7 @@
result.append(xmlAccessorOrder);
result.append(", xmlMappingMetadataComplete: ");
result.append(xmlMappingMetadataComplete);
- result.append(", packageName: ");
+ result.append(", specifiedPackageName: ");
result.append(packageName);
result.append(", xmlNameTransformer: ");
result.append(xmlNameTransformer);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
index c3f90a0..122b4e1 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
@@ -7284,7 +7284,7 @@
initEAttribute(getEXmlBindings_XmlAccessorType(), this.getEXmlAccessType(), "xmlAccessorType", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEXmlBindings_XmlAccessorOrder(), this.getEXmlAccessOrder(), "xmlAccessorOrder", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEXmlBindings_XmlMappingMetadataComplete(), theXMLTypePackage.getBooleanObject(), "xmlMappingMetadataComplete", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
- initEAttribute(getEXmlBindings_PackageName(), ecorePackage.getEString(), "packageName", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEXmlBindings_PackageName(), ecorePackage.getEString(), "specifiedPackageName", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEXmlBindings_XmlNameTransformer(), ecorePackage.getEString(), "xmlNameTransformer", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getEXmlBindings_XmlSchema(), this.getEXmlSchema(), null, "xmlSchema", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getEXmlBindings_XmlSchemaType(), this.getEXmlSchemaType(), null, "xmlSchemaType", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
index 78b09b8..ad61bfd 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
@@ -13,8 +13,10 @@
import org.eclipse.jpt.common.utility.internal.model.value.ItemPropertyListValueModelAdapter;
import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter;
import org.eclipse.jpt.common.utility.internal.model.value.ListCollectionValueModelAdapter;
+import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter;
import org.eclipse.jpt.common.utility.iterable.ListIterable;
import org.eclipse.jpt.common.utility.model.value.CollectionValueModel;
+import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbPackage;
import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmJavaType;
@@ -36,7 +38,7 @@
protected CollectionValueModel<OxmJavaType> buildChildrenModel() {
return new ListCollectionValueModelAdapter<OxmJavaType>(
new ItemPropertyListValueModelAdapter<OxmJavaType>(
- new ListAspectAdapter<OxmXmlBindings, OxmJavaType>(OxmXmlBindings.JAVA_TYPES_LIST, this.item.getXmlBindings()) {
+ new ListAspectAdapter<OxmXmlBindings, OxmJavaType>(buildXmlBindingsModel(), OxmXmlBindings.JAVA_TYPES_LIST) {
@Override
protected ListIterable<OxmJavaType> getListIterable() {
return this.subject.getJavaTypes();
@@ -47,4 +49,13 @@
}
}));
}
+
+ protected PropertyValueModel<OxmXmlBindings> buildXmlBindingsModel() {
+ return new PropertyAspectAdapter<OxmFile, OxmXmlBindings>(OxmFile.XML_BINDINGS_PROPERTY, this.item) {
+ @Override
+ protected OxmXmlBindings buildValue_() {
+ return this.subject.getXmlBindings();
+ }
+ };
+ }
}
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
index e48c32b..4f8e43a 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
@@ -136,7 +136,7 @@
assertEquals("java.lang.String", javaType.getQualifiedName());
assertEquals("String", javaType.getSimpleName());
- xmlBindings.setPackageName("test.oxm2");
+ xmlBindings.setSpecifiedPackageName("test.oxm2");
javaType.setSpecifiedName("Foo");
oxmResource.save();
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
index fa51981..3175da7 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.jaxb.eclipselink.core.tests.internal.context.oxm;
import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
+import org.eclipse.jpt.common.utility.internal.StringTools;
import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessOrder;
@@ -276,6 +277,8 @@
EXmlBindings eXmlBindings = (EXmlBindings) oxmResource.getRootObject();
assertEquals("test.oxm", eXmlBindings.getPackageName());
+ assertEquals("test.oxm", xmlBindings.getSpecifiedPackageName());
+ assertEquals(StringTools.EMPTY_STRING, xmlBindings.getImpliedPackageName());
assertEquals("test.oxm", xmlBindings.getPackageName());
eXmlBindings.setPackageName("foo");
@@ -283,14 +286,21 @@
assertFileContentsContains("oxm.xml", "package-name=\"foo\"", true);
assertEquals("foo", eXmlBindings.getPackageName());
+ assertEquals("foo", xmlBindings.getSpecifiedPackageName());
+ assertEquals(StringTools.EMPTY_STRING, xmlBindings.getImpliedPackageName());
assertEquals("foo", xmlBindings.getPackageName());
eXmlBindings.setPackageName(null);
+ EJavaType eJavaType = OxmFactory.eINSTANCE.createEJavaType();
+ eJavaType.setName("test.foo.Foo");
+ eXmlBindings.getJavaTypes().add(eJavaType);
oxmResource.save();
assertFileContentsContains("oxm.xml", "package-name=", false);
assertNull(eXmlBindings.getPackageName());
- assertNull(xmlBindings.getPackageName());
+ assertNull(xmlBindings.getSpecifiedPackageName());
+ assertEquals("test.foo", xmlBindings.getImpliedPackageName());
+ assertEquals("test.foo", xmlBindings.getPackageName());
}
public void testModifyPackageName() throws Exception {
@@ -302,21 +312,21 @@
EXmlBindings eXmlBindings = (EXmlBindings) oxmResource.getRootObject();
assertEquals("test.oxm", eXmlBindings.getPackageName());
- assertEquals("test.oxm", xmlBindings.getPackageName());
+ assertEquals("test.oxm", xmlBindings.getSpecifiedPackageName());
- xmlBindings.setPackageName("foo");
+ xmlBindings.setSpecifiedPackageName("foo");
oxmResource.save();
assertFileContentsContains("oxm.xml", "package-name=\"foo\"", true);
assertEquals("foo", eXmlBindings.getPackageName());
- assertEquals("foo", xmlBindings.getPackageName());
+ assertEquals("foo", xmlBindings.getSpecifiedPackageName());
- xmlBindings.setPackageName(null);
+ xmlBindings.setSpecifiedPackageName(null);
oxmResource.save();
assertFileContentsContains("oxm.xml", "package-name=", false);
assertNull(eXmlBindings.getPackageName());
- assertNull(xmlBindings.getPackageName());
+ assertNull(xmlBindings.getSpecifiedPackageName());
}
public void testUpdateJavaTypes() throws Exception {