You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2010/10/14 00:41:59 UTC
svn commit: r1022316 - in /openjpa/tools/trunk/openjpa-tools/src/main:
java/org/apache/openjpa/tools/MigrationTool.java
java/org/apache/openjpa/tools/action/Actions.java
resources/META-INF/migration-actions.xml
resources/META-INF/migration-actions.xsd
Author: ppoddar
Date: Wed Oct 13 22:41:58 2010
New Revision: 1022316
URL: http://svn.apache.org/viewvc?rev=1022316&view=rev
Log:
OPENJPA-1825: handle not-null translation
Modified:
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/action/Actions.java
openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml
openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xsd
Modified: openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java?rev=1022316&r1=1022315&r2=1022316&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java Wed Oct 13 22:41:58 2010
@@ -61,6 +61,7 @@ import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.w3c.dom.UserDataHandler;
/**
@@ -284,8 +285,8 @@ public class MigrationTool {
void addComments(Element e) {
String[] comments = {
- "Generated by OpenJPA Migration Tool",
- "Generated on : " + new Date()
+ " Generated by OpenJPA Migration Tool ",
+ " Generated on : " + new Date() + " "
};
Node refChild = e.getFirstChild();
for (String c : comments) {
@@ -296,8 +297,7 @@ public class MigrationTool {
/**
* Execute actions associated with the given source element. The source element is associated
- * with a sequence of actions for its attributes and sub-elements while {@link #buildparsing the input
- * rules.
+ * with a sequence of actions for its attributes and sub-elements.
*
* @param target the target document to be populated
* @param source the source DOM element to be migrated.
Modified: openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/action/Actions.java
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/action/Actions.java?rev=1022316&r1=1022315&r2=1022316&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/action/Actions.java (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/action/Actions.java Wed Oct 13 22:41:58 2010
@@ -354,7 +354,7 @@ public interface Actions {
String targetAttrName;
String valueCondition;
Map<String, String> borrow = new HashMap<String, String>();
- private Map<String, String> _valueMap = new HashMap<String, String>();
+ private Map<String,Map<String, String>> _valueMap = new HashMap<String, Map<String, String>>();
public PromoteAttr(Element e) {
super(Code.PROMOTE_ATTR, e);
@@ -363,17 +363,13 @@ public interface Actions {
targetAttrName = e.getAttribute("as");
valueCondition = e.getAttribute("if");
- NodeList values = e.getElementsByTagName("consume-attr");
- int M = values.getLength();
+ _valueMap.put(sourceName, createMapValueEntries(e));
+ NodeList consumedAttrs = e.getElementsByTagName("consume-attr");
+ int M = consumedAttrs.getLength();
for (int i = 0; i < M; i++) {
- Element item = (Element) values.item(i);
- borrow.put(item.getAttribute(FROM), item.getAttribute(TO));
- }
- values = e.getElementsByTagName("map-value");
- M = values.getLength();
- for (int i = 0; i < M; i++) {
- Element item = (Element) values.item(i);
- _valueMap.put(item.getAttribute(FROM), item.getAttribute(TO));
+ Element consumedAttr = (Element) consumedAttrs.item(i);
+ borrow.put(consumedAttr.getAttribute(FROM), consumedAttr.getAttribute(TO));
+ _valueMap.put(consumedAttr.getNodeName(), createMapValueEntries(consumedAttr));
}
}
@@ -387,19 +383,25 @@ public interface Actions {
consumedAttrs.add(sourceName);
Element newElement = targetDoc.createElement(targetName);
if (isEmpty(targetAttrName)) {
- boolean hasMappedValue = _valueMap.containsKey(sourceAttrValue);
- String targetAttrValue = hasMappedValue
- ? _valueMap.get(sourceAttrValue) : sourceAttrValue;
- if (hasMappedValue || !conditional) {
- newElement.setTextContent(targetAttrValue);
- }
+ Map<String,String> mappedValues = _valueMap.get(sourceName);
+ boolean hasMappedValue = mappedValues.containsKey(sourceAttrValue);
+ String targetAttrValue = hasMappedValue ? mappedValues.get(sourceAttrValue) : sourceAttrValue;
+ if (hasMappedValue || !conditional) {
+ newElement.setTextContent(targetAttrValue);
+ }
} else {
newElement.setAttribute(targetAttrName, sourceAttrValue);
-
for (Map.Entry<String, String> entry : borrow.entrySet()) {
- if (source.hasAttribute(entry.getKey())) {
- consumedAttrs.add(entry.getKey());
- newElement.setAttribute(entry.getValue(), source.getAttribute(entry.getKey()));
+ String borrowedAttrName = entry.getKey();
+ if (source.hasAttribute(borrowedAttrName)) {
+ logger.trace(_loc.get("attr-consume", this, borrowedAttrName));
+ consumedAttrs.add(borrowedAttrName);
+ String borrowedAttrValue = source.getAttribute(borrowedAttrName);
+ Map<String,String> mappedValues = _valueMap.get(sourceName);
+ boolean hasMappedValue = mappedValues.containsKey(borrowedAttrValue);
+ String targetAttrValue = hasMappedValue ? mappedValues.get(borrowedAttrValue)
+ : borrowedAttrValue;
+ newElement.setAttribute(entry.getValue(), targetAttrValue);
}
}
}
@@ -408,6 +410,32 @@ public interface Actions {
return null;
}
}
+
+ /**
+ * Create a map of <code>{x1:y1, x2:y2} </code> given a parent node as below:
+ * <pre>
+ * <parent ....>
+ * <map-value from="x1" to="y1"/>
+ * <map-value from="x2" to="y2"/>
+ * </parent>
+ * </pre>
+ * @param element
+ * @return
+ */
+ Map<String,String> createMapValueEntries(Element parent) {
+ Map<String,String> map = new HashMap<String, String>();
+ NodeList mappedEntries = parent.getElementsByTagName("map-value");
+ int N = mappedEntries.getLength();
+ for (int j = 0; j < N; j++) {
+ Element mappedEntry = (Element) mappedEntries.item(j);
+ map.put(mappedEntry.getAttribute(FROM), mappedEntry.getAttribute(TO));
+ }
+ return map;
+ }
+
+ String getMappedValue(String key, Map<String,String> map, String def) {
+ return map.containsKey(key) ? map.get(key) : def;
+ }
}
public static class IgnoreAttr extends Abstract {
Modified: openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml?rev=1022316&r1=1022315&r2=1022316&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml Wed Oct 13 22:41:58 2010
@@ -42,8 +42,8 @@
<!-- inserts a dummy node attributes -->
<actions for="class">
<rename-node to="entity"/>
- <rename-attr from="name" to="class"/>
<promote-attr from="table" to="table" as="name"/>
+ <rename-attr from="name" to="class"/>
<ignore-attr name="dynamic-update" warn="false"/>
<ignore-attr name="dynamic-insert" warn="false"/>
<ignore-attr name="mutable" warn="false"/>
@@ -61,31 +61,30 @@
<actions for="id">
<rename-node to="id"/>
- <rename-attr from="name" to="name"/>
<promote-attr from="column" to="column" as="name">
<consume-attr from="length" to="length"/>
<consume-attr from="unique" to="unique"/>
</promote-attr>
+ <rename-attr from="name" to="name"/>
<ignore-attr name="type" warn="false"/>
</actions>
<actions for="property">
<rename-node to="basic"/>
- <rename-attr from="name" to="name"/>
- <rename-attr from="lazy" to="fetch">
- <map-value from="true" to="LAZY"/>
- <map-value from="false" to="EAGER"/>
- </rename-attr>
-
- <rename-attr from="not-null" to="optional">
- <map-value from="true" to="false"/>
- <map-value from="false" to="true"/>
- </rename-attr>
<promote-attr from="column" to="column" as="name">
<consume-attr from="length" to="length"/>
<consume-attr from="unique" to="unique"/>
+ <consume-attr from="not-null" to="nullable">
+ <map-value from="true" to="false"/>
+ <map-value from="false" to="true"/>
+ </consume-attr>
</promote-attr>
<promote-attr from="type" to="lob" if="text"/>
+ <rename-attr from="name" to="name"/>
+ <rename-attr from="lazy" to="fetch">
+ <map-value from="true" to="LAZY"/>
+ <map-value from="false" to="EAGER"/>
+ </rename-attr>
<ignore-attr name="type" warn="false"/>
<ignore-attr name="length" warn="false"/>
<ignore-attr name="generated" warn="false"/>
@@ -104,15 +103,15 @@
<actions for="many-to-one">
<rename-node to="many-to-one"/>
+ <promote-attr from="column" to="join-column" as="name">
+ <consume-attr from="length" to="length"/>
+ </promote-attr>
<rename-attr from="name" to="name"/>
<rename-attr from="class" to="target-entity"/>
<rename-attr from="not-null" to="optional">
<map-value from="true" to="false"/>
<map-value from="false" to="true"/>
</rename-attr>
- <promote-attr from="column" to="join-column" as="name">
- <consume-attr from="length" to="length"/>
- </promote-attr>
<rename-child-node from="column" to="join-column">
<ignore-attr name="index"/>
</rename-child-node>
Modified: openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xsd
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xsd?rev=1022316&r1=1022315&r2=1022316&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xsd (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xsd Wed Oct 13 22:41:58 2010
@@ -55,8 +55,8 @@
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="replace-node" type="replace-node-type"/>
<xsd:element maxOccurs="1" minOccurs="0" name="rename-node" type="rename-node-type"/>
- <xsd:element maxOccurs="unbounded" minOccurs="0" name="rename-attr" type="rename-attr-type"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="promote-attr" type="promote-attr-type"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="rename-attr" type="rename-attr-type"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="rename-child-node" type="rename-child-node-type"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="ignore-attr" type="ignore-attr-type"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="ignore-node" type="ignore-node-type"/>