Author: ppoddar
Date: Mon Sep 27 18:31:02 2010
New Revision: 1001858

URL: http://svn.apache.org/viewvc?rev=1001858&view=rev
Log:
Add attribute order

Modified:
    
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/MigrationTool.java
    
openjpa/tools/trunk/openjpa-tools/src/main/resources/META-INF/migration-actions.xml
    
openjpa/tools/trunk/openjpa-tools/src/test/java/org/apache/openjpa/tools/TestMigratedOutput.java

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=1001858&r1=1001857&r2=1001858&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
 Mon Sep 27 18:31:02 2010
@@ -20,11 +20,14 @@ package org.apache.openjpa.tools;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -118,7 +121,6 @@ public class MigrationTool  {
      */
     private Map<String, List<Actions>> actionMap = new HashMap<String, 
List<Actions>>();
     
-    
     /**
      * Standard JDK logger with a specialized formatter to augment location 
information
      * in the input document from the SAX parser.
@@ -176,7 +178,19 @@ public class MigrationTool  {
     }
     
     public void setOutput(String output) {
-       _output = Files.getOutputStream(output, 
Thread.currentThread().getContextClassLoader());
+       try {
+               _output = Files.getOutputStream(output, 
Thread.currentThread().getContextClassLoader());
+       } catch (Exception ex) {
+               try {
+                       String[] paths = output.split(File.separator);
+                       File file = new File(output);
+                       file.mkdirs();
+                       file.createNewFile();
+                       _output = new FileOutputStream(file);
+               } catch (IOException e) {
+                       throw new RuntimeException("Error creating [" + output 
+ "]", e);
+               }
+       }
     }
     
     public void setError(String errorOutput) throws IOException {
@@ -328,13 +342,13 @@ public class MigrationTool  {
                     root.setAttributeNode((Attr)newNode);
                     break;
                 case INSERT_NODE:
-                    root.appendChild(newNode);
+                       insertNode(root, newNode);
                     root = (Element)newNode;
                     break;
                 case PROMOTE_ATTR:
                 case RENAME_CHILD_NODE:
                 case SPLIT_NODE:
-                    root.appendChild(newNode);
+                       insertNode(root, newNode);
                     break;
                 case IGNORE_ATTR:
                 case IGNORE_NODE:
@@ -353,7 +367,7 @@ public class MigrationTool  {
             }
             Element newNode = executeActions(target, sub, root);
             if (newNode != null) {
-                root.appendChild(newNode);
+               insertNode(root, newNode);
             } 
         }
         
@@ -401,4 +415,42 @@ public class MigrationTool  {
             throw new RuntimeException(this + " can not convert [" + v + "] 
into an input stream", e);
         }
     }
+    
+    /**
+     * Inserts a new child to the parent in specific order.
+     */
+    private void insertNode(Node parent, Node newChild) {
+       NodeList children = parent.getChildNodes();
+       for (int i = 0; i < children.getLength(); i++) {
+               Node refChild = children.item(i);
+               if (compare(newChild, refChild) < 0) {
+                       parent.insertBefore(newChild, refChild);
+                       return;
+               }
+       }
+               parent.appendChild(newChild);
+    }
+    
+    private int compare(Node n1, Node n2) {
+       return getNodeOrder(n1) - getNodeOrder(n2);
+    }
+    
+    private int getNodeOrder(Node n) {
+       int i = _attributeOrder.indexOf(n.getNodeName());
+       if (i == -1) {
+               return 0;
+       }
+       return i;
+    }
+    
+    private static List<String> _attributeOrder = Arrays.asList(
+           "basic",
+           "version",
+           "many-to-one",
+           "one-to-many",
+           "one-to-one",
+           "many-to-many",
+           "element-collection",
+           "embedded",
+           "transient");
 }

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=1001858&r1=1001857&r2=1001858&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
 Mon Sep 27 18:31:02 2010
@@ -117,6 +117,16 @@
        </rename-child-node>
 </actions>
 
+<actions for="one-to-one">
+    <rename-node to="one-to-one"/>
+    <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>
+</actions>
+
 <actions for="column">
     <rename-node to="column"/>
     <rename-attr from="name" to="name"/>

Modified: 
openjpa/tools/trunk/openjpa-tools/src/test/java/org/apache/openjpa/tools/TestMigratedOutput.java
URL: 
http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/test/java/org/apache/openjpa/tools/TestMigratedOutput.java?rev=1001858&r1=1001857&r2=1001858&view=diff
==============================================================================
--- 
openjpa/tools/trunk/openjpa-tools/src/test/java/org/apache/openjpa/tools/TestMigratedOutput.java
 (original)
+++ 
openjpa/tools/trunk/openjpa-tools/src/test/java/org/apache/openjpa/tools/TestMigratedOutput.java
 Mon Sep 27 18:31:02 2010
@@ -54,7 +54,7 @@ public class TestMigratedOutput extends 
     
     
     public void testSampleIsJPACompliant() {
-        migrateAndValidate("sample");
+        migrateAndValidate(System.getProperty("sample","sample"));
     }
     
     void migrateAndValidate(String type) {


Reply via email to