Added more unit-tests, updated API
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/.classpath b/tools/org.eclipse.persistence.tools.mapping.tests/.classpath
index 6afa455..47e8b8b 100644
--- a/tools/org.eclipse.persistence.tools.mapping.tests/.classpath
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/.classpath
@@ -2,7 +2,6 @@
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="src"/>
- <classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.persistence.tools.mapping"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/META-INF/MANIFEST.MF b/tools/org.eclipse.persistence.tools.mapping.tests/META-INF/MANIFEST.MF
index 750bd56..a935f52 100644
--- a/tools/org.eclipse.persistence.tools.mapping.tests/META-INF/MANIFEST.MF
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/META-INF/MANIFEST.MF
@@ -5,6 +5,8 @@
Bundle-Version: 2.6.0.qualifier
Bundle-Vendor: Eclipse.org - EclipseLink Project
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: org.eclipse.persistence.tools.mapping;bundle-version="[2.6.0,2.7.0)",
+Require-Bundle: javax.persistence;bundle-version="2.0.0",
+ org.eclipse.persistence.core;bundle-version="2.4.0",
+ org.eclipse.persistence.tools.mapping;bundle-version="[2.6.0,2.7.0)",
org.eclipse.persistence.tools.utility;bundle-version="[2.6.0,2.7.0)",
org.junit;bundle-version="[4.8.1,5.0.0)"
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/AbstractExternalFormTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/AbstractExternalFormTests.java
index 953973c..3925704 100644
--- a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/AbstractExternalFormTests.java
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/AbstractExternalFormTests.java
@@ -26,23 +26,24 @@
import static org.junit.Assert.*;
/**
- * This test defines the behavior to test the manipulation of an XML document through an SPI.
+ * This test defines the behavior to test the manipulation of an XML document through the Mapping SPI.
*
* @version 2.6
*/
@SuppressWarnings("nls")
-public abstract class AbstractExternalFormTests<T extends ExternalForm> {
+public abstract class AbstractExternalFormTests<FORM extends ExternalForm> {
/**
* Populates the given tester with the appropriate {@link NodeTester}.
*
- * @param tester The tester of the node to test
+ * @param tester The {@link RootNodeTester} is used to adds the appropriate testers to test the
+ * property of a node; i.e. its attributes and child nodes
*/
- protected abstract void populate(RootNodeTester<T> tester);
+ protected abstract void populate(RootNodeTester<FORM> tester);
/**
- * Performs the actual tests on the document for a particular node that is being manipulated by
- * an {@link ExternalForm}.
+ * Performs the actual tests on the XML document for a particular node that is being manipulated
+ * by an {@link ExternalForm}.
*/
@Test
public final void test() throws Exception {
@@ -52,18 +53,105 @@
}
/**
- * An <code>AttributeNodeTester</code> tests setting and retrieving the value associated with
- * an element's attribute.
+ * This controller simply asks its runner to add the attribute node.
*/
- public interface AttributeNodeTester<T, VALUE> extends PropertyTester<T, VALUE> {
+ private class AttributeNodeRunnerAddingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + " " + runner.tester.getNodeName() + "=\"\"> : addition");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ AttributeNodeTesterRunner runner = (AttributeNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testAdding(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
}
/**
- * An <code>AttributeNodeTesterRunner</code> tests setting and retrieving the value associated
- * with an element's attribute.
+ * This controller simply asks its runner to reading the attribute node.
+ */
+ private class AttributeNodeRunnerReadingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + " " + runner.tester.getNodeName() + "=\"\"> : reading");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ AttributeNodeTesterRunner runner = (AttributeNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testReading(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to removing the attribute node.
+ */
+ private class AttributeNodeRunnerRemovingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + " " + runner.tester.getNodeName() + "=\"\"> : removing");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ AttributeNodeTesterRunner runner = (AttributeNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testRemoving(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * An <code>AttributeNodeTester</code> tests manipulating an element's attribute.
* <p>
* <div nowrap>Form: <code><b><nodeName attributeName="value"/></b></div>
*/
+ public interface AttributeNodeTester<FORM extends ExternalForm, VALUE> extends PropertyTester<FORM, VALUE> {
+ }
+
+ /**
+ * The runner associated with {@link AttributeNodeTester}.
+ *
+ * <div nowrap>Form: <code><b><node_name attribute="value"/></b></code>.</div>
+ */
private class AttributeNodeTesterRunner extends PropertyNodeTesterRunner {
/**
@@ -71,7 +159,7 @@
*
* @param tester This object defines a single node to test an attribute node
*/
- AttributeNodeTesterRunner(AttributeNodeTester<T, ?> tester) {
+ AttributeNodeTesterRunner(AttributeNodeTester<FORM, ?> tester) {
super(tester);
}
@@ -108,6 +196,735 @@
}
}
+ /**
+ * This controller simply asks its runner to add or remove a child node.
+ */
+ private class BooleanChildNodeRunnerAddingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + "><" + runner.tester.getNodeName() + ">> : addition");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ BooleanChildNodeTesterRunner runner = (BooleanChildNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testAdding(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to read if a child node is present or not.
+ */
+ private class BooleanChildNodeRunnerReadingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + "><" + runner.tester.getNodeName() + ">> : reading");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ BooleanChildNodeTesterRunner runner = (BooleanChildNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testReading(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to removing the child node.
+ */
+ private class BooleanChildNodeRunnerRemovingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void log() {
+ System.out.println("<" + runner.parentNodeName + "><" + runner.tester.getNodeName() + ">> : removing");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ BooleanChildNodeTesterRunner runner = (BooleanChildNodeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testRemoving(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This <code>BooleanChildNodeTester</code> tests when a form add or remove a single child node.
+ */
+ public interface BooleanChildNodeTester<FORM extends ExternalForm> extends NodeTester<FORM, Boolean> {
+
+ /**
+ * Retrieves the {@link ExternalForm} representing the single child node.
+ *
+ * @param form The external form being tested
+ * @return The {@link ExternalForm} representing the child node
+ */
+ boolean getValue(FORM form);
+
+ /**
+ * Adds the single child node to the node represented by the given form.
+ *
+ * @param form The external form being tested
+ */
+ void setValue(FORM form, boolean value);
+ }
+
+ /**
+ * The runner associated with {@link BooleanChildNodeTester}.
+ */
+ private class BooleanChildNodeTesterRunner extends NodeTesterRunner {
+
+ /**
+ *
+ */
+ private boolean hasChild;
+
+ /**
+ * Creates a new <code>BooleanChildNodeTesterRunner</code>.
+ *
+ * @param tester This object defines a single child node to test
+ */
+ BooleanChildNodeTesterRunner(BooleanChildNodeTester<FORM> tester) {
+ super(tester);
+ }
+
+ private String displayString() {
+ return "<" + getNodeName() + ">";
+ }
+
+ private Node getChildNode(Node node) {
+
+ node = node.getFirstChild();
+
+ while (node != null) {
+
+ if (getNodeName().equals(node.getNodeName())) {
+ return node;
+ }
+
+ node = node.getNextSibling();
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ boolean isMultipleSupported() {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testAdding(FORM form, Node node) {
+
+ // Don't add the child if it's not present
+ if (hasChild) {
+ return;
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ void testInitialState(FORM form, Node node) {
+
+ BooleanChildNodeTester<FORM> tester = (BooleanChildNodeTester) this.tester;
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testReading(FORM form, Node node) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testRemoving(FORM form, Node node) {
+
+ // Nothing to remove
+ if (!hasChild) {
+ return;
+ }
+
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to add the attribute node.
+ */
+ private class ChildAttributeRunnerAddingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getChildNodeName() + " " + runner.tester.getNodeName() + "=\"\">> : adding");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testAdding(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to reading the attribute node.
+ */
+ private class ChildAttributeRunnerReadingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getChildNodeName() + " " + runner.tester.getNodeName() + "=\"\">> : reading");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testReading(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller simply asks its runner to removing the attribute node.
+ */
+ private class ChildAttributeRunnerRemovingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getChildNodeName() + " " + runner.tester.getNodeName() + "=\"\">> : removing");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ChildAttributeTesterRunner runner = (ChildAttributeTesterRunner) this.runner;
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testRemoving(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * An <code>AttributeNodeTester</code> tests manipulating an element's attribute.
+ * <p>
+ * <div nowrap>Form: <code><b><nodeName attributeName="value"/></b></div>
+ */
+ public interface ChildAttributeTester<FORM extends ExternalForm, VALUE> extends PropertyTester<FORM, VALUE> {
+
+ /**
+ *
+ */
+ String getChildNodeName();
+ }
+
+ private class ChildAttributeTesterRunner extends NodeTesterRunner {
+
+ /**
+ * Keeps track of the status of the node's existence.
+ */
+ private boolean nodeExists;
+
+ /**
+ * Creates a new <code>ChildAttributeTesterRunner</code>.
+ *
+ * @param tester This object defines a single node to test a child text node
+ */
+ ChildAttributeTesterRunner(ChildAttributeTester<FORM, ?> tester) {
+ super(tester);
+ }
+
+ private String displayString() {
+ return "<" + parentNodeName + "><" + getChildNodeName() + " " + tester.getNodeName() + "=\"\">";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ String getActualNodeName() {
+ return getChildNodeName();
+ }
+
+ private Node getChildNode(Node node) {
+
+ node = node.getFirstChild();
+
+ while (node != null) {
+
+ if (getChildNodeName().equals(node.getNodeName())) {
+ return node;
+ }
+
+ node = node.getNextSibling();
+ }
+
+ return null;
+ }
+
+ private String getChildNodeName() {
+ return ((ChildAttributeTester<FORM, ?>) tester).getChildNodeName();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ boolean isMultipleSupported() {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testAdding(FORM form, Node parentNode) {
+
+ ChildAttributeTester<FORM, Object> tester = (ChildAttributeTester<FORM, Object>) this.tester;
+
+ //
+ // Test 1
+ //
+ // Change the node value to null
+ tester.setValue(form, null);
+
+ if (nodeExists) {
+ currentChildrenCount--;
+ nodeExists = false;
+ }
+
+ assertEquals(
+ displayString() + " : The element should not have any children",
+ currentChildrenCount,
+ parentNode.getChildNodes().getLength()
+ );
+
+ // Make sure the value retrieved is null
+ Object result = tester.getValue(form);
+
+ assertNull(
+ displayString() + " : The element's value should be null",
+ result
+ );
+
+ // Make sure nothing changed
+ assertEquals(
+ displayString() + " : The element should not have any children",
+ currentChildrenCount,
+ parentNode.getChildNodes().getLength()
+ );
+
+ //
+ // Test 2
+ //
+ // Change the value to something
+ Object expectedValue1 = tester.getValue1();
+
+ assertNotNull(
+ displayString() + " : Value 1 cannot be null",
+ expectedValue1
+ );
+
+ tester.setValue(form, expectedValue1);
+
+ if (!nodeExists) {
+ nodeExists = true;
+ currentChildrenCount++;
+ }
+
+ // The child node should have been added
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ currentChildrenCount,
+ parentNode.getChildNodes().getLength()
+ );
+
+ Node childNode = getChildNode(parentNode);
+
+ assertNotNull(
+ displayString() + " : The child node was not added correctly",
+ childNode
+ );
+
+ assertEquals(
+ displayString() + " : The number of attributes is inconsistent",
+ 1,
+ childNode.getAttributes().getLength()
+ );
+
+ // Test the attribute's value
+ Node attribute = childNode.getAttributes().getNamedItem(tester.getNodeName());
+
+ assertNotNull(
+ displayString() + " : The attribute was not added correctly",
+ attribute
+ );
+
+ String stringExpectedValue = tester.toString(expectedValue1);
+
+ assertEquals(
+ displayString() + " : The attribute's value was not set correctly",
+ stringExpectedValue,
+ attribute.getNodeValue()
+ );
+
+ // Get the value
+ result = tester.getValue(form);
+
+ assertNotNull(
+ displayString() + " : The element's value was not set correctly",
+ result
+ );
+
+ // Get the value directly
+ String stringResult = tester.toString(result);
+
+ assertEquals(
+ displayString() + " : The value was not set correctly",
+ stringExpectedValue,
+ stringResult
+ );
+
+ //
+ // Test 3
+ //
+ // Change the value to something else
+ Object expectedValue2 = tester.getValue2();
+
+ assertNotNull(
+ displayString() + " : Value 2 cannot be null",
+ expectedValue2
+ );
+
+ assertNotSame(
+ displayString() + " : Value 1 and value 2 cannot be the same",
+ expectedValue1,
+ expectedValue2
+ );
+
+ tester.setValue(form, expectedValue2);
+
+ // The number of children should not have changed
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ currentChildrenCount,
+ parentNode.getChildNodes().getLength()
+ );
+
+ childNode = getChildNode(parentNode);
+
+ assertNotNull(
+ displayString() + " : The child node was not added correctly",
+ childNode
+ );
+
+ assertEquals(
+ displayString() + " : The number of attributes is inconsistent",
+ 1,
+ childNode.getAttributes().getLength()
+ );
+
+ // Test the attribute's value
+ attribute = childNode.getAttributes().getNamedItem(tester.getNodeName());
+
+ assertNotNull(
+ displayString() + " : The attribute was not added correctly",
+ attribute
+ );
+
+ stringExpectedValue = tester.toString(expectedValue2);
+
+ assertEquals(
+ displayString() + " : The attribute's value was not set correctly",
+ stringExpectedValue,
+ attribute.getNodeValue()
+ );
+
+ // Get the value
+ result = tester.getValue(form);
+
+ assertNotNull(
+ displayString() + " : The element's value was not set correctly",
+ result
+ );
+
+ // Get the value directly
+ stringResult = tester.toString(result);
+
+ assertEquals(
+ displayString() + " : The value was not set correctly",
+ stringExpectedValue,
+ stringResult
+ );
+
+ //
+ // Complete
+ //
+ // Change the value back to its original value
+ Object defaultValue = tester.getDefaultValue();
+
+ assertNotNull(
+ displayString() + " : The default value cannot be null",
+ defaultValue
+ );
+
+ tester.setValue(form, defaultValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testInitialState(FORM form, Node parent) {
+
+ ChildAttributeTester<FORM, Object> tester = (ChildAttributeTester<FORM, Object>) this.tester;
+ nodeExists |= tester.doesNodeAlreadyExist();
+
+ // Node name
+ String nodeName = getNodeName();
+
+ assertNotNull(
+ displayString() + " : The child node's attribute name cannot be null",
+ nodeName
+ );
+
+ // Child node name
+ String childNodeName = getChildNodeName();
+
+ assertNotNull(
+ displayString() + " : The child node name cannot be null",
+ childNodeName
+ );
+
+ // Test the initial state of the parent node
+ assertEquals(
+ displayString() + " : The number of children is incorrect",
+ currentChildrenCount,
+ parent.getChildNodes().getLength()
+ );
+
+ // The child node should either not exist or already being present
+ Node childNode = getChildNode(parent);
+
+ if (!nodeExists) {
+ assertNull(
+ displayString() + " : The node should be null",
+ childNode
+ );
+ }
+ else {
+ assertNotNull(
+ displayString() + " : The node should not be null",
+ childNode
+ );
+
+ Node attribute = childNode.getAttributes().getNamedItem(tester.getNodeName());
+
+ assertNotNull(
+ displayString() + " : The attribute was not added correctly",
+ attribute
+ );
+
+ Object defaultValue = tester.getDefaultValue();
+
+ assertNotNull(
+ displayString() + " : The default value cannot be null",
+ defaultValue
+ );
+
+ String stringDefaultValue = tester.toString(defaultValue);
+
+ assertEquals(
+ displayString() + " : The attribute's value was not set correctly",
+ stringDefaultValue,
+ attribute.getNodeValue()
+ );
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testReading(FORM form, Node node) {
+
+ ChildAttributeTester<FORM, Object> tester = (ChildAttributeTester<FORM, Object>) this.tester;
+
+ // The node value should either be null or not null
+ Object result = tester.getValue(form);
+
+ // Make sure the node's value is not null
+ if (nodeExists) {
+
+ assertNotNull(
+ displayString() + " : The element's value should not be null",
+ result
+ );
+
+ assertSame(
+ displayString() + " : The element's value was not retrived correctly",
+ tester.getDefaultValue(),
+ result
+ );
+ }
+ // The node is not present, make sure reading its value returns null
+ else {
+ assertNull(
+ displayString() + " : The element's value should be null",
+ result
+ );
+ }
+
+ // Make sure nothing changed by reading the node's value
+ assertEquals(
+ displayString() + " : The element should not have any children",
+ currentChildrenCount,
+ node.getChildNodes().getLength()
+ );
+
+ // Retrieve the actual node
+ Node childNode = getChildNode(node);
+
+ if (nodeExists) {
+
+ assertNotNull(
+ displayString() + " : The node should not be null",
+ childNode
+ );
+
+ Node attribute = childNode.getAttributes().getNamedItem(tester.getNodeName());
+
+ assertNotNull(
+ displayString() + " : The attribute should not be null",
+ attribute
+ );
+ }
+ else {
+ assertNull(
+ displayString() + " : The node should be null",
+ childNode
+ );
+ }
+
+ // Make sure nothing changed after retrieving the node
+ assertEquals(
+ displayString() + " : The element should not have any children",
+ currentChildrenCount,
+ node.getChildNodes().getLength()
+ );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testRemoving(FORM form, Node parentNode) {
+
+ PropertyTester<FORM, Object> tester = (PropertyTester<FORM, Object>) this.tester;
+
+ // Change the node value to null, which will remove it from the parent node
+ tester.setValue(form, null);
+
+ if (nodeExists) {
+ nodeExists = false;
+ currentChildrenCount--;
+ }
+
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ currentChildrenCount,
+ parentNode.getChildNodes().getLength()
+ );
+ }
+ }
+
+ /**
+ * This controller tests adding a random portion of child nodes.
+ */
private class ChildListNodeRunnerAddingController extends Controller {
/**
@@ -123,7 +940,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildListNodeTesterRunner runner = (ChildListNodeTesterRunner) this.runner;
@@ -150,6 +967,9 @@
}
}
+ /**
+ * This controller tests reading a random portion of child nodes.
+ */
private class ChildListNodeRunnerReadingController extends Controller {
/**
@@ -157,7 +977,7 @@
*/
@Override
void log() {
- System.out.println("<" + runner.parentNodeName + "><" + runner.tester.getNodeName() + "*> : read");
+ System.out.println("<" + runner.parentNodeName + "><" + runner.tester.getNodeName() + "*> : reading");
}
/**
@@ -165,7 +985,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildListNodeTesterRunner runner = (ChildListNodeTesterRunner) this.runner;
int rangesCount = runner.ranges.size();
@@ -183,11 +1003,12 @@
runner.currentChildrenCount = currentChildrenCount;
runner.testInitialState(form, node);
runner.testReading(form, node);
-
- currentChildrenCount = runner.currentChildrenCount;
}
}
+ /**
+ * This controller tests removing a random portion of child nodes.
+ */
private class ChildListNodeRunnerRemovingController extends Controller {
/**
@@ -203,7 +1024,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildListNodeTesterRunner runner = (ChildListNodeTesterRunner) this.runner;
int rangesCount = runner.ranges.size();
@@ -230,7 +1051,7 @@
* This <code>ChildListNodeTester</code> tests a form when the node it represents can have zero
* or many child nodes of the same type (i.e. with the same node name).
*/
- public interface ChildListNodeTester<T, VALUE, CHILD_VALUE> extends NodeTester<T, VALUE> {
+ public interface ChildListNodeTester<FORM extends ExternalForm, CHILD_FORM, CHILD_VALUE> extends NodeTester<FORM, CHILD_FORM> {
/**
* Adds a new child node to the node represented by the given form.
@@ -240,7 +1061,7 @@
* @return The external form representing the child node that was added to the node represented
* by the given form
*/
- VALUE addChild(T form, CHILD_VALUE value);
+ CHILD_FORM addChild(FORM form, CHILD_VALUE value);
/**
* Returns the child node from the node represented by the given form at the given position.
@@ -249,7 +1070,16 @@
* @param index The position of the child node to retrieve
* @return The external form representing the child node at the given position
*/
- VALUE getChild(T form, int index);
+ CHILD_FORM getChild(FORM form, int index);
+
+ /**
+ * Returns
+ *
+ * @param childForms
+ * @param index
+ * @return
+ */
+ CHILD_FORM getChildForm(List<CHILD_FORM> childForms, int index);
/**
* Returns a list of the children node with the same type (i.e. with the same node name) that
@@ -258,7 +1088,7 @@
* @param form The external form being tested
* @return An ordered list based on the sequence of children node
*/
- List<VALUE> getChildren(T form);
+ List<CHILD_FORM> getChildren(FORM form);
/**
* Returns the number of children of the node represented by the given form with the same type
@@ -267,7 +1097,7 @@
* @param form The external form being tested
* @return The count of children of the same type
*/
- int getChildrenSize(T form);
+ int getChildrenSize(FORM form);
/**
* Returns the value that part of the list ({@link #getChildValues()}) and that was used to
@@ -276,7 +1106,12 @@
* @param childForm The child form from which the value used to create it should be returned
* @return The value retrieved from the child node
*/
- CHILD_VALUE getChildValue(VALUE childForm);
+ CHILD_VALUE getChildValue(CHILD_FORM childForm);
+
+ /**
+ *
+ */
+ CHILD_VALUE getExpectedChildValue(int index);
/**
* Returns a list of values that will be used to create children of the node represented by
@@ -284,7 +1119,14 @@
*
* @return A list of values, which should have more than 1 item
*/
- List<CHILD_VALUE> getChildValues();
+ List<CHILD_VALUE> getExpectedChildValues();
+
+ /**
+ * Returns
+ *
+ * @return
+ */
+ List<String> getNodeNames();
/**
* Removes the child node from the node represented by the given form.
@@ -293,14 +1135,15 @@
* @param index The position of the child node within the list of children of the same type
* (i.e. with the same node name)
*/
- void removeChild(T form, int index);
+ void removeChild(FORM form, int index);
}
/**
- * A <code>ChildListNodeTesterRunner</code> TODO.
+ * The runner associated with {@link ChildListNodeTester}.
*/
private class ChildListNodeTesterRunner extends NodeTesterRunner {
+ ContainerNodeRetriever containerNodeRetriever;
int currentChildListCount;
int rangeIndex;
List<Integer[]> ranges;
@@ -310,7 +1153,7 @@
*
* @param tester This object defines a single child node to test
*/
- ChildListNodeTesterRunner(ChildListNodeTester<T, ?, ?> tester) {
+ ChildListNodeTesterRunner(ChildListNodeTester<FORM, ?, ?> tester) {
super(tester);
initialize(tester);
}
@@ -319,18 +1162,31 @@
ranges.add(new Integer[] { Math.min(startIndex, endIndex), Math.max(startIndex, endIndex) });
}
+ private ContainerNodeRetriever buildContainerNodeRetriever() {
+ return new ContainerNodeRetriever() {
+ @Override
+ public Node getContainerNode(Node parent) {
+ return parent;
+ }
+ };
+ }
+
private String displayString() {
return "<" + getNodeName() + ">";
}
+ @SuppressWarnings("unchecked")
private List<Node> getChildrenNodes(Node node) {
- node = node.getFirstChild();
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
+ List<String> nodeNames = tester.getNodeNames();
+
List<Node> children = new ArrayList<Node>();
+ node = node.getFirstChild();
while (node != null) {
- if (getNodeName().equals(node.getNodeName())) {
+ if (nodeNames.contains(node.getNodeName())) {
children.add(node);
}
@@ -340,17 +1196,39 @@
return children;
}
- @SuppressWarnings("unchecked")
- int getDefaultChildrenCount() {
- ChildListNodeTester<T, Object, Object> tester = (ChildListNodeTester<T, Object, Object>) this.tester;
- return tester.getChildValues().size();
+ private Node getContainerNode(Node parent) {
+ return containerNodeRetriever.getContainerNode(parent);
}
- private void initialize(ChildListNodeTester<T, ?, ?> tester) {
+ @SuppressWarnings("unchecked")
+ int getDefaultChildrenCount() {
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
+ return tester.getExpectedChildValues().size();
+ }
+
+ private int getNodePositionOfInsertion(Node node, List<String> nodeNames) {
+
+ String nodeName = node.getNodeName();
+
+ for (int index = 0, count = nodeNames.size(); index < count; index++) {
+
+ String name = nodeNames.get(index);
+
+ if (name.equals(nodeName)) {
+ return index;
+ }
+ }
+
+ fail("The child node named <" + nodeName + "> is not included into the test");
+ return -1;
+ }
+
+ private void initialize(ChildListNodeTester<FORM, ?, ?> tester) {
ranges = new ArrayList<Integer[]>();
+ containerNodeRetriever = buildContainerNodeRetriever();
- List<?> childValues = tester.getChildValues();
+ List<?> childValues = tester.getExpectedChildValues();
if (!childValues.isEmpty()) {
assertTrue(
@@ -368,13 +1246,17 @@
return true;
}
+ void setup() {
+ rangeIndex = ranges.size();
+ ranges.add(new Integer[] { 0, getDefaultChildrenCount() });
+ }
+
/**
* {@inheritDoc}
*/
@Override
- void test(T form, Node node) {
- rangeIndex = ranges.size();
- ranges.add(new Integer[] { 0, getDefaultChildrenCount() });
+ void test(FORM form, Node node) {
+ setup();
super.test(form, node);
}
@@ -383,19 +1265,26 @@
*/
@Override
@SuppressWarnings("unchecked")
- void testAdding(T form, Node parent) {
+ void testAdding(FORM form, Node parent) {
- ChildListNodeTester<T, Object, Object> tester = (ChildListNodeTester<T, Object, Object>) this.tester;
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
+ List<String> nodeNames = tester.getNodeNames();
+ List<Object> values = tester.getExpectedChildValues();
- // Retrieve the values that will be used to create the child nodes
- List<Object> values = tester.getChildValues();
+ // Retrieve the range within the list of values
+ // that will be used to create the children
Integer[] range = ranges.get(rangeIndex);
// Create each child node
for (int index = range[0]; index < range[1]; index++) {
+ // Retrieve the child value that will be used to create a child
Object value = values.get(index);
- assertNotNull("The child value cannot be null", value);
+
+ assertNotNull(
+ displayString() + " : The child value cannot be null",
+ value
+ );
// Create the child node
Object childForm = tester.addChild(form, value);
@@ -409,7 +1298,8 @@
// Retrieve the list of child nodes and make sure it matches
// the number of child nodes that have been created so far
- List<Node> childrenNode = getChildrenNodes(parent);
+ Node containerNode = getContainerNode(parent);
+ List<Node> childrenNode = getChildrenNodes(containerNode);
assertEquals(
displayString() + " : The child node was not created correctly",
@@ -421,8 +1311,13 @@
assertEquals(
"The child node was not created correctly",
currentChildrenCount,
- parent.getChildNodes().getLength()
+ containerNode.getChildNodes().getLength()
);
+
+ // Now make sure the order is kept
+ if (nodeNames.size() > 1) {
+ testOrdinalPosition(containerNode, nodeNames);
+ }
}
}
@@ -431,9 +1326,9 @@
*/
@Override
@SuppressWarnings("unchecked")
- void testInitialState(T form, Node parent) {
+ void testInitialState(FORM form, Node parent) {
- ChildListNodeTester<T, Object, Object> tester = (ChildListNodeTester<T, Object, Object>) this.tester;
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
assertEquals(
displayString() + " : Incorrect number of children was retrieved",
@@ -449,11 +1344,51 @@
);
// Make sure nothing changed
- assertEquals(
- displayString() + " : The number of children is inconsistent",
- currentChildrenCount,
- parent.getChildNodes().getLength()
- );
+ Node containerNode = getContainerNode(parent);
+
+ if (containerNode == null) {
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ 0,
+ currentChildrenCount
+ );
+ }
+ else {
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ currentChildrenCount,
+ containerNode.getChildNodes().getLength()
+ );
+ }
+ }
+
+ private void testOrdinalPosition(Node containerNode, List<String> nodeNames) {
+
+ Node childNode = containerNode.getFirstChild();
+
+ if (childNode != null) {
+
+ List<Integer> nodePositions = new ArrayList<Integer>();
+
+ do {
+ int nodePosition = getNodePositionOfInsertion(childNode, nodeNames);
+ nodePositions.add(nodePosition);
+ childNode = childNode.getNextSibling();
+ }
+ while (childNode != null);
+
+ // Make sure the ordinal numbers are from the smaller number to the biggest number
+ int previousPosition = -1;
+
+ for (int nodePosition : nodePositions) {
+
+ if (previousPosition > nodePosition) {
+ fail("The insertion was not performed following the ordering.");
+ }
+
+ previousPosition = nodePosition;
+ }
+ }
}
/**
@@ -461,10 +1396,9 @@
*/
@Override
@SuppressWarnings("unchecked")
- void testReading(T form, Node node) {
+ void testReading(FORM form, Node node) {
- ChildListNodeTester<T, Object, Object> tester = (ChildListNodeTester<T, Object, Object>) this.tester;
- List<Object> values = tester.getChildValues();
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
List<Object> childForms = tester.getChildren(form);
assertEquals(
@@ -481,7 +1415,7 @@
// Translate the position to the actual position within the list of children
int translatedPosition = translatePosition(rangeIndex, index);
- // Retrieve the child
+ // Retrieve the child form
Object childForm = tester.getChild(form, translatedPosition);
assertNotNull(
@@ -491,7 +1425,9 @@
// Retrieve the child value from the child form
Object childValue = tester.getChildValue(childForm);
- Object expectedChildValue = values.get(index);
+
+ // Retrieve the value that was used to create the child
+ Object expectedChildValue = tester.getExpectedChildValue(index);
assertEquals(
displayString() + " : The child value was not retrieved correctly",
@@ -499,8 +1435,8 @@
childValue
);
- // Retrieve the child
- childForm = childForms.get(translatedPosition);
+ // Retrieve the child from the list of child forms
+ childForm = tester.getChildForm(childForms, translatedPosition);
assertNotNull(
displayString() + " : The child form cannot be null",
@@ -544,7 +1480,7 @@
// Retrieve the child value from the child form
Object childValue = tester.getChildValue(childForm);
- Object expectedChildValue = values.get(index);
+ Object expectedChildValue = tester.getExpectedChildValue(index);
// Now retrieve the translated position within the list of values
assertEquals(
@@ -554,7 +1490,7 @@
);
// Retrieve the child
- childForm = childForms.get(translatedPosition);
+ childForm = tester.getChildForm(childForms, translatedPosition);
assertNotNull(
displayString() + " : The child form cannot be null",
@@ -572,8 +1508,8 @@
}
}
- private void testReadingAfterRemoval(ChildListNodeTester<T, Object, Object> tester,
- T form,
+ private void testReadingAfterRemoval(ChildListNodeTester<FORM, Object, Object> tester,
+ FORM form,
List<Object> childForms,
List<Object> values,
int rangesIndexToSkip,
@@ -613,7 +1549,7 @@
// Retrieve the child value from the child form
Object childValue = tester.getChildValue(childForm);
- Object expectedChildValue = values.get(rangeIndex);
+ Object expectedChildValue = tester.getExpectedChildValue(rangeIndex);
assertEquals(
displayString() + " : The child value was not retrieved correctly",
@@ -622,7 +1558,7 @@
);
// Retrieve the child
- childForm = childForms.get(translatedPosition);
+ childForm = tester.getChildForm(childForms, translatedPosition);
assertNotNull(
displayString() + " : The child form cannot be null",
@@ -641,15 +1577,15 @@
}
}
- private void testReadingAfterRemoval(ChildListNodeTester<T, Object, Object> tester,
- T form,
+ private void testReadingAfterRemoval(ChildListNodeTester<FORM, Object, Object> tester,
+ FORM form,
List<Object> childForms,
List<Object> values,
List<Integer> positions) {
int childIndex = 0;
- for (Integer position : positions) {
+ for (int position : positions) {
// Retrieve the child form
Object childForm = tester.getChild(form, childIndex++);
@@ -661,7 +1597,7 @@
// Retrieve the child value from the child form
Object childValue = tester.getChildValue(childForm);
- Object expectedChildValue = values.get(position);
+ Object expectedChildValue = tester.getExpectedChildValue(position);
assertEquals(
displayString() + " : The child value was not retrieved correctly",
@@ -676,16 +1612,16 @@
*/
@Override
@SuppressWarnings("unchecked")
- void testRemoving(T form, Node node) {
+ void testRemoving(FORM form, Node node) {
// Nothing to test
if (ranges.isEmpty()) {
return;
}
- ChildListNodeTester<T, Object, Object> tester = (ChildListNodeTester<T, Object, Object>) this.tester;
+ ChildListNodeTester<FORM, Object, Object> tester = (ChildListNodeTester<FORM, Object, Object>) this.tester;
Random random = new Random();
- List<Object> values = tester.getChildValues();
+ List<Object> values = tester.getExpectedChildValues();
List<Object> readOnlyChildForms = tester.getChildren(form);
// Now remove all the children at random position and
@@ -734,18 +1670,29 @@
//
// Test 1: Make sure only one node was removed
//
- // Test to make sure the parent node has the right amount of children left
+ // Make sure the parent node has the right amount of children left
assertEquals(
displayString() + " : The number of children is inconsistent",
currentChildListCount,
tester.getChildrenSize(form)
);
- assertEquals(
- displayString() + " : The number of children is inconsistent",
- currentChildrenCount,
- node.getChildNodes().getLength()
- );
+ Node containerNode = getContainerNode(node);
+
+ if (containerNode == null) {
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ 0,
+ currentChildrenCount
+ );
+ }
+ else {
+ assertEquals(
+ displayString() + " : The number of children is inconsistent",
+ currentChildrenCount,
+ containerNode.getChildNodes().getLength()
+ );
+ }
// Retrieve the values that will be used to create the child nodes
List<Object> childForms = tester.getChildren(form);
@@ -776,23 +1723,23 @@
return translatePosition(endRangesIndex, rangeIndexToAdjust, -1);
}
- private int translatePosition(final int endRangesIndex,
+ private int translatePosition(final int endRangeIndex,
final int rangeIndexToAdjust,
- final int rangesIndexToSkip) {
+ final int rangeIndexToSkip) {
int translatedPosition = 0;
- for (int rangesIndex = 0; rangesIndex <= endRangesIndex; rangesIndex++) {
+ for (int rangesIndex = 0; rangesIndex <= endRangeIndex; rangesIndex++) {
// Skip the specified range since work is being done with it
- if (rangesIndex == rangesIndexToSkip) {
+ if (rangesIndex == rangeIndexToSkip) {
continue;
}
Integer[] range = ranges.get(rangesIndex);
// Quick calculation
- if (rangesIndex != endRangesIndex) {
+ if (rangesIndex != endRangeIndex) {
translatedPosition += (range[1] - range[0]);
}
// Adjust the index within the range that ends the translation
@@ -805,6 +1752,9 @@
}
}
+ /**
+ * This controller simply asks its runner to add the child node.
+ */
private class ChildNodeRunnerAddingController extends Controller {
/**
@@ -820,7 +1770,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildNodeTesterRunner runner = (ChildNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
@@ -831,6 +1781,9 @@
}
}
+ /**
+ * This controller simply asks its runner to read the child node.
+ */
private class ChildNodeRunnerReadingController extends Controller {
/**
@@ -846,17 +1799,18 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildNodeTesterRunner runner = (ChildNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
runner.testInitialState(form, node);
runner.testReading(form, node);
-
- currentChildrenCount = runner.currentChildrenCount;
}
}
+ /**
+ * This controller simply asks its runner to remove the child node.
+ */
private class ChildNodeRunnerRemovingController extends Controller {
/**
@@ -872,7 +1826,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
ChildNodeTesterRunner runner = (ChildNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
@@ -886,7 +1840,7 @@
/**
* This <code>ChildNodeTester</code> tests when a form add or remove a single child node.
*/
- public interface ChildNodeTester<T, VALUE extends ExternalForm> extends NodeTester<T, VALUE> {
+ public interface ChildNodeTester<FORM extends ExternalForm, VALUE extends ExternalForm> extends NodeTester<FORM, VALUE> {
/**
* Adds the single child node to the node represented by the given form.
@@ -894,7 +1848,7 @@
* @param form The external form being tested
* @return The {@link ExternalForm} of the child node that was added
*/
- VALUE addChild(T form);
+ VALUE addChild(FORM form);
/**
* Retrieves the {@link ExternalForm} representing the single child node.
@@ -902,7 +1856,7 @@
* @param form The external form being tested
* @return The {@link ExternalForm} representing the child node
*/
- VALUE getChild(T form);
+ VALUE getChild(FORM form);
/**
* Determines whether the given form has a child node with the specific node name.
@@ -911,19 +1865,18 @@
* @return <code>true</code> if the document has the single node as a child node of the node
* for which the given form represents; <code>false</code> if the node does not exist
*/
- boolean hasChild(T form);
+ boolean hasChild(FORM form);
/**
* Removes the single child node from the node represented by the given form.
*
* @param form The external form being tested
*/
- void removeChild(T form);
+ void removeChild(FORM form);
}
/**
- * A <code>ChildNodeTesterRunner</code> tests to make sure the single child node is added and
- * removed correctly from its parent node.
+ * The runner associated with {@link ChildNodeTester}.
*/
private class ChildNodeTesterRunner extends NodeTesterRunner {
@@ -937,7 +1890,7 @@
*
* @param tester This object defines a single child node to test
*/
- ChildNodeTesterRunner(ChildNodeTester<T, ?> tester) {
+ ChildNodeTesterRunner(ChildNodeTester<FORM, ?> tester) {
super(tester);
}
@@ -973,14 +1926,14 @@
* {@inheritDoc}
*/
@Override
- void testAdding(T form, Node node) {
+ void testAdding(FORM form, Node node) {
// Don't add the child if it's not present
if (hasChild) {
return;
}
- ChildNodeTester<T, ? extends ExternalForm> tester = (ChildNodeTester<T, ?>) this.tester;
+ ChildNodeTester<FORM, ? extends ExternalForm> tester = (ChildNodeTester<FORM, ?>) this.tester;
// Add the child node
ExternalForm childForm = tester.addChild(form);
@@ -1023,9 +1976,9 @@
* {@inheritDoc}
*/
@Override
- void testInitialState(T form, Node node) {
+ void testInitialState(FORM form, Node node) {
- ChildNodeTester<T, ?> tester = (ChildNodeTester<T, ?>) this.tester;
+ ChildNodeTester<FORM, ?> tester = (ChildNodeTester<FORM, ?>) this.tester;
// Make sure the child node does not exist
assertEquals(
@@ -1067,21 +2020,21 @@
* {@inheritDoc}
*/
@Override
- void testReading(T form, Node node) {
+ void testReading(FORM form, Node node) {
}
/**
* {@inheritDoc}
*/
@Override
- void testRemoving(T form, Node node) {
+ void testRemoving(FORM form, Node node) {
// Nothing to remove
if (!hasChild) {
return;
}
- ChildNodeTester<T, ?> tester = (ChildNodeTester<T, ?>) this.tester;
+ ChildNodeTester<FORM, ?> tester = (ChildNodeTester<FORM, ?>) this.tester;
// Make sure the child node exists
assertTrue(
@@ -1123,6 +2076,330 @@
}
/**
+ * This controller tests adding a random portion of child nodes (which are owned by a container node).
+ */
+ private class ContainerChildListNodeRunnerAddingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getContainerNodeName() + "> : addition");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+
+ // Create a random range within the list of values used to create the child nodes
+ Random random = new Random();
+ int count = runner.runner.getDefaultChildrenCount();
+
+ int startIndex = random.nextInt(count);
+ int endIndex = random.nextInt(count);
+
+ // Make sure the start and end indices are not the same
+ while (endIndex == startIndex) {
+ endIndex = random.nextInt(count);
+ }
+
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.runner.addRange(startIndex, endIndex);
+ runner.runner.rangeIndex = runner.runner.ranges.size() - 1;
+ runner.testInitialState(form, node);
+ runner.testAdding(form, node);
+ runner.testReading(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This controller tests reading a random portion of child nodes (which are owned by a container node).
+ */
+ private class ContainerChildListNodeRunnerReadingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getContainerNodeName() + "> : reading");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+ int rangesCount = runner.runner.ranges.size();
+
+ // Nothing to read
+ if (rangesCount == 0) {
+ return;
+ }
+
+ // Read a range randomly
+ Random random = new Random();
+ int rangeIndex = random.nextInt(rangesCount);
+ runner.runner.rangeIndex = rangeIndex;
+
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testReading(form, node);
+ }
+ }
+
+ /**
+ * This controller tests removing a random portion of child nodes (which are owned by a container node).
+ */
+ private class ContainerChildListNodeRunnerRemovingController extends Controller {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void log() {
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+ System.out.println("<" + runner.parentNodeName + "><" + runner.getContainerNodeName() + "> : removing");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ void test(FORM form, Node node) {
+
+ ContainerChildListNodeTesterRunner runner = (ContainerChildListNodeTesterRunner) this.runner;
+ int rangesCount = runner.runner.ranges.size();
+
+ // Nothing to read
+ if (rangesCount == 0) {
+ return;
+ }
+
+ // Read a range randomly
+ Random random = new Random();
+ int rangeIndex = random.nextInt(rangesCount);
+ runner.runner.rangeIndex = rangeIndex;
+
+ runner.currentChildrenCount = currentChildrenCount;
+ runner.testInitialState(form, node);
+ runner.testRemoving(form, node);
+
+ currentChildrenCount = runner.currentChildrenCount;
+ }
+ }
+
+ /**
+ * This <code>ContainerChildListNodeTester</code> tests a form when the node it represents can
+ * have zero or many child nodes of the same type (i.e. with the same node name) that are
+ * "wrapped" by a container node.
+ */
+ public interface ContainerChildListNodeTester<FORM extends ExternalForm, CHILD_FORM, CHILD_VALUE> extends ChildListNodeTester<FORM, CHILD_FORM, CHILD_VALUE> {
+
+ /**
+ * Returns the name of the container node which can contain zero or many nodes.
+ *
+ * @param containerNodeName The node that contains the child nodes added by the given tester
+ */
+ String getContainerNodeName();
+ }
+
+ /**
+ * This runner tests adding child nodes not directly to the parent node but to a container node.
+ * <p>
+ * Example:
+ * <pre><code><parentNode>
+ * <containerNode>
+ * <child_1>
+ * <child_2>
+ * ...
+ * <child_n>
+ * </containerNode>
+ *</parentNode></code></pre>
+ */
+ private class ContainerChildListNodeTesterRunner extends NodeTesterRunner {
+
+ /**
+ * This runner adds child nodes to a container node and not directly to the parent.
+ */
+ private ChildListNodeTesterRunner runner;
+
+ /**
+ * Creates a new <code>ContainerChildListNodeTesterRunner</code>.
+ *
+ * @param tester This runner adds child nodes to a container node and not directly to the parent
+ */
+ ContainerChildListNodeTesterRunner(ContainerChildListNodeTester<FORM, ?, ?> tester) {
+ super(tester);
+ this.runner = new ChildListNodeTesterRunner(tester);
+ this.runner.containerNodeRetriever = buildContainerNodeRetreiver();
+ }
+
+ private ContainerNodeRetriever buildContainerNodeRetreiver() {
+ return new ContainerNodeRetriever() {
+ @Override
+ public Node getContainerNode(Node parent) {
+ return ContainerChildListNodeTesterRunner.this.getNode(parent);
+ }
+ };
+ }
+
+ private String displayString() {
+ return "<" + getContainerNodeName() + ">";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ String getActualNodeName() {
+ return getContainerNodeName();
+ }
+
+ @SuppressWarnings("unchecked")
+ String getContainerNodeName() {
+ ContainerChildListNodeTester<FORM, ?, ?> tester = (ContainerChildListNodeTester<FORM, ?, ?>) this.tester;
+ return tester.getContainerNodeName();
+ }
+
+ private Node getNode(Node node) {
+
+ node = node.getFirstChild();
+
+ while (node != null) {
+
+ if (getContainerNodeName().equals(node.getNodeName())) {
+ return node;
+ }
+
+ node = node.getNextSibling();
+ }
+
+ return null;
+ }
+
+ @Override
+ boolean isMultipleSupported() {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void test(FORM form, Node node) {
+ runner.setup();
+ super.test(form, node);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testAdding(FORM form, Node parent) {
+
+ // Check to see if the container node will be added during addition
+ Node childNode = getNode(parent);
+
+ if (childNode == null) {
+ currentChildrenCount++;
+ }
+
+ // Delegate the call
+ runner.testAdding(form, parent);
+
+ // Test to make sure the children were added to the container node
+ assertEquals(
+ runner.displayString() + " : The child nodes were not created correctly",
+ currentChildrenCount,
+ parent.getChildNodes().getLength()
+ );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testInitialState(FORM form, Node parent) {
+ runner.testInitialState(form, parent);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testReading(FORM form, Node parent) {
+ runner.testReading(form, parent);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testRemoving(FORM form, Node parent) {
+
+ // Delegate the call
+ runner.testRemoving(form, parent);
+
+ // Make sure the deletion happened correctly
+ Node childNode = getNode(parent);
+
+ if (runner.currentChildListCount == 0) {
+
+ currentChildrenCount--;
+
+ assertNull(
+ displayString() + " : The child nodes were not removed correctly",
+ childNode
+ );
+ }
+ else {
+ assertNotNull(
+ displayString() + " : The child nodes were not removed correctly",
+ childNode
+ );
+ }
+
+ assertEquals(
+ displayString() + " : The child nodes were not removed correctly",
+ currentChildrenCount,
+ parent.getChildNodes().getLength()
+ );
+ }
+ }
+
+ /**
+ *
+ */
+ interface ContainerNodeRetriever {
+
+ /**
+ * Retrieves
+ *
+ * @param parent
+ * @return
+ */
+ Node getContainerNode(Node parent);
+ }
+
+ /**
* A <code>Controller</code> wraps a {@link NodeTesterRunner} and executes one of the possible
* tests, which is either add, read or remove the property from the node being manipulated by
* the {@link ExternalForm}.
@@ -1136,12 +2413,12 @@
int currentChildrenCount;
/**
- *
+ * The runner to executed but with some tweaks applied.
*/
NodeTesterRunner runner;
/**
- * Outputs what is being executed.
+ * Outputs what is being executed, used for debug purposes.
*/
abstract void log();
@@ -1151,7 +2428,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- abstract void test(T form, Node node);
+ abstract void test(FORM form, Node node);
/**
* {@inheritDoc}
@@ -1162,7 +2439,7 @@
}
}
- private class DefaultRootNodeTester implements RootNodeTester<T> {
+ private class DefaultRootNodeTester implements RootNodeTester<FORM> {
/**
* The list of testers that used to test every single attribute
@@ -1173,7 +2450,7 @@
/**
* The builder of the {@link ExternalForm} to test.
*/
- private ExternalFormBuilder<T> builder;
+ private ExternalFormBuilder<FORM> builder;
/**
* The list of testers that used to test every single child nodes of the one represented by
@@ -1194,7 +2471,7 @@
* {@inheritDoc}
*/
@Override
- public void addAttribute(AttributeNodeTester<T, ?> tester) {
+ public void addAttribute(AttributeNodeTester<FORM, ?> tester) {
attributes.add(new AttributeNodeTesterRunner(tester));
}
@@ -1202,7 +2479,31 @@
* {@inheritDoc}
*/
@Override
- public void addListNodes(ChildListNodeTester<T, ?, ?> tester) {
+ public void addBooleanNode(BooleanChildNodeTester<FORM> tester) {
+ children.add(new BooleanChildNodeTesterRunner(tester));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void addChildAttribute(ChildAttributeTester<FORM,?> tester) {
+ children.add(new ChildAttributeTesterRunner(tester));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void addContainerListNodes(ContainerChildListNodeTester<FORM, ?, ?> tester) {
+ children.add(new ContainerChildListNodeTesterRunner(tester));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void addListNodes(ChildListNodeTester<FORM, ?, ?> tester) {
children.add(new ChildListNodeTesterRunner(tester));
}
@@ -1210,7 +2511,7 @@
* {@inheritDoc}
*/
@Override
- public void addNode(ChildNodeTester<T, ?> tester) {
+ public void addNode(ChildNodeTester<FORM, ?> tester) {
children.add(new ChildNodeTesterRunner(tester));
}
@@ -1218,7 +2519,7 @@
* {@inheritDoc}
*/
@Override
- public void addTextNode(TextNodeTester<T, ?> tester) {
+ public void addTextNode(TextNodeTester<FORM, ?> tester) {
children.add(new TextNodeTesterRunner(tester));
}
@@ -1226,16 +2527,68 @@
* {@inheritDoc}
*/
@Override
+ public void addUnsupportedAttribute(String attributeName) {
+ attributes.add(new NotSupportedAttributeTesterRunner(attributeName));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void addUnsupportedNode(String nodeName) {
children.add(new NotSupportedNodeTesterRunner(nodeName));
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private Map<Class<NodeTesterRunner>, Class<Controller>[]> buildControllerTypes() {
+ private Map<Class<NodeTesterRunner>, Class<Controller>[]> buildAttributeControllerTypes() {
Map classes = new HashMap();
classes.put(
+ AttributeNodeTesterRunner.class,
+ new Class<?>[] {
+ AttributeNodeRunnerAddingController.class,
+ AttributeNodeRunnerReadingController.class,
+ AttributeNodeRunnerRemovingController.class
+ }
+ );
+
+ return classes;
+ }
+
+ private NodeCountRetriever buildAttributeCountRetriever() {
+ return new NodeCountRetriever() {
+ @Override
+ public int getCount(Node node) {
+ return node.getAttributes().getLength();
+ }
+ };
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private Map<Class<NodeTesterRunner>, Class<Controller>[]> buildChildrenControllerTypes() {
+
+ Map classes = new HashMap();
+
+ classes.put(
+ ChildAttributeTesterRunner.class,
+ new Class<?>[] {
+ ChildAttributeRunnerAddingController.class,
+ ChildAttributeRunnerReadingController.class,
+ ChildAttributeRunnerRemovingController.class
+ }
+ );
+
+ classes.put(
+ BooleanChildNodeTesterRunner.class,
+ new Class<?>[] {
+ BooleanChildNodeRunnerAddingController.class,
+ BooleanChildNodeRunnerReadingController.class,
+ BooleanChildNodeRunnerRemovingController.class
+ }
+ );
+
+ classes.put(
ChildNodeTesterRunner.class,
new Class<?>[] {
ChildNodeRunnerAddingController.class,
@@ -1262,9 +2615,27 @@
}
);
+ classes.put(
+ ContainerChildListNodeTesterRunner.class,
+ new Class<?>[] {
+ ContainerChildListNodeRunnerAddingController.class,
+ ContainerChildListNodeRunnerReadingController.class,
+ ContainerChildListNodeRunnerRemovingController.class
+ }
+ );
+
return classes;
}
+ private NodeCountRetriever buildChildrenCountRetriever() {
+ return new NodeCountRetriever() {
+ @Override
+ public int getCount(Node node) {
+ return node.getChildNodes().getLength();
+ }
+ };
+ }
+
private String displayString() {
return "<" + builder.getNodeName() + ">";
}
@@ -1293,7 +2664,7 @@
return node;
}
- return getNode(node, nodeNames.subList(1, nodeName.length()));
+ return getNode(node, nodeNames.subList(1, nodeNames.size()));
}
node = node.getNextSibling();
@@ -1308,9 +2679,9 @@
for (int index = 0, count = children.size(); index < count; index++) {
- NodeTesterRunner tester = children.get(index);
+ NodeTesterRunner runner = children.get(index);
- if (tester.getNodeName().equals(nodeName)) {
+ if (runner.getActualNodeName().equals(nodeName)) {
return index;
}
}
@@ -1324,8 +2695,8 @@
*/
@Override
@SuppressWarnings("unchecked")
- public void setBuilder(ExternalFormBuilder<? extends T> builder) {
- this.builder = (ExternalFormBuilder<T>) builder;
+ public void setBuilder(ExternalFormBuilder<? extends FORM> builder) {
+ this.builder = (ExternalFormBuilder<FORM>) builder;
}
/**
@@ -1334,7 +2705,7 @@
void test() throws Exception {
// Creates the ExternalForm
- T form = builder.buildExternalForm();
+ FORM form = builder.buildExternalForm();
assertNotNull(
displayString() + " : The external form cannot be null",
@@ -1359,6 +2730,20 @@
);
// Test each attribute
+ testAttributes(form, node);
+
+ // Test each child node
+ testChildren(form, node);
+
+ // Now test manipulating the attributes in random order
+ testAttributesRandomly(form, node);
+
+ // Now test manipulating the child nodes in random order
+ testChildNodesRandomly(form, node);
+ }
+
+ private void testAttributes(FORM form, Node node) {
+
int defaultAttributeCount = builder.getDefaultAttributeCount();
for (AttributeNodeTesterRunner runner : attributes) {
@@ -1368,13 +2753,35 @@
runner.test(form, node);
assertEquals(
- displayString() + " : No number of attributes is inconsistent",
+ displayString() + " : The number of attributes is inconsistent",
defaultAttributeCount,
node.getAttributes().getLength()
);
}
+ }
- // Test each child node
+ private void testAttributesRandomly(FORM form, Node parent) throws Exception {
+ testNodesRandomly(
+ form,
+ parent,
+ attributes,
+ buildAttributeCountRetriever(),
+ buildAttributeControllerTypes()
+ );
+ }
+
+ private void testChildNodesRandomly(FORM form, Node parent) throws Exception {
+ testNodesRandomly(
+ form,
+ parent,
+ children,
+ buildChildrenCountRetriever(),
+ buildChildrenControllerTypes()
+ );
+ }
+
+ private void testChildren(FORM form, Node node) {
+
for (NodeTesterRunner runner : children) {
runner.parentNodeName = builder.getNodeName();
@@ -1386,26 +2793,20 @@
node.getChildNodes().getLength()
);
}
-
- // Now test manipulating the attributes in random order
- testAttributesRandomly(form, node);
-
- // Now test manipulating the child nodes in random order
- testChildNodesRandomly(form, node);
}
- private void testAttributesRandomly(T form, Node node) {
- }
+ private void testNodesRandomly(FORM form,
+ Node parent,
+ List<? extends NodeTesterRunner> runners,
+ NodeCountRetriever countRetriever,
+ Map<Class<NodeTesterRunner>, Class<Controller>[]> controllerClasses) throws Exception {
- private void testChildNodesRandomly(T form, Node parent) throws Exception {
-
- // The list of controllers is used to execute a single test for a particular,
- // a list will be generated randomly to test the order
- Map<Class<NodeTesterRunner>, Class<Controller>[]> controllerClasses = buildControllerTypes();
+ // The list of controllers is used to execute a single test for a particular runner.
+ // A list will be generated randomly to test the order
List<Controller> controllers = new ArrayList<Controller>();
Random random = new Random();
- int childrenCount = children.size();
+ int childrenCount = runners.size();
int controllerTypeCount = controllerClasses.size();
int executionCount = childrenCount * controllerTypeCount * 20;
@@ -1414,10 +2815,9 @@
// Get the runner randomly
int childIndex = random.nextInt(childrenCount);
- NodeTesterRunner runner = children.get(childIndex);
+ NodeTesterRunner runner = runners.get(childIndex);
- // Get the controller type randomly
- int controllerIndex = random.nextInt(controllerTypeCount);
+ // Get the controllers associated with the runner
Class<Controller>[] controllerTypes = controllerClasses.get(runner.getClass());
// Happen for unsupported node name
@@ -1425,6 +2825,8 @@
continue;
}
+ // Get the controller type randomly
+ int controllerIndex = random.nextInt(controllerTypes.length);
Class<Controller> controllerType = controllerTypes[controllerIndex];
// Create the controller
@@ -1441,33 +2843,42 @@
// Run each controller and keep the child nodes count up to date
for (Controller controller : controllers) {
- controller.currentChildrenCount = parent.getChildNodes().getLength();
-// controller.log();
+ controller.currentChildrenCount = countRetriever.getCount(parent);
+ //controller.log();
controller.test(form, parent);
- // Retrieve the ordinal of each child node
- Node childNode = parent.getFirstChild();
+ // Test the ordinal of each child node
+ testOrdinalPosition(parent);
+ }
- if (childNode != null) {
+ // Note: The runners don't need to be disposed since there are not used anymore
+ }
- List<Integer> nodePositions = new ArrayList<Integer>();
+ private void testOrdinalPosition(Node parent) {
- do {
- int nodePosition = getNodePositionOfInsertion(childNode);
- nodePositions.add(nodePosition);
- childNode = childNode.getNextSibling();
+ Node childNode = parent.getFirstChild();
+
+ if (childNode != null) {
+
+ List<Integer> nodePositions = new ArrayList<Integer>();
+
+ do {
+ int nodePosition = getNodePositionOfInsertion(childNode);
+ nodePositions.add(nodePosition);
+ childNode = childNode.getNextSibling();
+ }
+ while (childNode != null);
+
+ // Make sure the ordinal numbers are from the smaller number to the biggest number
+ int previousPosition = -1;
+
+ for (int nodePosition : nodePositions) {
+
+ if (previousPosition > nodePosition) {
+ fail("The insertion was not performed following the ordering.");
}
- while (childNode != null);
- // Make sure the ordinal numbers are from the smaller number to the biggest number
- int previousPosition = -1;
-
- for (int nodePosition : nodePositions) {
-
- if (nodePosition < previousPosition) {
- fail("The insertion was not performed following the ordering.");
- }
- }
+ previousPosition = nodePosition;
}
}
}
@@ -1476,7 +2887,7 @@
/**
* A <code>ExternalFormBuilder</code> is responsible to create the {@link ExternalForm} to be tested.
*/
- public interface ExternalFormBuilder<T extends ExternalForm> {
+ public interface ExternalFormBuilder<FORM extends ExternalForm> {
/**
* Creates the {@link ExternalForm} to test.
@@ -1484,7 +2895,7 @@
* @return The {@link ExternalForm} to test
* @throws IOException If an error occurred during the creation process
*/
- T buildExternalForm() throws IOException;
+ FORM buildExternalForm() throws IOException;
/**
* Returns the number of attributes the {@link Node} contains before any manipulation has been performed.
@@ -1499,14 +2910,22 @@
* @param form The {@link ExternalForm} for which to return its node
* @return The node from the document that is been manipulated
*/
- Node getNode(T form);
+ Node getNode(FORM form);
String getNodeName();
List<String> getTreeNodeNames();
}
- private interface NodeTester<T, Value> {
+ private interface NodeCountRetriever {
+ int getCount(Node parent);
+ }
+
+ /**
+ * The root interface of the testers defined to test the manipulation of a node's property (either
+ * an attribute, a single child node, a list of child nodes or a text node).
+ */
+ private interface NodeTester<FORM extends ExternalForm, Value> {
/**
* Retrieves the name of the node for which retrieving and setting its value is tested.
@@ -1516,22 +2935,25 @@
String getNodeName();
}
+ /**
+ * This is the root of the runner class, which is associated with a {@link NodeTester}.
+ */
private abstract class NodeTesterRunner {
/**
- *
+ * Keeps track of the current count of child nodes owned by the node being manipulated.
*/
int currentChildrenCount;
/**
- *
+ * For debug purposes, this is the name of the parent node.
*/
String parentNodeName;
/**
* This object defines a single node to test (which is either a child element or an attribute).
*/
- final NodeTester<T, Object> tester;
+ final NodeTester<FORM, Object> tester;
/**
* Creates a new <code>AbstractNodeTester</code>.
@@ -1539,13 +2961,17 @@
* @param tester The bridge between this tester and the document's node being tested
*/
@SuppressWarnings("unchecked")
- NodeTesterRunner(NodeTester<T, ?> tester) {
+ NodeTesterRunner(NodeTester<FORM, ?> tester) {
super();
- this.tester = (NodeTester<T, Object>) tester;
+ this.tester = (NodeTester<FORM, Object>) tester;
assertNotNull("The tester cannot be null", tester);
assertNotNull("The node name cannot be null", tester.getNodeName());
}
+ String getActualNodeName() {
+ return tester.getNodeName();
+ }
+
/**
* Returns the name of the node for which this runner tests.
*
@@ -1568,7 +2994,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
testInitialState(form, node);
testAdding(form, node);
testReading(form, node);
@@ -1581,7 +3007,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- abstract void testAdding(T form, Node node);
+ abstract void testAdding(FORM form, Node node);
/**
* Tests the given {@link ExternalForm} by making sure the given node is in its original state.
@@ -1589,7 +3015,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- abstract void testInitialState(T form, Node node);
+ abstract void testInitialState(FORM form, Node node);
/**
* Tests the given {@link ExternalForm} by reading the property from the node.
@@ -1597,7 +3023,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- abstract void testReading(T form, Node node);
+ abstract void testReading(FORM form, Node node);
/**
* Tests the given {@link ExternalForm} by removing the property from the node.
@@ -1605,7 +3031,7 @@
* @param form The {@link ExternalForm} to test
* @param node The node that is manipulated by the given {@link ExternalForm}
*/
- abstract void testRemoving(T form, Node node);
+ abstract void testRemoving(FORM form, Node node);
/**
* {@inheritDoc}
@@ -1616,7 +3042,152 @@
}
}
- private class NotSupportedNodeTester implements NodeTester<T, Object> {
+ /**
+ * This <code>AttributeNodeTester</code> does nothing, it is used when an attribute is not
+ * currently by the {@link ExternalForm}.
+ */
+ private class NotSupportedAttributeTester implements AttributeNodeTester<FORM, Object> {
+
+ /**
+ * The name of the attribute that is not supported by the {@link ExternalForm}.
+ */
+ private String attributeName;
+
+ /**
+ * Creates a new <code>NotSupportedAttributeTester</code>.
+ *
+ * @param attributeName The name of the attribute that is not supported by the {@link ExternalForm}
+ */
+ NotSupportedAttributeTester(String attributeName) {
+ super();
+ this.attributeName = attributeName;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getDefaultValue() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getNodeName() {
+ return attributeName;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getValue(FORM form) {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getValue1() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getValue2() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isNullAllowed() {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setValue(FORM form, Object value) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString(Object value) {
+ return null;
+ }
+ }
+
+ /**
+ * This runner simply does nothing but adds support for adding an attribute name into the list of
+ * attributes so that the ordering defined by the XML schema is properly tested.
+ */
+ private class NotSupportedAttributeTesterRunner extends AttributeNodeTesterRunner {
+
+ /**
+ * Creates a new <code>NotSupportedAttributeTesterRunner</code>.
+ *
+ * @param attributeName The name of the attribute that is currently not supported by the
+ * {@link ExternalForm}
+ */
+ NotSupportedAttributeTesterRunner(String attributeName) {
+ super(new NotSupportedAttributeTester(attributeName));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testAdding(FORM form, Node node) {
+ // Nothing to do
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testInitialState(FORM form, Node node) {
+ // Nothing to do
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testReading(FORM form, Node node) {
+ // Nothing to do
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void testRemoving(FORM form, Node node) {
+ // Nothing to do
+ }
+ }
+
+ /**
+ * This wraps a node name that is currently not supported by the Mapping SPI.
+ */
+ private class NotSupportedNodeTester implements NodeTester<FORM, Object> {
/**
* The name of the node that is currently not supported by the {@link ExternalForm}.
@@ -1642,6 +3213,10 @@
}
}
+ /**
+ * This runner simply does nothing but adds support for adding a node name into the list of child
+ * nodes so that the ordering defined by the XML schema is properly tested.
+ */
private class NotSupportedNodeTesterRunner extends NodeTesterRunner {
/**
@@ -1665,7 +3240,7 @@
* {@inheritDoc}
*/
@Override
- void testAdding(T form, Node node) {
+ void testAdding(FORM form, Node node) {
// Nothing to do
}
@@ -1673,7 +3248,7 @@
* {@inheritDoc}
*/
@Override
- void testInitialState(T form, Node node) {
+ void testInitialState(FORM form, Node node) {
// Nothing to do
}
@@ -1681,7 +3256,7 @@
* {@inheritDoc}
*/
@Override
- void testReading(T form, Node node) {
+ void testReading(FORM form, Node node) {
// Nothing to do
}
@@ -1689,7 +3264,7 @@
* {@inheritDoc}
*/
@Override
- void testRemoving(T form, Node node) {
+ void testRemoving(FORM form, Node node) {
// Nothing to do
}
}
@@ -1706,7 +3281,7 @@
*
* @param tester This object defines a single node to test a child text node
*/
- PropertyNodeTesterRunner(PropertyTester<T, ?> tester) {
+ PropertyNodeTesterRunner(PropertyTester<FORM, ?> tester) {
super(tester);
}
@@ -1753,19 +3328,24 @@
* {@inheritDoc}
*/
@Override
- void testAdding(T form, Node parentNode) {
+ void testAdding(FORM form, Node parentNode) {
- PropertyTester<T, Object> tester = (PropertyTester<T, Object>) this.tester;
+ PropertyTester<FORM, Object> tester = (PropertyTester<FORM, Object>) this.tester;
// Change the node value to null
if (tester.isNullAllowed()) {
tester.setValue(form, null);
+ if (nodeExists) {
+ nodeExists = false;
+ currentChildrenCount--;
+ }
+
assertEquals(
displayString() + " : The element should not have any children",
- 0,
- getChildrenCount(parentNode) - currentChildrenCount
+ currentChildrenCount,
+ getChildrenCount(parentNode)
);
// Make sure nothing changed
@@ -1779,8 +3359,8 @@
// Make sure nothing changed
assertEquals(
displayString() + " : The element should not have any children",
- 0,
- getChildrenCount(parentNode) - currentChildrenCount
+ currentChildrenCount,
+ getChildrenCount(parentNode)
);
}
@@ -1794,6 +3374,11 @@
tester.setValue(form, expectedValue1);
+ if (!nodeExists) {
+ nodeExists = true;
+ currentChildrenCount++;
+ }
+
// The child node should have been added
Node childNode = getNode(parentNode);
@@ -1803,9 +3388,9 @@
);
assertEquals(
- displayString() + " : The element should have a " + (nodeExists ? currentChildrenCount : currentChildrenCount + 1) + " children",
- nodeExists ? 0 : 1,
- getChildrenCount(parentNode) - currentChildrenCount
+ displayString() + " : The element should have a " + currentChildrenCount + " children",
+ currentChildrenCount,
+ getChildrenCount(parentNode)
);
// Get the value
@@ -1859,17 +3444,24 @@
);
// Change the value back to its original value
- tester.setValue(form, tester.getDefaultValue());
+ Object defaultValue = tester.getDefaultValue();
+
+ assertNotNull(
+ displayString() + " : The default value cannot be null",
+ defaultValue
+ );
+
+ tester.setValue(form, defaultValue);
}
/**
* {@inheritDoc}
*/
@Override
- void testInitialState(T form, Node parent) {
+ void testInitialState(FORM form, Node parent) {
- PropertyTester<T, Object> tester = (PropertyTester<T, Object>) this.tester;
- nodeExists |= tester.doesNodeExistAlready();
+ PropertyTester<FORM, Object> tester = (PropertyTester<FORM, Object>) this.tester;
+ nodeExists |= tester.doesNodeAlreadyExist();
// Node name
String nodeName = getNodeName();
@@ -1878,8 +3470,8 @@
// Test the initial state of the parent node
assertEquals(
displayString() + " : The parent node child count is incorrect",
- 0,
- getChildrenCount(parent) - currentChildrenCount
+ currentChildrenCount,
+ getChildrenCount(parent)
);
// The child node should either not exist or already being present
@@ -1903,9 +3495,9 @@
* {@inheritDoc}
*/
@Override
- void testReading(T form, Node node) {
+ void testReading(FORM form, Node node) {
- PropertyTester<T, Object> tester = (PropertyTester<T, Object>) this.tester;
+ PropertyTester<FORM, Object> tester = (PropertyTester<FORM, Object>) this.tester;
// The node value should either be null or not null
Object result = tester.getValue(form);
@@ -1965,19 +3557,24 @@
* {@inheritDoc}
*/
@Override
- void testRemoving(T form, Node parentNode) {
+ void testRemoving(FORM form, Node parentNode) {
- PropertyTester<T, Object> tester = (PropertyTester<T, Object>) this.tester;
+ PropertyTester<FORM, Object> tester = (PropertyTester<FORM, Object>) this.tester;
// Change the node value to null, which will remove it from the parent node
if (tester.isNullAllowed()) {
tester.setValue(form, null);
+ if (nodeExists) {
+ nodeExists = false;
+ currentChildrenCount--;
+ }
+
assertEquals(
displayString() + " : The child count does not match the current state",
- 0,
- getChildrenCount(parentNode) - currentChildrenCount
+ currentChildrenCount,
+ getChildrenCount(parentNode)
);
}
}
@@ -1987,7 +3584,7 @@
* A <code>PropertyTester</code> handles testing either an attribute or a single child node of
* the node being tested.
*/
- private interface PropertyTester<T, VALUE> extends NodeTester<T, VALUE> {
+ private interface PropertyTester<FORM extends ExternalForm, VALUE> extends NodeTester<FORM, VALUE> {
/**
* Determines whether the property is by default present in the document.
@@ -1995,10 +3592,10 @@
* @return <code>true</code> if the property exists before any changes is done to the document;
* <code>false</code> otherwise
*/
- boolean doesNodeExistAlready();
+ boolean doesNodeAlreadyExist();
/**
- * If {@link #doesNodeExistAlready()} returns <code>true</code>, then this should return the
+ * If {@link #doesNodeAlreadyExist()} returns <code>true</code>, then this should return the
* node value that is already present in the document, which is done before the document is
* being changed.
*
@@ -2013,7 +3610,7 @@
* @param form The external form that will retrieve the value
* @return The value, which can be <code>null</code>
*/
- VALUE getValue(T form);
+ VALUE getValue(FORM form);
/**
* Retrieves a non-<code>null</code> value that will be used for testing that is different
@@ -2044,7 +3641,7 @@
* @param form The external form that will set the value
* @return The value, which can be <code>null</code>
*/
- void setValue(T form, VALUE value);
+ void setValue(FORM form, VALUE value);
/**
* Converts the value to its string representation.
@@ -2059,14 +3656,29 @@
* A <code>RootNodeTester</code> is the container of all the testers that will test every single
* property of the node to test, i.e. its attributes and child nodes.
*/
- public interface RootNodeTester<T extends ExternalForm> {
+ public interface RootNodeTester<FORM extends ExternalForm> {
/**
* Adds the given tester when the form has an attribute.
*
* @param tester The tester for a single attribute
*/
- void addAttribute(AttributeNodeTester<T, ?> tester);
+ void addAttribute(AttributeNodeTester<FORM, ?> tester);
+
+ /**
+ * Adds the given tester when the form representing the node it represents can have one child
+ * node of a certain type and its property is represented by a boolean value.
+ *
+ * @param tester The tester for a single child node
+ */
+ void addBooleanNode(BooleanChildNodeTester<FORM> tester);
+
+ /**
+ * Adds the given tester when the form has a child node with a single attribute.
+ *
+ * @param tester The tester for a single attribute owned by a single child node
+ */
+ void addChildAttribute(ChildAttributeTester<FORM, ?> tester);
/**
* Adds the given tester when the form representing the node it represents can have zero or
@@ -2074,7 +3686,15 @@
*
* @param tester The tester for a list of child nodes with the same type
*/
- void addListNodes(ChildListNodeTester<T, ?, ?> tester);
+ void addContainerListNodes(ContainerChildListNodeTester<FORM, ?, ?> tester);
+
+ /**
+ * Adds the given tester when the form representing the node it represents can have zero or
+ * many child nodes of the same type (i.e. with the same node name).
+ *
+ * @param tester The tester for a list of child nodes with the same type
+ */
+ void addListNodes(ChildListNodeTester<FORM, ?, ?> tester);
/**
* Adds the given tester when the form representing the node it represents can have one child
@@ -2082,14 +3702,22 @@
*
* @param tester The tester for a single child node
*/
- void addNode(ChildNodeTester<T, ?> tester);
+ void addNode(ChildNodeTester<FORM, ?> tester);
/**
* Adds the given tester when the form has a single child node that is a text node.
*
* @param tester The tester for a single child text node
*/
- void addTextNode(TextNodeTester<T, ?> tester);
+ void addTextNode(TextNodeTester<FORM, ?> tester);
+
+ /**
+ * Adds the given attribute name to indicate it is part of the "root" node but it is not
+ * supported by the {@link ExternalForm} yet.
+ *
+ * @param attributeName The name of the attribute not currently supported
+ */
+ void addUnsupportedAttribute(String attributeName);
/**
* Adds the given node name to indicate it is part of the "root" node but it is not supported
@@ -2104,9 +3732,12 @@
*
* @param builder The builder of the node to test
*/
- void setBuilder(ExternalFormBuilder<? extends T> builder);
+ void setBuilder(ExternalFormBuilder<? extends FORM> builder);
}
+ /**
+ * This controller simply asks its runner to add the child text node.
+ */
private class TextNodeRunnerAddingController extends Controller {
/**
@@ -2122,7 +3753,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
TextNodeTesterRunner runner = (TextNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
@@ -2133,6 +3764,9 @@
}
}
+ /**
+ * This controller simply asks its runner to read the child node.
+ */
private class TextNodeRunnerReadingController extends Controller {
/**
@@ -2148,17 +3782,18 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
TextNodeTesterRunner runner = (TextNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
runner.testInitialState(form, node);
runner.testReading(form, node);
-
- currentChildrenCount = runner.currentChildrenCount;
}
}
+ /**
+ * This controller simply asks its runner to remove the child node.
+ */
private class TextNodeRunnerRemovingController extends Controller {
/**
@@ -2174,7 +3809,7 @@
*/
@Override
@SuppressWarnings("unchecked")
- void test(T form, Node node) {
+ void test(FORM form, Node node) {
TextNodeTesterRunner runner = (TextNodeTesterRunner) this.runner;
runner.currentChildrenCount = currentChildrenCount;
@@ -2187,14 +3822,14 @@
/**
* A <code>TextNodeTester</code> tests setting and retrieving the value associated with a text node.
+ *
+ * <div nowrap>Form: <code><b><node_name>text</node_name></b></code>.</div>
*/
- public interface TextNodeTester<T, VALUE> extends PropertyTester<T, VALUE> {
+ public interface TextNodeTester<FORM extends ExternalForm, VALUE> extends PropertyTester<FORM, VALUE> {
}
/**
- * <p>A <code>TextNodeTesterRunner</code> tests setting and retrieving the value associated with
- * a text node.</p>
- * <div nowrap>Form: <code><b><node_name>text</node_name></b></code>.</div>
+ * The runner associated with {@link TextNodeTester}.
*/
private class TextNodeTesterRunner extends PropertyNodeTesterRunner {
@@ -2203,7 +3838,7 @@
*
* @param tester This object defines a single node to test a child text node
*/
- TextNodeTesterRunner(TextNodeTester<T, ?> tester) {
+ TextNodeTesterRunner(TextNodeTester<FORM, ?> tester) {
super(tester);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AccessTypeTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AccessTypeTests.java
new file mode 100644
index 0000000..1863b08
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AccessTypeTests.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import org.eclipse.persistence.tools.mapping.orm.AccessType;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAccessType;
+import org.eclipse.persistence.tools.mapping.tests.AbstractExternalFormTests.AttributeNodeTester;
+import org.eclipse.persistence.tools.mapping.tests.AbstractExternalFormTests.TextNodeTester;
+
+/**
+ * Defines the various testers for the "access" property.
+ *
+ * @see org.eclipse.persistence.tools.mapping.orm.ExternalAccessType
+ *
+ * @version 2.6
+ */
+public final class AccessTypeTests {
+
+ /**
+ * Cannot create a new <code>AccessTypeTests</code>.
+ */
+ private AccessTypeTests() {
+ super();
+ }
+
+ public static <T extends ExternalAccessType> AttributeNodeTester<T, AccessType> buildAccessAttributeNodeTester() {
+ return new AttributeNodeTester<T, AccessType>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public AccessType getDefaultValue() {
+ return AccessType.FIELD;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalAccessType.ACCESS;
+ }
+ @Override
+ public AccessType getValue(ExternalAccessType form) {
+ return form.getAccessType();
+ }
+ @Override
+ public AccessType getValue1() {
+ return AccessType.PROPERTY;
+ }
+ @Override
+ public AccessType getValue2() {
+ return AccessType.VIRTUAL;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(ExternalAccessType form, AccessType value) {
+ form.setAccessType(value);
+ }
+ @Override
+ public String toString(AccessType value) {
+ return value.name();
+ }
+ };
+ }
+
+ public static <T extends ExternalAccessType> TextNodeTester<T, AccessType> buildAccessTextNodeTester() {
+ return new TextNodeTester<T, AccessType>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public AccessType getDefaultValue() {
+ return AccessType.FIELD;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalAccessType.ACCESS;
+ }
+ @Override
+ public AccessType getValue(ExternalAccessType form) {
+ return form.getAccessType();
+ }
+ @Override
+ public AccessType getValue1() {
+ return AccessType.PROPERTY;
+ }
+ @Override
+ public AccessType getValue2() {
+ return AccessType.VIRTUAL;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(ExternalAccessType form, AccessType value) {
+ form.setAccessType(value);
+ }
+ @Override
+ public String toString(AccessType value) {
+ return value.name();
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AllORMTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AllORMTests.java
index 154410a..8ffa922 100644
--- a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AllORMTests.java
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/AllORMTests.java
@@ -23,7 +23,16 @@
* @version 2.6
*/
@SuiteClasses({
- ORMConfigurationTests.class
+
+ // Root node
+ ORMConfigurationTests.class,
+
+ // Managed types
+ EmbeddableTests.class,
+ MappedSuperclassTests.class,
+ EntityTests.class
+
+ // Mappings
})
@RunWith(Suite.class)
public final class AllORMTests {
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ConverterTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ConverterTests.java
new file mode 100644
index 0000000..183e73d
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ConverterTests.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.persistence.tools.mapping.orm.ExternalClassConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalConverterProvider;
+import org.eclipse.persistence.tools.mapping.orm.ExternalObjectTypeConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalStructConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalTypeConverter;
+import org.eclipse.persistence.tools.mapping.tests.AbstractExternalFormTests.ChildListNodeTester;
+
+/**
+ * @version 2.6
+ */
+@SuppressWarnings("nls")
+public final class ConverterTests {
+
+ /**
+ * Creates a new <code>ConverterTests</code>.
+ */
+ private ConverterTests() {
+ super();
+ }
+
+ public static <T extends ExternalConverterProvider> ChildListNodeTester<T, ExternalClassConverter, String> buildConverterTester() {
+ return new ChildListNodeTester<T, ExternalClassConverter, String>() {
+ @Override
+ public ExternalClassConverter addChild(T form, String value) {
+ return form.addConverter(value);
+ }
+ @Override
+ public ExternalClassConverter getChild(T form, int index) {
+ return form.getConverter(index);
+ }
+ @Override
+ public ExternalClassConverter getChildForm(List<ExternalClassConverter> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalClassConverter> getChildren(T form) {
+ return form.converters();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.convertersSize();
+ }
+ @Override
+ public String getChildValue(ExternalClassConverter childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "CLASS_CONVERTER_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalClassConverter.CONVERTER;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeConverter(index);
+ }
+ };
+ }
+
+ public static <T extends ExternalConverterProvider> ChildListNodeTester<T, ExternalObjectTypeConverter, String> buildObjectTypeConverterTester() {
+ return new ChildListNodeTester<T, ExternalObjectTypeConverter, String>() {
+ @Override
+ public ExternalObjectTypeConverter addChild(T form, String value) {
+ return form.addObjectTypeConverter(value);
+ }
+ @Override
+ public ExternalObjectTypeConverter getChild(T form, int index) {
+ return form.getObjectTypeConverter(index);
+ }
+ @Override
+ public ExternalObjectTypeConverter getChildForm(List<ExternalObjectTypeConverter> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalObjectTypeConverter> getChildren(T form) {
+ return form.objectTypeConverters();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.objectTypeConvertersSize();
+ }
+ @Override
+ public String getChildValue(ExternalObjectTypeConverter childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "OBJECT_TYPE_CONVERTER_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalObjectTypeConverter.OBJECT_TYPE_CONVERTER;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeObjectTypeConverter(index);
+ }
+ };
+ }
+
+ public static String buildSerializedConverterTester() {
+ return "serialized-converter";
+ }
+
+ public static <T extends ExternalConverterProvider> ChildListNodeTester<T, ExternalStructConverter, String> buildStructConverterTester() {
+ return new ChildListNodeTester<T, ExternalStructConverter, String>() {
+ @Override
+ public ExternalStructConverter addChild(T form, String value) {
+ return form.addStructConverter(value);
+ }
+ @Override
+ public ExternalStructConverter getChild(T form, int index) {
+ return form.getStructConverter(index);
+ }
+ @Override
+ public ExternalStructConverter getChildForm(List<ExternalStructConverter> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalStructConverter> getChildren(T form) {
+ return form.structConverters();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.structConvertersSize();
+ }
+ @Override
+ public String getChildValue(ExternalStructConverter childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "STRUCT_CONVERTER_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalStructConverter.STRUCT_CONVERTER;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeStructConverter(index);
+ }
+ };
+ }
+
+ public static <T extends ExternalConverterProvider> ChildListNodeTester<T, ExternalTypeConverter, String> buildTypeConverterTester() {
+ return new ChildListNodeTester<T, ExternalTypeConverter, String>() {
+ @Override
+ public ExternalTypeConverter addChild(T form, String value) {
+ return form.addTypeConverter(value);
+ }
+ @Override
+ public ExternalTypeConverter getChild(T form, int index) {
+ return form.getTypeConverter(index);
+ }
+ @Override
+ public ExternalTypeConverter getChildForm(List<ExternalTypeConverter> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalTypeConverter> getChildren(T form) {
+ return form.typeConverters();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.typeConvertersSize();
+ }
+ @Override
+ public String getChildValue(ExternalTypeConverter childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "TYPE_CONVERTER_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalTypeConverter.TYPE_CONVERTER;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeTypeConverter(index);
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EmbeddableTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EmbeddableTests.java
new file mode 100644
index 0000000..8e37e96
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EmbeddableTests.java
@@ -0,0 +1,922 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.persistence.annotations.ChangeTrackingType;
+import org.eclipse.persistence.tools.mapping.ExternalProperty;
+import org.eclipse.persistence.tools.mapping.orm.AccessType;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAccessMethods;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAssociationOverride;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAttributeOverride;
+import org.eclipse.persistence.tools.mapping.orm.ExternalBasicCollectionMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalBasicMapMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalBasicMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalClassConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalCloneCopyPolicy;
+import org.eclipse.persistence.tools.mapping.orm.ExternalCopyPolicy;
+import org.eclipse.persistence.tools.mapping.orm.ExternalElementCollectionMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddable;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddedIDMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddedMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalIDMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalInstantiationCopyPolicy;
+import org.eclipse.persistence.tools.mapping.orm.ExternalManyToManyMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalManyToOneMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNoSql;
+import org.eclipse.persistence.tools.mapping.orm.ExternalORMConfiguration;
+import org.eclipse.persistence.tools.mapping.orm.ExternalObjectTypeConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalOneToManyMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalOneToOneMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalStructConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalTransformationMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalTransientMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalTypeConverter;
+import org.eclipse.persistence.tools.mapping.orm.ExternalVariableOneToOneMapping;
+import org.eclipse.persistence.tools.mapping.orm.ExternalVersionMapping;
+import org.eclipse.persistence.tools.mapping.tests.AbstractExternalFormTests;
+import org.eclipse.persistence.tools.utility.ObjectTools;
+import org.eclipse.persistence.tools.utility.collection.ListTools;
+import org.w3c.dom.Node;
+
+/**
+ * This unit-tests tests the behavior of {@link T}.
+ *
+ * @version 2.6
+ */
+@SuppressWarnings("nls")
+public class EmbeddableTests<T extends ExternalEmbeddable> extends AbstractExternalFormTests<T> {
+
+ final ChildNodeTester<T, ExternalAccessMethods> buildAccessMethodsTester() {
+ return new ChildNodeTester<T, ExternalAccessMethods>() {
+ @Override
+ public ExternalAccessMethods addChild(T form) {
+ return form.addAccessMethods(null, null);
+ }
+ @Override
+ public ExternalAccessMethods getChild(T form) {
+ return form.getAccessMethods();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalAccessMethods.ACCESS_METHODS;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasAccessMethods();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeAccessMethods();
+ }
+ };
+ }
+
+ final AttributeNodeTester<T, AccessType> buildAccessTester() {
+ return AccessTypeTests.buildAccessAttributeNodeTester();
+ }
+
+ final ChildListNodeTester<T, ExternalAssociationOverride, String> buildAssociationOverrideTester() {
+ return new ChildListNodeTester<T, ExternalAssociationOverride, String>() {
+ @Override
+ public ExternalAssociationOverride addChild(T form, String value) {
+ return form.addAssociationOverride(value);
+ }
+ @Override
+ public ExternalAssociationOverride getChild(T form, int index) {
+ return form.getAssociationOverride(index);
+ }
+ @Override
+ public ExternalAssociationOverride getChildForm(List<ExternalAssociationOverride> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalAssociationOverride> getChildren(T form) {
+ return form.associationOverrides();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.associationOverridesSize();
+ }
+ @Override
+ public String getChildValue(ExternalAssociationOverride childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "ASSOCIATION_OVERRIDE_" + 1;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalAssociationOverride.ASSOCIATION_OVERRIDE;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeAssociationOverride(index);
+ }
+ };
+ }
+
+ final ChildListNodeTester<T, ExternalAttributeOverride, String> buildAttributeOverrideTester() {
+ return new ChildListNodeTester<T, ExternalAttributeOverride, String>() {
+ @Override
+ public ExternalAttributeOverride addChild(T form, String value) {
+ return form.addAttributeOverride(value);
+ }
+ @Override
+ public ExternalAttributeOverride getChild(T form, int index) {
+ return form.getAttributeOverride(index);
+ }
+ @Override
+ public ExternalAttributeOverride getChildForm(List<ExternalAttributeOverride> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalAttributeOverride> getChildren(T form) {
+ return form.attributeOverrides();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.attributeOverridesSize();
+ }
+ @Override
+ public String getChildValue(ExternalAttributeOverride childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "ATTRIBUTE_OVERRIDE_" + 1;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalAttributeOverride.ATTRIBUTE_OVERRIDE;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeAttributeOverride(index);
+ }
+ };
+ }
+
+ final ContainerChildListNodeTester<T, ExternalMapping, String> buildAttributesTester() {
+
+ return new ContainerChildListNodeTester<T, ExternalMapping, String>() {
+
+ private List<String> expectedValues;
+ private List<String> mappingNames;
+ private List<Integer> orderedIndices;
+ private List<String> orderedValues;
+
+ {
+ orderedIndices = new ArrayList<Integer>();
+ orderedValues = new ArrayList<String>();
+ mappingNames = buildMappingNames();
+ expectedValues = buildExpectedValues();
+ }
+
+ @Override
+ public String getContainerNodeName() {
+ return ExternalMapping.ATTRIBUTES;
+ }
+
+ @Override
+ public ExternalMapping addChild(T form, String value) {
+
+ // Extract the mapping name
+ String mappingName = value.substring(0, value.indexOf("_"));
+
+ // Calculate the position of insertion based on the order
+ // of the mapping type defined in the XML schema
+ int index = insertionIndex(orderedValues, mappingName);
+
+ // Store the value based on the order of insertion in the document
+ orderedValues.add(index, value);
+
+ // Now adjust the positions of insertion
+ adjustOrderedIndices(index, +1);
+
+ // Store the index of insertion based on the order defined in the schema
+ orderedIndices.add(index);
+
+ // Now add the mapping
+ return addMapping(form, value, mappingName);
+ }
+
+ private ExternalMapping addMapping(T form,
+ String value,
+ String mappingName) {
+
+ if (ExternalBasicMapping.BASIC.equals(mappingName)) {
+ return form.addBasicMapping(value);
+ }
+
+ if (ExternalBasicCollectionMapping.BASIC_COLLECTION.equals(mappingName)) {
+ return form.addBasicCollectionMapping(value);
+ }
+
+ if (ExternalBasicMapMapping.BASIC_MAP.equals(mappingName)) {
+ return form.addBasicMapMapping(value);
+ }
+
+ if (ExternalManyToOneMapping.MANY_TO_ONE.equals(mappingName)) {
+ return form.addManyToOneMapping(value);
+ }
+
+ if (ExternalOneToManyMapping.ONE_TO_MANY.equals(mappingName)) {
+ return form.addOneToManyMapping(value);
+ }
+
+ if (ExternalOneToOneMapping.ONE_TO_ONE.equals(mappingName)) {
+ return form.addOneToOneMapping(value);
+ }
+
+ if (ExternalManyToManyMapping.MANY_TO_MANY.equals(mappingName)) {
+ return form.addManyToManyMapping(value);
+ }
+
+ if (ExternalElementCollectionMapping.ELEMENT_COLLECTION.equals(mappingName)) {
+ return form.addElementCollectionMapping(value);
+ }
+
+ if (ExternalEmbeddedMapping.EMBEDDED.equals(mappingName)) {
+ return form.addEmbeddedMapping(value);
+ }
+
+ if (ExternalTransientMapping.TRANSIENT.equals(mappingName)) {
+ return form.addTransientMapping(value);
+ }
+
+ throw new IllegalAccessError("The value is unknown: " + value);
+ }
+
+ private void adjustOrderedIndices(int index, int direction) {
+
+ for (int position = 0, count = orderedIndices.size(); position < count; position++) {
+ int value = orderedIndices.get(position);
+ if (value >= index) {
+ orderedIndices.set(position, value + direction);
+ }
+ }
+ }
+
+ /**
+ * Generates a list of 30 values that is based on the mapping name.
+ * <p>
+ * Format: "<mapping name> _ [ 0, 2 ] _ <unique id>"
+ *
+ * @return A list of unique values
+ */
+ private List<String> buildExpectedValues() {
+
+ List<String> values = new ArrayList<String>();
+
+ for (int index = 0; index < 3; index++) {
+ for (String mappingName : mappingNames) {
+ values.add(mappingName + "_" + index);
+ }
+ }
+
+ // Now shuffle that list
+ Collections.shuffle(values);
+
+ return values;
+ }
+
+ private List<String> buildMappingNames() {
+ List<String> names = new ArrayList<String>();
+ names.add(ExternalBasicMapping.BASIC);
+ names.add(ExternalBasicCollectionMapping.BASIC_COLLECTION);
+ names.add(ExternalBasicMapMapping.BASIC_MAP);
+ names.add(ExternalManyToOneMapping.MANY_TO_ONE);
+ names.add(ExternalOneToManyMapping.ONE_TO_MANY);
+ names.add(ExternalOneToOneMapping.ONE_TO_ONE);
+ names.add(ExternalManyToManyMapping.MANY_TO_MANY);
+ names.add(ExternalElementCollectionMapping.ELEMENT_COLLECTION);
+ names.add(ExternalEmbeddedMapping.EMBEDDED);
+ names.add(ExternalTransientMapping.TRANSIENT);
+ return names;
+ }
+
+ @Override
+ public ExternalMapping getChild(T form, int index) {
+
+ // Retrieve the position of insertion within the document
+ index = orderedIndices.get(index);
+
+ // Return the mapping that was added in the order specified by the schema
+ return form.getMapping(index);
+ }
+
+ @Override
+ public ExternalMapping getChildForm(List<ExternalMapping> childForms, int index) {
+
+ // Retrieve the position of insertion within the document
+ index = orderedIndices.get(index);
+
+ // Get the child form at the position it was inserted into the document
+ return childForms.get(index);
+ }
+
+ @Override
+ public List<ExternalMapping> getChildren(T form) {
+ return form.mappings();
+ }
+
+ @Override
+ public int getChildrenSize(T form) {
+ return form.mappingsSize();
+ }
+
+ @Override
+ public String getChildValue(ExternalMapping childForm) {
+ return childForm.getName();
+ }
+
+ @Override
+ public String getExpectedChildValue(int index) {
+ // Return the mapping name that is ordered based on the mapping type
+ return expectedValues.get(index);
+ }
+
+ @Override
+ public List<String> getExpectedChildValues() {
+ // Returned the generate list of mapping names
+ return expectedValues;
+ }
+
+ @Override
+ public String getNodeName() {
+ return ExternalMapping.ATTRIBUTES;
+ }
+
+ @Override
+ public List<String> getNodeNames() {
+ List<String> names = new ArrayList<String>();
+ names.add(ExternalEmbeddable.DESCRIPTION);
+ names.add(ExternalIDMapping.ID);
+ names.add(ExternalEmbeddedIDMapping.EMBEDDED_ID);
+ names.add(ExternalBasicMapping.BASIC);
+ names.add(ExternalBasicCollectionMapping.BASIC_COLLECTION);
+ names.add(ExternalBasicMapMapping.BASIC_MAP);
+ names.add(ExternalVersionMapping.VERSION);
+ names.add(ExternalManyToOneMapping.MANY_TO_ONE);
+ names.add(ExternalOneToManyMapping.ONE_TO_MANY);
+ names.add(ExternalOneToOneMapping.ONE_TO_ONE);
+ names.add(ExternalVariableOneToOneMapping.VARIABLE_ONE_TO_ONE);
+ names.add(ExternalManyToManyMapping.MANY_TO_MANY);
+ names.add(ExternalElementCollectionMapping.ELEMENT_COLLECTION);
+ names.add(ExternalEmbeddedMapping.EMBEDDED);
+ names.add(ExternalTransformationMapping.TRANSFORMATION);
+ names.add(ExternalTransientMapping.TRANSIENT);
+ names.add("structure");
+ names.add("array");
+ return names;
+ }
+
+ private int insertionIndex(List<String> values, String mappingType) {
+
+ // First get the index of the mapping type within the list of registered mapping types
+ int mappingTypeIndex = mappingNames.indexOf(mappingType);
+
+ // Iterate through the list of cached values
+ for (int index = 0; index < values.size(); index++) {
+
+ String value = values.get(index);
+ String type = value.substring(0, value.indexOf("_"));
+
+ int otherMappingTypeIndex = mappingNames.indexOf(type);
+
+ if (mappingTypeIndex < otherMappingTypeIndex) {
+ return index;
+ }
+ }
+
+ return values.size();
+ }
+
+ @Override
+ public void removeChild(T form, int index) {
+
+ // Retrieve the position of insertion within the document
+ index = orderedIndices.remove(index);
+ orderedValues.remove(index);
+
+ // Remove the mapping that was added in the order specified by the schema
+ form.removeMapping(index);
+
+ // Now adjust the positions of insertion
+ adjustOrderedIndices(index, -1);
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, ChangeTrackingType> buildChangeTrackingTester() {
+ return new ChildAttributeTester<T, ChangeTrackingType>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalEmbeddable.CHANGE_TRACKING;
+ }
+ @Override
+ public ChangeTrackingType getDefaultValue() {
+ return ChangeTrackingType.AUTO;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.TYPE;
+ }
+ @Override
+ public ChangeTrackingType getValue(T form) {
+ return form.getChangeTrackingType();
+ }
+ @Override
+ public ChangeTrackingType getValue1() {
+ return ChangeTrackingType.ATTRIBUTE;
+ }
+ @Override
+ public ChangeTrackingType getValue2() {
+ return ChangeTrackingType.DEFERRED;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, ChangeTrackingType value) {
+ form.setChangeTrackingType(value);
+ }
+ @Override
+ public String toString(ChangeTrackingType value) {
+ return value.name();
+ }
+ };
+ }
+
+ final AttributeNodeTester<T, String> buildClassTester() {
+ return new AttributeNodeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return true;
+ }
+ @Override
+ public String getDefaultValue() {
+ return defaultClassName();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.CLASS;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getClassName();
+ }
+ @Override
+ public String getValue1() {
+ return "org.test.Embeddable_1";
+ }
+ @Override
+ public String getValue2() {
+ return "org.test.Embeddable_2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return false;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setClassName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalCloneCopyPolicy> buildCloneCopyPolicyTester() {
+ return new ChildNodeTester<T, ExternalCloneCopyPolicy>() {
+ @Override
+ public ExternalCloneCopyPolicy addChild(T form) {
+ return form.addCloneCopyPolicy();
+ }
+ @Override
+ public ExternalCloneCopyPolicy getChild(T form) {
+ return form.getCloneCopyPolicy();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalCloneCopyPolicy.CLONE_COPY_POLICY;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasCloneCopyPolicy();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeCloneCopyPolicy();
+ }
+ };
+ }
+
+ final ChildListNodeTester<T, ExternalClassConverter, String> buildConverterTester() {
+ return ConverterTests.buildConverterTester();
+ }
+
+ final ChildNodeTester<T, ExternalCopyPolicy> buildCopyPolicyTester() {
+ return new ChildNodeTester<T, ExternalCopyPolicy>() {
+ @Override
+ public ExternalCopyPolicy addChild(T form) {
+ return form.addCopyPolicy();
+ }
+ @Override
+ public ExternalCopyPolicy getChild(T form) {
+ return form.getCopyPolicy();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalCopyPolicy.COPY_POLICY;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasCopyPolicy();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeCopyPolicy();
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildCustomizerTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalEmbeddable.CUSTOMIZER;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "org.default.MyCustomizer";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.CLASS;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getCustomizerClassName();
+ }
+ @Override
+ public String getValue1() {
+ return "org.test.Customizer1";
+ }
+ @Override
+ public String getValue2() {
+ return "org.test.Customizer2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setCustomizerClassName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final TextNodeTester<T, String> buildDescriptionTester() {
+ return new TextNodeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "test default";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.DESCRIPTION;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getDescription();
+ }
+ @Override
+ public String getValue1() {
+ return "testing embeddable";
+ }
+ @Override
+ public String getValue2() {
+ return "something else";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setDescription(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ExternalFormBuilder<T> buildEmbeddableBuilder() {
+ return new ExternalFormBuilder<T>() {
+ @Override
+ @SuppressWarnings("unchecked")
+ public T buildExternalForm() throws IOException {
+ ExternalORMConfiguration orm = ORMConfigurationTests.buildExternalForm();
+ return (T) orm.addEmbeddable(defaultClassName());
+ }
+ @Override
+ public int getDefaultAttributeCount() {
+ return 1;
+ }
+ @Override
+ public Node getNode(T form) {
+ return ObjectTools.execute(form, "getElement");
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.EMBEDDABLE;
+ }
+ @Override
+ public List<String> getTreeNodeNames() {
+ return ListTools.list(
+ ExternalORMConfiguration.ENTITY_MAPPINGS,
+ ExternalEmbeddable.EMBEDDABLE
+ );
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalInstantiationCopyPolicy> buildInstantiationCopyPolicyTester() {
+ return new ChildNodeTester<T, ExternalInstantiationCopyPolicy>() {
+ @Override
+ public ExternalInstantiationCopyPolicy addChild(T form) {
+ return form.addInstantiationCopyPolicy();
+ }
+ @Override
+ public ExternalInstantiationCopyPolicy getChild(T form) {
+ return form.getInstantiationCopyPolicy();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalInstantiationCopyPolicy.INSTANTIATION_COPY_POLICY;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasInstantiationCopyPolicy();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeInstantiationCopyPolicy();
+ }
+ };
+ }
+
+ final AttributeNodeTester<T, Boolean> buildMetadataCompleteTester() {
+ return new AttributeNodeTester<T, Boolean>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public Boolean getDefaultValue() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.METADATA_COMPLETE;
+ }
+ @Override
+ public Boolean getValue(T form) {
+ return form.isMetadataComplete();
+ }
+ @Override
+ public Boolean getValue1() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public Boolean getValue2() {
+ return Boolean.FALSE;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, Boolean value) {
+ form.setMetadataComplete(value);
+ }
+ @Override
+ public String toString(Boolean value) {
+ return value.toString();
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalNoSql> buildNoSqlTester() {
+ return new ChildNodeTester<T, ExternalNoSql>() {
+ @Override
+ public ExternalNoSql addChild(T form) {
+ return form.addNoSql();
+ }
+ @Override
+ public ExternalNoSql getChild(T form) {
+ return form.getNoSql();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalNoSql.NO_SQL;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasNoSql();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeNoSql();
+ }
+ };
+ }
+
+ final ChildListNodeTester<T, ExternalObjectTypeConverter, String> buildObjectTypeConverterTester() {
+ return ConverterTests.buildObjectTypeConverterTester();
+ }
+
+ final String buildOracleArrayTester() {
+ return "oracle-array";
+ }
+
+ final String buildOracleObjectTester() {
+ return "oracle-object";
+ }
+
+ final AttributeNodeTester<T, String> buildParentClassTester() {
+ return new AttributeNodeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "org.parent.ParentClass";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.PARENT_CLASS;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getParentClassName();
+ }
+ @Override
+ public String getValue1() {
+ return "org.test.ParentClass1";
+ }
+ @Override
+ public String getValue2() {
+ return "org.test.ParentClass2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setParentClassName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final String buildPlsqlRecordTester() {
+ return "plsql-record";
+ }
+
+ final String buildPlsqlTableTester() {
+ return "plsql-table";
+ }
+
+ final ChildListNodeTester<T, ExternalProperty, String> buildPropertyTester() {
+ return PropertyTests.buildPropertyTester();
+ }
+
+ final String buildSerializedConverterTester() {
+ return ConverterTests.buildSerializedConverterTester();
+ }
+
+ final ChildListNodeTester<T, ExternalStructConverter, String> buildStructConverterTester() {
+ return ConverterTests.buildStructConverterTester();
+ }
+
+ final String buildStructTester() {
+ return "struct";
+ }
+
+ final ChildListNodeTester<T, ExternalTypeConverter, String> buildTypeConverterTester() {
+ return ConverterTests.buildTypeConverterTester();
+ }
+
+ String defaultClassName() {
+ return "org.eclipse.persistence.tool.mappings.tests.Embeddable";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void populate(RootNodeTester<T> tester) {
+
+ tester.setBuilder(buildEmbeddableBuilder());
+
+ // Attributes
+ tester.addAttribute(buildClassTester());
+ tester.addAttribute(buildParentClassTester()); // EclipseLink
+ tester.addAttribute(buildAccessTester());
+ tester.addAttribute(buildMetadataCompleteTester());
+
+ // Child nodes
+ tester.addTextNode(buildDescriptionTester());
+ tester.addNode(buildAccessMethodsTester()); // EclipseLink
+ tester.addChildAttribute(buildCustomizerTester()); // EclipseLink
+ tester.addChildAttribute(buildChangeTrackingTester()); // EclipseLink
+ tester.addUnsupportedNode(buildStructTester()); // EclipseLink
+ tester.addNode(buildNoSqlTester()); // EclipseLink
+ tester.addListNodes(buildConverterTester()); // EclipseLink
+ tester.addListNodes(buildTypeConverterTester()); // EclipseLink
+ tester.addListNodes(buildObjectTypeConverterTester()); // EclipseLink
+ tester.addUnsupportedAttribute(buildSerializedConverterTester()); // EclipseLink
+ tester.addListNodes(buildStructConverterTester()); // EclipseLink
+ tester.addNode(buildCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildInstantiationCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildCloneCopyPolicyTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleObjectTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleArrayTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlRecordTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlTableTester()); // EclipseLink
+ tester.addListNodes(buildPropertyTester()); // EclipseLink
+ tester.addListNodes(buildAttributeOverrideTester()); // EclipseLink
+ tester.addListNodes(buildAssociationOverrideTester()); // EclipseLink
+ tester.addContainerListNodes(buildAttributesTester());
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EntityTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EntityTests.java
new file mode 100644
index 0000000..3ff132e
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/EntityTests.java
@@ -0,0 +1,390 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.InheritanceType;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEntity;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEntityTable;
+import org.eclipse.persistence.tools.mapping.orm.ExternalORMConfiguration;
+import org.eclipse.persistence.tools.mapping.orm.ExternalPrimaryKeyJoinColumn;
+import org.eclipse.persistence.tools.mapping.orm.ExternalSecondaryTable;
+import org.eclipse.persistence.tools.utility.ObjectTools;
+import org.eclipse.persistence.tools.utility.collection.ListTools;
+import org.w3c.dom.Node;
+
+/**
+ * This unit-tests tests the behavior of {@link ExternalEntity}.
+ *
+ * @version 2.6
+ */
+@SuppressWarnings("nls")
+public final class EntityTests extends MappedSuperclassTests<ExternalEntity> {
+
+ private String buildCascadeOnDeleteTester() {
+ return "cascade-on-delete";
+ }
+
+ private ExternalFormBuilder<ExternalEntity> buildEntityBuilder() {
+ return new ExternalFormBuilder<ExternalEntity>() {
+ @Override
+ public ExternalEntity buildExternalForm() throws IOException {
+ ExternalORMConfiguration orm = ORMConfigurationTests.buildExternalForm();
+ return orm.addEntity(defaultClassName());
+ }
+ @Override
+ public int getDefaultAttributeCount() {
+ return 1;
+ }
+ @Override
+ public Node getNode(ExternalEntity form) {
+ return ObjectTools.execute(form, "getElement");
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEntity.ENTITY;
+ }
+ @Override
+ public List<String> getTreeNodeNames() {
+ return ListTools.list(
+ ExternalORMConfiguration.ENTITY_MAPPINGS,
+ ExternalEntity.ENTITY
+ );
+ }
+ };
+ }
+
+ private String buildIndexTester() {
+ return "index";
+ }
+
+ private ChildAttributeTester<ExternalEntity, InheritanceType> buildInheritanceTester() {
+ return new ChildAttributeTester<ExternalEntity, InheritanceType>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalEntity.INHERITANCE;
+ }
+ @Override
+ public InheritanceType getDefaultValue() {
+ return InheritanceType.JOINED;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEntity.STRATEGY;
+ }
+ @Override
+ public InheritanceType getValue(ExternalEntity form) {
+ return form.getInheritenceStrategy();
+ }
+ @Override
+ public InheritanceType getValue1() {
+ return InheritanceType.SINGLE_TABLE;
+ }
+ @Override
+ public InheritanceType getValue2() {
+ return InheritanceType.TABLE_PER_CLASS;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(ExternalEntity form, InheritanceType value) {
+ form.setInheritanceStrategy(value);
+ }
+ @Override
+ public String toString(InheritanceType value) {
+ return value.name();
+ }
+ };
+ }
+
+ private AttributeNodeTester<ExternalEntity, String> buildNameTester() {
+ return new AttributeNodeTester<ExternalEntity, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "default_name";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEntity.NAME;
+ }
+ @Override
+ public String getValue(ExternalEntity form) {
+ return form.getName();
+ }
+ @Override
+ public String getValue1() {
+ return "employee";
+ }
+ @Override
+ public String getValue2() {
+ return "address";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(ExternalEntity form, String value) {
+ form.setName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ private String buildPrimaryKeyForeignKeyTester() {
+ return "primary-key-foreign-key";
+ }
+
+ private ChildListNodeTester<ExternalEntity, ExternalPrimaryKeyJoinColumn, String> buildPrimaryKeyJoinColumnTester() {
+ return new ChildListNodeTester<ExternalEntity, ExternalPrimaryKeyJoinColumn, String>() {
+ @Override
+ public ExternalPrimaryKeyJoinColumn addChild(ExternalEntity form, String value) {
+ return form.addPrimaryKeyJoinColumn(value);
+ }
+ @Override
+ public ExternalPrimaryKeyJoinColumn getChild(ExternalEntity form, int index) {
+ return form.getPrimaryKeyJoinColumn(index);
+ }
+ @Override
+ public ExternalPrimaryKeyJoinColumn getChildForm(List<ExternalPrimaryKeyJoinColumn> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalPrimaryKeyJoinColumn> getChildren(ExternalEntity form) {
+ return form.primaryKeyJoinColumns();
+ }
+ @Override
+ public int getChildrenSize(ExternalEntity form) {
+ return form.primaryKeyJoinColumnsSize();
+ }
+ @Override
+ public String getChildValue(ExternalPrimaryKeyJoinColumn childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "PRIMARY_KEY_JOIN_COLUMN_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalPrimaryKeyJoinColumn.PRIMARY_KEY_JOIN_COLUMN;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(ExternalEntity form, int index) {
+ form.removePrimaryKeyJoinColumn(index);
+ }
+ };
+ }
+
+ private ChildListNodeTester<ExternalEntity, ExternalSecondaryTable, String> buildSecondaryTableTester() {
+ return new ChildListNodeTester<ExternalEntity, ExternalSecondaryTable, String>() {
+ @Override
+ public ExternalSecondaryTable addChild(ExternalEntity form, String value) {
+ return form.addSecondaryTable(value, null, null);
+ }
+ @Override
+ public ExternalSecondaryTable getChild(ExternalEntity form, int index) {
+ return form.getSecondaryTable(index);
+ }
+ @Override
+ public ExternalSecondaryTable getChildForm(List<ExternalSecondaryTable> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalSecondaryTable> getChildren(ExternalEntity form) {
+ return form.secondaryTables();
+ }
+ @Override
+ public int getChildrenSize(ExternalEntity form) {
+ return form.secondaryTablesSize();
+ }
+ @Override
+ public String getChildValue(ExternalSecondaryTable childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "SECONDARY_TABLE_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalSecondaryTable.SECONDARY_TABLE;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(ExternalEntity form, int index) {
+ form.removeSecondaryTable(index);
+ }
+ };
+ }
+
+ private ChildNodeTester<ExternalEntity, ExternalEntityTable> buildTableTester() {
+ return new ChildNodeTester<ExternalEntity, ExternalEntityTable>() {
+ @Override
+ public ExternalEntityTable addChild(ExternalEntity form) {
+ return form.addPrimaryTable(null);
+ }
+ @Override
+ public ExternalEntityTable getChild(ExternalEntity form) {
+ return form.getPrimaryTable();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEntityTable.TABLE;
+ }
+ @Override
+ public boolean hasChild(ExternalEntity form) {
+ return form.hasPrimaryTable();
+ }
+ @Override
+ public void removeChild(ExternalEntity form) {
+ form.removePrimaryTable();
+ }
+ };
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void populate(RootNodeTester<ExternalEntity> tester) {
+
+ tester.setBuilder(buildEntityBuilder());
+
+ // Attributes
+ tester.addAttribute(buildNameTester());
+ tester.addAttribute(buildClassTester());
+ tester.addAttribute(buildParentClassTester()); // EclipseLink
+ tester.addAttribute(buildAccessTester());
+ tester.addAttribute(buildCacheableTester()); // EclipseLink
+ tester.addAttribute(buildMetadataCompleteTester());
+ tester.addAttribute(buildReadOnlyTester()); // EclipseLink
+ tester.addAttribute(buildExistenceCheckingTester()); // EclipseLink
+ tester.addAttribute(buildExcludeDefaultMappingsTester()); // EclipseLink
+
+ // Child nodes
+ tester.addTextNode(buildDescriptionTester());
+ tester.addNode(buildAccessMethodsTester()); // EclipseLink
+ tester.addNode(buildMultitenantTester()); // EclipseLink
+ tester.addUnsupportedNode(buildAdditionalCriteriaTester()); // EclipseLink
+ tester.addChildAttribute(buildCustomizerTester()); // EclipseLink
+ tester.addChildAttribute(buildChangeTrackingTester()); // EclipseLink
+
+ tester.addNode(buildTableTester());
+ tester.addListNodes(buildSecondaryTableTester());
+ tester.addUnsupportedNode(buildStructTester());
+ tester.addListNodes(buildPrimaryKeyJoinColumnTester());
+ tester.addUnsupportedNode(buildPrimaryKeyForeignKeyTester());
+ tester.addNode(buildNoSqlTester());
+ tester.addUnsupportedNode(buildCascadeOnDeleteTester());
+ tester.addUnsupportedNode(buildIndexTester());
+
+ tester.addChildAttribute(buildIdClassTester());
+ tester.addNode(buildPrimaryKeyTester()); // EclipseLink
+
+ tester.addChildAttribute(buildInheritanceTester());
+
+ tester.addNode(buildOptimisticLockingTester()); // EclipseLink
+ tester.addNode(buildCacheTester()); // EclipseLink
+ tester.addChildAttribute(buildCacheInterceptorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildCacheIndexTester()); // EclipseLink
+ tester.addListNodes(buildFetchGroupTester()); // EclipseLink
+ tester.addListNodes(buildConverterTester()); // EclipseLink
+ tester.addListNodes(buildTypeConverterTester()); // EclipseLink
+ tester.addListNodes(buildObjectTypeConverterTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSerializedConverterTester()); // EclipseLink
+ tester.addListNodes(buildStructConverterTester()); // EclipseLink
+ tester.addNode(buildCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildInstantiationCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildCloneCopyPolicyTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSerializedObjectTester()); // EclipseLink
+ tester.addNode(buildSequenceGeneratorTester()); // EclipseLink
+ tester.addNode(buildTableGeneratorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildUuidGeneratorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildReplicationPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildRoundRobinPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPinnedPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildRangePartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildValuePartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildHashPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildUnionPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPartitionedTester()); // EclipseLink
+ tester.addListNodes(buildNamedQueryTester()); // EclipseLink
+ tester.addListNodes(buildNamedNativeQueryTester()); // EclipseLink
+ tester.addListNodes(buildNamedStoredProcedureQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedStoredFunctionQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedPlsqlStoredProcedureQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedPlsqlStoredFunctionQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleObjectTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleArrayTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlRecordTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlTableTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSqlResultSetMappingTester()); // EclipseLink
+ tester.addUnsupportedNode(buildQueryRedirectorsTester()); // EclipseLink
+ tester.addBooleanNode(buildExcludeDefaultListenersTester());
+ tester.addBooleanNode(buildExcludeSuperclassListenersTester());
+ tester.addContainerListNodes(buildEntityListenersTester());
+ tester.addChildAttribute(buildPrePersistClassTester());
+ tester.addChildAttribute(buildPostPersistClassTester());
+ tester.addChildAttribute(buildPreRemoveClassTester());
+ tester.addChildAttribute(buildPostRemoveClassTester());
+ tester.addChildAttribute(buildPreUpdateClassTester());
+ tester.addChildAttribute(buildPostUpdateClassTester());
+ tester.addChildAttribute(buildPostLoadClassTester());
+ tester.addListNodes(buildPropertyTester()); // EclipseLink
+ tester.addListNodes(buildAttributeOverrideTester()); // EclipseLink
+ tester.addListNodes(buildAssociationOverrideTester()); // EclipseLink
+ tester.addContainerListNodes(buildAttributesTester());
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/MappedSuperclassTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/MappedSuperclassTests.java
new file mode 100644
index 0000000..6586336
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/MappedSuperclassTests.java
@@ -0,0 +1,1253 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ *
+ * This software is the proprietary information of Oracle Corporation.
+ * Use is subject to license terms.
+ */
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.persistence.annotations.ExistenceType;
+import org.eclipse.persistence.tools.mapping.orm.ExternalBasicNamedQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalCache;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddable;
+import org.eclipse.persistence.tools.mapping.orm.ExternalEntityListener;
+import org.eclipse.persistence.tools.mapping.orm.ExternalFetchGroup;
+import org.eclipse.persistence.tools.mapping.orm.ExternalMappedSuperClass;
+import org.eclipse.persistence.tools.mapping.orm.ExternalMultitenancyPolicy;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNamedQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNamedStoredProcedureQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNativeQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalORMConfiguration;
+import org.eclipse.persistence.tools.mapping.orm.ExternalOptimisticLocking;
+import org.eclipse.persistence.tools.mapping.orm.ExternalPrimaryKey;
+import org.eclipse.persistence.tools.mapping.orm.ExternalSequenceGenerator;
+import org.eclipse.persistence.tools.mapping.orm.ExternalTableGenerator;
+import org.eclipse.persistence.tools.utility.ObjectTools;
+import org.eclipse.persistence.tools.utility.collection.ListTools;
+import org.w3c.dom.Node;
+
+/**
+ * This unit-tests tests the behavior of {@link ExternalMappedSuperClass}.
+ *
+ * @version 2.6
+ */
+@SuppressWarnings("nls")
+public class MappedSuperclassTests<T extends ExternalMappedSuperClass> extends EmbeddableTests<T> {
+
+ final String buildAdditionalCriteriaTester() {
+ return "additional-criteria";
+ }
+
+ final AttributeNodeTester<T, Boolean> buildCacheableTester() {
+ return new AttributeNodeTester<T, Boolean>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public Boolean getDefaultValue() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.CACHEABLE;
+ }
+ @Override
+ public Boolean getValue(T form) {
+ return form.isCacheable();
+ }
+ @Override
+ public Boolean getValue1() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public Boolean getValue2() {
+ return Boolean.FALSE;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, Boolean value) {
+ form.setCacheable(value);
+ }
+ @Override
+ public String toString(Boolean value) {
+ return value.toString();
+ }
+ };
+ }
+
+ final String buildCacheIndexTester() {
+ return "cache-index";
+ }
+
+ final ChildAttributeTester<T, String> buildCacheInterceptorTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.CACHE_INTERCEPTOR;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "org.test.CacheInterceptor";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.CLASS;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getCacheInterceptorClassName();
+ }
+ @Override
+ public String getValue1() {
+ return "org.test.MainCacheInterceptor";
+ }
+ @Override
+ public String getValue2() {
+ return "org.test.AnotherCacheInterceptor";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setCacheInterceptorClassName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalCache> buildCacheTester() {
+ return new ChildNodeTester<T, ExternalCache>() {
+ @Override
+ public ExternalCache addChild(T form) {
+ return form.addCache();
+ }
+ @Override
+ public ExternalCache getChild(T form) {
+ return form.getCache();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalCache.CACHE;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasCache();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeCache();
+ }
+ };
+ }
+
+ final ContainerChildListNodeTester<T, ExternalEntityListener, String> buildEntityListenersTester() {
+ return new ContainerChildListNodeTester<T, ExternalEntityListener, String>() {
+ @Override
+ public ExternalEntityListener addChild(T form, String value) {
+ return form.addEntityListener(value);
+ }
+ @Override
+ public ExternalEntityListener getChild(T form, int index) {
+ return form.getEntityListener(index);
+ }
+ @Override
+ public ExternalEntityListener getChildForm(List<ExternalEntityListener> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalEntityListener> getChildren(T form) {
+ return form.entityListeners();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.entityListenersSize();
+ }
+ @Override
+ public String getChildValue(ExternalEntityListener childForm) {
+ return childForm.getClassName();
+ }
+ @Override
+ public String getContainerNodeName() {
+ return ExternalEntityListener.ENTITY_LISTENERS;
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "ENTITY_LISTENER_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEntityListener.ENTITY_LISTENER;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeEntityListener(index);
+ }
+ };
+ }
+
+ final BooleanChildNodeTester<T> buildExcludeDefaultListenersTester() {
+ return new BooleanChildNodeTester<T>() {
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.EXCLUDE_DEFAULT_LISTENERS;
+ }
+ @Override
+ public boolean getValue(T form) {
+ return form.shouldExcludesDefaultListeners();
+ }
+ @Override
+ public void setValue(T form, boolean value) {
+ form.setExcludesDefaultListeners(value);
+ }
+ };
+ }
+
+ final AttributeNodeTester<T, Boolean> buildExcludeDefaultMappingsTester() {
+ return new AttributeNodeTester<T, Boolean>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public Boolean getDefaultValue() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.EXCLUDE_DEFAULT_MAPPINGS;
+ }
+ @Override
+ public Boolean getValue(T form) {
+ return form.isExcludeDefaultMappings();
+ }
+ @Override
+ public Boolean getValue1() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public Boolean getValue2() {
+ return Boolean.FALSE;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, Boolean value) {
+ form.setExcludeDefaultMappings(value);
+ }
+ @Override
+ public String toString(Boolean value) {
+ return value.toString();
+ }
+ };
+ }
+
+ final BooleanChildNodeTester<T> buildExcludeSuperclassListenersTester() {
+ return new BooleanChildNodeTester<T>() {
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.EXCLUDE_SUPERCLASS_LISTENERS;
+ }
+ @Override
+ public boolean getValue(T form) {
+ return form.shouldExcludesSuperclassListeners();
+ }
+ @Override
+ public void setValue(T form, boolean value) {
+ form.setExcludesSuperclassListeners(value);
+ }
+ };
+ }
+
+ final AttributeNodeTester<T, ExistenceType> buildExistenceCheckingTester() {
+ return new AttributeNodeTester<T, ExistenceType>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public ExistenceType getDefaultValue() {
+ return ExistenceType.CHECK_DATABASE;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.EXISTENCE_CHECKING;
+ }
+ @Override
+ public ExistenceType getValue(T form) {
+ return form.getExistenceCheckingType();
+ }
+ @Override
+ public ExistenceType getValue1() {
+ return ExistenceType.ASSUME_NON_EXISTENCE;
+ }
+ @Override
+ public ExistenceType getValue2() {
+ return ExistenceType.CHECK_CACHE;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, ExistenceType value) {
+ form.setExistenceCheckingType(value);
+ }
+ @Override
+ public String toString(ExistenceType value) {
+ return value.toString();
+ }
+ };
+ }
+
+ final ChildListNodeTester<T, ExternalFetchGroup, String> buildFetchGroupTester() {
+ return new ChildListNodeTester<T, ExternalFetchGroup, String>() {
+ @Override
+ public ExternalFetchGroup addChild(T form, String value) {
+ return form.addFetchGroup(value);
+ }
+ @Override
+ public ExternalFetchGroup getChild(T form, int index) {
+ return form.getFetchGroup(index);
+ }
+ @Override
+ public ExternalFetchGroup getChildForm(List<ExternalFetchGroup> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalFetchGroup> getChildren(T form) {
+ return form.fetchGroups();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.fetchGroupsSize();
+ }
+ @Override
+ public String getChildValue(ExternalFetchGroup childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "FETCH_GROUP_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalFetchGroup.FETCH_GROUP;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeFetchGroup(index);
+ }
+ };
+ }
+
+ final String buildHashPartitioningTester() {
+ return "hash-partitioning";
+ }
+
+ final ChildAttributeTester<T, String> buildIdClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.ID_CLASS;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "org.test.IDClass";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalEmbeddable.CLASS;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getIdClassName();
+ }
+ @Override
+ public String getValue1() {
+ return "org.test.IDClass_1";
+ }
+ @Override
+ public String getValue2() {
+ return "org.test.IDClass_2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setIdClassName(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ private ExternalFormBuilder<T> buildMappedSuperclassBuilder() {
+ return new ExternalFormBuilder<T>() {
+ @Override
+ @SuppressWarnings("unchecked")
+ public T buildExternalForm() throws IOException {
+ ExternalORMConfiguration orm = ORMConfigurationTests.buildExternalForm();
+ return (T) orm.addMappedSuperClass(defaultClassName());
+ }
+ @Override
+ public int getDefaultAttributeCount() {
+ return 1;
+ }
+ @Override
+ public Node getNode(T form) {
+ return ObjectTools.execute(form, "getElement");
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.MAPPED_SUPERCLASS;
+ }
+ @Override
+ public List<String> getTreeNodeNames() {
+ return ListTools.list(
+ ExternalORMConfiguration.ENTITY_MAPPINGS,
+ ExternalMappedSuperClass.MAPPED_SUPERCLASS
+ );
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalMultitenancyPolicy> buildMultitenantTester() {
+ return new ChildNodeTester<T, ExternalMultitenancyPolicy>() {
+ @Override
+ public ExternalMultitenancyPolicy addChild(T form) {
+ return form.addMultitenancy();
+ }
+ @Override
+ public ExternalMultitenancyPolicy getChild(T form) {
+ return form.getMultitenancy();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMultitenancyPolicy.MULTITENANT;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasMultitenancy();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeMultiTenancy();
+ }
+ };
+ }
+
+ final ChildListNodeTester<T, ExternalNativeQuery, String> buildNamedNativeQueryTester() {
+ return new ChildListNodeTester<T, ExternalNativeQuery, String>() {
+ @Override
+ public ExternalNativeQuery addChild(T form, String value) {
+ return form.addNativeQuery(value);
+ }
+ @Override
+ public ExternalNativeQuery getChild(T form, int index) {
+ return form.getNativeQuery(index);
+ }
+ @Override
+ public ExternalNativeQuery getChildForm(List<ExternalNativeQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalNativeQuery> getChildren(T form) {
+ return form.nativeQueries();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.nativeQueriesSize();
+ }
+ @Override
+ public String getChildValue(ExternalNativeQuery childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "NAMED_NATIVE_QUERY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalNativeQuery.NAMED_NATIVE_QUERY;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeNativeQuery(index);
+ }
+ };
+ }
+
+ final String buildNamedPlsqlStoredFunctionQueryTester() {
+ return "named-plsql-stored-function-query";
+ }
+
+ final String buildNamedPlsqlStoredProcedureQueryTester() {
+ return "named-plsql-stored-procedure-query";
+ }
+
+ final ChildListNodeTester<T, ExternalNamedQuery, String> buildNamedQueryTester() {
+ return new ChildListNodeTester<T, ExternalNamedQuery, String>() {
+ @Override
+ public ExternalNamedQuery addChild(T form, String value) {
+ return form.addNamedQuery(value);
+ }
+ @Override
+ public ExternalNamedQuery getChild(T form, int index) {
+ return form.getNamedQuery(index);
+ }
+ @Override
+ public ExternalNamedQuery getChildForm(List<ExternalNamedQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalNamedQuery> getChildren(T form) {
+ return form.namedQueries();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.namedQueriesSize();
+ }
+ @Override
+ public String getChildValue(ExternalNamedQuery childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "NAMED_QUERY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalBasicNamedQuery.NAMED_QUERY;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeNamedQuery(index);
+ }
+ };
+ }
+
+ final String buildNamedStoredFunctionQueryTester() {
+ return "named-stored-function-query";
+ }
+
+ final ChildListNodeTester<T, ExternalNamedStoredProcedureQuery, String> buildNamedStoredProcedureQueryTester() {
+ return new ChildListNodeTester<T, ExternalNamedStoredProcedureQuery, String>() {
+ @Override
+ public ExternalNamedStoredProcedureQuery addChild(T form, String value) {
+ return form.addStoredProcedureQuery(value);
+ }
+ @Override
+ public ExternalNamedStoredProcedureQuery getChild(T form, int index) {
+ return form.getStoredProcedureQuery(index);
+ }
+ @Override
+ public ExternalNamedStoredProcedureQuery getChildForm(List<ExternalNamedStoredProcedureQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalNamedStoredProcedureQuery> getChildren(T form) {
+ return form.storedProcedureQueries();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.storedProcedureQueriesSize();
+ }
+ @Override
+ public String getChildValue(ExternalNamedStoredProcedureQuery childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "NAMED_STORED_PROCEDURE_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalNamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeStoredProcedureQuery(index);
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalOptimisticLocking> buildOptimisticLockingTester() {
+ return new ChildNodeTester<T, ExternalOptimisticLocking>() {
+ @Override
+ public ExternalOptimisticLocking addChild(T form) {
+ return form.addOptimisticLocking();
+ }
+ @Override
+ public ExternalOptimisticLocking getChild(T form) {
+ return form.getOptimisticLocking();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalOptimisticLocking.OPTIMISTIC_LOCKING;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasOptimisticLocking();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeOptimisticLocking();
+ }
+ };
+ }
+
+ final String buildPartitionedTester() {
+ return "partitioned";
+ }
+
+ final String buildPartitioningTester() {
+ return "partitioning";
+ }
+
+ final String buildPinnedPartitioningTester() {
+ return "pinned-partitioning";
+ }
+
+ final ChildAttributeTester<T, String> buildPostLoadClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.POST_LOAD;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "postLoad";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPostLoadMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "postLoadMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "postLoadMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPostLoadMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPostPersistClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.POST_PERSIST;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "postPersist";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPostPersistMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "postPersistMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "postPersistMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPostPersistMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPostRemoveClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.POST_REMOVE;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "postRemove";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPostRemoveMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "postRemoveMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "postRemoveMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPostRemoveMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPostUpdateClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.POST_UPDATE;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "postRemove";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPostUpdateMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "postRemoveMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "postRemoveMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPostUpdateMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPrePersistClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.PRE_PERSIST;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "prePersist";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPrePersistMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "prePersistMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "prePersistMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPrePersistMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPreRemoveClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.PRE_REMOVE;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "preRemove";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPreRemoveMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "preRemoveMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "preRemoveMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPreRemoveMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildAttributeTester<T, String> buildPreUpdateClassTester() {
+ return new ChildAttributeTester<T, String>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public String getChildNodeName() {
+ return ExternalMappedSuperClass.PRE_UPDATE;
+ }
+ @Override
+ public String getDefaultValue() {
+ return "preUpdate";
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.METHOD_NAME;
+ }
+ @Override
+ public String getValue(T form) {
+ return form.getPreUpdateMethod();
+ }
+ @Override
+ public String getValue1() {
+ return "preUpdateMethod1";
+ }
+ @Override
+ public String getValue2() {
+ return "preUpdateMethod2";
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, String value) {
+ form.setPreUpdateMethod(value);
+ }
+ @Override
+ public String toString(String value) {
+ return value;
+ }
+ };
+ }
+
+ final ChildNodeTester<T, ExternalPrimaryKey> buildPrimaryKeyTester() {
+ return new ChildNodeTester<T, ExternalPrimaryKey>() {
+ @Override
+ public ExternalPrimaryKey addChild(T form) {
+ return form.addPrimaryKey();
+ }
+ @Override
+ public ExternalPrimaryKey getChild(T form) {
+ return form.getPrimaryKey();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalPrimaryKey.PRIMARY_KEY;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasPrimaryKey();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removePrimaryKey();
+ }
+ };
+ }
+
+ final String buildQueryRedirectorsTester() {
+ return "query-redirectors";
+ }
+
+ final String buildRangePartitioningTester() {
+ return "range-partitioning";
+ }
+
+ final AttributeNodeTester<T, Boolean> buildReadOnlyTester() {
+ return new AttributeNodeTester<T, Boolean>() {
+ @Override
+ public boolean doesNodeAlreadyExist() {
+ return false;
+ }
+ @Override
+ public Boolean getDefaultValue() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalMappedSuperClass.READ_ONLY;
+ }
+ @Override
+ public Boolean getValue(T form) {
+ return form.isReadOnly();
+ }
+ @Override
+ public Boolean getValue1() {
+ return Boolean.TRUE;
+ }
+ @Override
+ public Boolean getValue2() {
+ return Boolean.FALSE;
+ }
+ @Override
+ public boolean isNullAllowed() {
+ return true;
+ }
+ @Override
+ public void setValue(T form, Boolean value) {
+ form.setReadOnly(value);
+ }
+ @Override
+ public String toString(Boolean value) {
+ return value.toString();
+ }
+ };
+ }
+
+ final String buildReplicationPartitioningTester() {
+ return "replication-partitioning";
+ }
+
+ final String buildRoundRobinPartitioningTester() {
+ return "round-robin-partitioning";
+ }
+
+ final ChildNodeTester<T, ExternalSequenceGenerator> buildSequenceGeneratorTester() {
+ return new ChildNodeTester<T, ExternalSequenceGenerator>() {
+ @Override
+ public ExternalSequenceGenerator addChild(T form) {
+ return form.addSequenceGenerator();
+ }
+ @Override
+ public ExternalSequenceGenerator getChild(T form) {
+ return form.getSequenceGenerator();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalSequenceGenerator.SEQUENCE_GENERATOR;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasSequenceGenerator();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeSequenceGenerator();
+ }
+ };
+ }
+
+ final String buildSerializedObjectTester() {
+ return "serialized-object";
+ }
+
+ final String buildSqlResultSetMappingTester() {
+ return "sql-result-set-mapping";
+ }
+
+ final ChildNodeTester<T, ExternalTableGenerator> buildTableGeneratorTester() {
+ return new ChildNodeTester<T, ExternalTableGenerator>() {
+ @Override
+ public ExternalTableGenerator addChild(T form) {
+ return form.addTableGenerator();
+ }
+ @Override
+ public ExternalTableGenerator getChild(T form) {
+ return form.getTableGenerator();
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalTableGenerator.TABLE_GENERATOR;
+ }
+ @Override
+ public boolean hasChild(T form) {
+ return form.hasTableGenerator();
+ }
+ @Override
+ public void removeChild(T form) {
+ form.removeTableGenerator();
+ }
+ };
+ }
+
+ final String buildUnionPartitioningTester() {
+ return "union-partitioning";
+ }
+
+ final String buildUuidGeneratorTester() {
+ return "uuid-generator";
+ }
+
+ final String buildValuePartitioningTester() {
+ return "value-partitioning";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ String defaultClassName() {
+ return "org.eclipse.persistence.tool.mappings.tests.MappedSuperclass";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void populate(RootNodeTester<T> tester) {
+
+ tester.setBuilder(buildMappedSuperclassBuilder());
+
+ // Attributes
+ tester.addAttribute(buildClassTester());
+ tester.addAttribute(buildParentClassTester()); // EclipseLink
+ tester.addAttribute(buildAccessTester());
+ tester.addAttribute(buildCacheableTester()); // EclipseLink
+ tester.addAttribute(buildMetadataCompleteTester());
+ tester.addAttribute(buildReadOnlyTester()); // EclipseLink
+ tester.addAttribute(buildExistenceCheckingTester()); // EclipseLink
+ tester.addAttribute(buildExcludeDefaultMappingsTester()); // EclipseLink
+
+ // Child nodes
+ tester.addTextNode(buildDescriptionTester());
+ tester.addNode(buildAccessMethodsTester()); // EclipseLink
+ tester.addNode(buildMultitenantTester()); // EclipseLink
+ tester.addUnsupportedNode(buildAdditionalCriteriaTester()); // EclipseLink
+ tester.addChildAttribute(buildCustomizerTester()); // EclipseLink
+ tester.addChildAttribute(buildChangeTrackingTester()); // EclipseLink
+ tester.addChildAttribute(buildIdClassTester());
+ tester.addNode(buildPrimaryKeyTester()); // EclipseLink
+ tester.addNode(buildOptimisticLockingTester()); // EclipseLink
+ tester.addNode(buildCacheTester()); // EclipseLink
+ tester.addChildAttribute(buildCacheInterceptorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildCacheIndexTester()); // EclipseLink
+ tester.addListNodes(buildFetchGroupTester()); // EclipseLink
+ tester.addListNodes(buildConverterTester()); // EclipseLink
+ tester.addListNodes(buildTypeConverterTester()); // EclipseLink
+ tester.addListNodes(buildObjectTypeConverterTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSerializedConverterTester()); // EclipseLink
+ tester.addListNodes(buildStructConverterTester()); // EclipseLink
+ tester.addNode(buildCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildInstantiationCopyPolicyTester()); // EclipseLink
+ tester.addNode(buildCloneCopyPolicyTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSerializedObjectTester()); // EclipseLink
+ tester.addNode(buildSequenceGeneratorTester()); // EclipseLink
+ tester.addNode(buildTableGeneratorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildUuidGeneratorTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildReplicationPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildRoundRobinPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPinnedPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildRangePartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildValuePartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildHashPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildUnionPartitioningTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPartitionedTester()); // EclipseLink
+ tester.addListNodes(buildNamedQueryTester()); // EclipseLink
+ tester.addListNodes(buildNamedNativeQueryTester()); // EclipseLink
+ tester.addListNodes(buildNamedStoredProcedureQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedStoredFunctionQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedPlsqlStoredProcedureQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildNamedPlsqlStoredFunctionQueryTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleObjectTester()); // EclipseLink
+ tester.addUnsupportedNode(buildOracleArrayTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlRecordTester()); // EclipseLink
+ tester.addUnsupportedNode(buildPlsqlTableTester()); // EclipseLink
+ tester.addUnsupportedNode(buildSqlResultSetMappingTester()); // EclipseLink
+ tester.addUnsupportedNode(buildQueryRedirectorsTester()); // EclipseLink
+ tester.addBooleanNode(buildExcludeDefaultListenersTester());
+ tester.addBooleanNode(buildExcludeSuperclassListenersTester());
+ tester.addContainerListNodes(buildEntityListenersTester());
+ tester.addChildAttribute(buildPrePersistClassTester());
+ tester.addChildAttribute(buildPostPersistClassTester());
+ tester.addChildAttribute(buildPreRemoveClassTester());
+ tester.addChildAttribute(buildPostRemoveClassTester());
+ tester.addChildAttribute(buildPreUpdateClassTester());
+ tester.addChildAttribute(buildPostUpdateClassTester());
+ tester.addChildAttribute(buildPostLoadClassTester());
+ tester.addListNodes(buildPropertyTester()); // EclipseLink
+ tester.addListNodes(buildAttributeOverrideTester()); // EclipseLink
+ tester.addListNodes(buildAssociationOverrideTester()); // EclipseLink
+ tester.addContainerListNodes(buildAttributesTester());
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ORMConfigurationTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ORMConfigurationTests.java
index 19bdc48..97a14a1 100644
--- a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ORMConfigurationTests.java
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/ORMConfigurationTests.java
@@ -17,8 +17,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Vector;
-import javax.xml.XMLConstants;
import org.eclipse.persistence.tools.mapping.orm.AccessType;
import org.eclipse.persistence.tools.mapping.orm.ExternalBasicNamedQuery;
import org.eclipse.persistence.tools.mapping.orm.ExternalClassConverter;
@@ -50,60 +48,32 @@
@SuppressWarnings("nls")
public final class ORMConfigurationTests extends AbstractExternalFormTests<ExternalORMConfiguration> {
+ public static ORMConfiguration buildExternalForm() throws IOException {
+ ORMRepository repository = new ORMRepository();
+ return repository.buildORMConfiguration(null, defaultVersion());
+ }
+
+ public static ORMDocumentType defaultVersion() {
+ return ORMDocumentType.ECLIPELINK_2_6;
+ }
+
private String buildAccessMethodsTester() {
return "access-methods";
}
private TextNodeTester<ExternalORMConfiguration, AccessType> buildAccessTester() {
- return new TextNodeTester<ExternalORMConfiguration, AccessType>() {
- @Override
- public boolean doesNodeExistAlready() {
- return false;
- }
- @Override
- public AccessType getDefaultValue() {
- return null;
- }
- @Override
- public String getNodeName() {
- return ExternalORMConfiguration.ACCESS;
- }
- @Override
- public AccessType getValue(ExternalORMConfiguration form) {
- return form.getAccessType();
- }
- @Override
- public AccessType getValue1() {
- return AccessType.PROPERTY;
- }
- @Override
- public AccessType getValue2() {
- return AccessType.VIRTUAL;
- }
- @Override
- public boolean isNullAllowed() {
- return true;
- }
- @Override
- public void setValue(ExternalORMConfiguration form, AccessType value) {
- form.setAccessType(value);
- }
- @Override
- public String toString(AccessType value) {
- return value.name();
- }
- };
+ return AccessTypeTests.buildAccessTextNodeTester();
}
private TextNodeTester<ExternalORMConfiguration, String> buildCatalogTester() {
return new TextNodeTester<ExternalORMConfiguration, String>() {
@Override
- public boolean doesNodeExistAlready() {
+ public boolean doesNodeAlreadyExist() {
return false;
}
@Override
public String getDefaultValue() {
- return null;
+ return "CATALOG_DEFAULT";
}
@Override
public String getNodeName() {
@@ -115,11 +85,11 @@
}
@Override
public String getValue1() {
- return "cat";
+ return "CATALOG_VALUE_1";
}
@Override
public String getValue2() {
- return "EL";
+ return "CATALOG_VALUE_2";
}
@Override
public boolean isNullAllowed() {
@@ -137,57 +107,18 @@
}
private ChildListNodeTester<ExternalORMConfiguration, ExternalClassConverter, String> buildConverterTester() {
- return new ChildListNodeTester<ExternalORMConfiguration, ExternalClassConverter, String>() {
- @Override
- public ExternalClassConverter addChild(ExternalORMConfiguration form, String value) {
- ExternalClassConverter converter = form.addConverter();
- converter.setName(value);
- return converter;
- }
- @Override
- public ExternalClassConverter getChild(ExternalORMConfiguration form, int index) {
- return form.getConverter(index);
- }
- @Override
- public List<ExternalClassConverter> getChildren(ExternalORMConfiguration form) {
- return form.converters();
- }
- @Override
- public int getChildrenSize(ExternalORMConfiguration form) {
- return form.convertersSize();
- }
- @Override
- public String getChildValue(ExternalClassConverter childForm) {
- return childForm.getName();
- }
- @Override
- public List<String> getChildValues() {
- List<String> values = new ArrayList<String>();
- for (int index = 0; index < 10; index++) {
- values.add("CLASS_CONVERTER_" + index);
- }
- return values;
- }
- @Override
- public String getNodeName() {
- return ExternalClassConverter.CONVERTER;
- }
- @Override
- public void removeChild(ExternalORMConfiguration form, int index) {
- form.removeConverter(index);
- }
- };
+ return ConverterTests.buildConverterTester();
}
private TextNodeTester<ExternalORMConfiguration, String> buildDescriptionTester() {
return new TextNodeTester<ExternalORMConfiguration, String>() {
@Override
- public boolean doesNodeExistAlready() {
+ public boolean doesNodeAlreadyExist() {
return false;
}
@Override
public String getDefaultValue() {
- return null;
+ return "default description";
}
@Override
public String getNodeName() {
@@ -231,6 +162,10 @@
return form.getEmbeddable(index);
}
@Override
+ public ExternalEmbeddable getChildForm(List<ExternalEmbeddable> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalEmbeddable> getChildren(ExternalORMConfiguration form) {
return form.embeddables();
}
@@ -243,10 +178,14 @@
return childForm.getClassName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "org.eclipse.persistence.tools.mappings.Embeddable_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("org.eclipse.persistence.tools.mappings.Embeddable_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -255,6 +194,10 @@
return ExternalEmbeddable.EMBEDDABLE;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeEmbeddable(index);
}
@@ -272,6 +215,10 @@
return form.getEntity(index);
}
@Override
+ public ExternalEntity getChildForm(List<ExternalEntity> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalEntity> getChildren(ExternalORMConfiguration form) {
return form.entities();
}
@@ -284,10 +231,14 @@
return childForm.getClassName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "org.eclipse.persistence.tools.mappings.Entity_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("org.eclipse.persistence.tools.mappings.Entity_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -296,6 +247,10 @@
return ExternalEntity.ENTITY;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeEntity(index);
}
@@ -317,6 +272,10 @@
return form.getMappedSuperClass(index);
}
@Override
+ public ExternalMappedSuperClass getChildForm(List<ExternalMappedSuperClass> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalMappedSuperClass> getChildren(ExternalORMConfiguration form) {
return form.mappedSuperClasses();
}
@@ -329,10 +288,14 @@
return childForm.getClassName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "org.eclipse.persistence.tools.mappings.MappedSuperclass_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("org.eclipse.persistence.tools.mappings.MappedSuperclass_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -341,6 +304,10 @@
return ExternalMappedSuperClass.MAPPED_SUPERCLASS;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeMappedSuperClass(index);
}
@@ -358,6 +325,10 @@
return form.getNamedNativeQuery(index);
}
@Override
+ public ExternalNativeQuery getChildForm(List<ExternalNativeQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalNativeQuery> getChildren(ExternalORMConfiguration form) {
return form.namedNativeQueries();
}
@@ -370,10 +341,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "NAMED_NATIVE_QUERY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("NAMED_NATIVE_QUERY_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -382,6 +357,10 @@
return ExternalNativeQuery.NAMED_NATIVE_QUERY;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeNativeQuery(index);
}
@@ -407,6 +386,10 @@
return form.getNamedQuery(index);
}
@Override
+ public ExternalBasicNamedQuery getChildForm(List<ExternalBasicNamedQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalBasicNamedQuery> getChildren(ExternalORMConfiguration form) {
return form.namedQueries();
}
@@ -419,10 +402,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "NAMED_QUERY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("NAMED_QUERY_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -431,6 +418,10 @@
return ExternalBasicNamedQuery.NAMED_QUERY;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeNamedQuery(index);
}
@@ -452,6 +443,10 @@
return form.getNamedStoredProcedureQuery(index);
}
@Override
+ public ExternalNamedStoredProcedureQuery getChildForm(List<ExternalNamedStoredProcedureQuery> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalNamedStoredProcedureQuery> getChildren(ExternalORMConfiguration form) {
return form.storedProcedureQueries();
}
@@ -464,10 +459,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "NAMED_STORED_PROCEDURE_QUERY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("NAMED_STORED_PROCEDURE_QUERY_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -476,6 +475,10 @@
return ExternalNamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeStoredProcedureQuery(index);
}
@@ -483,46 +486,7 @@
}
private ChildListNodeTester<ExternalORMConfiguration, ExternalObjectTypeConverter, String> buildObjectTypeConverterTester() {
- return new ChildListNodeTester<ExternalORMConfiguration, ExternalObjectTypeConverter, String>() {
- @Override
- public ExternalObjectTypeConverter addChild(ExternalORMConfiguration form, String value) {
- ExternalObjectTypeConverter childForm = form.addObjectTypeConverter();
- childForm.setName(value);
- return childForm;
- }
- @Override
- public ExternalObjectTypeConverter getChild(ExternalORMConfiguration form, int index) {
- return form.getObjectTypeConverter(index);
- }
- @Override
- public List<ExternalObjectTypeConverter> getChildren(ExternalORMConfiguration form) {
- return form.objectTypeConverters();
- }
- @Override
- public int getChildrenSize(ExternalORMConfiguration form) {
- return form.objectTypeConvertersSize();
- }
- @Override
- public String getChildValue(ExternalObjectTypeConverter childForm) {
- return childForm.getName();
- }
- @Override
- public List<String> getChildValues() {
- List<String> values = new ArrayList<String>();
- for (int index = 0; index < 10; index++) {
- values.add("OBJECT_TYPE_CONVERTER_" + index);
- }
- return values;
- }
- @Override
- public String getNodeName() {
- return ExternalObjectTypeConverter.OBJECT_TYPE_CONVERTER;
- }
- @Override
- public void removeChild(ExternalORMConfiguration form, int index) {
- form.removeObjectTypeConverter(index);
- }
- };
+ return ConverterTests.buildObjectTypeConverterTester();
}
private String buildOracleArrayTester() {
@@ -537,8 +501,7 @@
return new ExternalFormBuilder<ORMConfiguration>() {
@Override
public ORMConfiguration buildExternalForm() throws IOException {
- ORMRepository repository = new ORMRepository();
- return repository.buildORMConfiguration(null, defaultVersion());
+ return ORMConfigurationTests.buildExternalForm();
}
@Override
public int getDefaultAttributeCount() {
@@ -562,12 +525,12 @@
private TextNodeTester<ExternalORMConfiguration, String> buildPackageTester() {
return new TextNodeTester<ExternalORMConfiguration, String>() {
@Override
- public boolean doesNodeExistAlready() {
+ public boolean doesNodeAlreadyExist() {
return false;
}
@Override
public String getDefaultValue() {
- return null;
+ return "org.eclipse.persistence";
}
@Override
public String getNodeName() {
@@ -579,11 +542,11 @@
}
@Override
public String getValue1() {
- return Vector.class.getPackage().getName();
+ return "org.test";
}
@Override
public String getValue2() {
- return XMLConstants.class.getPackage().getName();
+ return "java.io";
}
@Override
public boolean isNullAllowed() {
@@ -656,12 +619,12 @@
private TextNodeTester<ExternalORMConfiguration, String> buildSchemaTester() {
return new TextNodeTester<ExternalORMConfiguration, String>() {
@Override
- public boolean doesNodeExistAlready() {
+ public boolean doesNodeAlreadyExist() {
return false;
}
@Override
public String getDefaultValue() {
- return null;
+ return "SCHEMA_DEFAULT";
}
@Override
public String getNodeName() {
@@ -705,6 +668,10 @@
return form.getSequenceGenerator(index);
}
@Override
+ public ExternalSequenceGenerator getChildForm(List<ExternalSequenceGenerator> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalSequenceGenerator> getChildren(ExternalORMConfiguration form) {
return form.sequenceGenerators();
}
@@ -717,10 +684,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "SEQUENCE_GENERATOR_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("SEQUENCE_GENERATOR_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -729,6 +700,10 @@
return ExternalSequenceGenerator.SEQUENCE_GENERATOR;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeSequenceGenerator(index);
}
@@ -750,6 +725,10 @@
return form.getSqlResultSetMapping(index);
}
@Override
+ public ExternalSQLResultSetMapping getChildForm(List<ExternalSQLResultSetMapping> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalSQLResultSetMapping> getChildren(ExternalORMConfiguration form) {
return form.sqlResultSetMappings();
}
@@ -762,10 +741,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "SQL_RESULT_SET_MAPPING_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("SQL_RESULT_SET_MAPPING_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -774,6 +757,10 @@
return ExternalSQLResultSetMapping.SQL_RESULT_SET_MAPPING;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeSqlResultSetMapping(index);
}
@@ -781,46 +768,7 @@
}
private ChildListNodeTester<ExternalORMConfiguration, ExternalStructConverter, String> buildStructConverterTester() {
- return new ChildListNodeTester<ExternalORMConfiguration, ExternalStructConverter, String>() {
- @Override
- public ExternalStructConverter addChild(ExternalORMConfiguration form, String value) {
- ExternalStructConverter childForm = form.addStructConverter();
- childForm.setName(value);
- return childForm;
- }
- @Override
- public ExternalStructConverter getChild(ExternalORMConfiguration form, int index) {
- return form.getStructConverter(index);
- }
- @Override
- public List<ExternalStructConverter> getChildren(ExternalORMConfiguration form) {
- return form.structConverters();
- }
- @Override
- public int getChildrenSize(ExternalORMConfiguration form) {
- return form.structConvertersSize();
- }
- @Override
- public String getChildValue(ExternalStructConverter childForm) {
- return childForm.getName();
- }
- @Override
- public List<String> getChildValues() {
- List<String> values = new ArrayList<String>();
- for (int index = 0; index < 10; index++) {
- values.add("STRUCT_CONVERTER_" + index);
- }
- return values;
- }
- @Override
- public String getNodeName() {
- return ExternalStructConverter.STRUCT_CONVERTER;
- }
- @Override
- public void removeChild(ExternalORMConfiguration form, int index) {
- form.removeStructConverter(index);
- }
- };
+ return ConverterTests.buildStructConverterTester();
}
private ChildListNodeTester<ExternalORMConfiguration, ExternalTableGenerator, String> buildTableGeneratorTester() {
@@ -834,6 +782,10 @@
return form.getTableGenerator(index);
}
@Override
+ public ExternalTableGenerator getChildForm(List<ExternalTableGenerator> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalTableGenerator> getChildren(ExternalORMConfiguration form) {
return form.tableGenerators();
}
@@ -846,10 +798,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return "TABLE_GENERATOR_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add("TABLE_GENERATOR_" + index);
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -858,6 +814,10 @@
return ExternalTableGenerator.TABLE_GENERATOR;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeTableGenerator(index);
}
@@ -877,6 +837,10 @@
return form.getDiscriminatorColumn(index);
}
@Override
+ public ExternalTenantDiscriminatorColumn getChildForm(List<ExternalTenantDiscriminatorColumn> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
public List<ExternalTenantDiscriminatorColumn> getChildren(ExternalORMConfiguration form) {
return form.discriminatorColumns();
}
@@ -889,10 +853,14 @@
return childForm.getName();
}
@Override
- public List<String> getChildValues() {
+ public String getExpectedChildValue(int index) {
+ return Integer.toString(index);
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
List<String> values = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
- values.add(Integer.toString(index));
+ values.add(getExpectedChildValue(index));
}
return values;
}
@@ -901,6 +869,10 @@
return ExternalTenantDiscriminatorColumn.TENANT_DISCRIMINATOR_COLUMN;
}
@Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
public void removeChild(ExternalORMConfiguration form, int index) {
form.removeDiscriminatorColumn(index);
}
@@ -908,46 +880,7 @@
}
private ChildListNodeTester<ExternalORMConfiguration, ExternalTypeConverter, String> buildTypeConverterTester() {
- return new ChildListNodeTester<ExternalORMConfiguration, ExternalTypeConverter, String>() {
- @Override
- public ExternalTypeConverter addChild(ExternalORMConfiguration form, String value) {
- ExternalTypeConverter childForm = form.addTypeConverter();
- childForm.setName(value);
- return childForm;
- }
- @Override
- public ExternalTypeConverter getChild(ExternalORMConfiguration form, int index) {
- return form.getTypeConverter(index);
- }
- @Override
- public List<ExternalTypeConverter> getChildren(ExternalORMConfiguration form) {
- return form.typeConverters();
- }
- @Override
- public int getChildrenSize(ExternalORMConfiguration form) {
- return form.typeConvertersSize();
- }
- @Override
- public String getChildValue(ExternalTypeConverter childForm) {
- return childForm.getName();
- }
- @Override
- public List<String> getChildValues() {
- List<String> values = new ArrayList<String>();
- for (int index = 0; index < 10; index++) {
- values.add("TYPE_CONVERTER_" + index);
- }
- return values;
- }
- @Override
- public String getNodeName() {
- return ExternalTypeConverter.TYPE_CONVERTER;
- }
- @Override
- public void removeChild(ExternalORMConfiguration form, int index) {
- form.removeTypeConverter(index);
- }
- };
+ return ConverterTests.buildTypeConverterTester();
}
private String buildUnionPartitioningTester() {
@@ -965,7 +898,7 @@
private AttributeNodeTester<ExternalORMConfiguration, ORMDocumentType> buildVersionTester() {
return new AttributeNodeTester<ExternalORMConfiguration, ORMDocumentType>() {
@Override
- public boolean doesNodeExistAlready() {
+ public boolean doesNodeAlreadyExist() {
return true;
}
@Override
@@ -1003,10 +936,6 @@
};
}
- private ORMDocumentType defaultVersion() {
- return ORMDocumentType.ECLIPELINK_2_6;
- }
-
/**
* {@inheritDoc}
*/
@@ -1027,7 +956,7 @@
tester.addTextNode(buildAccessTester());
tester.addUnsupportedNode(buildAccessMethodsTester()); // EclipseLink
tester.addListNodes(buildTenantDiscriminatorColumnTester()); // EclipseLink
-// tester.addListNodes(buildConverterTester()); // EclipseLink : mixed converter
+ tester.addListNodes(buildConverterTester()); // EclipseLink : mixed converter
tester.addListNodes(buildTypeConverterTester()); // EclipseLink
tester.addListNodes(buildObjectTypeConverterTester()); // EclipseLink
tester.addUnsupportedNode(buildSerializedConverterTester()); // EclipseLink
@@ -1057,6 +986,6 @@
tester.addListNodes(buildMappedSuperclassTester());
tester.addListNodes(buildEntityTester());
tester.addListNodes(buildEmbeddableTester());
- tester.addListNodes(buildConverterTester());
+// tester.addListNodes(buildConverterTester()); // Generic JPA, we'll assume EclipseLink
}
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/PropertyTests.java b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/PropertyTests.java
new file mode 100644
index 0000000..78e2a52
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping.tests/src/org/eclipse/persistence/tools/mapping/tests/dom/orm/PropertyTests.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.tests.dom.orm;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.persistence.tools.mapping.ExternalProperty;
+import org.eclipse.persistence.tools.mapping.ExternalPropertyHolder;
+import org.eclipse.persistence.tools.mapping.tests.AbstractExternalFormTests.ChildListNodeTester;
+
+/**
+ * Defines the various testers for {@link ExternalPropertyHolder}.
+ *
+ * @version 2.6
+ */
+@SuppressWarnings("nls")
+public final class PropertyTests {
+
+ /**
+ * Cannot instantiate a new <code>PropertyTests</code>.
+ */
+ private PropertyTests() {
+ super();
+ }
+
+ public static <T extends ExternalPropertyHolder> ChildListNodeTester<T, ExternalProperty, String> buildPropertyTester() {
+ return new ChildListNodeTester<T, ExternalProperty, String>() {
+ @Override
+ public ExternalProperty addChild(T form, String value) {
+ return form.addProperty(value, null);
+ }
+ @Override
+ public ExternalProperty getChild(T form, int index) {
+ return form.getProperty(index);
+ }
+ @Override
+ public ExternalProperty getChildForm(List<ExternalProperty> childForms, int index) {
+ return childForms.get(index);
+ }
+ @Override
+ public List<ExternalProperty> getChildren(T form) {
+ return form.properties();
+ }
+ @Override
+ public int getChildrenSize(T form) {
+ return form.propertiesSize();
+ }
+ @Override
+ public String getChildValue(ExternalProperty childForm) {
+ return childForm.getName();
+ }
+ @Override
+ public String getExpectedChildValue(int index) {
+ return "PROPERTY_" + index;
+ }
+ @Override
+ public List<String> getExpectedChildValues() {
+ List<String> values = new ArrayList<String>();
+ for (int index = 0; index < 10; index++) {
+ values.add(getExpectedChildValue(index));
+ }
+ return values;
+ }
+ @Override
+ public String getNodeName() {
+ return ExternalProperty.PROPERTY;
+ }
+ @Override
+ public List<String> getNodeNames() {
+ return Collections.singletonList(getNodeName());
+ }
+ @Override
+ public void removeChild(T form, int index) {
+ form.removeProperty(index);
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/META-INF/MANIFEST.MF b/tools/org.eclipse.persistence.tools.mapping/META-INF/MANIFEST.MF
index 5cdb826..5d37073 100644
--- a/tools/org.eclipse.persistence.tools.mapping/META-INF/MANIFEST.MF
+++ b/tools/org.eclipse.persistence.tools.mapping/META-INF/MANIFEST.MF
@@ -3,9 +3,9 @@
Bundle-Name: Mapping
Bundle-SymbolicName: org.eclipse.persistence.tools.mapping
Bundle-Version: 2.6.0.qualifier
-Require-Bundle: org.eclipse.persistence.core;bundle-version="2.4.0",
- javax.persistence;bundle-version="2.0.0",
- org.eclipse.persistence.tools.utility;bundle-version="2.6.0"
+Require-Bundle: javax.persistence;bundle-version="2.0.0",
+ org.eclipse.persistence.core;bundle-version="2.4.0",
+ org.eclipse.persistence.tools.utility;bundle-version="[2.6.0,2.7.0)"
Export-Package: org.eclipse.persistence.tools.mapping,
org.eclipse.persistence.tools.mapping.orm,
org.eclipse.persistence.tools.mapping.orm.dom,
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/AbstractExternalForm.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/AbstractExternalForm.java
index b3b327a..d2c5f93 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/AbstractExternalForm.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/AbstractExternalForm.java
@@ -130,7 +130,7 @@
element = parent.addSelf();
}
- return addChild(element, elementName);
+ return addChild(element, elementName, parent.getElementNamesOrder());
}
/**
@@ -227,112 +227,6 @@
}
/**
- * Adds a series of new children elements to the element represented by this external form. Each
- * child will be added to the previously added child.
- *
- *<pre><code><element>
- * |- <child> (index 0 in the given array)
- * |- <child> (index 1 in the given array)
- * |- ...
- * |- <child> (index n-1 in the given array)</code></pre>
- *
- * @param parent The parent of this external form used to retrieve the parent element
- * @param elementNamesOrder The list of element names used to determine the insertion point of
- * the first child node
- * @param elementNames The names of the new child elements to add
- * @return The deepest newly created child element
- */
- public final Element addChildrenTree(AbstractExternalForm parent,
- List<String> elementNamesOrder,
- String... elementNames) {
-
- return addChildrenTree(parent.getElement(), elementNamesOrder, elementNames);
- }
-
- /**
- * Adds a series of new children elements to the element represented by this external form. Each
- * child will be added to the previously added child.
- *
- *<pre><code><element>
- * |- <child> (index 0 in the given array)
- * |- <child> (index 1 in the given array)
- * |- ...
- * |- <child> (index n-1 in the given array)</code></pre>
- *
- * @param element The element from which to start adding child nodes
- * @param elementNamesOrder The list of element names used to determine the insertion point of
- * the first child node
- * @param elementNames The names of the new child elements to add
- * @return The deepest newly created child element
- */
- public final Element addChildrenTree(Element element,
- List<String> elementNamesOrder,
- String... elementNames) {
-
- ExternalFormHelper formHelper = getHelper();
- Element childElement = element;
-
- for (String elementName : elementNames) {
-
- Element child = getChild(childElement, elementName);
-
- if (child == null) {
- childElement = formHelper.addChild(this, childElement, elementName, elementNamesOrder);
- }
- else {
- childElement = child;
- }
-
- elementNamesOrder = Collections.emptyList();
- }
-
- return childElement;
- }
-
- /**
- * Adds a series of new children elements to the element represented by this external form. Each
- * child will be added to the previously added child.
- *
- *<pre><code><element>
- * |- <child> (index 0 in the given array)
- * |- <child> (index 1 in the given array)
- * |- ...
- * |- <child> (index n-1 in the given array)</code></pre>
- *
- * @param elementNamesOrder The list of element names used to determine the insertion point of
- * the first child node
- * @param elementNames The names of the new child elements to add
- * @return The deepest newly created child element
- */
- public final Element addChildrenTree(List<String> elementNamesOrder, String... elementNames) {
-
- Element element = getElement();
-
- if (element == null) {
- element = addSelf();
- }
-
- return addChildrenTree(element, elementNamesOrder, elementNames);
- }
-
- /**
- * Adds a series of new children elements to the element represented by this external form. Each
- * child will be added to the previously added child.
- *
- *<pre><code><element>
- * |- <child> (index 0 in the given array)
- * |- <child> (index 1 in the given array)
- * |- ...
- * |- <child> (index n-1 in the given array)</code></pre>
- *
- * @param elementNames The names of the new child elements to add
- * @return The deepest newly created child element
- */
- public final Element addChildrenTree(String... elementNames) {
- return addChildrenTree(getElementNamesOrder(), elementNames);
- }
-
- /**
* Adds a child text node to the given parent element.
*
* @param element The element to which a new child element will be added
@@ -980,11 +874,11 @@
Element element = getChild(childName);
- if (element == null) {
- return null;
+ if (element != null) {
+ return getAttribute(element, attributeName);
}
- return getAttribute(element, attributeName);
+ return null;
}
/**
@@ -1997,7 +1891,9 @@
NamedNodeMap attributes = element.getAttributes();
if (attributes != null) {
+
for (int index = attributes.getLength(); --index >= 0; ) {
+
Node node = attributes.item(index);
String localName = node.getNodeName();
String value = node.getNodeValue();
@@ -2291,7 +2187,7 @@
* Determines whether the given element has a child with the given element name.
*
* @param element The element used to check if it has a child with the given name
- * @param index The position of the child element to check it's existence, which is only based on
+ * @param index The position of the child element to check its existence, which is only based on
* the count of children of the same type and to make sure the index is smaller than the children size
* @param elementName The name of the element
* @return <code>true</code> if a child with the given name was found; <code>false</code> otherwise
@@ -2321,7 +2217,7 @@
* Determines whether the element represented by this external form has a child with the given element name.
*
* @param elementName The name of the element
- * @param index The position of the child element to check it's existence, which is only based on
+ * @param index The position of the child element to check its existence, which is only based on
* the count of children of the same type and to make sure the index is smaller than the children size
* @return <code>true</code> if a child with the given name was found; <code>false</code> otherwise
*/
@@ -2402,7 +2298,7 @@
* @param elementName The name of the new child element
* @return The position of the given child
*/
- protected int index(Element parent, Element child, String elementName) {
+ protected final int index(Element parent, Element child, String elementName) {
return getChildren(parent, elementName).indexOf(child);
}
@@ -2417,28 +2313,28 @@
/**
* Returns true if node is non-null and is of type ATTRIBUTE_NODE.
*/
- protected boolean isAttribute(Node node) {
+ protected final boolean isAttribute(Node node) {
return isNodeType(node, Node.ATTRIBUTE_NODE);
}
/**
* Returns true if node is non-null and is of type ELEMENT_NODE.
*/
- protected boolean isElement(Node node) {
+ protected final boolean isElement(Node node) {
return isNodeType(node, Node.ELEMENT_NODE);
}
/**
* Wrapper around {@link Node#getNodeType} test that returns false for a <code>null</code> node.
*/
- protected boolean isNodeType(Node node, int type) {
+ protected final boolean isNodeType(Node node, int type) {
return (node != null) && (node.getNodeType() == type);
}
/**
* Returns true if node is non-null and is of type TEXT_NODE.
*/
- protected boolean isText(Node node) {
+ protected final boolean isText(Node node) {
return isNodeType(node, Node.TEXT_NODE);
}
@@ -3249,7 +3145,7 @@
}
if (value != null) {
- setAttribute(element, attributeName, value);
+ setAttribute(element, attributeName, value, Collections.<String>emptyList());
}
else if (element != null) {
removeChild(childName);
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/DefaultFormHelper.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/DefaultFormHelper.java
index 24a56dc..ebfca09 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/DefaultFormHelper.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/DefaultFormHelper.java
@@ -281,7 +281,7 @@
}
// This will insert the attribute at the end of the list of attributes
else {
- element.setAttribute(attributeName, value);
+ element.setAttributeNode(newAttribute);
}
}
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConverterProvider.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConverterProvider.java
new file mode 100644
index 0000000..4916bfb
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConverterProvider.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *
+ ******************************************************************************/
+package org.eclipse.persistence.tools.mapping.orm;
+
+import java.util.List;
+import org.eclipse.persistence.tools.mapping.ExternalForm;
+
+/**
+ * Defines an external ORM object that holds on to different flavor of converters.
+ * <p>
+ * Provisional API: This interface is part of an interim API that is still under development and
+ * expected to change significantly before reaching stability. It is available at this early stage
+ * to solicit feedback from pioneering adopters on the understanding that any code that uses this
+ * API will almost certainly be broken (repeatedly) as the API evolves.<p>
+ *
+ * @version 2.6
+ */
+public interface ExternalConverterProvider extends ExternalForm {
+
+ /**
+ * Adds a converter to this entity.
+ */
+ ExternalClassConverter addConverter(String name);
+
+ /**
+ * Adds a object type converter to this entity.
+ */
+ ExternalObjectTypeConverter addObjectTypeConverter(String name);
+
+ /**
+ * Adds a struct converter to this entity.
+ */
+ ExternalStructConverter addStructConverter(String name);
+
+ /**
+ * Adds a type converter to this entity.
+ */
+ ExternalTypeConverter addTypeConverter(String name);
+
+ /**
+ * Returns a list of the converters defined for this entity.
+ */
+ List<ExternalClassConverter> converters();
+
+ /**
+ * Returns the count of converters defined for this entity.
+ */
+ int convertersSize();
+
+ /**
+ * Returns the converter at the given position.
+ */
+ ExternalClassConverter getConverter(int index);
+
+ /**
+ * Returns the object type converter at the given position.
+ */
+ ExternalObjectTypeConverter getObjectTypeConverter(int index);
+
+ /**
+ * Returns the struct type converter at the given position.
+ */
+ ExternalStructConverter getStructConverter(int index);
+
+ /**
+ * Returns the converter at the given position.
+ */
+ ExternalTypeConverter getTypeConverter(int index);
+
+ /**
+ * Returns a list of the object type converters defined for this entity.
+ */
+ List<ExternalObjectTypeConverter> objectTypeConverters();
+
+ /**
+ * Returns the count of the object type converters defined for this entity.
+ */
+ int objectTypeConvertersSize();
+
+ /**
+ * Removes the converter specified at the given position.
+ */
+ void removeConverter(int index);
+
+ /**
+ * Removes the object type converter specified at the given position.
+ */
+ void removeObjectTypeConverter(int index);
+
+ /**
+ * Removes the struct converter specified at the given position.
+ */
+ void removeStructConverter(int index);
+
+ /**
+ * Removes the type converter specified at the given position.
+ */
+ void removeTypeConverter(int index);
+
+ /**
+ * Returns a list of the struct converters defined for this entity.
+ */
+ List<ExternalStructConverter> structConverters();
+
+ /**
+ * Returns the count of converters defined for this entity.
+ */
+ int structConvertersSize();
+
+ /**
+ * Returns a list of the converters defined for this entity.
+ */
+ List<ExternalTypeConverter> typeConverters();
+
+ /**
+ * Returns the count of type converters defined for this entity.
+ */
+ int typeConvertersSize();
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConvertibleMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConvertibleMapping.java
index b7bd46f..5adce71 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConvertibleMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalConvertibleMapping.java
@@ -35,11 +35,36 @@
String CONVERT = "convert";
/**
+ * Sets the mapping to use this converter for its value converter.
+ */
+ ExternalConverter addConverter();
+
+ /**
+ * Sets the mapping to use this object type converter for its value converter.
+ */
+ ExternalObjectTypeConverter addObjectTypeConverter();
+
+ /**
+ * Sets the mapping to use this struct converter for its value converter.
+ */
+ ExternalStructConverter addStructConverter();
+
+ /**
+ * Sets the mapping to use this type converter for its value converter.
+ */
+ ExternalTypeConverter addTypeConverter();
+
+ /**
* Returns the converter string for this mapping.
*/
String getConvert();
/**
+ * Returns the value converter for this mapping.
+ */
+ ExternalClassConverter getConverter();
+
+ /**
* Returns the {@link TextRange} for the converter string for this mapping.
*/
TextRange getConvertTextRange();
@@ -60,49 +85,24 @@
ExternalTypeConverter getTypeConverter();
/**
- * Returns the value converter for this mapping.
- */
- ExternalClassConverter getValueConverter();
-
- /**
* Removes the value converter from mapping.
*/
- void removeValueConverter();
+ void removeConverter();
/**
* Removes the value object type converter from mapping.
*/
- void removeValueObjectTypeConverter();
+ void removeObjectTypeConverter();
/**
* Removes the value struct converter from mapping.
*/
- void removeValueStructConverter();
+ void removeStructConverter();
/**
* Removes the value type converter from mapping.
*/
- void removeValueTypeConverter();
-
- /**
- * Sets the mapping to use this converter for its value converter.
- */
- void setAsValueConverter();
-
- /**
- * Sets the mapping to use this object type converter for its value converter.
- */
- void setAsValueObjectTypeConverter();
-
- /**
- * Sets the mapping to use this struct converter for its value converter.
- */
- void setAsValueStructConverter();
-
- /**
- * Sets the mapping to use this type converter for its value converter.
- */
- void setAsValueTypeConverter();
+ void removeTypeConverter();
/**
* Sets the value converter string.
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEmbeddable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEmbeddable.java
index 218d288..0da604a 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEmbeddable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEmbeddable.java
@@ -34,7 +34,8 @@
*/
@SuppressWarnings("nls")
public interface ExternalEmbeddable extends ExternalAccessType,
- ExternalPropertyHolder {
+ ExternalPropertyHolder,
+ ExternalConverterProvider {
/**
* The element name used to store and retrieve the change-tracking child node.
@@ -73,6 +74,11 @@
String METADATA_COMPLETE = "metadata-complete";
/**
+ * The attribute name used to store and retrieve the parent class name.
+ */
+ String PARENT_CLASS = "parent-class";
+
+ /**
* The attribute name used to store and retrieve the type child text node of the change-tracking child node.
*/
String TYPE = "type";
@@ -83,6 +89,16 @@
ExternalAccessMethods addAccessMethods(String getMethodName, String setMethodName);
/**
+ * Adds a override with the given name.
+ */
+ ExternalAssociationOverride addAssociationOverride(String name);
+
+ /**
+ * Adds a override with the given name.
+ */
+ ExternalAttributeOverride addAttributeOverride(String name);
+
+ /**
* Adds a basic collection mapping with the given name.
*/
ExternalBasicCollectionMapping addBasicCollectionMapping(String name);
@@ -103,11 +119,6 @@
ExternalCloneCopyPolicy addCloneCopyPolicy();
/**
- * Adds a converter to this entity.
- */
- ExternalClassConverter addConverter(String name);
-
- /**
* Adds copy policy to this entity
*/
ExternalCopyPolicy addCopyPolicy();
@@ -148,11 +159,6 @@
ExternalNoSql addNoSql();
/**
- * Adds a object type converter to this entity.
- */
- ExternalObjectTypeConverter addObjectTypeConverter(String name);
-
- /**
* Adds a one-to-many mapping with the given name.
*/
ExternalOneToManyMapping addOneToManyMapping(String name);
@@ -163,29 +169,29 @@
ExternalOneToOneMapping addOneToOneMapping(String name);
/**
- * Adds a struct converter to this entity.
- */
- ExternalStructConverter addStructConverter(String name);
-
- /**
* Adds a transient mapping with the given name.
*/
ExternalTransientMapping addTransientMapping(String name);
/**
- * Adds a type converter to this entity.
+ * Returns a list of association overrides defined on this entity.
*/
- ExternalTypeConverter addTypeConverter(String name);
+ List<ExternalAssociationOverride> associationOverrides();
/**
- * Returns a list of the converters defined for this entity.
+ * Returns the count of association overrides defined on this entity.
*/
- List<ExternalClassConverter> converters();
+ int associationOverridesSize();
/**
- * Returns the count of converters defined for this entity.
+ * Returns a list of attribute overrides defined for this entity.
*/
- int convertersSize();
+ List<ExternalAttributeOverride> attributeOverrides();
+
+ /**
+ * Returns the count attribute overrides defined for this entity.
+ */
+ int attributeOverridesSize();
/**
* Returns the access methods for this mapping.
@@ -193,6 +199,16 @@
ExternalAccessMethods getAccessMethods();
/**
+ * Returns the association override at the specified index.
+ */
+ ExternalAssociationOverride getAssociationOverride(int index);
+
+ /**
+ * Returns the association override at the specified index.
+ */
+ ExternalAttributeOverride getAttributeOverride(int index);
+
+ /**
* Returns the change tracking type for this entity
*/
ChangeTrackingType getChangeTrackingType();
@@ -223,11 +239,6 @@
ExternalCloneCopyPolicy getCloneCopyPolicy();
/**
- * Returns the converter at the given position.
- */
- ExternalClassConverter getConverter(int index);
-
- /**
* Returns the copy policy for this entity.
*/
ExternalCopyPolicy getCopyPolicy();
@@ -266,7 +277,12 @@
ExternalInstantiationCopyPolicy getInstantiationCopyPolicy();
/**
- * Returns the mapping with the same name as the name parameter.
+ * Returns the mapping at the specified position.
+ */
+ ExternalMapping getMapping(int index);
+
+ /**
+ * Returns the mapping with the given name.
*/
ExternalMapping getMapping(String name);
@@ -282,19 +298,39 @@
ExternalNoSql getNoSql();
/**
- * Returns the object type converter at the given position.
+ * Returns the name of the parent class of this entity.
*/
- ExternalObjectTypeConverter getObjectTypeConverter(int index);
+ String getParentClassName();
/**
- * Returns the struct type converter at the given position.
+ * Returns the {@link TextRange} for the name of the parent class of this entity.
*/
- ExternalStructConverter getStructConverter(int index);
+ TextRange getParentClassNameTextRange();
/**
- * Returns the converter at the given position.
+ * Determines whether the access methods for this mapping is defined or not.
*/
- ExternalTypeConverter getTypeConverter(int index);
+ boolean hasAccessMethods();
+
+ /**
+ * Determines whether the clone copy policy for this entity is present or not.
+ */
+ boolean hasCloneCopyPolicy();
+
+ /**
+ * Determines whether the copy policy for this entity is present or not.
+ */
+ boolean hasCopyPolicy();
+
+ /**
+ * Determines whether the instantiation copy policy for this entity is present or not.
+ */
+ boolean hasInstantiationCopyPolicy();
+
+ /**
+ * Determines whether the external form of NoSql is present or not.
+ */
+ boolean hasNoSql();
/**
* Returns a list of the id mappings defined for this entity.
@@ -322,31 +358,26 @@
int mappingsSize();
/**
- * Returns a list of the object type converters defined for this entity.
- */
- List<ExternalObjectTypeConverter> objectTypeConverters();
-
- /**
- * Returns the count of the object type converters defined for this entity.
- */
- int objectTypeConvertersSize();
-
- /**
* Removes the access methods element from the mapping.
*/
void removeAccessMethods();
/**
+ * Removes the override named.
+ */
+ void removeAssociationOverride(int index);
+
+ /**
+ * Removes the override named.
+ */
+ void removeAttributeOverride(int index);
+
+ /**
* Removes the clone copy policy from this entity.
*/
void removeCloneCopyPolicy();
/**
- * Removes the converter specified at the given position.
- */
- void removeConverter(int index);
-
- /**
* Removes the copy policy from this entity.
*/
void removeCopyPolicy();
@@ -357,7 +388,12 @@
void removeInstantiationCopyPolicy();
/**
- * Removes the mapping specified at the given position.
+ * Removes the mapping at the given position.
+ */
+ void removeMapping(int index);
+
+ /**
+ * Removes the mapping with the given name.
*/
void removeMapping(String name);
@@ -367,21 +403,6 @@
void removeNoSql();
/**
- * Removes the object type converter specified at the given position.
- */
- void removeObjectTypeConverter(int index);
-
- /**
- * Removes the struct converter specified at the given position.
- */
- void removeStructConverter(int index);
-
- /**
- * Removes the type converter specified at the given position.
- */
- void removeTypeConverter(int index);
-
- /**
* Sets the change tracking type for this entity.
*/
void setChangeTrackingType(ChangeTrackingType type);
@@ -412,22 +433,7 @@
void setMetadataComplete(Boolean metaDataComplete);
/**
- * Returns a list of the struct converters defined for this entity.
+ * Sets the name of the parent class of this entity.
*/
- List<ExternalStructConverter> structConverters();
-
- /**
- * Returns the count of converters defined for this entity.
- */
- int structConvertersSize();
-
- /**
- * Returns a list of the converters defined for this entity.
- */
- List<ExternalTypeConverter> typeConverters();
-
- /**
- * Returns the count of type converters defined for this entity.
- */
- int typeConvertersSize();
+ void setParentClassName(String className);
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntity.java
index 797572f..8d6481b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntity.java
@@ -58,31 +58,11 @@
String STRATEGY = "strategy";
/**
- * Adds a override with the given name.
- */
- ExternalAssociationOverride addAssociationOverride(String name);
-
- /**
- * Adds a override with the given name.
- */
- ExternalAttributeOverride addAttributeOverride(String name);
-
- /**
* Creates a new discriminator column definition replacing the old one.
*/
ExternalDiscriminatorColumn addDiscriminatorColumn(String columnName);
/**
- * Adds a named query with the given name.
- */
- ExternalNamedQuery addNamedQuery(String name);
-
- /**
- * Adds a native query with the given name.
- */
- ExternalNativeQuery addNativeQuery(String name);
-
- /**
* Adds a primary key join column with the given name.
*/
ExternalPrimaryKeyJoinColumn addPrimaryKeyJoinColumn(String name);
@@ -103,41 +83,6 @@
ExternalSQLResultSetMapping addSqlResultSetMapping(String name);
/**
- * Adds a stored procedure query with the given name.
- */
- ExternalNamedStoredProcedureQuery addStoredProcedureQuery(String name, String procedureName);
-
- /**
- * Returns a list of association overrides defined on this entity.
- */
- List<ExternalAssociationOverride> associationOverrides();
-
- /**
- * Returns the count of association overrides defined on this entity.
- */
- int associationOverridesSize();
-
- /**
- * Returns a list of attribute overrides defined for this entity.
- */
- List<ExternalAttributeOverride> attributeOverrides();
-
- /**
- * Returns the count attribute overrides defined for this entity.
- */
- int attributeOverridesSize();
-
- /**
- * Returns the association override at the specified index.
- */
- ExternalAssociationOverride getAssociationOverride(int index);
-
- /**
- * Returns the association override at the specified index.
- */
- ExternalAttributeOverride getAttributeOverride(int index);
-
- /**
* Returns the class extractor class name defined for this entity.
*/
String getClassExtractorClassName();
@@ -178,31 +123,11 @@
String getName();
/**
- * Returns a named query with the given name.
- */
- ExternalBasicNamedQuery getNamedQuery(int index);
-
- /**
- * Returns a named query with the given name.
- */
- ExternalBasicNamedQuery getNamedQuery(int index, String name);
-
- /**
* Returns the {@link TextRange} for the name of the entity.
*/
TextRange getNameTextRange();
/**
- * Returns a native query with the given name.
- */
- ExternalNativeQuery getNativeQuery(int index);
-
- /**
- * Returns a native query with the given name.
- */
- ExternalNativeQuery getNativeQuery(int index, String name);
-
- /**
* Returns a primary key join column with the given name.
*/
ExternalPrimaryKeyJoinColumn getPrimaryKeyJoinColumn(int index);
@@ -223,34 +148,9 @@
ExternalSQLResultSetMapping getSqlResultSetMapping(int index);
/**
- * Returns the stored procedure query at the index.
+ * Determines whether the primary table definition for this entity is defined or not.
*/
- ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index);
-
- /**
- * Returns the stored procedure query with the given name.
- */
- ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index, String name);
-
- /**
- * Returns a list of named queries defined for this entity.
- */
- List<ExternalNamedQuery> namedQueries();
-
- /**
- * Returns the count of named queried defined for this entity.
- */
- int namedQueriesSize();
-
- /**
- * Returns a list of native queries defined on this entity.
- */
- List<ExternalNativeQuery> nativeQueries();
-
- /**
- * Returns the count of native queries defined on this entity.
- */
- int nativeQueriesSize();
+ boolean hasPrimaryTable();
/**
* Returns a list of the primary key join columns.
@@ -263,26 +163,6 @@
int primaryKeyJoinColumnsSize();
/**
- * Removes the override named.
- */
- void removeAssociationOverride(int index);
-
- /**
- * Removes the override named.
- */
- void removeAttributeOverride(int index);
-
- /**
- * Removes the named query named.
- */
- void removeNamedQuery(int index);
-
- /**
- * Removes the native query named.
- */
- void removeNativeQuery(int index);
-
- /**
* Removes the primary key join column named.
*/
void removePrimaryKeyJoinColumn(int index);
@@ -303,11 +183,6 @@
void removeSqlResultSetMapping(int index);
/**
- * Removes the stored procedure query named.
- */
- void removeStoredProcedureQuery(int index);
-
- /**
* Returns a list of the secondary table definitions for this entity.
*/
List<ExternalSecondaryTable> secondaryTables();
@@ -346,14 +221,4 @@
* Returns the count of SQL result set mappings defined on this entity.
*/
int sqlResultSetMappingsSize();
-
- /**
- * Returns a list of named stored procedure queries defined for this entity.
- */
- List<ExternalNamedStoredProcedureQuery> storedProcedureQueries();
-
- /**
- * Returns the count of named stored procedure queried defined for this entity.
- */
- int storedProcedureQueriesSize();
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntityTable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntityTable.java
index aff0052..55deaf0 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntityTable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalEntityTable.java
@@ -52,6 +52,11 @@
String SCHEMA = "schema";
/**
+ * The node name used to store and retrieve the element encapsulated by this external form.
+ */
+ String TABLE = "table";
+
+ /**
* Adds unique constraint with the provided column names.
*/
ExternalUniqueConstraint addUniqueConstraint(ListIterable<String> columnNames);
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMappedSuperClass.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMappedSuperClass.java
index 9f4a267..2590d58 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMappedSuperClass.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMappedSuperClass.java
@@ -88,11 +88,6 @@
String OPTIMISTIC_LOCKING = "optimistic-locking";
/**
- * The element name used to store and retrieve the parent-class child node.
- */
- String PARENT_CLASS = "parent-class";
-
- /**
* The element name used to store and retrieve the post-load child node.
*/
String POST_LOAD = "post-load";
@@ -158,6 +153,16 @@
ExternalMultitenancyPolicy addMultitenancy();
/**
+ * Adds a named query with the given name.
+ */
+ ExternalNamedQuery addNamedQuery(String name);
+
+ /**
+ * Adds a native query with the given name.
+ */
+ ExternalNativeQuery addNativeQuery(String name);
+
+ /**
* Create new Optimistic locking for this entity replacing the old one.
*/
ExternalOptimisticLocking addOptimisticLocking();
@@ -173,6 +178,11 @@
ExternalSequenceGenerator addSequenceGenerator();
/**
+ * Adds a stored procedure query with the given name.
+ */
+ ExternalNamedStoredProcedureQuery addStoredProcedureQuery(String name);
+
+ /**
* Creates a new table generator for this entity.
*/
ExternalTableGenerator addTableGenerator();
@@ -225,12 +235,12 @@
/**
* Returns the {@link TextRange} of the excludes class listeners value.
*/
- TextRange getExcludesClassListenersTextRange();
+ TextRange getExcludesDefaultListenersTextRange();
/**
* Returns the {@link TextRange} for the excludes superclass listeners value.
*/
- TextRange getExcludesSuperClassListenersTextRange();
+ TextRange getExcludesSuperclassListenersTextRange();
/**
* Returns the existence type for this entity
@@ -265,12 +275,22 @@
/**
* Returns the multitenancy policy for this entity.
*/
- ExternalMultitenancyPolicy getMultitenant();
+ ExternalMultitenancyPolicy getMultitenancy();
/**
* Returns the {@link TextRange} for the multitenant of this entity.
*/
- TextRange getMultitenantTextRange();
+ TextRange getMultitenancyTextRange();
+
+ /**
+ * Returns a named query with the given name.
+ */
+ ExternalBasicNamedQuery getNamedQuery(int index);
+
+ /**
+ * Returns a native query with the given name.
+ */
+ ExternalNativeQuery getNativeQuery(int index);
/**
* Returns the optimistic locking definition for this entity.
@@ -278,16 +298,6 @@
ExternalOptimisticLocking getOptimisticLocking();
/**
- * Returns the name of the parent class of this entity.
- */
- String getParentClassName();
-
- /**
- * Returns the {@link TextRange} for the name of the parent class of this entity.
- */
- TextRange getParentClassNameTextRange();
-
- /**
* Returns the primary key definition for this entity.
*/
ExternalPrimaryKey getPrimaryKey();
@@ -303,26 +313,76 @@
ExternalSequenceGenerator getSequenceGenerator();
/**
+ * Returns the stored procedure query at the index.
+ */
+ ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index);
+
+ /**
* Returns the table generator for this entity if one exists.
*/
ExternalTableGenerator getTableGenerator();
/**
+ * Determines whether the cache for this entity is defined or not.
+ */
+ boolean hasCache();
+
+ /**
+ * Determines whether the multitenancy policy for this entity is defined or not.
+ */
+ boolean hasMultitenancy();
+
+ /**
+ * Determines whether the optimistic locking definition for this entity is defined or not.
+ */
+ boolean hasOptimisticLocking();
+
+ /**
+ * Determines whether the primary key definition for this entity is defined or not.
+ */
+ boolean hasPrimaryKey();
+
+ /**
+ * Determines whether the sequence generator for this entity is defined or not.
+ */
+ boolean hasSequenceGenerator();
+
+ /**
+ * Determines whether the table generator for this entity is defined or not.
+ */
+ boolean hasTableGenerator();
+
+ /**
* Returns whether this entity is cacheable.
*/
Boolean isCacheable();
/**
- * Returns whether this entity has multitenant.
- */
- Boolean isMultitenant();
-
- /**
* Returns whether this entity is read only.
*/
Boolean isReadOnly();
/**
+ * Returns a list of named queries defined for this entity.
+ */
+ List<ExternalNamedQuery> namedQueries();
+
+ /**
+ * Returns the count of named queried defined for this entity.
+ */
+ int namedQueriesSize();
+
+ /**
+ * Returns a list of native queries defined on this entity.
+ */
+ List<ExternalNativeQuery> nativeQueries();
+
+ /**
+ * Returns the count of native queries defined on this entity.
+ */
+ int nativeQueriesSize();
+
+ /**
* Removes the cache from this entity if it exists.
*/
void removeCache();
@@ -338,6 +398,16 @@
void removeMultiTenancy();
/**
+ * Removes the named query named.
+ */
+ void removeNamedQuery(int index);
+
+ /**
+ * Removes the native query named.
+ */
+ void removeNativeQuery(int index);
+
+ /**
* Removes the optimistic locking from this entity if it exists.
*/
void removeOptimisticLocking();
@@ -348,6 +418,21 @@
void removePrimaryKey();
/**
+ * Removes the sequence generator from this entity.
+ */
+ void removeSequenceGenerator();
+
+ /**
+ * Removes the stored procedure query named.
+ */
+ void removeStoredProcedureQuery(int index);
+
+ /**
+ * Removes the table generator from this entity.
+ */
+ void removeTableGenerator();
+
+ /**
* Sets whether this entity is cacheable or not.
*/
void setCacheable(Boolean cacheable);
@@ -360,12 +445,12 @@
/**
* Sets if this entity should exclude default class listener methods.
*/
- void setExcludesClassListeners(Boolean excludeClassListeners);
+ void setExcludesDefaultListeners(boolean excludeDefaultListeners);
/**
* Sets if this entity has declared to exclude listener methods defined on mapped superclasses.
*/
- void setExcludesSuperClassListeners(Boolean excludesSuperClassListeners);
+ void setExcludesSuperclassListeners(boolean excludesSuperclassListeners);
/**
* Sets the existence checking type for this entity.
@@ -383,11 +468,6 @@
void setMappingsDescription(String description);
/**
- * Sets the name of the parent class of this entity.
- */
- void setParentClassName(String className);
-
- /**
* Sets whether this entity is read only.
*/
void setReadOnly(Boolean readOnly);
@@ -395,10 +475,20 @@
/**
* Returns if this entity has declared to exclude default listener methods.
*/
- Boolean shouldExcludesClassListeners();
+ boolean shouldExcludesDefaultListeners();
/**
* Returns if this entity has declared to exclude listener methods defined on mapped superclasses.
*/
- Boolean shouldExcludesSuperClassListeners();
+ boolean shouldExcludesSuperclassListeners();
+
+ /**
+ * Returns a list of named stored procedure queries defined for this entity.
+ */
+ List<ExternalNamedStoredProcedureQuery> storedProcedureQueries();
+
+ /**
+ * Returns the count of named stored procedure queried defined for this entity.
+ */
+ int storedProcedureQueriesSize();
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalORMConfiguration.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalORMConfiguration.java
index 4c58849..96c460c 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalORMConfiguration.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalORMConfiguration.java
@@ -35,7 +35,8 @@
*/
@SuppressWarnings("nls")
public interface ExternalORMConfiguration extends ExternalTenantDiscriminatorColumnProvider,
- ExternalAccessType {
+ ExternalAccessType,
+ ExternalConverterProvider {
/**
* The element name of the child text node for the default catalog name.
@@ -63,11 +64,6 @@
String SCHEMA = "schema";
/**
- * Adds a new converter.
- */
- ExternalClassConverter addConverter();
-
- /**
* Adds a embedded entity with the given name.
*/
ExternalEmbeddable addEmbeddable(String embeddableClassName);
@@ -98,11 +94,6 @@
ExternalNamedStoredProcedureQuery addNamedStoredProcedureQuery(String name);
/**
- * Adds an object type converter.
- */
- ExternalObjectTypeConverter addObjectTypeConverter();
-
- /**
* Creates new persistence unit representing this ORM's persistence unit metadata.
*/
ExternalPersistenceUnit addPersistenceUnitMetaData();
@@ -118,31 +109,11 @@
ExternalSQLResultSetMapping addSqlResultSetMapping(String name);
/**
- * Adds a new struct converter.
- */
- ExternalStructConverter addStructConverter();
-
- /**
* Adds a table generator with the given name
*/
ExternalTableGenerator addTableGenerator(String name);
/**
- * Adds a new type converter.
- */
- ExternalTypeConverter addTypeConverter();
-
- /**
- * Returns a list of all converters defined globally for this ORM configuration.
- */
- List<ExternalClassConverter> converters();
-
- /**
- * Returns the count of all converters defined globally for this ORM configuration.
- */
- int convertersSize();
-
- /**
* Returns a list of all embedded entities associated with this ORM configuration.
*/
List<ExternalEmbeddable> embeddables();
@@ -180,11 +151,6 @@
TextRange getCatalogNameTextRange();
/**
- * Returns the converter with at the given index.
- */
- ExternalClassConverter getConverter(int index);
-
- /**
* Returns the description noted in the ORM.xml.
*/
String getDescription();
@@ -257,11 +223,6 @@
ExternalNamedStoredProcedureQuery getNamedStoredProcedureQuery(int index);
/**
- * Returns the object type converter with at the given index.
- */
- ExternalObjectTypeConverter getObjectTypeConverter(int index);
-
- /**
* Returns the default package name to be applied to all entities.
*/
String getPackageName();
@@ -307,21 +268,11 @@
ExternalSQLResultSetMapping getSqlResultSetMapping(int index);
/**
- * Returns the struct converter with at the given position.
- */
- ExternalStructConverter getStructConverter(int index);
-
- /**
* Returns the table generator at the given position.
*/
ExternalTableGenerator getTableGenerator(int index);
/**
- * Returns the type converter at the given position.
- */
- ExternalTypeConverter getTypeConverter(int index);
-
- /**
* Derives and returns the XML representation of this configuration.
*/
String getXML();
@@ -362,21 +313,6 @@
int namedQueriesSize();
/**
- * Returns a list of all converters defined globally for this ORM configuration.
- */
- List<ExternalObjectTypeConverter> objectTypeConverters();
-
- /**
- * Returns the count of all converters defined globally for this ORM configuration.
- */
- int objectTypeConvertersSize();
-
- /**
- * Removes the converter at the given position.
- */
- void removeConverter(int index);
-
- /**
* Removes the embedded at the given position.
*/
void removeEmbeddable(int index);
@@ -412,11 +348,6 @@
void removeNativeQuery(int index);
/**
- * Removes the converter at the given position.
- */
- void removeObjectTypeConverter(int index);
-
- /**
* Removes the persistence unit representing this ORM's persistence unit metadata.
*/
void removePersistenceUnitMetaData();
@@ -437,21 +368,11 @@
void removeStoredProcedureQuery(int index);
/**
- * Removes the converter at the given position.
- */
- void removeStructConverter(int index);
-
- /**
* Removes the table generator at the given position.
*/
void removeTableGenerator(int index);
/**
- * Removes the converter at the given position.
- */
- void removeTypeConverter(int index);
-
- /**
* Returns a list of all sequence generators defined globally for this ORM configuration.
*/
List<ExternalSequenceGenerator> sequenceGenerators();
@@ -507,16 +428,6 @@
int storedProcedureQueriesSize();
/**
- * Returns a list of all converters defined globally for this ORM configuration.
- */
- List<ExternalStructConverter> structConverters();
-
- /**
- * Returns the count of all converters defined globally for this ORM configuration.
- */
- int structConvertersSize();
-
- /**
* Returns a list of all table generators defined globally for this ORM configuration.
*/
List<ExternalTableGenerator> tableGenerators();
@@ -525,14 +436,4 @@
* Returns the count of all table generators defined globally for this ORM configuration.
*/
int tableGeneratorsSize();
-
- /**
- * Returns a list of all converters defined globally for this ORM configuration.
- */
- List<ExternalTypeConverter> typeConverters();
-
- /**
- * Returns the count of all converters defined globally for this ORM configuration.
- */
- int typeConvertersSize();
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalTenantDiscriminatorColumn.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalTenantDiscriminatorColumn.java
index f6a0ad3..987d945 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalTenantDiscriminatorColumn.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalTenantDiscriminatorColumn.java
@@ -69,8 +69,7 @@
String TABLE = "table";
/**
- * The node name used to store and retrieve the element
- * encapsulated by this external form.
+ * The node name used to store and retrieve the element encapsulated by this external form.
*/
String TENANT_DISCRIMINATOR_COLUMN = "tenant-discriminator-column";
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AttributeOverride.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AttributeOverride.java
index d5f13db..7ddc191 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AttributeOverride.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AttributeOverride.java
@@ -69,7 +69,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
index 4aaa789..3a9909c 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
@@ -394,14 +394,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setColumn(String columnName) {
removeChild(EntityColumn.COLUMN);
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Cache.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Cache.java
index b5339d8..7777b29 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Cache.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Cache.java
@@ -39,7 +39,7 @@
*
* @param parent The parent of this external form
*/
- Cache(MappedSuperClassEntity parent) {
+ Cache(MappedSuperclass parent) {
super(parent);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ColumnResult.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ColumnResult.java
index 1b39702..098d829 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ColumnResult.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ColumnResult.java
@@ -48,7 +48,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConversionValue.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConversionValue.java
index 54de7b9..e288e92 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConversionValue.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConversionValue.java
@@ -62,7 +62,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConvertibleMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConvertibleMapping.java
index 8f9794d..7b96333 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConvertibleMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ConvertibleMapping.java
@@ -45,6 +45,66 @@
* {@inheritDoc}
*/
@Override
+ public final ExternalClassConverter addConverter() {
+
+ removeChild(TypeConverter.TYPE_CONVERTER);
+ removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ removeChild(StructConverter.STRUCT_CONVERTER);
+
+ ClassConverter converter = buildConverter();
+ converter.addSelf();
+ return converter;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalObjectTypeConverter addObjectTypeConverter() {
+
+ removeChild(TypeConverter.TYPE_CONVERTER);
+ removeChild(ClassConverter.CONVERTER);
+ removeChild(StructConverter.STRUCT_CONVERTER);
+
+ ObjectTypeConverter converter = buildObjectTypeConverter();
+ converter.addSelf();
+ return converter;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalStructConverter addStructConverter() {
+
+ removeChild(TypeConverter.TYPE_CONVERTER);
+ removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ removeChild(ClassConverter.CONVERTER);
+
+ StructConverter converter = buildStructConverter();
+ converter.addSelf();
+ return converter;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalTypeConverter addTypeConverter() {
+
+ removeChild(ClassConverter.CONVERTER);
+ removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ removeChild(StructConverter.STRUCT_CONVERTER);
+
+ TypeConverter converter = buildTypeConverter();
+ converter.addSelf();
+ return converter;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected List<String> buildAttributeNamesOrder() {
List<String> names = new ArrayList<String>();
names.add(NAME);
@@ -96,6 +156,19 @@
* {@inheritDoc}
*/
@Override
+ public final ExternalClassConverter getConverter() {
+
+ if (hasChild(ClassConverter.CONVERTER)) {
+ return buildConverter();
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final TextRange getConvertTextRange() {
return getChildTextNodeTextRange(CONVERT);
}
@@ -143,20 +216,7 @@
* {@inheritDoc}
*/
@Override
- public final ExternalClassConverter getValueConverter() {
-
- if (hasChild(ClassConverter.CONVERTER)) {
- return buildConverter();
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final void removeValueConverter() {
+ public final void removeConverter() {
removeChild(ClassConverter.CONVERTER);
}
@@ -164,7 +224,7 @@
* {@inheritDoc}
*/
@Override
- public final void removeValueObjectTypeConverter() {
+ public final void removeObjectTypeConverter() {
removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
}
@@ -172,7 +232,7 @@
* {@inheritDoc}
*/
@Override
- public final void removeValueStructConverter() {
+ public final void removeStructConverter() {
removeChild(StructConverter.STRUCT_CONVERTER);
}
@@ -180,7 +240,7 @@
* {@inheritDoc}
*/
@Override
- public final void removeValueTypeConverter() {
+ public final void removeTypeConverter() {
removeChild(TypeConverter.TYPE_CONVERTER);
}
@@ -188,62 +248,6 @@
* {@inheritDoc}
*/
@Override
- public final void setAsValueConverter() {
-
- removeChild(TypeConverter.TYPE_CONVERTER);
- removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
- removeChild(StructConverter.STRUCT_CONVERTER);
-
- ClassConverter valueConverter = buildConverter();
- valueConverter.addSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final void setAsValueObjectTypeConverter() {
-
- removeChild(TypeConverter.TYPE_CONVERTER);
- removeChild(ClassConverter.CONVERTER);
- removeChild(StructConverter.STRUCT_CONVERTER);
-
- ObjectTypeConverter valueConverter = buildObjectTypeConverter();
- valueConverter.addSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final void setAsValueStructConverter() {
-
- removeChild(TypeConverter.TYPE_CONVERTER);
- removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
- removeChild(ClassConverter.CONVERTER);
-
- StructConverter valueConverter = buildStructConverter();
- valueConverter.addSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final void setAsValueTypeConverter() {
-
- removeChild(ClassConverter.CONVERTER);
- removeChild(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
- removeChild(StructConverter.STRUCT_CONVERTER);
-
- TypeConverter valueConverter = buildTypeConverter();
- valueConverter.addSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setConvert(String value) {
updateChildTextNode(CONVERT, value);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/DiscriminatorClass.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/DiscriminatorClass.java
index 40e7c8f..30643f3 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/DiscriminatorClass.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/DiscriminatorClass.java
@@ -62,7 +62,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
index adc1598..efad47f 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
@@ -914,14 +914,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setColumn(String columnName) {
EntityColumn column = buildColumn(EntityColumn.COLUMN);
column.addSelf();
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
index 7db8bd1..263a0e8 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
@@ -21,6 +21,8 @@
import org.eclipse.persistence.tools.mapping.ExternalProperty;
import org.eclipse.persistence.tools.mapping.orm.AccessType;
import org.eclipse.persistence.tools.mapping.orm.ExternalAccessMethods;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAssociationOverride;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAttributeOverride;
import org.eclipse.persistence.tools.mapping.orm.ExternalBasicCollectionMapping;
import org.eclipse.persistence.tools.mapping.orm.ExternalBasicMapMapping;
import org.eclipse.persistence.tools.mapping.orm.ExternalBasicMapping;
@@ -54,6 +56,7 @@
*
* @version 2.6
*/
+@SuppressWarnings("nls")
class Embeddable extends AbstractExternalForm
implements ExternalEmbeddable {
@@ -94,6 +97,28 @@
* {@inheritDoc}
*/
@Override
+ public ExternalAssociationOverride addAssociationOverride(String name) {
+ AssociationOverride associationOverride = buildAssociationOverride(-1);
+ associationOverride.addSelf();
+ associationOverride.setName(name);
+ return associationOverride;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public ExternalAttributeOverride addAttributeOverride(String name) {
+ AttributeOverride attributeOverride = buildAttributeOverride(-1);
+ attributeOverride.addSelf();
+ attributeOverride.setName(name);
+ return attributeOverride;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final ExternalBasicCollectionMapping addBasicCollectionMapping(String name) {
BasicCollectionMapping mapping = buildBasicCollectionMapping();
mapping.addSelf();
@@ -183,7 +208,7 @@
*/
@Override
public ExternalIDMapping addIdMapping(String name) {
- throw new UnsupportedOperationException();
+ throw new UnsupportedOperationException("An ID mapping is not supported on an embeddable.");
}
/**
@@ -306,10 +331,62 @@
return converter;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<ExternalAssociationOverride> associationOverrides() {
+
+ int count = associationOverridesSize();
+ List<ExternalAssociationOverride> associationOverrides = new ArrayList<ExternalAssociationOverride>(count);
+
+ for (int index = 0; index < count; index++) {
+ associationOverrides.add(buildAssociationOverride(index));
+ }
+
+ return associationOverrides;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int associationOverridesSize() {
+ return getChildrenSize(AssociationOverride.ASSOCIATION_OVERRIDE);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<ExternalAttributeOverride> attributeOverrides() {
+
+ int count = attributeOverridesSize();
+ List<ExternalAttributeOverride> attributeOverrides = new ArrayList<ExternalAttributeOverride>(count);
+
+ for (int index = 0; index < count; index++) {
+ attributeOverrides.add(buildAttributeOverride(index));
+ }
+
+ return attributeOverrides;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int attributeOverridesSize() {
+ return getChildrenSize(AttributeOverride.ATTRIBUTE_OVERRIDE);
+ }
+
private AccessMethods buildAccessMethods() {
return new AccessMethods(this);
}
+ private AssociationOverride buildAssociationOverride(int index) {
+ return new AssociationOverride(this, index);
+ }
+
/**
* {@inheritDoc}
*/
@@ -317,12 +394,17 @@
protected List<String> buildAttributeNamesOrder() {
List<String> names = new ArrayList<String>();
names.add(CLASS);
+ names.add(PARENT_CLASS);
names.add(ACCESS);
names.add(METADATA_COMPLETE);
names.add(EXCLUDE_DEFAULT_MAPPINGS);
return names;
}
+ private AttributeOverride buildAttributeOverride(int index) {
+ return new AttributeOverride(this, index);
+ }
+
private BasicCollectionMapping buildBasicCollectionMapping() {
return new BasicCollectionMapping(this);
}
@@ -351,6 +433,7 @@
return new ElementCollectionMapping(this);
}
+
/**
* {@inheritDoc}
*/
@@ -362,15 +445,23 @@
names.add(AccessMethods.ACCESS_METHODS);
names.add(CUSTOMIZER);
names.add(CHANGE_TRACKING);
+ names.add("struct");
names.add(NoSql.NO_SQL);
names.add(ClassConverter.CONVERTER);
names.add(TypeConverter.TYPE_CONVERTER);
names.add(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ names.add("serialized-converter");
names.add(StructConverter.STRUCT_CONVERTER);
- names.add(Property.PROPERTY);
names.add(CopyPolicy.COPY_POLICY);
names.add(InstantiationCopyPolicy.INSTANTIATION_COPY_POLICY);
names.add(CloneCopyPolicy.CLONE_COPY_POLICY);
+ names.add("oracle-object");
+ names.add("oracle-array");
+ names.add("plsql-record");
+ names.add("plsql-table");
+ names.add(Property.PROPERTY);
+ names.add(ExternalAttributeOverride.ATTRIBUTE_OVERRIDE);
+ names.add(ExternalAssociationOverride.ASSOCIATION_OVERRIDE);
names.add(Mapping.ATTRIBUTES);
return names;
}
@@ -451,9 +542,10 @@
*
* @return The mapping names
*/
- List<String> buildMappingElementNamesOrder() {
+ final List<String> buildMappingElementNamesOrder() {
List<String> names = new ArrayList<String>();
+ names.add(DESCRIPTION);
names.add(IdMapping.ID);
names.add(EmbeddedIDMapping.EMBEDDED_ID);
names.add(BasicMapping.BASIC);
@@ -469,10 +561,29 @@
names.add(EmbeddedMapping.EMBEDDED);
names.add(TransformationMapping.TRANSFORMATION);
names.add(TransientMapping.TRANSIENT);
-
+ names.add("structure");
+ names.add("array");
return names;
}
+ private List<ExternalMapping> buildMappings(Element element) {
+
+ List<ExternalMapping> mappings = new ArrayList<ExternalMapping>();
+
+ for (Element childElement : getChildren(element)) {
+
+ String elementName = getNodeName(childElement);
+ Mapping mapping = buildMapping(elementName);
+
+ if (mapping != null) {
+ mapping.calculateInsertionIndex(element, childElement, elementName);
+ mappings.add(mapping);
+ }
+ }
+
+ return mappings;
+ }
+
private NoSql buildNoSql() {
return new NoSql(this);
}
@@ -510,7 +621,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
@@ -570,6 +683,32 @@
* {@inheritDoc}
*/
@Override
+ public ExternalAssociationOverride getAssociationOverride(int index) {
+
+ if (hasChild(AssociationOverride.ASSOCIATION_OVERRIDE, index)) {
+ return buildAssociationOverride(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public ExternalAttributeOverride getAttributeOverride(int index) {
+
+ if (hasChild(AttributeOverride.ATTRIBUTE_OVERRIDE, index)) {
+ return buildAttributeOverride(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final ChangeTrackingType getChangeTrackingType() {
return getChildEnumAttribute(CHANGE_TRACKING, TYPE, ChangeTrackingType.class);
}
@@ -724,12 +863,41 @@
* {@inheritDoc}
*/
@Override
- public final Mapping getMapping(String name) {
+ public final Mapping getMapping(int index) {
- // TODO: Speed up by creating a helper method that will retrieve the node directly
- for (ExternalMapping mapping : mappings()) {
- if (ObjectTools.equals(name, mapping.getName())) {
- return (Mapping) mapping;
+ Element element = getChild(ExternalMapping.ATTRIBUTES);
+
+ if (element != null) {
+ Element childElement = getChild(element, index);
+
+ if (childElement != null) {
+ String elementName = getNodeName(childElement);
+
+ Mapping mapping = buildMapping(elementName);
+ mapping.calculateInsertionIndex(element, childElement, elementName);
+ return mapping;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalMapping getMapping(String name) {
+
+ Element element = getChild(ExternalMapping.ATTRIBUTES);
+
+ if (element != null) {
+
+ for (Element mappingNode : getChildren(element)) {
+ String mappingName = getAttribute(mappingNode, ExternalMapping.NAME);
+
+ if (mappingName.equals(name)) {
+ return buildMapping(getNodeName(mappingNode));
+ }
}
}
@@ -737,7 +905,7 @@
}
protected List<String> getMappingElementNamesOrder() {
- return this.mappingElementNamesOrder;
+ return mappingElementNamesOrder;
}
/**
@@ -778,6 +946,22 @@
* {@inheritDoc}
*/
@Override
+ public final String getParentClassName() {
+ return getAttribute(PARENT_CLASS);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public TextRange getParentClassNameTextRange() {
+ return getAttributeTextRange(PARENT_CLASS);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final List<ExternalProperty> getProperties(String name) {
List<ExternalProperty> properties = new ArrayList<ExternalProperty>();
@@ -948,6 +1132,46 @@
* {@inheritDoc}
*/
@Override
+ public final boolean hasAccessMethods() {
+ return hasChild(ExternalAccessMethods.ACCESS_METHODS);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasCloneCopyPolicy() {
+ return hasChild(ExternalCloneCopyPolicy.CLONE_COPY_POLICY);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasCopyPolicy() {
+ return hasChild(ExternalCopyPolicy.COPY_POLICY);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasInstantiationCopyPolicy() {
+ return hasChild(ExternalInstantiationCopyPolicy.INSTANTIATION_COPY_POLICY);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasNoSql() {
+ return hasChild(ExternalNoSql.NO_SQL);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final List<ExternalIDMapping> idMappings() {
List<ExternalIDMapping> idMappings = new ArrayList<ExternalIDMapping>();
@@ -996,30 +1220,12 @@
Element element = getChild(Mapping.ATTRIBUTES);
if (element != null) {
- return mappings(element);
+ return buildMappings(element);
}
return Collections.emptyList();
}
- private List<ExternalMapping> mappings(Element element) {
-
- List<ExternalMapping> mappings = new ArrayList<ExternalMapping>();
-
- for (Element childElement : getChildren(element)) {
-
- String elementName = getNodeName(childElement);
- Mapping mapping = buildMapping(elementName);
-
- if (mapping != null) {
- mapping.calculateInsertionIndex(element, childElement, elementName);
- mappings.add(mapping);
- }
- }
-
- return mappings;
- }
-
/**
* {@inheritDoc}
*/
@@ -1112,6 +1318,24 @@
* {@inheritDoc}
*/
@Override
+ public void removeAssociationOverride(int index) {
+ AssociationOverride associationOverride = buildAssociationOverride(index);
+ associationOverride.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void removeAttributeOverride(int index) {
+ AttributeOverride attributeOverride = buildAttributeOverride(index);
+ attributeOverride.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final void removeCloneCopyPolicy() {
CloneCopyPolicy policy = buildCloneCopyPolicy();
policy.removeSelf();
@@ -1148,9 +1372,9 @@
* {@inheritDoc}
*/
@Override
- public final void removeMapping(String name) {
+ public final void removeMapping(int index) {
- Mapping mapping = getMapping(name);
+ Mapping mapping = getMapping(index);
if (mapping != null) {
mapping.removeSelf();
@@ -1161,6 +1385,27 @@
* {@inheritDoc}
*/
@Override
+ public final void removeMapping(String name) {
+
+ Element element = getChild(ExternalMapping.ATTRIBUTES);
+
+ if (element != null) {
+
+ for (Element mappingNode : getChildren(element)) {
+ String mappingName = getAttribute(mappingNode, ExternalMapping.NAME);
+
+ if (mappingName.equals(name)) {
+ remove(element, mappingNode);
+ break;
+ }
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final void removeNoSql() {
NoSql noSql = buildNoSql();
noSql.removeSelf();
@@ -1288,6 +1533,14 @@
* {@inheritDoc}
*/
@Override
+ public final void setParentClassName(String className) {
+ setAttribute(PARENT_CLASS, className);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final List<ExternalStructConverter> structConverters() {
int count = structConvertersSize();
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
index 2917bfe..150ad88 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
@@ -33,7 +33,7 @@
*
* @param parent The parent of this external form
*/
- EmbeddedIDMapping(MappedSuperClassEntity parent) {
+ EmbeddedIDMapping(MappedSuperclass parent) {
super(parent);
}
@@ -116,12 +116,4 @@
AttributeOverride attributeOverride = buildAttributeOverride(index);
attributeOverride.removeSelf();
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
index d71fbf5..147a79c 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
@@ -217,14 +217,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setNoSqlField(String field) {
ExternalNoSqlField noSqlField = buildNoSqlField();
noSqlField.setName(field);
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
index 9568fa8..2eb04d2 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
@@ -16,20 +16,15 @@
import java.util.ArrayList;
import java.util.List;
import javax.persistence.InheritanceType;
-import org.eclipse.persistence.tools.mapping.orm.ExternalAssociationOverride;
-import org.eclipse.persistence.tools.mapping.orm.ExternalAttributeOverride;
-import org.eclipse.persistence.tools.mapping.orm.ExternalBasicNamedQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAccessMethods;
import org.eclipse.persistence.tools.mapping.orm.ExternalDiscriminatorColumn;
import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddable;
import org.eclipse.persistence.tools.mapping.orm.ExternalEntity;
import org.eclipse.persistence.tools.mapping.orm.ExternalEntityTable;
-import org.eclipse.persistence.tools.mapping.orm.ExternalNamedQuery;
-import org.eclipse.persistence.tools.mapping.orm.ExternalNativeQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalMultitenancyPolicy;
import org.eclipse.persistence.tools.mapping.orm.ExternalPrimaryKeyJoinColumn;
import org.eclipse.persistence.tools.mapping.orm.ExternalSQLResultSetMapping;
import org.eclipse.persistence.tools.mapping.orm.ExternalSecondaryTable;
-import org.eclipse.persistence.tools.mapping.orm.ExternalNamedStoredProcedureQuery;
-import org.eclipse.persistence.tools.utility.ObjectTools;
import org.eclipse.persistence.tools.utility.TextRange;
import org.w3c.dom.Element;
@@ -40,7 +35,8 @@
*
* @version 2.6
*/
-final class Entity extends MappedSuperClassEntity
+@SuppressWarnings("nls")
+final class Entity extends MappedSuperclass
implements ExternalEntity {
/**
@@ -57,28 +53,6 @@
* {@inheritDoc}
*/
@Override
- public ExternalAssociationOverride addAssociationOverride(String name) {
- AssociationOverride associationOverride = buildAssociationOverride(-1);
- associationOverride.addSelf();
- associationOverride.setName(name);
- return associationOverride;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalAttributeOverride addAttributeOverride(String name) {
- AttributeOverride attributeOverride = buildAttributeOverride(-1);
- attributeOverride.addSelf();
- attributeOverride.setName(name);
- return attributeOverride;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public ExternalDiscriminatorColumn addDiscriminatorColumn(String columnName) {
DiscriminatorColumn column = getDiscriminatorColumn();
@@ -96,28 +70,6 @@
* {@inheritDoc}
*/
@Override
- public ExternalNamedQuery addNamedQuery(String name) {
- NamedQuery namedQuery = buildNamedQuery(-1);
- namedQuery.addSelf();
- namedQuery.setName(name);
- return namedQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalNativeQuery addNativeQuery(String name) {
- NamedNativeQuery namedNativeQuery = buildNamedNativeQuery(-1);
- namedNativeQuery.addSelf();
- namedNativeQuery.setName(name);
- return namedNativeQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public ExternalPrimaryKeyJoinColumn addPrimaryKeyJoinColumn(String name) {
PrimaryKeyJoinColumn pkJoinColumn = buildPrimaryKeyJoinColumn(-1);
pkJoinColumn.addSelf();
@@ -164,88 +116,20 @@
* {@inheritDoc}
*/
@Override
- public ExternalNamedStoredProcedureQuery addStoredProcedureQuery(String name, String procedureName) {
- NamedStoredProcedureQuery storedProcedureQuery = buildStoredProcedureQuery(-1);
- storedProcedureQuery.addSelf();
- storedProcedureQuery.setName(name);
- storedProcedureQuery.setProcedureName(procedureName);
- return storedProcedureQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<ExternalAssociationOverride> associationOverrides() {
-
- int count = associationOverridesSize();
- List<ExternalAssociationOverride> associationOverrides = new ArrayList<ExternalAssociationOverride>(count);
-
- for (int index = 0; index < count; index++) {
- associationOverrides.add(buildAssociationOverride(index));
- }
-
- return associationOverrides;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int associationOverridesSize() {
- return getChildrenSize(AttributeOverride.ATTRIBUTE_OVERRIDE);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<ExternalAttributeOverride> attributeOverrides() {
-
- int count = attributeOverridesSize();
- List<ExternalAttributeOverride> attributeOverrides = new ArrayList<ExternalAttributeOverride>(count);
-
- for (int index = 0; index < count; index++) {
- attributeOverrides.add(buildAttributeOverride(index));
- }
-
- return attributeOverrides;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int attributeOverridesSize() {
- return getChildrenSize(AssociationOverride.ASSOCIATION_OVERRIDE);
- }
-
- private AssociationOverride buildAssociationOverride(int index) {
- return new AssociationOverride(this, index);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
protected List<String> buildAttributeNamesOrder() {
List<String> names = new ArrayList<String>();
names.add(NAME);
names.add(ExternalEmbeddable.CLASS);
- names.add(PARENT_CLASS);
+ names.add(PARENT_CLASS); // EclipseLink
names.add(ACCESS);
names.add(CACHEABLE);
names.add(METADATA_COMPLETE);
- names.add(READ_ONLY);
- names.add(EXISTENCE_CHECKING);
- names.add(EXCLUDE_DEFAULT_MAPPINGS);
+ names.add(READ_ONLY); // EclipseLink
+ names.add(EXISTENCE_CHECKING); // EclipseLink
+ names.add(EXCLUDE_DEFAULT_MAPPINGS); // EclipseLink
return names;
}
- private AttributeOverride buildAttributeOverride(int index) {
- return new AttributeOverride(this, index);
- }
-
private DiscriminatorColumn buildDiscriminatorColumn() {
return new DiscriminatorColumn(this);
}
@@ -257,12 +141,19 @@
protected List<String> buildElementNamesOrder() {
List<String> names = new ArrayList<String>();
names.add(ExternalEmbeddable.DESCRIPTION);
+ names.add(ExternalAccessMethods.ACCESS_METHODS);
+ names.add(ExternalMultitenancyPolicy.MULTITENANT);
+ names.add("additional-criteria");
names.add(CUSTOMIZER);
names.add(CHANGE_TRACKING);
names.add(PrimaryTable.TABLE);
names.add(SecondaryTable.SECONDARY_TABLE);
+ names.add("struct");
names.add(PrimaryKeyJoinColumn.PRIMARY_KEY_JOIN_COLUMN);
+ names.add("primary-key-foreign-key");
names.add(NoSql.NO_SQL);
+ names.add("cascade-on-delete");
+ names.add("index");
names.add(ID_CLASS);
names.add(PrimaryKey.PRIMARY_KEY);
names.add(INHERITANCE);
@@ -271,19 +162,42 @@
names.add(CLASS_EXTRACTOR);
names.add(OptimisticLocking.OPTIMISTIC_LOCKING);
names.add(Cache.CACHE);
+ names.add(CACHE_INTERCEPTOR);
+ names.add("cache-index");
+ names.add(FetchGroup.FETCH_GROUP);
names.add(ClassConverter.CONVERTER);
names.add(TypeConverter.TYPE_CONVERTER);
names.add(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ names.add("serialized-converter");
names.add(StructConverter.STRUCT_CONVERTER);
names.add(CopyPolicy.COPY_POLICY);
names.add(InstantiationCopyPolicy.INSTANTIATION_COPY_POLICY);
names.add(CloneCopyPolicy.CLONE_COPY_POLICY);
+ names.add("serialized-object");
names.add(SequenceGenerator.SEQUENCE_GENERATOR);
names.add(TableGenerator.TABLE_GENERATOR);
+ names.add("uuid-generator");
+ names.add("partitioning");
+ names.add("replication-partitioning");
+ names.add("round-robin-partitioning");
+ names.add("pinned-partitioning");
+ names.add("range-partitioning");
+ names.add("value-partitioning");
+ names.add("hash-partitioning");
+ names.add("union-partitioning");
+ names.add("partitioned");
names.add(NamedQuery.NAMED_QUERY);
names.add(NamedNativeQuery.NAMED_NATIVE_QUERY);
names.add(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY);
+ names.add("named-stored-function-query");
+ names.add("named-plsql-stored-procedure-query");
+ names.add("named-plsql-stored-function-query");
+ names.add("oracle-object");
+ names.add("oracle-array");
+ names.add("plsql-record");
+ names.add("plsql-table");
names.add(SQLResultSetMapping.SQL_RESULT_SET_MAPPING);
+ names.add("query-redirectors");
names.add(EXCLUDE_DEFAULT_LISTENERS);
names.add(EXCLUDE_SUPERCLASS_LISTENERS);
names.add(AbstractEntityListener.ENTITY_LISTENERS);
@@ -297,18 +211,12 @@
names.add(Property.PROPERTY);
names.add(AttributeOverride.ATTRIBUTE_OVERRIDE);
names.add(AssociationOverride.ASSOCIATION_OVERRIDE);
+ names.add("convert");
+ names.add("named-entity-graph");
names.add(Mapping.ATTRIBUTES);
return names;
}
- private NamedNativeQuery buildNamedNativeQuery(int index) {
- return new NamedNativeQuery(this, index);
- }
-
- private NamedQuery buildNamedQuery(int index) {
- return new NamedQuery(this, index);
- }
-
private PrimaryKeyJoinColumn buildPrimaryKeyJoinColumn(int index) {
return new PrimaryKeyJoinColumn(this, index);
}
@@ -325,36 +233,6 @@
return new SQLResultSetMapping(this, index);
}
- private NamedStoredProcedureQuery buildStoredProcedureQuery(int index) {
- return new NamedStoredProcedureQuery(this, index);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalAssociationOverride getAssociationOverride(int index) {
-
- if (hasChild(AssociationOverride.ASSOCIATION_OVERRIDE, index)) {
- return buildAssociationOverride(index);
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalAttributeOverride getAttributeOverride(int index) {
-
- if (hasChild(AttributeOverride.ATTRIBUTE_OVERRIDE, index)) {
- return buildAttributeOverride(index);
- }
-
- return null;
- }
-
/**
* {@inheritDoc}
*/
@@ -443,38 +321,6 @@
* {@inheritDoc}
*/
@Override
- public ExternalBasicNamedQuery getNamedQuery(int index) {
-
- if (hasChild(NamedQuery.NAMED_QUERY, index)) {
- return buildNamedQuery(index);
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalBasicNamedQuery getNamedQuery(int index, String name) {
-
- ExternalBasicNamedQuery namedQuery = getNamedQuery(index);
-
- if (namedQuery == null) {
- return null;
- }
-
- if (ObjectTools.notEquals(name, namedQuery.getName())) {
- namedQuery = null;
- }
-
- return namedQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public TextRange getNameTextRange() {
return getAttributeTextRange(NAME);
}
@@ -483,38 +329,6 @@
* {@inheritDoc}
*/
@Override
- public ExternalNativeQuery getNativeQuery(int index) {
-
- if (hasChild(NamedNativeQuery.NAMED_NATIVE_QUERY, index)) {
- return buildNamedNativeQuery(index);
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalNativeQuery getNativeQuery(int index, String name) {
-
- ExternalNativeQuery nativeQuery = getNativeQuery(index);
-
- if (nativeQuery == null) {
- return null;
- }
-
- if (ObjectTools.notEquals(name, nativeQuery.getName())) {
- nativeQuery = null;
- }
-
- return nativeQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public ExternalPrimaryKeyJoinColumn getPrimaryKeyJoinColumn(int index) {
if (hasChild(PrimaryKeyJoinColumn.PRIMARY_KEY_JOIN_COLUMN, index)) {
@@ -530,7 +344,7 @@
@Override
public ExternalEntityTable getPrimaryTable() {
- if (hasChild(PrimaryTable.TABLE)) {
+ if (hasPrimaryTable()) {
return buildPrimaryTable();
}
@@ -567,80 +381,8 @@
* {@inheritDoc}
*/
@Override
- public ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index) {
-
- if (hasChild(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY, index)) {
- return buildStoredProcedureQuery(index);
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index, String name) {
-
- ExternalNamedStoredProcedureQuery storedProcedureQuery = getStoredProcedureQuery(index);
-
- if (storedProcedureQuery == null) {
- return null;
- }
-
- if (ObjectTools.notEquals(name, storedProcedureQuery.getName())) {
- storedProcedureQuery = null;
- }
-
- return storedProcedureQuery;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<ExternalNamedQuery> namedQueries() {
-
- int count = namedQueriesSize();
- List<ExternalNamedQuery> namedQueries = new ArrayList<ExternalNamedQuery>(count);
-
- for (int index = 0; index < count; index++) {
- namedQueries.add(buildNamedQuery(index));
- }
-
- return namedQueries;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int namedQueriesSize() {
- return getChildrenSize(NamedQuery.NAMED_QUERY);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<ExternalNativeQuery> nativeQueries() {
-
- int count = nativeQueriesSize();
- List<ExternalNativeQuery> nativeQueries = new ArrayList<ExternalNativeQuery>(count);
-
- for (int index = 0; index < count; index++) {
- nativeQueries.add(buildNamedNativeQuery(index));
- }
-
- return nativeQueries;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int nativeQueriesSize() {
- return getChildrenSize(NamedNativeQuery.NAMED_NATIVE_QUERY);
+ public boolean hasPrimaryTable() {
+ return hasChild(PrimaryTable.TABLE);
}
/**
@@ -671,42 +413,6 @@
* {@inheritDoc}
*/
@Override
- public void removeAssociationOverride(int index) {
- AssociationOverride associationOverride = buildAssociationOverride(index);
- associationOverride.removeSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeAttributeOverride(int index) {
- AttributeOverride attributeOverride = buildAttributeOverride(index);
- attributeOverride.removeSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeNamedQuery(int index) {
- NamedQuery namedQuery = buildNamedQuery(index);
- namedQuery.removeSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeNativeQuery(int index) {
- NamedNativeQuery namedNativeQuery = buildNamedNativeQuery(index);
- namedNativeQuery.removeSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void removePrimaryKeyJoinColumn(int index) {
PrimaryKeyJoinColumn pkJoinColumn = buildPrimaryKeyJoinColumn(index);
pkJoinColumn.removeSelf();
@@ -743,15 +449,6 @@
* {@inheritDoc}
*/
@Override
- public void removeStoredProcedureQuery(int index) {
- NamedStoredProcedureQuery storedProcedureQuery = buildStoredProcedureQuery(index);
- storedProcedureQuery.removeSelf();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public List<ExternalSecondaryTable> secondaryTables() {
int count = secondaryTablesSize();
@@ -827,28 +524,4 @@
public int sqlResultSetMappingsSize() {
return getChildrenSize(SQLResultSetMapping.SQL_RESULT_SET_MAPPING);
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public List<ExternalNamedStoredProcedureQuery> storedProcedureQueries() {
-
- int count = storedProcedureQueriesSize();
- List<ExternalNamedStoredProcedureQuery> storedProcedureQueries = new ArrayList<ExternalNamedStoredProcedureQuery>(count);
-
- for (int index = 0; index < count; index++) {
- storedProcedureQueries.add(buildStoredProcedureQuery(index));
- }
-
- return storedProcedureQueries;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int storedProcedureQueriesSize() {
- return getChildrenSize(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY);
- }
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityColumn.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityColumn.java
index 5782c23..9f676f2 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityColumn.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityColumn.java
@@ -80,7 +80,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityEntityListener.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityEntityListener.java
index a3baeac..549cc9b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityEntityListener.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityEntityListener.java
@@ -13,6 +13,7 @@
******************************************************************************/
package org.eclipse.persistence.tools.mapping.orm.dom;
+import java.util.Collections;
import java.util.List;
import org.w3c.dom.Element;
@@ -31,7 +32,7 @@
* @param parent The parent of this external form
* @param index The position of the element within the list of children with the same type owned by the parent
*/
- EntityEntityListener(MappedSuperClassEntity parent, int index) {
+ EntityEntityListener(MappedSuperclass parent, int index) {
super(parent, index);
}
@@ -40,7 +41,14 @@
*/
@Override
public Element addSelf(String elementName, List<String> elementNamesOrder) {
- return getParent().addChildrenTree(ENTITY_LISTENERS, ENTITY_LISTENER);
+
+ Element element = getParent().getChild(ENTITY_LISTENERS);
+
+ if (element == null) {
+ element = getParent().addChild(ENTITY_LISTENERS);
+ }
+
+ return addChild(element, elementName, Collections.<String>emptyList());
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
index e6f3830..14e9c2b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
@@ -78,7 +78,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FetchGroup.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FetchGroup.java
index 04ad49d..90eeeaf 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FetchGroup.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FetchGroup.java
@@ -13,6 +13,7 @@
******************************************************************************/
package org.eclipse.persistence.tools.mapping.orm.dom;
+import java.util.ArrayList;
import java.util.List;
import org.eclipse.persistence.tools.mapping.AbstractExternalForm;
import org.eclipse.persistence.tools.mapping.orm.ExternalFetchGroup;
@@ -50,7 +51,7 @@
*/
@Override
protected List<String> buildAttributeNamesOrder() {
- List<String> names = super.buildAttributeNamesOrder();
+ List<String> names = new ArrayList<String>();
names.add(NAME);
names.add(LOAD);
return names;
@@ -61,7 +62,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
@@ -84,6 +87,14 @@
* {@inheritDoc}
*/
@Override
+ protected Element getElement() {
+ return getChild(getParent(), getElementName(), index);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected String getElementName() {
return FETCH_GROUP;
}
@@ -108,13 +119,8 @@
* {@inheritDoc}
*/
@Override
- public final void removeSelf() {
- if (index == -1) {
- super.removeSelf();
- }
- else {
- removeChild(getParent(), getElementName(), index);
- }
+ public void removeSelf() {
+ removeChild(getParent(), getElementName(), index);
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FieldResult.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FieldResult.java
index 86899b7..e75ba9b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FieldResult.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/FieldResult.java
@@ -62,7 +62,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
index 1f83bec..bedd496 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
@@ -39,7 +39,7 @@
*
* @param parent The parent of this external form
*/
- IdMapping(MappedSuperClassEntity parent) {
+ IdMapping(MappedSuperclass parent) {
super(parent);
}
@@ -280,14 +280,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
@SuppressWarnings("null")
public void setColumn(String columnName) {
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinColumn.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinColumn.java
index ef4d4cd..4741334 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinColumn.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinColumn.java
@@ -79,7 +79,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperclass.java
similarity index 70%
rename from tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java
rename to tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperclass.java
index 5482e9c..8296357 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperclass.java
@@ -16,6 +16,10 @@
import java.util.ArrayList;
import java.util.List;
import org.eclipse.persistence.annotations.ExistenceType;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAccessMethods;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAssociationOverride;
+import org.eclipse.persistence.tools.mapping.orm.ExternalAttributeOverride;
+import org.eclipse.persistence.tools.mapping.orm.ExternalBasicNamedQuery;
import org.eclipse.persistence.tools.mapping.orm.ExternalCache;
import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddable;
import org.eclipse.persistence.tools.mapping.orm.ExternalEmbeddedIDMapping;
@@ -24,8 +28,12 @@
import org.eclipse.persistence.tools.mapping.orm.ExternalIDMapping;
import org.eclipse.persistence.tools.mapping.orm.ExternalMappedSuperClass;
import org.eclipse.persistence.tools.mapping.orm.ExternalMultitenancyPolicy;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNamedQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNamedStoredProcedureQuery;
+import org.eclipse.persistence.tools.mapping.orm.ExternalNativeQuery;
import org.eclipse.persistence.tools.mapping.orm.ExternalOptimisticLocking;
import org.eclipse.persistence.tools.mapping.orm.ExternalPrimaryKey;
+import org.eclipse.persistence.tools.mapping.orm.ExternalSQLResultSetMapping;
import org.eclipse.persistence.tools.mapping.orm.ExternalSequenceGenerator;
import org.eclipse.persistence.tools.mapping.orm.ExternalTableGenerator;
import org.eclipse.persistence.tools.mapping.orm.ExternalTransformationMapping;
@@ -42,16 +50,17 @@
*
* @version 2.6
*/
-class MappedSuperClassEntity extends Embeddable
- implements ExternalMappedSuperClass {
+@SuppressWarnings("nls")
+class MappedSuperclass extends Embeddable
+ implements ExternalMappedSuperClass {
/**
- * Creates a new <code>MappedSuperClassEntity</code>.
+ * Creates a new <code>MappedSuperclass</code>.
*
* @param parent The parent of this external form
* @param index The position of the element within the list of children with the same type owned by the parent
*/
- MappedSuperClassEntity(ORMConfiguration parent, int index) {
+ MappedSuperclass(ORMConfiguration parent, int index) {
super(parent, index);
}
@@ -114,7 +123,7 @@
*/
@Override
public final ExternalMultitenancyPolicy addMultitenancy() {
- MultitenancyPolicy multitenant = buildMultitenant();
+ MultitenancyPolicy multitenant = buildMultitenancyPolicy();
multitenant.addSelf();
return multitenant;
}
@@ -123,6 +132,28 @@
* {@inheritDoc}
*/
@Override
+ public final ExternalNamedQuery addNamedQuery(String name) {
+ NamedQuery namedQuery = buildNamedQuery(-1);
+ namedQuery.addSelf();
+ namedQuery.setName(name);
+ return namedQuery;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalNativeQuery addNativeQuery(String name) {
+ NamedNativeQuery namedNativeQuery = buildNamedNativeQuery(-1);
+ namedNativeQuery.addSelf();
+ namedNativeQuery.setName(name);
+ return namedNativeQuery;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final ExternalOptimisticLocking addOptimisticLocking() {
OptimisticLocking optimisticLocking = buildOptimisticLocking();
optimisticLocking.addSelf();
@@ -143,7 +174,7 @@
* {@inheritDoc}
*/
@Override
- public ExternalSequenceGenerator addSequenceGenerator() {
+ public final ExternalSequenceGenerator addSequenceGenerator() {
SequenceGenerator sequenceGenerator = buildSequenceGenerator();
sequenceGenerator.addSelf();
return sequenceGenerator;
@@ -153,7 +184,18 @@
* {@inheritDoc}
*/
@Override
- public ExternalTableGenerator addTableGenerator() {
+ public final ExternalNamedStoredProcedureQuery addStoredProcedureQuery(String name) {
+ NamedStoredProcedureQuery storedProcedureQuery = buildStoredProcedureQuery(-1);
+ storedProcedureQuery.addSelf();
+ storedProcedureQuery.setName(name);
+ return storedProcedureQuery;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalTableGenerator addTableGenerator() {
TableGenerator tableGenerator = buildTableGenerator();
tableGenerator.addSelf();
return tableGenerator;
@@ -220,6 +262,9 @@
protected List<String> buildElementNamesOrder() {
List<String> names = new ArrayList<String>();
names.add(ExternalEmbeddable.DESCRIPTION);
+ names.add(ExternalAccessMethods.ACCESS_METHODS);
+ names.add(ExternalMultitenancyPolicy.MULTITENANT);
+ names.add("additional-criteria");
names.add(CUSTOMIZER);
names.add(CHANGE_TRACKING);
names.add(ID_CLASS);
@@ -227,16 +272,41 @@
names.add(OptimisticLocking.OPTIMISTIC_LOCKING);
names.add(Cache.CACHE);
names.add(CACHE_INTERCEPTOR);
+ names.add("cache-index");
names.add(FetchGroup.FETCH_GROUP);
names.add(ClassConverter.CONVERTER);
names.add(TypeConverter.TYPE_CONVERTER);
names.add(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
+ names.add("serialized-converter");
names.add(StructConverter.STRUCT_CONVERTER);
names.add(CopyPolicy.COPY_POLICY);
names.add(InstantiationCopyPolicy.INSTANTIATION_COPY_POLICY);
names.add(CloneCopyPolicy.CLONE_COPY_POLICY);
+ names.add("serialized-object");
names.add(SequenceGenerator.SEQUENCE_GENERATOR);
names.add(TableGenerator.TABLE_GENERATOR);
+ names.add("uuid-generator");
+ names.add("partitioning");
+ names.add("replication-partitioning");
+ names.add("round-robin-partitioning");
+ names.add("pinned-partitioning");
+ names.add("range-partitioning");
+ names.add("value-partitioning");
+ names.add("hash-partitioning");
+ names.add("union-partitioning");
+ names.add("partitioned");
+ names.add(ExternalBasicNamedQuery.NAMED_QUERY);;
+ names.add(ExternalNativeQuery.NAMED_NATIVE_QUERY);;
+ names.add(ExternalNamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY);
+ names.add("named-stored-function-query");
+ names.add("named-plsql-stored-procedure-query");
+ names.add("named-plsql-stored-function-query");
+ names.add("oracle-object");
+ names.add("oracle-array");
+ names.add("plsql-record");
+ names.add("plsql-table");
+ names.add(ExternalSQLResultSetMapping.SQL_RESULT_SET_MAPPING);
+ names.add("query-redirectors");
names.add(EXCLUDE_DEFAULT_LISTENERS);
names.add(EXCLUDE_SUPERCLASS_LISTENERS);
names.add(AbstractEntityListener.ENTITY_LISTENERS);
@@ -248,6 +318,10 @@
names.add(POST_UPDATE);
names.add(POST_LOAD);
names.add(Property.PROPERTY);
+ names.add(ExternalAttributeOverride.ATTRIBUTE_OVERRIDE);
+ names.add(ExternalAssociationOverride.ASSOCIATION_OVERRIDE);
+ names.add("convert");
+ names.add("named-entity-graph");
names.add(Mapping.ATTRIBUTES);
return names;
}
@@ -302,10 +376,18 @@
return super.buildMapping(elementName);
}
- private MultitenancyPolicy buildMultitenant() {
+ private MultitenancyPolicy buildMultitenancyPolicy() {
return new MultitenancyPolicy(this);
}
+ private NamedNativeQuery buildNamedNativeQuery(int index) {
+ return new NamedNativeQuery(this, index);
+ }
+
+ private NamedQuery buildNamedQuery(int index) {
+ return new NamedQuery(this, index);
+ }
+
private OptimisticLocking buildOptimisticLocking() {
return new OptimisticLocking(this);
}
@@ -318,6 +400,10 @@
return new SequenceGenerator(this, -1);
}
+ private NamedStoredProcedureQuery buildStoredProcedureQuery(int index) {
+ return new NamedStoredProcedureQuery(this, index);
+ }
+
private TableGenerator buildTableGenerator() {
return new TableGenerator(this, -1);
}
@@ -395,7 +481,7 @@
@Override
public final ExternalCache getCache() {
- if (hasChild(Cache.CACHE)) {
+ if (hasCache()) {
return buildCache();
}
@@ -406,7 +492,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getCacheableTextRange() {
+ public final TextRange getCacheableTextRange() {
return getAttributeTextRange(CACHEABLE);
}
@@ -422,7 +508,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getCacheInterceptorClassNameTextRange() {
+ public final TextRange getCacheInterceptorClassNameTextRange() {
return getChildAttributeTextRange(CACHE_INTERCEPTOR, ExternalEmbeddable.CLASS);
}
@@ -459,7 +545,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getExcludesClassListenersTextRange() {
+ public final TextRange getExcludesDefaultListenersTextRange() {
return getChildTextRange(EXCLUDE_DEFAULT_LISTENERS);
}
@@ -467,7 +553,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getExcludesSuperClassListenersTextRange() {
+ public final TextRange getExcludesSuperclassListenersTextRange() {
return getChildTextRange(EXCLUDE_SUPERCLASS_LISTENERS);
}
@@ -483,7 +569,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getExistenceCheckingTypeTextRange() {
+ public final TextRange getExistenceCheckingTypeTextRange() {
return getAttributeTextRange(EXISTENCE_CHECKING);
}
@@ -512,7 +598,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getIdClassNameTextRange() {
+ public final TextRange getIdClassNameTextRange() {
return getChildAttributeTextRange(ID_CLASS, ExternalEmbeddable.CLASS);
}
@@ -528,10 +614,10 @@
* {@inheritDoc}
*/
@Override
- public ExternalMultitenancyPolicy getMultitenant() {
+ public final ExternalMultitenancyPolicy getMultitenancy() {
if (hasChild(MultitenancyPolicy.MULTITENANT)) {
- return buildMultitenant();
+ return buildMultitenancyPolicy();
}
return null;
@@ -541,7 +627,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getMultitenantTextRange() {
+ public final TextRange getMultitenancyTextRange() {
return getChildTextRange(MULTITENANT);
}
@@ -549,9 +635,35 @@
* {@inheritDoc}
*/
@Override
+ public final ExternalBasicNamedQuery getNamedQuery(int index) {
+
+ if (hasChild(NamedQuery.NAMED_QUERY, index)) {
+ return buildNamedQuery(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final ExternalNativeQuery getNativeQuery(int index) {
+
+ if (hasChild(NamedNativeQuery.NAMED_NATIVE_QUERY, index)) {
+ return buildNamedNativeQuery(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final ExternalOptimisticLocking getOptimisticLocking() {
- if (hasChild(OptimisticLocking.OPTIMISTIC_LOCKING)) {
+ if (hasOptimisticLocking()) {
return buildOptimisticLocking();
}
@@ -562,22 +674,6 @@
* {@inheritDoc}
*/
@Override
- public final String getParentClassName() {
- return getAttribute(PARENT_CLASS);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public TextRange getParentClassNameTextRange() {
- return getAttributeTextRange(PARENT_CLASS);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public final String getPostLoadMethod() {
return getChildAttribute(POST_LOAD, METHOD_NAME);
}
@@ -594,7 +690,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPostLoadMethodTextRange() {
+ public final TextRange getPostLoadMethodTextRange() {
return getChildTextNodeTextRange(POST_LOAD, ExternalEmbeddable.DESCRIPTION);
}
@@ -618,7 +714,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPostPersistMethodTextRange() {
+ public final TextRange getPostPersistMethodTextRange() {
return getChildTextNodeTextRange(POST_PERSIST, ExternalEmbeddable.DESCRIPTION);
}
@@ -642,7 +738,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPostRemoveMethodTextRange() {
+ public final TextRange getPostRemoveMethodTextRange() {
return getChildTextNodeTextRange(POST_REMOVE, ExternalEmbeddable.DESCRIPTION);
}
@@ -666,7 +762,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPostUpdateMethodTextRange() {
+ public final TextRange getPostUpdateMethodTextRange() {
return getChildTextNodeTextRange(POST_UPDATE, ExternalEmbeddable.DESCRIPTION);
}
@@ -690,7 +786,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPrePersistMethodTextRange() {
+ public final TextRange getPrePersistMethodTextRange() {
return getChildTextNodeTextRange(PRE_PERSIST, ExternalEmbeddable.DESCRIPTION);
}
@@ -714,7 +810,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPreRemoveMethodTextRange() {
+ public final TextRange getPreRemoveMethodTextRange() {
return getChildTextNodeTextRange(PRE_REMOVE, ExternalEmbeddable.DESCRIPTION);
}
@@ -738,7 +834,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getPreUpdateMethodTextRange() {
+ public final TextRange getPreUpdateMethodTextRange() {
return getChildTextNodeTextRange(PRE_UPDATE, ExternalEmbeddable.DESCRIPTION);
}
@@ -748,7 +844,7 @@
@Override
public final ExternalPrimaryKey getPrimaryKey() {
- if (hasChild(PrimaryKey.PRIMARY_KEY)) {
+ if (hasPrimaryKey()) {
return buildPrimaryKey();
}
@@ -759,7 +855,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getReadOnlyTextRange() {
+ public final TextRange getReadOnlyTextRange() {
return getAttributeTextRange(READ_ONLY);
}
@@ -767,9 +863,9 @@
* {@inheritDoc}
*/
@Override
- public SequenceGenerator getSequenceGenerator() {
+ public final SequenceGenerator getSequenceGenerator() {
- if (hasChild(SequenceGenerator.SEQUENCE_GENERATOR)) {
+ if (hasSequenceGenerator()) {
return buildSequenceGenerator();
}
@@ -780,9 +876,22 @@
* {@inheritDoc}
*/
@Override
- public TableGenerator getTableGenerator() {
+ public final ExternalNamedStoredProcedureQuery getStoredProcedureQuery(int index) {
- if (hasChild(TableGenerator.TABLE_GENERATOR)) {
+ if (hasChild(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY, index)) {
+ return buildStoredProcedureQuery(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final TableGenerator getTableGenerator() {
+
+ if (hasTableGenerator()) {
return buildTableGenerator();
}
@@ -793,6 +902,54 @@
* {@inheritDoc}
*/
@Override
+ public final boolean hasCache() {
+ return hasChild(Cache.CACHE);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasMultitenancy() {
+ return hasChild(MULTITENANT);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasOptimisticLocking() {
+ return hasChild(OptimisticLocking.OPTIMISTIC_LOCKING);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasPrimaryKey() {
+ return hasChild(PrimaryKey.PRIMARY_KEY);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasSequenceGenerator() {
+ return hasChild(SequenceGenerator.SEQUENCE_GENERATOR);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean hasTableGenerator() {
+ return hasChild(TableGenerator.TABLE_GENERATOR);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final Boolean isCacheable() {
return getBooleanAttribute(CACHEABLE);
}
@@ -801,16 +958,56 @@
* {@inheritDoc}
*/
@Override
- public Boolean isMultitenant() {
- return hasChild(MULTITENANT);
+ public final Boolean isReadOnly() {
+ return getBooleanAttribute(READ_ONLY);
}
/**
* {@inheritDoc}
*/
@Override
- public final Boolean isReadOnly() {
- return getBooleanAttribute(READ_ONLY);
+ public final List<ExternalNamedQuery> namedQueries() {
+
+ int count = namedQueriesSize();
+ List<ExternalNamedQuery> namedQueries = new ArrayList<ExternalNamedQuery>(count);
+
+ for (int index = 0; index < count; index++) {
+ namedQueries.add(buildNamedQuery(index));
+ }
+
+ return namedQueries;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final int namedQueriesSize() {
+ return getChildrenSize(NamedQuery.NAMED_QUERY);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final List<ExternalNativeQuery> nativeQueries() {
+
+ int count = nativeQueriesSize();
+ List<ExternalNativeQuery> nativeQueries = new ArrayList<ExternalNativeQuery>(count);
+
+ for (int index = 0; index < count; index++) {
+ nativeQueries.add(buildNamedNativeQuery(index));
+ }
+
+ return nativeQueries;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final int nativeQueriesSize() {
+ return getChildrenSize(NamedNativeQuery.NAMED_NATIVE_QUERY);
}
/**
@@ -844,8 +1041,8 @@
* {@inheritDoc}
*/
@Override
- public void removeMultiTenancy() {
- MultitenancyPolicy multitenant = buildMultitenant();
+ public final void removeMultiTenancy() {
+ MultitenancyPolicy multitenant = buildMultitenancyPolicy();
multitenant.removeSelf();
}
@@ -853,6 +1050,24 @@
* {@inheritDoc}
*/
@Override
+ public final void removeNamedQuery(int index) {
+ NamedQuery namedQuery = buildNamedQuery(index);
+ namedQuery.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void removeNativeQuery(int index) {
+ NamedNativeQuery namedNativeQuery = buildNamedNativeQuery(index);
+ namedNativeQuery.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final void removeOptimisticLocking() {
OptimisticLocking optimisticLocking = buildOptimisticLocking();
optimisticLocking.removeSelf();
@@ -871,6 +1086,33 @@
* {@inheritDoc}
*/
@Override
+ public final void removeSequenceGenerator() {
+ SequenceGenerator generator = buildSequenceGenerator();
+ generator.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void removeStoredProcedureQuery(int index) {
+ NamedStoredProcedureQuery storedProcedureQuery = buildStoredProcedureQuery(index);
+ storedProcedureQuery.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void removeTableGenerator() {
+ TableGenerator generator = buildTableGenerator();
+ generator.removeSelf();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public final void setCacheable(Boolean isCacheable) {
setAttribute(CACHEABLE, isCacheable);
}
@@ -887,8 +1129,8 @@
* {@inheritDoc}
*/
@Override
- public final void setExcludesClassListeners(Boolean excludeClassListeners) {
- if (excludeClassListeners == Boolean.TRUE) {
+ public final void setExcludesDefaultListeners(boolean excludeDefaultListeners) {
+ if (excludeDefaultListeners) {
addChild(EXCLUDE_DEFAULT_LISTENERS);
}
else {
@@ -900,8 +1142,8 @@
* {@inheritDoc}
*/
@Override
- public final void setExcludesSuperClassListeners(Boolean excludesSuperClassListeners) {
- if (excludesSuperClassListeners == Boolean.TRUE) {
+ public final void setExcludesSuperclassListeners(boolean excludesSuperClassListeners) {
+ if (excludesSuperClassListeners) {
addChild(EXCLUDE_SUPERCLASS_LISTENERS);
}
else {
@@ -937,14 +1179,6 @@
* {@inheritDoc}
*/
@Override
- public final void setParentClassName(String className) {
- setAttribute(PARENT_CLASS, className);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public final void setPostLoadMethod(String value) {
updateChildAttribute(POST_LOAD, METHOD_NAME, value);
}
@@ -1065,7 +1299,7 @@
* {@inheritDoc}
*/
@Override
- public final Boolean shouldExcludesClassListeners() {
+ public final boolean shouldExcludesDefaultListeners() {
return hasChild(EXCLUDE_DEFAULT_LISTENERS);
}
@@ -1073,7 +1307,31 @@
* {@inheritDoc}
*/
@Override
- public final Boolean shouldExcludesSuperClassListeners() {
+ public final boolean shouldExcludesSuperclassListeners() {
return hasChild(EXCLUDE_SUPERCLASS_LISTENERS);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final List<ExternalNamedStoredProcedureQuery> storedProcedureQueries() {
+
+ int count = storedProcedureQueriesSize();
+ List<ExternalNamedStoredProcedureQuery> storedProcedureQueries = new ArrayList<ExternalNamedStoredProcedureQuery>(count);
+
+ for (int index = 0; index < count; index++) {
+ storedProcedureQueries.add(buildStoredProcedureQuery(index));
+ }
+
+ return storedProcedureQueries;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final int storedProcedureQueriesSize() {
+ return getChildrenSize(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY);
+ }
}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
index 983e822..5069b94 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
@@ -237,7 +237,7 @@
Element element = getChild(getParent(), ATTRIBUTES);
if (element != null) {
- removeChild(element, index);
+ removeChild(element, getElementName(), index);
if (!hasAnyChildren(element)) {
remove(getParentElement(), element);
@@ -249,7 +249,7 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
+ public final void setAttributeType(String attributeType) {
setAttribute(ATTRIBUTE_TYPE, attributeType);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MultitenancyPolicy.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MultitenancyPolicy.java
index 7a79c04..a783a28 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MultitenancyPolicy.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MultitenancyPolicy.java
@@ -36,7 +36,7 @@
*
* @param parent The parent of this external form
*/
- public MultitenancyPolicy(MappedSuperClassEntity parent) {
+ public MultitenancyPolicy(MappedSuperclass parent) {
super(parent);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NoSqlJoinField.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NoSqlJoinField.java
index cad3bf5..6d6c8ca 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NoSqlJoinField.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NoSqlJoinField.java
@@ -47,7 +47,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
index 59e964b..024f153 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
@@ -316,7 +316,7 @@
* {@inheritDoc}
*/
@Override
- public void removeProperty(String name) {
+ public final void removeProperty(String name) {
Property property = (Property) getProperty(name);
property.removeSelf();
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
index d32e339..e6095d8 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
@@ -75,9 +75,10 @@
* {@inheritDoc}
*/
@Override
- public ExternalClassConverter addConverter() {
+ public ExternalClassConverter addConverter(String name) {
ClassConverter converter = buildConverter(-1);
converter.addSelf();
+ converter.setName(name);
return converter;
}
@@ -118,7 +119,7 @@
*/
@Override
public ExternalMappedSuperClass addMappedSuperClass(String className) {
- MappedSuperClassEntity mappedSuperclass = buildMappedSuperclass(-1);
+ MappedSuperclass mappedSuperclass = buildMappedSuperclass(-1);
mappedSuperclass.addSelf();
mappedSuperclass.setClassName(className);
return mappedSuperclass;
@@ -161,9 +162,10 @@
* {@inheritDoc}
*/
@Override
- public ExternalObjectTypeConverter addObjectTypeConverter() {
+ public ExternalObjectTypeConverter addObjectTypeConverter(String name) {
ObjectTypeConverter converter = buildObjectTypeConverter(-1);
converter.addSelf();
+ converter.setName(name);
return converter;
}
@@ -219,9 +221,10 @@
* {@inheritDoc}
*/
@Override
- public ExternalStructConverter addStructConverter() {
+ public ExternalStructConverter addStructConverter(String name) {
StructConverter converter = buildStructConverter(-1);
converter.addSelf();
+ converter.setName(name);
return converter;
}
@@ -240,9 +243,10 @@
* {@inheritDoc}
*/
@Override
- public ExternalTypeConverter addTypeConverter() {
+ public ExternalTypeConverter addTypeConverter(String name) {
TypeConverter converter = buildTypeConverter(-1);
converter.addSelf();
+ converter.setName(name);
return converter;
}
@@ -267,19 +271,39 @@
names.add(SCHEMA);
names.add(CATALOG);
names.add(ACCESS);
- names.add(ClassConverter.CONVERTER);
- names.add(TypeConverter.TYPE_CONVERTER);
- names.add(ObjectTypeConverter.OBJECT_TYPE_CONVERTER);
- names.add(StructConverter.STRUCT_CONVERTER);
- names.add(SequenceGenerator.SEQUENCE_GENERATOR);
- names.add(TableGenerator.TABLE_GENERATOR);
+ names.add("access-methods"); // EclipseLink
+ names.add(ExternalTenantDiscriminatorColumn.TENANT_DISCRIMINATOR_COLUMN); // EclipseLink
+ names.add(ClassConverter.CONVERTER); // EclipseLink - mixed converter
+ names.add(TypeConverter.TYPE_CONVERTER); // EclipseLink
+ names.add(ObjectTypeConverter.OBJECT_TYPE_CONVERTER); // EclipseLink
+ names.add("serialized-converter"); // EclipseLink
+ names.add(StructConverter.STRUCT_CONVERTER); // EclipseLink
+ names.add(SequenceGenerator.SEQUENCE_GENERATOR); // EclipseLink
+ names.add(TableGenerator.TABLE_GENERATOR); // EclipseLink
+ names.add("uuid-generator"); // EclipseLink
+ names.add("partitioning"); // EclipseLink
+ names.add("replication-partitioning"); // EclipseLink
+ names.add("round-robin-partitioning"); // EclipseLink
+ names.add("pinned-partitioning"); // EclipseLink
+ names.add("range-partitioning"); // EclipseLink
+ names.add("value-partitioning"); // EclipseLink
+ names.add("hash-partitioning"); // EclipseLink
+ names.add("union-partitioning"); // EclipseLink
names.add(NamedQuery.NAMED_QUERY);
names.add(NamedNativeQuery.NAMED_NATIVE_QUERY);
- names.add(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY);
+ names.add(NamedStoredProcedureQuery.NAMED_STORED_PROCEDURE_QUERY); // EclipseLink
+ names.add("named-stored-function-query"); // EclipseLink
+ names.add("named-plsql-stored-procedure-query"); // EclipseLink
+ names.add("named-plsql-stored-function-query"); // EclipseLink
+ names.add("oracle-object"); // EclipseLink
+ names.add("oracle-array"); // EclipseLink
+ names.add("plsql-record"); // EclipseLink
+ names.add("plsql-table"); // EclipseLink
names.add(SQLResultSetMapping.SQL_RESULT_SET_MAPPING);
- names.add(MappedSuperClassEntity.MAPPED_SUPERCLASS);
+ names.add(MappedSuperclass.MAPPED_SUPERCLASS);
names.add(Entity.ENTITY);
names.add(Embeddable.EMBEDDABLE);
+// names.add(ClassConverter.CONVERTER); // Generic JPA, we'll assume EclipseLink
return names;
}
@@ -291,8 +315,8 @@
return new Entity(this, index);
}
- private MappedSuperClassEntity buildMappedSuperclass(int index) {
- return new MappedSuperClassEntity(this, index);
+ private MappedSuperclass buildMappedSuperclass(int index) {
+ return new MappedSuperclass(this, index);
}
private NamedNativeQuery buildNamedNativeQuery(int index) {
@@ -617,7 +641,7 @@
@Override
public ExternalMappedSuperClass getMappedSuperClass(int index) {
- if (hasChild(MappedSuperClassEntity.MAPPED_SUPERCLASS, index)) {
+ if (hasChild(MappedSuperclass.MAPPED_SUPERCLASS, index)) {
return buildMappedSuperclass(index);
}
@@ -906,7 +930,7 @@
*/
@Override
public int mappedSuperClassesSize() {
- return getChildrenSize(MappedSuperClassEntity.MAPPED_SUPERCLASS);
+ return getChildrenSize(MappedSuperclass.MAPPED_SUPERCLASS);
}
/**
@@ -1035,7 +1059,7 @@
*/
@Override
public void removeMappedSuperClass(int index) {
- MappedSuperClassEntity entity = buildMappedSuperclass(index);
+ MappedSuperclass entity = buildMappedSuperclass(index);
entity.removeSelf();
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
index bd307de..8a7dd80 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
@@ -406,14 +406,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setMapKey(String mapKey) {
if (mapKey == null) {
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
index b6eafc5..3dd4791 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
@@ -36,7 +36,7 @@
*
* @param parent The parent of this external form
*/
- OptimisticLocking(MappedSuperClassEntity parent) {
+ OptimisticLocking(MappedSuperclass parent) {
super(parent);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnitEntityListener.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnitEntityListener.java
index 92c3c6c..e7aecf5 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnitEntityListener.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnitEntityListener.java
@@ -13,6 +13,7 @@
******************************************************************************/
package org.eclipse.persistence.tools.mapping.orm.dom;
+import java.util.Collections;
import java.util.List;
import org.w3c.dom.Element;
@@ -39,11 +40,20 @@
*/
@Override
public Element addSelf(String elementName, List<String> elementNamesOrder) {
- return getParent().addChildrenTree(
- PersistenceUnit.PERSISTENCE_UNIT_DEFAULTS,
- ENTITY_LISTENERS,
- ENTITY_LISTENER
- );
+
+ Element parentElement = getParent().getChild(PersistenceUnit.PERSISTENCE_UNIT_DEFAULTS);
+
+ if (parentElement == null) {
+ parentElement = getParent().addChild(PersistenceUnit.PERSISTENCE_UNIT_DEFAULTS);
+ }
+
+ Element element = getChild(parentElement, ENTITY_LISTENERS);
+
+ if (element == null) {
+ element = addChild(parentElement, ENTITY_LISTENERS);
+ }
+
+ return addChild(element, elementName, Collections.<String>emptyList());
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
index 9222165..82cf042 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
@@ -37,7 +37,7 @@
*
* @param parent The parent of this external form
*/
- PrimaryKey(MappedSuperClassEntity parent) {
+ PrimaryKey(MappedSuperclass parent) {
super(parent);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKeyJoinColumn.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKeyJoinColumn.java
index 0ed2a61..a864287 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKeyJoinColumn.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKeyJoinColumn.java
@@ -65,7 +65,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryTable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryTable.java
index dca999a..51269d1 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryTable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryTable.java
@@ -20,15 +20,9 @@
*
* @version 2.6
*/
-@SuppressWarnings("nls")
final class PrimaryTable extends Table {
/**
- * The node name used to store and retrieve the element encapsulated by this external form.
- */
- static final String TABLE = "table";
-
- /**
* Creates a new <code>EntityTable</code>.
*
* @param parent The parent of this external form
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Property.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Property.java
index 2490d2a..86abf47 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Property.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Property.java
@@ -63,7 +63,17 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Element getElement() {
+ return getChild(getParent(), getElementName(), index);
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/QueryHint.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/QueryHint.java
index 70aa0ea..90b2837 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/QueryHint.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/QueryHint.java
@@ -61,7 +61,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/RelationshipMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/RelationshipMapping.java
index 09d24d4..22d758d 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/RelationshipMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/RelationshipMapping.java
@@ -190,7 +190,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getCascadeTypeTextRange() {
+ public final TextRange getCascadeTypeTextRange() {
return getChildTextRange(CASCADE);
}
@@ -206,7 +206,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getFetchTypeTextRange() {
+ public final TextRange getFetchTypeTextRange() {
return getAttributeTextRange(FETCH);
}
@@ -222,7 +222,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getJoinFetchTypeTextRange() {
+ public final TextRange getJoinFetchTypeTextRange() {
return getChildTextNodeTextRange(JOIN_FETCH);
}
@@ -243,8 +243,8 @@
* {@inheritDoc}
*/
@Override
- public TextRange getOptionalTextRange() {
- return null;
+ public final TextRange getOptionalTextRange() {
+ return getAttributeTextRange(OPTIONAL);
}
/**
@@ -259,7 +259,7 @@
* {@inheritDoc}
*/
@Override
- public TextRange getTargetEntityNameTextRange() {
+ public final TextRange getTargetEntityNameTextRange() {
return getAttributeTextRange(TARGET_ENTITY);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
index d5e4d2f..6020702 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
@@ -96,7 +96,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
index 33e3b9e..1edd6a2 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
@@ -76,7 +76,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/StoredProcedureParameter.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/StoredProcedureParameter.java
index 82a379b..c8e5611 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/StoredProcedureParameter.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/StoredProcedureParameter.java
@@ -68,7 +68,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TransformationMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TransformationMapping.java
index 3a53464..50a533e 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TransformationMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TransformationMapping.java
@@ -201,14 +201,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setFetchType(FetchType type) {
setAttribute(FETCH, type);
}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/UniqueConstraint.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/UniqueConstraint.java
index 6f270c9..41ba7dd 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/UniqueConstraint.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/UniqueConstraint.java
@@ -51,7 +51,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VersionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VersionMapping.java
index d730fb5..249ee55 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VersionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VersionMapping.java
@@ -35,7 +35,7 @@
*
* @param parent The parent of this external form
*/
- VersionMapping(MappedSuperClassEntity parent) {
+ VersionMapping(MappedSuperclass parent) {
super(parent);
}
@@ -158,14 +158,6 @@
* {@inheritDoc}
*/
@Override
- public void setAttributeType(String attributeType) {
- setAttribute(ATTRIBUTE_TYPE, attributeType);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
@SuppressWarnings("null")
public void setColumn(String columnName) {
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/WriteTransfomer.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/WriteTransfomer.java
index db695a6..d0a4414 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/WriteTransfomer.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/WriteTransfomer.java
@@ -84,7 +84,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
index 317659b..eaf428d 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
@@ -92,7 +92,9 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- index = index(parent, child, elementName);
+ if (elementName == getElementName()) {
+ index = index(parent, child, elementName);
+ }
}
/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/Property.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/Property.java
index 03a99fd..d5bc297 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/Property.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/Property.java
@@ -13,6 +13,7 @@
******************************************************************************/
package org.eclipse.persistence.tools.mapping.persistence.dom;
+import java.util.Collections;
import java.util.List;
import org.eclipse.persistence.tools.mapping.AbstractExternalForm;
import org.eclipse.persistence.tools.mapping.ExternalProperty;
@@ -52,7 +53,14 @@
*/
@Override
public Element addSelf(String elementName, List<String> elementNamesOrder) {
- return addChildrenTree(getParent(), elementNamesOrder, ExternalPropertyHolder.PROPERTIES, PROPERTY);
+
+ Element element = getParent().getChild(ExternalPropertyHolder.PROPERTIES);
+
+ if (element == null) {
+ element = getParent().addChild(ExternalPropertyHolder.PROPERTIES);
+ }
+
+ return addChild(element, elementName, Collections.<String>emptyList());
}
/**
@@ -60,7 +68,7 @@
*/
@Override
protected void calculateInsertionIndex(Element parent, Element child, String elementName) {
- if (elementName == PROPERTY) {
+ if (elementName == getElementName()) {
index = index(parent, child, elementName);
}
}
diff --git a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ClassTools.java b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ClassTools.java
index f3f4f1b..2f7fe2c 100644
--- a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ClassTools.java
+++ b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ClassTools.java
@@ -282,14 +282,14 @@
* Return its result.
* Useful for invoking private, package, or protected methods.
*/
- public static Object execute(Class<?> javaClass, String methodName) {
+ public static <T> T execute(Class<?> javaClass, String methodName) {
return execute(javaClass, methodName, EMPTY_ARRAY, ObjectTools.EMPTY_OBJECT_ARRAY);
}
/**
* @see #execute(Class, String)
*/
- public static Object execute_(Class<?> javaClass, String methodName)
+ public static <T> T execute_(Class<?> javaClass, String methodName)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
return execute_(javaClass, methodName, EMPTY_ARRAY, ObjectTools.EMPTY_OBJECT_ARRAY);
@@ -300,14 +300,14 @@
* Return its result.
* Useful for invoking private, package, or protected methods.
*/
- public static Object execute(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument) {
+ public static <T> T execute(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument) {
return execute(javaClass, methodName, new Class[] {parameterType}, new Object[] {argument});
}
/**
* @see #execute(Class, String, Class, Object)
*/
- public static Object execute_(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument)
+ public static <T> T execute_(Class<?> javaClass, String methodName, Class<?> parameterType, Object argument)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
return execute_(javaClass, methodName, new Class[] {parameterType}, new Object[] {argument});
@@ -318,7 +318,7 @@
* Return its result.
* Useful for invoking private, package, or protected methods.
*/
- public static Object execute(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
+ public static <T> T execute(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
try {
return execute_(javaClass, methodName, parameterTypes, arguments);
} catch (NoSuchMethodException ex) {
@@ -333,10 +333,11 @@
/**
* @see #execute(Class, String, Class[], Object[])
*/
- public static Object execute_(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments)
+ @SuppressWarnings("unchecked")
+ public static <T> T execute_(Class<?> javaClass, String methodName, Class<?>[] parameterTypes, Object[] arguments)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
- return staticMethod_(javaClass, methodName, parameterTypes).invoke(null, arguments);
+ return (T) staticMethod_(javaClass, methodName, parameterTypes).invoke(null, arguments);
}
/**
diff --git a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ObjectTools.java b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ObjectTools.java
index 80380ba..9cd7dde 100644
--- a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ObjectTools.java
+++ b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/ObjectTools.java
@@ -258,7 +258,7 @@
* Useful for accessing private, package, or protected fields.
* @see Field#get(Object)
*/
- public static Object get(Object object, String fieldName) {
+ public static <T> T get(Object object, String fieldName) {
try {
return get_(object, fieldName);
} catch (NoSuchFieldException ex) {
@@ -271,10 +271,11 @@
/**
* @see #get(Object, String)
*/
- public static Object get_(Object object, String fieldName)
+ @SuppressWarnings("unchecked")
+ public static <T> T get_(Object object, String fieldName)
throws NoSuchFieldException, IllegalAccessException
{
- return field_(object, fieldName).get(object);
+ return (T) field_(object, fieldName).get(object);
}
/**
@@ -337,7 +338,7 @@
* Return its result.
* Useful for invoking private, package, or protected methods.
*/
- public static Object execute(Object object, String methodName) {
+ public static <T> T execute(Object object, String methodName) {
return execute(object, methodName, ClassTools.EMPTY_ARRAY, EMPTY_OBJECT_ARRAY);
}
@@ -362,7 +363,7 @@
/**
* @see #execute(Object, String, Class, Object)
*/
- public static Object execute_(Object object, String methodName, Class<?> parameterType, Object argument)
+ public static <T> T execute_(Object object, String methodName, Class<?> parameterType, Object argument)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
return execute_(object, methodName, new Class[] {parameterType}, new Object[] {argument});
@@ -373,7 +374,7 @@
* Return its result.
* Useful for invoking private, package, or protected methods.
*/
- public static Object execute(Object object, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
+ public static <T> T execute(Object object, String methodName, Class<?>[] parameterTypes, Object[] arguments) {
return execute(object, method(object, methodName, parameterTypes), arguments);
}
@@ -382,9 +383,10 @@
* Return its result.
* Useful for invoking cached methods.
*/
- public static Object execute(Object receiver, Method method, Object[] arguments) {
+ @SuppressWarnings("unchecked")
+ public static <T> T execute(Object receiver, Method method, Object[] arguments) {
try {
- return method.invoke(receiver, arguments);
+ return (T) method.invoke(receiver, arguments);
} catch (IllegalAccessException ex) {
throw new RuntimeException(ex + StringTools.CR + method, ex);
} catch (InvocationTargetException ex) {
@@ -395,10 +397,11 @@
/**
* @see #execute(Object, String, Class[], Object[])
*/
- public static Object execute_(Object object, String methodName, Class<?>[] parameterTypes, Object[] arguments)
+ @SuppressWarnings("unchecked")
+ public static <T> T execute_(Object object, String methodName, Class<?>[] parameterTypes, Object[] arguments)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
- return method_(object, methodName, parameterTypes).invoke(object, arguments);
+ return (T) method_(object, methodName, parameterTypes).invoke(object, arguments);
}
/**