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/09/27 20:31:03 UTC

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

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) {