Author: tomdz
Date: Thu May 18 07:20:54 2006
New Revision: 407559
URL: http://svn.apache.org/viewvc?rev=407559&view=rev
Log:
Added new change object for the change of the column order
Added:
db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnOrderChange.java
Added:
db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnOrderChange.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnOrderChange.java?rev=407559&view=auto
==============================================================================
---
db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnOrderChange.java
(added)
+++
db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnOrderChange.java
Thu May 18 07:20:54 2006
@@ -0,0 +1,81 @@
+package org.apache.ddlutils.alteration;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.apache.ddlutils.model.Column;
+import org.apache.ddlutils.model.Database;
+import org.apache.ddlutils.model.Table;
+
+/**
+ * Represents the change of the order of the columns of a table.
+ *
+ * @version $Revision: $
+ */
+public class ColumnOrderChange extends TableChangeImplBase
+{
+ /** The map containing the new positions keyed by the source columns. */
+ private Map _newPositions;
+
+ /**
+ * Creates a new change object.
+ *
+ * @param table The table whose primary key is to be changed
+ * @param newPositions The map containing the new positions keyed by the
source columns
+ */
+ public ColumnOrderChange(Table table, Map newPositions)
+ {
+ super(table);
+ _newPositions = newPositions;
+ }
+
+ /**
+ * Returns the new position of the given source column.
+ *
+ * @return The new position or -1 if no position is marked for the column
+ */
+ public int getNewPosition(Column sourceColumn)
+ {
+ Integer newPos = (Integer)_newPositions.get(sourceColumn);
+
+ return newPos == null ? -1 : newPos.intValue();
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void apply(Database database)
+ {
+ Table table = database.findTable(getChangedTable().getName());
+ ArrayList newColumns = new ArrayList(table.getColumnCount());
+
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
+ {
+ Column column = table.getColumn(idx);
+ int newPos = getNewPosition(column);
+
+ newColumns.set(newPos < 0 ? idx : newPos, column);
+ }
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
+ {
+ table.removeColumn(idx);
+ }
+ table.addColumns(newColumns);
+ }
+}