Revision: 3655
Author: [email protected]
Date: Tue Jun 29 09:19:15 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458
The critic settings are now being saved and loaded to a local file.
To make initializing the critic settings simpler the session always creates
a default set of critics for the session and it is up to the loading code
to decide what default critics to replace or remove in order to load its
set of critics correctly. Currently the default is to clear all of the
critics.
http://code.google.com/p/power-architect/source/detail?r=3655
Modified:
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticGrouping.java
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/SwingUIProjectLoader.java
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticGrouping.java
Tue Jun 8 14:56:35 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticGrouping.java
Tue Jun 29 09:19:15 2010
@@ -150,4 +150,17 @@
public List<CriticAndSettings> getSettings() {
return Collections.unmodifiableList(settings);
}
-}
+
+ @Override
+ public CriticManager getParent() {
+ return (CriticManager) super.getParent();
+ }
+
+ @Override
+ public void setParent(SPObject parent) {
+ if (!(parent instanceof CriticManager)) {
+ throw new IllegalArgumentException("Critic groups must be a
child of a critic manager.");
+ }
+ super.setParent(parent);
+ }
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
Mon Jun 28 12:59:51 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticManager.java
Tue Jun 29 09:19:15 2010
@@ -231,4 +231,20 @@
public List<CriticGrouping> getCriticGroupings() {
return Collections.unmodifiableList(criticGroupings);
}
-}
+
+ /**
+ * Clears all registered critics and their groups from the manager.
+ */
+ public void clear() {
+ try {
+ begin("Clearing manager");
+ for (int i = criticGroupings.size() - 1; i >= 0; i--) {
+ removeChild(criticGroupings.get(i));
+ }
+ commit();
+ } catch (Throwable t) {
+ rollback(t.getMessage());
+ throw new RuntimeException(t);
+ }
+ }
+}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java
Tue Jun 8 13:39:34 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java
Tue Jun 29 09:19:15 2010
@@ -92,6 +92,8 @@
architectProject.getCriticManager().setUUID(criticManagerUUID);
criticManager.setLoaded(true);
+ architectProject.getCriticManager().clear();
+
List<PersistedSPObject> databases = new
ArrayList<PersistedSPObject>();
for (PersistedSPObject o : persistedObjects) {
if
(o.getParentUUID().equals(architectProject.getRootObject().getUUID()) &&
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Tue Jun 8 13:39:34 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Tue Jun 29 09:19:15 2010
@@ -235,9 +235,6 @@
ArchitectSwingSessionImpl(final ArchitectSwingSessionContext context,
String name)
throws SQLObjectException {
this(context, new ArchitectSessionImpl(context, name, new
ArchitectSwingProject()));
- //XXX Unsure if this is the appropriate place for this method
call. Likely to change
- //before committing.
- getWorkspace().getCriticManager().registerStartingCritics();
}
/**
@@ -362,7 +359,9 @@
}
}
});
-
getWorkspace().getProjectSettings().addSPListener(settingsListener);
+
getWorkspace().getProjectSettings().addSPListener(settingsListener);
+
+ getWorkspace().getCriticManager().registerStartingCritics();
}
public void initGUI() throws SQLObjectException {
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/swingui/SwingUIProjectLoader.java
Mon Jun 28 12:01:29 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/SwingUIProjectLoader.java
Tue Jun 29 09:19:15 2010
@@ -41,6 +41,7 @@
import org.apache.commons.digester.AbstractObjectCreationFactory;
import org.apache.commons.digester.Digester;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -50,6 +51,10 @@
import ca.sqlpower.architect.UnclosableInputStream;
import ca.sqlpower.architect.ProjectSettings.ColumnVisibility;
import ca.sqlpower.architect.ddl.DDLGenerator;
+import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
+import ca.sqlpower.architect.ddl.critic.CriticGrouping;
+import ca.sqlpower.architect.ddl.critic.CriticManager;
+import ca.sqlpower.architect.ddl.critic.CriticAndSettings.Severity;
import ca.sqlpower.architect.olap.MondrianXMLReader;
import ca.sqlpower.architect.olap.MondrianXMLWriter;
import ca.sqlpower.architect.olap.OLAPObject;
@@ -91,7 +96,6 @@
import ca.sqlpower.util.UserPrompter.UserPromptResponse;
import ca.sqlpower.util.UserPrompterFactory.UserPromptType;
import ca.sqlpower.xml.XMLHelper;
-import org.apache.commons.lang.StringUtils;
/**
* The SwingUIProject class is responsible for saving and loading projects.
@@ -259,7 +263,18 @@
CreateKettleJobSettingsFactory ckjsFactory = new
CreateKettleJobSettingsFactory();
d.addFactoryCreate("architect-project/create-kettle-job-settings",
ckjsFactory); //$NON-NLS-1$
d.addSetProperties("architect-project/create-kettle-job-settings");
//$NON-NLS-1$
-
+
+ CriticManagerFactory criticManagerFactory = new
CriticManagerFactory();
+ d.addFactoryCreate("architect-project/critic-manager",
criticManagerFactory);
+ d.addSetProperties("architect-project/critic-manager");
+
+ CriticGroupingFactory criticGroupingFactory = new
CriticGroupingFactory();
+
d.addFactoryCreate("architect-project/critic-manager/critic-grouping",
criticGroupingFactory);
+
d.addSetProperties("architect-project/critic-manager/critic-grouping");
+
+ CriticSettingsFactory criticSettingsFactory = new
CriticSettingsFactory();
+
d.addFactoryCreate("architect-project/critic-manager/critic-grouping/critic-settings",
criticSettingsFactory);
+
// olap factories
OLAPEditSessionFactory editSessionFactory = new
OLAPEditSessionFactory();
@@ -640,6 +655,63 @@
public Object createObject(Attributes arg0) throws Exception {
return getSession().getPrintSettings();
}
+
+ }
+
+ private class CriticGroupingFactory extends
AbstractObjectCreationFactory {
+ @Override
+ public Object createObject(Attributes attr) throws Exception {
+ Object topItem = getDigester().peek();
+ if (!(topItem instanceof CriticManager)) {
+ logger.error("Expected parent CriticManager object on top
of stack but found: " + topItem); //$NON-NLS-1$
+ throw new IllegalStateException("Ancestor CriticManager
object not found!"); //$NON-NLS-1$
+ }
+ CriticManager criticManager = (CriticManager) topItem;
+ String platformType = attr.getValue("platformType");
+ CriticGrouping group = new CriticGrouping(platformType);
+
+ criticManager.addChild(group,
criticManager.getChildren(CriticGrouping.class).size());
+
+ return group;
+ }
+
+ }
+
+ private class CriticManagerFactory extends
AbstractObjectCreationFactory {
+ @Override
+ public Object createObject(Attributes attr) throws Exception {
+ Object topItem = getDigester().peek();
+ if (!(topItem instanceof ArchitectSwingSessionImpl)) {
+ logger.error("Expected parent ArchitectSwingSessionImpl
object on top of stack but found: " + topItem); //$NON-NLS-1$
+ throw new IllegalStateException("Ancestor
ArchitectSwingSessionImpl object not found!"); //$NON-NLS-1$
+ }
+ ArchitectSwingSessionImpl session =
(ArchitectSwingSessionImpl) topItem;
+
+ session.getWorkspace().getCriticManager().clear();
+ return session.getWorkspace().getCriticManager();
+ }
+ }
+
+ private class CriticSettingsFactory extends
AbstractObjectCreationFactory {
+ @Override
+ public Object createObject(Attributes attr) throws Exception {
+ Object topItem = getDigester().peek();
+ if (!(topItem instanceof CriticGrouping)) {
+ logger.error("Expected parent CriticGrouping object on top
of stack but found: " + topItem); //$NON-NLS-1$
+ throw new IllegalStateException("Ancestor CriticGrouping
object not found!"); //$NON-NLS-1$
+ }
+ CriticGrouping group = (CriticGrouping) topItem;
+
+ String criticClassName = attr.getValue("class");
+ Class<?> criticClass =
getClass().getClassLoader().loadClass(criticClassName);
+ CriticAndSettings criticSettings = (CriticAndSettings)
criticClass.getConstructor().newInstance();
+
+ String severity = attr.getValue("severity");
+ criticSettings.setSeverity(Severity.valueOf(severity));
+
+ group.getParent().registerCritic(criticSettings);
+ return criticSettings;
+ }
}
@@ -778,6 +850,7 @@
saveCompareDMSettings(out);
saveCreateKettleJobSettings(out);
savePlayPen(out, getSession().getPlayPen(), true);
+ saveCriticSettings(out);
saveProfiles(out);
saveOLAP(out);
@@ -956,6 +1029,32 @@
ioo.indent--;
ioo.println(out, "</compare-dm-settings>"); //$NON-NLS-1$
}
+
+ /**
+ * Writes the current critic settings for this project.
+ */
+ private void saveCriticSettings(PrintWriter out) throws IOException {
+ CriticManager criticManager =
getSession().getWorkspace().getCriticManager();
+ ioo.println(out, "<critic-manager>");
+ ioo.indent++;
+ for (CriticGrouping group : criticManager.getCriticGroupings()) {
+ ioo.print(out, "<critic-grouping");
+ ioo.print(out, "platformType=\"" + group.getPlatformType()
+ "\"");
+ ioo.print(out, "enabled=\"" +
Boolean.toString(group.isEnabled()) + "\"");
+ ioo.println(out, ">");
+ ioo.indent++;
+ for (CriticAndSettings settings : group.getSettings()) {
+ ioo.print(out, "<critic-settings");
+ ioo.print(out, "class=\"" + settings.getClass().getName()
+ "\"");
+ ioo.print(out, "severity=\"" +
settings.getSeverity().name() + "\"");
+ ioo.println(out, "/>");
+ }
+ ioo.indent--;
+ ioo.println(out, "</critic-grouping>");
+ }
+ ioo.indent--;
+ ioo.println(out, "</critic-manager>");
+ }
private void saveLiquibaseSettings(PrintWriter out, LiquibaseSettings
settings) {
if (settings == null) return;