Revision: 3665
Author: [email protected]
Date: Mon Jul  5 08:11:37 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458

Created an object renderer and comaprator for objects that have been criticized to allow the display tables to be sorted without error.
http://code.google.com/p/power-architect/source/detail?r=3665

Added:
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismObjectComparator.java /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismObjectRenderer.java
Modified:
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismTableModel.java

=======================================
--- /dev/null
+++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismObjectComparator.java Mon Jul 5 08:11:37 2010
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, SQL Power Group Inc.
+ *
+ * This file is part of SQL Power Architect.
+ *
+ * SQL Power Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SQL Power Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.swingui.critic;
+
+import java.util.Comparator;
+import java.util.Locale;
+
+/**
+ * Compares two objects by name. Normally used by the criticism UI but could
+ * really be used anywhere.
+ */
+public class CriticismObjectComparator implements Comparator<Object> {
+
+    public int compare(Object t1, Object t2) {
+ // if t1 and t2 refer to the same object, or are both null, then they're equal
+        if (t1 == t2) {
+            return 0;
+        } else if (t1 == null) {
+            return -1;
+        } else if (t2 == null) {
+            return 1;
+        } else {
+            String n1 = CriticismObjectRenderer.getVisibleText(t1);
+            String n2 = CriticismObjectRenderer.getVisibleText(t2);
+            if (n1 != null) n1 = n1.toLowerCase(Locale.getDefault());
+            if (n2 != null) n2 = n2.toLowerCase(Locale.getDefault());
+            if (n1 == n2) return 0;
+            else if (n1 == null) return -1;
+            else if (n2 == null) return 1;
+            else return n1.compareTo(n2);
+        }
+    }
+
+}
=======================================
--- /dev/null
+++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismObjectRenderer.java Mon Jul 5 08:11:37 2010
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, SQL Power Group Inc.
+ *
+ * This file is part of SQL Power Architect.
+ *
+ * SQL Power Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SQL Power Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.swingui.critic;
+
+import java.awt.Component;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import ca.sqlpower.object.SPObject;
+import ca.sqlpower.sqlobject.SQLObject;
+
+/**
+ * Renderer for Objects displayed in the critic table.
+ */
+public class CriticismObjectRenderer extends DefaultTableCellRenderer {
+
+    @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+            int row, int column) {
+        return new JLabel(getVisibleText(value));
+    }
+
+    /**
+     * Returns the best guess at decent user-readable text for a criticized
+     * object.
+     */
+    public static String getVisibleText(Object value) {
+        if (value instanceof SQLObject) {
+            String name = ((SQLObject) value).getShortDisplayName();
+            if (name == null || name.trim().length() == 0) {
+                ((SQLObject) value).getName();
+            }
+            return name;
+        } else if (value instanceof SPObject) {
+            return ((SPObject) value).getName();
+        } else {
+            return value.toString();
+        }
+    }
+}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java Wed Jun 30 09:06:21 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java Mon Jul 5 08:11:37 2010
@@ -33,8 +33,11 @@
 import ca.sqlpower.architect.ddl.critic.CriticismBucket;
 import ca.sqlpower.architect.ddl.critic.QuickFix;
 import ca.sqlpower.architect.ddl.critic.CriticAndSettings.Severity;
+import ca.sqlpower.architect.diff.SQLObjectComparator;
 import ca.sqlpower.architect.swingui.ArchitectSwingSession;
+import ca.sqlpower.object.SPObject;
 import ca.sqlpower.swingui.SPSUtils;
+import ca.sqlpower.swingui.table.FancyExportableJTable;

 public class CriticSwingUtil {

@@ -64,10 +67,16 @@
      */
public static JTable createCriticTable(ArchitectSwingSession session, CriticismBucket bucket) { final CriticismTableModel tableModel = new CriticismTableModel(session, bucket);
-        final JTable errorTable = new JTable(tableModel);
+ final FancyExportableJTable errorTable = new FancyExportableJTable(tableModel); errorTable.setDefaultRenderer(Severity.class, new SeverityTableCellRenderer()); final QuickFixListCellRenderer renderer = new QuickFixListCellRenderer();
         errorTable.setDefaultRenderer(List.class, renderer);
+ errorTable.setDefaultRenderer(Object.class, new CriticismObjectRenderer());
+
+ //Sorts the objects by their name. This can be more fancy if we desire in
+        //the future but works as a decent default for now.
+ errorTable.getTableModelSortDecorator().setColumnComparator(SPObject.class,
+                new SQLObjectComparator());
         errorTable.addMouseListener(new MouseListener() {

             public void mouseReleased(MouseEvent e) {
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismTableModel.java Wed Jun 30 09:06:21 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticismTableModel.java Mon Jul 5 08:11:37 2010
@@ -76,7 +76,7 @@
         if (columnIndex == 0) {
             return Severity.class;
         } else if (columnIndex == 1) {
-            return String.class;
+            return Object.class;
         } else if (columnIndex == 2) {
             return String.class;
         } else if (columnIndex == 3) {

Reply via email to