Revision: 3729
Author: [email protected]
Date: Wed Jul 14 07:55:26 2010
Log: Changed how the project loads UDTs, and made sure that newly created tables have unique names.
http://code.google.com/p/power-architect/source/detail?r=3729

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/ProjectLoader.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/action/CreateTableAction.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ProjectLoader.java Mon Jun 28 11:21:31 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ProjectLoader.java Wed Jul 14 07:55:26 2010
@@ -62,6 +62,7 @@
 import ca.sqlpower.sqlobject.SQLRelationship;
 import ca.sqlpower.sqlobject.SQLSchema;
 import ca.sqlpower.sqlobject.SQLTable;
+import ca.sqlpower.sqlobject.SQLTypePhysicalPropertiesProvider;
 import ca.sqlpower.sqlobject.UserDefinedSQLType;
 import ca.sqlpower.sqlobject.SQLIndex.AscendDescend;
 import ca.sqlpower.sqlobject.SQLIndex.Column;
@@ -70,12 +71,16 @@
 import ca.sqlpower.sqlobject.SQLRelationship.UpdateDeleteRule;
 import ca.sqlpower.swingui.SPSUtils;
 import ca.sqlpower.util.BrowserUtil;
+import ca.sqlpower.util.DefaultUserPrompterFactory;
 import ca.sqlpower.util.UserPrompter;
 import ca.sqlpower.util.UserPrompter.UserPromptOptions;
 import ca.sqlpower.util.UserPrompter.UserPromptResponse;
 import ca.sqlpower.util.UserPrompterFactory.UserPromptType;
 import ca.sqlpower.xml.UnescapingSaxParser;

+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+
 public class ProjectLoader {

     /*
@@ -304,6 +309,27 @@
                 }

             }
+
+            /*
+             * In old versions of the architect, user defined types weren't
+ * available, so all columns stored their type as a JDBC type code. + * For all columns in the playpen, we need to hook up upstream user
+             * defined types.
+             */
+ ListMultimap<String, SQLColumn> columns = ArrayListMultimap.create(); + for (SQLTable table : getSession().getTargetDatabase().getTables()) { + for (SQLColumn column : table.getChildren(SQLColumn.class)) {
+                    SQLColumn sourceColumn = column.getSourceColumn();
+ if (sourceColumn != null && sourceColumn.getPlatform() != null) { + columns.put(column.getSourceColumn().getPlatform(), column);
+                    } else {
+ columns.put(SQLTypePhysicalPropertiesProvider.GENERIC_PLATFORM, column);
+                    }
+                }
+            }
+            for (String platform : columns.keySet()) {
+ SQLColumn.assignTypes(columns.get(platform), dataSources, platform, new DefaultUserPrompterFactory());
+            }

             setModified(false);
         } finally {
@@ -722,19 +748,6 @@
             if (sqlTypeUUID != null ){
                 sqlType = session.findSQLTypeByUUID(sqlTypeUUID);
             }
-
- // If userDefinedTypeUUID isn't in the file, probably because it's - // from an older version... or if the userDefinedTypeUUID doesn't
-            // exist in this system, then try to guess it by JDBC type.
-            if (sqlTypeUUID == null || sqlType == null) {
-                String type = attributes.getValue("type");
-                int jdbcType = Integer.valueOf(type);
- // TODO: If a session contains more than one UserDefinedSQLType - // (most likely when loading into a server) with the same JDBC
-                // type, then it may not pick the 'right' one.
-                sqlType = session.findSQLTypeByJDBCType(jdbcType);
-            }
-
             col.getUserDefinedSQLType().setUpstreamType(sqlType);

             LoadSQLObjectAttributes(col, attributes);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/action/CreateTableAction.java Mon Jul 12 08:21:11 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/action/CreateTableAction.java Wed Jul 14 07:55:26 2010
@@ -57,14 +57,22 @@
        }

        public void actionPerformed(ActionEvent evt) {
-               getPlaypen().fireCancel();
+               PlayPen playpen = getPlaypen();
+        playpen.fireCancel();
                SQLTable t = null;
                t = new SQLTable();
                t.initFolders(true);
-               t.setName(NEW_TABLE_NAME); //$NON-NLS-1$
-
-               TablePane tp = new TablePane(t, getPlaypen().getContentPane());
-               TablePlacer tablePlacer = new TablePlacer(getPlaypen(), tp);
+
+               playpen.resetTableNames();
+               int suffix = playpen.uniqueTableSuffix(NEW_TABLE_NAME);
+               if (suffix != 0) {
+                   t.setName(NEW_TABLE_NAME + "_" + suffix);
+               } else {
+                   t.setName(NEW_TABLE_NAME);
+               }
+
+               TablePane tp = new TablePane(t, playpen.getContentPane());
+               TablePlacer tablePlacer = new TablePlacer(playpen, tp);
                tablePlacer.dirtyup();
        }

@@ -118,9 +126,9 @@
                 }
             };

-            ((TableEditPanel) editPanel).setNameText(NEW_TABLE_NAME);
- ((TableEditPanel) editPanel).setPhysicalNameText(NEW_TABLE_NAME); - ((TableEditPanel) editPanel).setPkNameText(NEW_TABLE_NAME + "_pk"); + ((TableEditPanel) editPanel).setNameText(tp.getModel().getName()); + ((TableEditPanel) editPanel).setPhysicalNameText(tp.getModel().getPhysicalName()); + ((TableEditPanel) editPanel).setPkNameText(tp.getModel().getName() + "_pk");

             return editPanel;
         }

Reply via email to