Revision: 3657
Author: [email protected]
Date: Tue Jun 29 13:26:19 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458
Added a quick fix to the physical name critic to let users change the name
from the quick fix. This lets the critic system replace all of the existing
functionality of the current quick fix system.
http://code.google.com/p/power-architect/source/detail?r=3657
Added:
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/SeverityTableCellRenderer.java
Modified:
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticAndSettings.java
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticPanel.java
=======================================
--- /dev/null
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/SeverityTableCellRenderer.java
Tue Jun 29 13:26:19 2010
@@ -0,0 +1,53 @@
+/*
+ * 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 javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import ca.sqlpower.architect.ddl.critic.CriticAndSettings.Severity;
+
+/**
+ * This table cell renderer works the same as the default cell renderer
except
+ * it shows nice error and warning icons when it renders a {...@link Severity}
+ * object.
+ */
+public class SeverityTableCellRenderer extends DefaultTableCellRenderer {
+
+ public java.awt.Component
getTableCellRendererComponent(javax.swing.JTable table,
+ Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
+ if (value instanceof Severity) {
+ return new JLabel(getIcon((Severity) value));
+ } else {
+ return this.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
+ }
+ }
+
+ private ImageIcon getIcon(Severity severity) {
+ if (severity == Severity.ERROR) {
+ return CriticSwingUtil.ERROR_ICON;
+ } else if (severity == Severity.WARNING) {
+ return CriticSwingUtil.WARNING_ICON;
+ } else {
+ return null;
+ }
+ }
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticAndSettings.java
Mon Jun 28 12:59:51 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticAndSettings.java
Tue Jun 29 13:26:19 2010
@@ -150,5 +150,18 @@
return platformType;
}
-
-}
+ @Accessor
+ @Override
+ public CriticGrouping getParent() {
+ return (CriticGrouping) super.getParent();
+ }
+
+ @Mutator
+ @Override
+ public void setParent(SPObject parent) {
+ if (!(parent instanceof CriticGrouping)) {
+ throw new IllegalArgumentException("The parent of a critic
must be a CriticGrouping.");
+ }
+ super.setParent(parent);
+ }
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
Tue Jun 29 09:19:15 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
Tue Jun 29 13:26:19 2010
@@ -24,6 +24,7 @@
import java.util.Collections;
import java.util.List;
+import ca.sqlpower.architect.ArchitectProject;
import ca.sqlpower.architect.ddl.critic.CriticAndSettings.Severity;
import
ca.sqlpower.architect.ddl.critic.CriticAndSettings.StarterPlatformTypes;
import ca.sqlpower.architect.ddl.critic.impl.AlphaNumericNameCritic;
@@ -49,7 +50,9 @@
import
ca.sqlpower.architect.ddl.critic.impl.SetNullOnNonNullableColumnCritic;
import ca.sqlpower.object.AbstractSPObject;
import ca.sqlpower.object.SPObject;
+import ca.sqlpower.object.annotation.Accessor;
import ca.sqlpower.object.annotation.Constructor;
+import ca.sqlpower.object.annotation.Mutator;
import ca.sqlpower.object.annotation.NonProperty;
/**
@@ -247,4 +250,20 @@
throw new RuntimeException(t);
}
}
-}
+
+ @Mutator
+ @Override
+ public void setParent(SPObject parent) {
+ if (!(parent instanceof ArchitectProject)) {
+ throw new IllegalArgumentException("The parent of a critic
manager must be some " +
+ "kind of architect project.");
+ }
+ super.setParent(parent);
+ }
+
+ @Accessor
+ @Override
+ public ArchitectProject getParent() {
+ return (ArchitectProject) super.getParent();
+ }
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java
Fri Jun 25 12:13:50 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java
Tue Jun 29 13:26:19 2010
@@ -24,6 +24,7 @@
import java.util.List;
import java.util.regex.Pattern;
+import ca.sqlpower.architect.ArchitectProject;
import ca.sqlpower.architect.ddl.critic.Critic;
import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
import ca.sqlpower.architect.ddl.critic.Criticism;
@@ -34,6 +35,10 @@
import ca.sqlpower.sqlobject.SQLObject;
import ca.sqlpower.sqlobject.SQLIndex.Column;
import ca.sqlpower.sqlobject.SQLRelationship.ColumnMapping;
+import ca.sqlpower.util.UserPrompter;
+import ca.sqlpower.util.UserPrompter.UserPromptOptions;
+import ca.sqlpower.util.UserPrompter.UserPromptResponse;
+import ca.sqlpower.util.UserPrompterFactory.UserPromptType;
/**
* Criticizes the physical name of all SQLObjects based on the parameters
given
@@ -79,7 +84,7 @@
if (subject instanceof ColumnMapping || subject instanceof Column)
return Collections.emptyList();
final SQLObject so = (SQLObject) subject;
- String physName = so.getPhysicalName();
+ final String physName = so.getPhysicalName();
List<Criticism> criticisms = new ArrayList<Criticism>();
@@ -114,8 +119,19 @@
criticisms.add(new Criticism(
so,
"Physical name not legal for " + so.getPhysicalName(),
- this
- // TODO: need replacement pattern to enable quickfix
+ this,
+ new QuickFix("Enter a new physical name...") {
+ @Override
+ public void apply() {
+ ArchitectProject project =
getParent().getParent().getParent();
+ UserPrompter prompter =
project.getSession().createUserPrompter("Enter a legal physical name",
+ UserPromptType.TEXT,
UserPromptOptions.OK_CANCEL, UserPromptResponse.CANCEL,
+ physName, "OK", "Cancel");
+ if
(UserPromptResponse.OK.equals(prompter.promptUser())) {
+ so.setPhysicalName((String)
prompter.getUserSelectedResponse());
+ }
+ }
+ }
));
}
@@ -136,4 +152,5 @@
public String getPlatformName() {
return platformName;
}
-}
+
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticPanel.java
Fri Jun 25 11:32:00 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticPanel.java
Tue Jun 29 13:26:19 2010
@@ -23,15 +23,12 @@
import java.util.ArrayList;
import java.util.List;
-import javax.swing.ImageIcon;
import javax.swing.JButton;
-import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
-import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import ca.sqlpower.architect.ddl.critic.Criticism;
@@ -48,31 +45,11 @@
* of the currently known errors in the play pen based on enabled critics.
*/
public class CriticPanel {
-
+
/**
* A cell renderer that can display badges with the criticisms.
*/
- private TableCellRenderer tableRenderer = new
DefaultTableCellRenderer() {
-
- public java.awt.Component
getTableCellRendererComponent(javax.swing.JTable table,
- Object value, boolean isSelected, boolean hasFocus, int
row, int column) {
- if (value instanceof Severity) {
- return new JLabel(getIcon((Severity) value));
- } else {
- return this.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
- }
- }
-
- private ImageIcon getIcon(Severity severity) {
- if (severity == Severity.ERROR) {
- return CriticSwingUtil.ERROR_ICON;
- } else if (severity == Severity.WARNING) {
- return CriticSwingUtil.WARNING_ICON;
- } else {
- return null;
- }
- }
- };
+ private TableCellRenderer tableRenderer = new
SeverityTableCellRenderer();
/**
* The main panel of the critics window.