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