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"/>


Reply via email to