Revision: 3230
Author: silva.josemanuel1
Date: Mon Jan 18 09:19:18 2010
Log: ASSIGNED - bug 2507: Move the profile results settings to the project
root
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2507
http://code.google.com/p/power-architect/source/detail?r=3230
Modified:
/trunk/regress/ca/sqlpower/architect/TestingArchitectSession.java
/trunk/regress/ca/sqlpower/architect/profile/AbstractProfileResultTest.java
/trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
/trunk/src/ca/sqlpower/architect/ArchitectProject.java
/trunk/src/ca/sqlpower/architect/ArchitectSession.java
/trunk/src/ca/sqlpower/architect/ArchitectSessionImpl.java
/trunk/src/ca/sqlpower/architect/profile/AbstractProfileResult.java
/trunk/src/ca/sqlpower/architect/profile/ColumnProfileResult.java
/trunk/src/ca/sqlpower/architect/profile/ColumnValueCount.java
/trunk/src/ca/sqlpower/architect/profile/ProfileManager.java
/trunk/src/ca/sqlpower/architect/profile/ProfileManagerImpl.java
/trunk/src/ca/sqlpower/architect/profile/ProfileResult.java
/trunk/src/ca/sqlpower/architect/profile/ProfileSettings.java
/trunk/src/ca/sqlpower/architect/profile/TableProfileResult.java
/trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
=======================================
--- /trunk/regress/ca/sqlpower/architect/TestingArchitectSession.java Fri
Jan 15 15:02:04 2010
+++ /trunk/regress/ca/sqlpower/architect/TestingArchitectSession.java Mon
Jan 18 09:19:18 2010
@@ -37,7 +37,6 @@
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.olap.OLAPRootObject;
import ca.sqlpower.architect.profile.ProfileManager;
-import ca.sqlpower.object.SPObject;
import ca.sqlpower.sql.DataSourceCollection;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sql.SPDataSource;
@@ -144,7 +143,7 @@
defaultResponse, dsCollection, buttonNames);
}
- public SPObject getWorkspace() {
+ public ArchitectProject getWorkspace() {
// TODO Auto-generated method stub
return null;
}
=======================================
---
/trunk/regress/ca/sqlpower/architect/profile/AbstractProfileResultTest.java
Thu Jan 29 12:02:55 2009
+++
/trunk/regress/ca/sqlpower/architect/profile/AbstractProfileResultTest.java
Mon Jan 18 09:19:18 2010
@@ -19,8 +19,10 @@
package ca.sqlpower.architect.profile;
import java.util.Date;
+import java.util.List;
import junit.framework.TestCase;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLObject;
import ca.sqlpower.sqlobject.SQLTable;
@@ -30,6 +32,42 @@
public TestingAbstractProfileResult(SQLObject s) {
super(s);
}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject>
childType) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<? extends SPObject> getChildren() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<? extends SPObject> getDependencies() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeDependency(SPObject dependency) {
+ // TODO Auto-generated method stub
+
+ }
}
=======================================
---
/trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
Fri Jan 15 15:02:04 2010
+++
/trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
Mon Jan 18 09:19:18 2010
@@ -28,10 +28,11 @@
import javax.swing.JDialog;
import javax.swing.JMenu;
+import ca.sqlpower.architect.ArchitectProject;
import ca.sqlpower.architect.ArchitectSession;
import ca.sqlpower.architect.ArchitectSessionImpl;
-import ca.sqlpower.architect.ProjectLoader;
import ca.sqlpower.architect.CoreUserSettings;
+import ca.sqlpower.architect.ProjectLoader;
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.ddl.GenericDDLGenerator;
import ca.sqlpower.architect.etl.kettle.KettleJob;
@@ -43,7 +44,6 @@
import ca.sqlpower.architect.swingui.olap.OLAPEditSession;
import ca.sqlpower.architect.undo.ArchitectUndoManager;
import ca.sqlpower.object.ObjectDependentException;
-import ca.sqlpower.object.SPObject;
import ca.sqlpower.sql.DataSourceCollection;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sql.SPDataSource;
@@ -395,7 +395,7 @@
optionType, defaultResponseType, defaultResponse,
dsCollection, buttonNames);
}
- public SPObject getWorkspace() {
+ public ArchitectProject getWorkspace() {
// TODO Auto-generated method stub
return null;
}
=======================================
--- /trunk/src/ca/sqlpower/architect/ArchitectProject.java Fri Jan 15
15:02:04 2010
+++ /trunk/src/ca/sqlpower/architect/ArchitectProject.java Mon Jan 18
09:19:18 2010
@@ -26,6 +26,7 @@
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.ddl.GenericDDLGenerator;
+import ca.sqlpower.architect.profile.ProfileManager;
import ca.sqlpower.architect.profile.ProfileManagerImpl;
import ca.sqlpower.object.AbstractSPObject;
import ca.sqlpower.object.ObjectDependentException;
@@ -37,6 +38,15 @@
import ca.sqlpower.sqlobject.SQLObjectRoot;
import ca.sqlpower.util.SPSession;
+/**
+ *
+ * This class is the root object of an ArchitectSession. There is an
ArchitectProject
+ * for every ArchitectSession. The ArchitectProject, and all its children,
will be
+ * listened to and persisted to the JCR. This includes the SQL object tree,
+ * the profile manager, forward engineering settings, and compare DM
settings.
+ *
+ */
+
public class ArchitectProject extends AbstractSPObject {
private final ArchitectSession session;
@@ -147,7 +157,7 @@
public List<Class<? extends SPObject>> getAllowedChildTypes() {
List<Class<? extends SPObject>> childTypes = new ArrayList<Class<?
extends SPObject>>();
childTypes.add(SQLObjectRoot.class);
- // childTypes.add(ProfileManager.class); TODO make ProfileManager
an SPObject
+ childTypes.add(ProfileManager.class);
// childTypes.add(DDLGenerator.class); TODO make DDLGenerator an
SPObject
childTypes.add(SQLDatabase.class);
return childTypes;
@@ -156,8 +166,8 @@
public List<SPObject> getChildren() {
List<SPObject> allChildren = new ArrayList<SPObject>();
allChildren.add(rootObject);
- // childTypes.add(profileManager); TODO make ProfileManager an
SPObject
- // childTypes.add(ddlGenerator); TODO make DDLGenerator an SPObject
+ allChildren.add(profileManager);
+ // allChildren.add(ddlGenerator); TODO make DDLGenerator an
SPObject
allChildren.add(db);
return allChildren;
}
=======================================
--- /trunk/src/ca/sqlpower/architect/ArchitectSession.java Fri Jan 15
15:02:04 2010
+++ /trunk/src/ca/sqlpower/architect/ArchitectSession.java Mon Jan 18
09:19:18 2010
@@ -22,7 +22,6 @@
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.profile.ProfileManager;
-import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLDatabase;
import ca.sqlpower.sqlobject.SQLDatabaseMapping;
import ca.sqlpower.sqlobject.SQLObjectException;
@@ -96,8 +95,14 @@
*/
public void setDDLGenerator(DDLGenerator generator);
- public SPObject getWorkspace();
-
+ /**
+ * Returns the workspace object which is the root object of the
ArchitectSession, the ArchitectProject.
+ */
+ public ArchitectProject getWorkspace();
+
+ /**
+ * Returns the root SQL object of the session, which is the tree that
contains Columns, Databases, etc.
+ */
public SQLObjectRoot getRootObject();
}
=======================================
--- /trunk/src/ca/sqlpower/architect/ArchitectSessionImpl.java Fri Jan 15
15:02:04 2010
+++ /trunk/src/ca/sqlpower/architect/ArchitectSessionImpl.java Mon Jan 18
09:19:18 2010
@@ -23,7 +23,6 @@
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.profile.ProfileManagerImpl;
-import ca.sqlpower.object.SPObject;
import ca.sqlpower.sql.DataSourceCollection;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sql.SPDataSource;
@@ -169,24 +168,20 @@
defaultResponseType, defaultResponse, dsCollection,
buttonNames);
}
- public SPObject getWorkspace() {
- // TODO Auto-generated method stub
- return null;
+ public ArchitectProject getWorkspace() {
+ return project;
}
public boolean isForegroundThread() {
- // TODO Auto-generated method stub
- return false;
+ return true;
}
public void runInBackground(Runnable runner) {
- // TODO Auto-generated method stub
-
+ runner.run();
}
public void runInForeground(Runnable runner) {
- // TODO Auto-generated method stub
-
+ runner.run();
}
}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/AbstractProfileResult.java Tue
Jan 5 08:48:08 2010
+++ /trunk/src/ca/sqlpower/architect/profile/AbstractProfileResult.java Mon
Jan 18 09:19:18 2010
@@ -25,6 +25,8 @@
import ca.sqlpower.architect.profile.event.ProfileResultEvent;
import ca.sqlpower.architect.profile.event.ProfileResultListener;
+import ca.sqlpower.object.AbstractSPObject;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.object.SPObjectUtils;
import ca.sqlpower.sqlobject.SQLCatalog;
import ca.sqlpower.sqlobject.SQLColumn;
@@ -43,7 +45,7 @@
* The type of DatabaseObject this profile pertains to. For
example,
* SQLTable or SQLColumn.
*/
-public abstract class AbstractProfileResult<T extends SQLObject>
+public abstract class AbstractProfileResult<T extends SQLObject> extends
AbstractSPObject
implements Comparable<AbstractProfileResult>, ProfileResult<T> {
private static final Logger logger =
Logger.getLogger(AbstractProfileResult.class);
@@ -293,4 +295,10 @@
profileResultListeners.get(i).profileCancelled(event);
}
}
-}
+
+ public List<? extends SPObject> getDependencies() {
+ List<SPObject> dependencies = new ArrayList<SPObject>();
+ dependencies.add(profiledObject);
+ return dependencies;
+ }
+}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ColumnProfileResult.java Thu
Jan 29 12:02:55 2009
+++ /trunk/src/ca/sqlpower/architect/profile/ColumnProfileResult.java Mon
Jan 18 09:19:18 2010
@@ -23,6 +23,7 @@
import org.apache.log4j.Logger;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLColumn;
public class ColumnProfileResult extends AbstractProfileResult<SQLColumn> {
@@ -158,4 +159,37 @@
public TableProfileResult getParentResult() {
return parentResult;
}
-}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ return true;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject> childType) {
+ if (childType.isAssignableFrom(ColumnValueCount.class)) {
+ return 0;
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ List<Class<? extends SPObject>> types = new ArrayList<Class<?
extends SPObject>>();
+ types.add(ColumnValueCount.class);
+ return types;
+ }
+
+ public List<? extends SPObject> getChildren() {
+ List<SPObject> children = new ArrayList<SPObject>();
+ children.addAll(topTen);
+ return children;
+ }
+
+ public void removeDependency(SPObject dependency) {
+
+ }
+}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ColumnValueCount.java Tue Mar
25 07:38:28 2008
+++ /trunk/src/ca/sqlpower/architect/profile/ColumnValueCount.java Mon Jan
18 09:19:18 2010
@@ -18,13 +18,19 @@
*/
package ca.sqlpower.architect.profile;
+import java.util.Collections;
+import java.util.List;
+
+import ca.sqlpower.object.AbstractSPObject;
+import ca.sqlpower.object.SPObject;
+
/**
* A simple class for keeping track of a value, the number of occurrences
* associated with it, and the percentage of occurences in the table.
* Instances of this class are used in the "Top N most
* frequent values" property of a column's profile.
*/
-public class ColumnValueCount {
+public class ColumnValueCount extends AbstractSPObject {
private Object value;
private int count;
@@ -87,4 +93,33 @@
result = 37 * result + count;
return result;
}
-}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ return false;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject> childType) {
+ return 0;
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ return Collections.emptyList();
+ }
+
+ public List<? extends SPObject> getChildren() {
+ return Collections.emptyList();
+ }
+
+ public List<? extends SPObject> getDependencies() {
+ return Collections.emptyList();
+ }
+
+ public void removeDependency(SPObject dependency) {
+
+ }
+}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ProfileManager.java Thu Jan 29
12:02:55 2009
+++ /trunk/src/ca/sqlpower/architect/profile/ProfileManager.java Mon Jan 18
09:19:18 2010
@@ -24,6 +24,7 @@
import java.util.concurrent.Future;
import ca.sqlpower.architect.profile.event.ProfileChangeListener;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLObjectException;
import ca.sqlpower.sqlobject.SQLTable;
@@ -32,7 +33,7 @@
* For now it can only be a list of TableProfileResults; some day we might
* want to make it a generic type.
*/
-public interface ProfileManager {
+public interface ProfileManager extends SPObject {
/**
* A client property defined on an object to count how many profiles
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ProfileManagerImpl.java Mon
Mar 2 07:47:13 2009
+++ /trunk/src/ca/sqlpower/architect/profile/ProfileManagerImpl.java Mon
Jan 18 09:19:18 2010
@@ -34,9 +34,11 @@
import ca.sqlpower.architect.ArchitectSession;
import ca.sqlpower.architect.profile.event.ProfileChangeEvent;
import ca.sqlpower.architect.profile.event.ProfileChangeListener;
-import ca.sqlpower.sqlobject.SQLObjectException;
+import ca.sqlpower.object.AbstractSPObject;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLDatabase;
import ca.sqlpower.sqlobject.SQLObject;
+import ca.sqlpower.sqlobject.SQLObjectException;
import ca.sqlpower.sqlobject.SQLObjectPreEvent;
import ca.sqlpower.sqlobject.SQLObjectPreEventListener;
import ca.sqlpower.sqlobject.SQLTable;
@@ -51,7 +53,7 @@
*
* @version $Id$
*/
-public class ProfileManagerImpl implements ProfileManager {
+public class ProfileManagerImpl extends AbstractSPObject implements
ProfileManager {
/**
* Watches the session's root object, and reacts when SQLDatabase items
@@ -98,6 +100,8 @@
}
private static final Logger logger =
Logger.getLogger(ProfileManagerImpl.class);
+
+
/**
* The current list of listeners who want to know when the contents
@@ -374,5 +378,48 @@
public void setCreator(TableProfileCreator tpc) {
this.creator = tpc;
}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ return true;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject> childType) {
+ if (childType.isAssignableFrom(ProfileSettings.class)) {
+ return 0;
+ } else if (results.size() > 0) {
+ return 1;
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ List<Class<? extends SPObject>> types = new ArrayList<Class<?
extends SPObject>>();
+ types.add(ProfileSettings.class);
+ if (results.size() > 0) {
+ types.add(TableProfileResult.class);
+ }
+ return types;
+ }
+
+ public List<? extends SPObject> getChildren() {
+ List<SPObject> allChildren = new ArrayList<SPObject>();
+ allChildren.add(defaultProfileSettings);
+ allChildren.addAll(results);
+ return allChildren;
+ }
+
+ public List<? extends SPObject> getDependencies() {
+ return Collections.emptyList();
+ }
+
+ public void removeDependency(SPObject dependency) {
+
+ }
}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ProfileResult.java Thu Jan 29
12:02:55 2009
+++ /trunk/src/ca/sqlpower/architect/profile/ProfileResult.java Mon Jan 18
09:19:18 2010
@@ -19,6 +19,7 @@
package ca.sqlpower.architect.profile;
import ca.sqlpower.architect.profile.event.ProfileResultListener;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sqlobject.SQLObject;
/**
@@ -30,7 +31,7 @@
* @param T The type of SQLObject that this profile result calculates
* and holds results for.
*/
-public interface ProfileResult<T extends SQLObject> {
+public interface ProfileResult<T extends SQLObject> extends SPObject {
/**
* Returns the SQLObject that is profiled by this ProfileResult.
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/ProfileSettings.java Tue Mar
25 07:38:28 2008
+++ /trunk/src/ca/sqlpower/architect/profile/ProfileSettings.java Mon Jan
18 09:19:18 2010
@@ -18,7 +18,13 @@
*/
package ca.sqlpower.architect.profile;
-public class ProfileSettings {
+import java.util.Collections;
+import java.util.List;
+
+import ca.sqlpower.object.AbstractSPObject;
+import ca.sqlpower.object.SPObject;
+
+public class ProfileSettings extends AbstractSPObject {
private boolean findingMin = true;
@@ -123,4 +129,33 @@
public void setTopNCount(String topNCount) {
this.topNCount = Integer.valueOf(topNCount);
}
-}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ return false;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject> childType) {
+ return 0;
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ return Collections.emptyList();
+ }
+
+ public List<? extends SPObject> getChildren() {
+ return Collections.emptyList();
+ }
+
+ public List<? extends SPObject> getDependencies() {
+ return Collections.emptyList();
+ }
+
+ public void removeDependency(SPObject dependency) {
+
+ }
+}
=======================================
--- /trunk/src/ca/sqlpower/architect/profile/TableProfileResult.java Wed
Aug 12 14:56:31 2009
+++ /trunk/src/ca/sqlpower/architect/profile/TableProfileResult.java Mon
Jan 18 09:19:18 2010
@@ -29,6 +29,7 @@
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.ddl.DDLUtils;
+import ca.sqlpower.object.SPObject;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sqlobject.SQLColumn;
import ca.sqlpower.sqlobject.SQLObjectException;
@@ -205,4 +206,37 @@
public void addColumnProfileResult(ColumnProfileResult profileResult) {
columnProfileResults.add(profileResult);
}
-}
+
+ @Override
+ protected boolean removeChildImpl(SPObject child) {
+ return false;
+ }
+
+ public boolean allowsChildren() {
+ return true;
+ }
+
+ public int childPositionOffset(Class<? extends SPObject> childType) {
+ if (childType.isAssignableFrom(ColumnProfileResult.class)) {
+ return 0;
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ public List<Class<? extends SPObject>> getAllowedChildTypes() {
+ List<Class<? extends SPObject>> types = new ArrayList<Class<?
extends SPObject>>();
+ types.add(ColumnProfileResult.class);
+ return types;
+ }
+
+ public List<? extends SPObject> getChildren() {
+ List<SPObject> children = new ArrayList<SPObject>();
+ children.addAll(columnProfileResults);
+ return children;
+ }
+
+ public void removeDependency(SPObject dependency) {
+
+ }
+}
=======================================
--- /trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Fri Jan 15 15:02:04 2010
+++ /trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Mon Jan 18 09:19:18 2010
@@ -47,10 +47,11 @@
import org.apache.log4j.Logger;
+import ca.sqlpower.architect.ArchitectProject;
import ca.sqlpower.architect.ArchitectSession;
import ca.sqlpower.architect.ArchitectSessionImpl;
-import ca.sqlpower.architect.ProjectLoader;
import ca.sqlpower.architect.CoreUserSettings;
+import ca.sqlpower.architect.ProjectLoader;
import ca.sqlpower.architect.UserSettings;
import ca.sqlpower.architect.ddl.DDLGenerator;
import ca.sqlpower.architect.etl.kettle.KettleJob;
@@ -69,7 +70,6 @@
import ca.sqlpower.object.AbstractSPListener;
import ca.sqlpower.object.SPChildEvent;
import ca.sqlpower.object.SPListener;
-import ca.sqlpower.object.SPObject;
import ca.sqlpower.sql.DataSourceCollection;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sql.SPDataSource;
@@ -1004,7 +1004,7 @@
defaultResponseType, defaultResponse, dsCollection,
buttonNames);
}
- public SPObject getWorkspace() {
+ public ArchitectProject getWorkspace() {
return delegateSession.getWorkspace();
}