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>
+         *   &lt;parent ....>
+         *     &lt;map-value from="x1" to="y1"/>
+         *     &lt;map-value from="x2" to="y2"/>
+         *   &lt;/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"/>