Author: jflesch
Date: 2007-10-01 14:02:35 +0000 (Mon, 01 Oct 2007)
New Revision: 15424
Modified:
trunk/apps/Thaw/src/thaw/core/Config.java
trunk/apps/Thaw/src/thaw/core/PluginManager.java
trunk/apps/Thaw/src/thaw/core/ThawThread.java
trunk/apps/Thaw/src/thaw/plugins/IndexTreeRebuilder.java
Log:
Finish the plugin 'IndexTreeRebuilder'
Modified: trunk/apps/Thaw/src/thaw/core/Config.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Config.java 2007-10-01 13:31:06 UTC (rev
15423)
+++ trunk/apps/Thaw/src/thaw/core/Config.java 2007-10-01 14:02:35 UTC (rev
15424)
@@ -238,7 +238,7 @@
/**
* Save the configuration.
- *
+ *
* @return true if success, else false.
*/
public boolean saveConfig() {
Modified: trunk/apps/Thaw/src/thaw/core/PluginManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/PluginManager.java 2007-10-01 13:31:06 UTC
(rev 15423)
+++ trunk/apps/Thaw/src/thaw/core/PluginManager.java 2007-10-01 14:02:35 UTC
(rev 15424)
@@ -238,6 +238,7 @@
}
plugins.remove(className);
+ core.getConfig().removePlugin(className);
} catch(final Exception e) {
Logger.error(this, "unloadPlugin('"+className+"'):
Exception: "+e);
Modified: trunk/apps/Thaw/src/thaw/core/ThawThread.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ThawThread.java 2007-10-01 13:31:06 UTC
(rev 15423)
+++ trunk/apps/Thaw/src/thaw/core/ThawThread.java 2007-10-01 14:02:35 UTC
(rev 15424)
@@ -83,9 +83,12 @@
for (Iterator it = threads.iterator();
it.hasNext();) {
ThawThread th = (ThawThread)it.next();
- Logger.info(null,
- "'"+th.getName()+"' "+
- "(parent:
'"+th.getParent().getClass().getName()+"')");
+
+ if (th != null) {
+ Logger.info(null,
+ "'"+th.getName()+"' "+
+ "(parent:
'"+th.getParent().getClass().getName()+"')");
+ }
}
}
}
Modified: trunk/apps/Thaw/src/thaw/plugins/IndexTreeRebuilder.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexTreeRebuilder.java 2007-10-01
13:31:06 UTC (rev 15423)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexTreeRebuilder.java 2007-10-01
14:02:35 UTC (rev 15424)
@@ -5,6 +5,8 @@
import javax.swing.JOptionPane;
+import java.util.Vector;
+import java.util.Iterator;
import thaw.core.Core;
import thaw.core.Logger;
@@ -17,6 +19,7 @@
import thaw.plugins.Hsqldb;
+
import java.sql.*;
@@ -37,12 +40,116 @@
this.parent = parent;
}
+ private void rebuildIndex(Vector parents, int indexId) throws
SQLException {
+
+ PreparedStatement st =
+ db.getConnection().prepareStatement("INSERT
INTO indexParents "+
+ "(indexId,
folderId) "+
+ "VALUES (?,
?)");
+
+ for (Iterator it = parents.iterator();
+ it.hasNext();) {
+ st.setInt(1, indexId);
+
+ int parent = ((Integer)it.next()).intValue();
+
+ if (parent >= 0)
+ st.setInt(2, parent);
+ else
+ st.setNull(2, Types.INTEGER);
+
+ st.execute();
+ }
+
+ }
+
+
+ /**
+ * rebuild == rebuild the content of indexParents and
folderParents
+ * @param parents Integer vector (id of the parent folders)
+ */
+ private void rebuild(Vector parents, int folderId) throws
SQLException {
+
+ Vector newParentsVector = new Vector(parents);
+ newParentsVector.add(new Integer(folderId));
+
+ PreparedStatement st;
+
+ /* rebuild all the indexes in the subfolders */
+
+ String where = ((folderId >= 0) ?
+ "WHERE parent = ?" :
+ "WHERE parent IS NULL");
+
+ st = db.getConnection().prepareStatement("SELECT id
FROM indexFolders "+where);
+
+ if (folderId >= 0)
+ st.setInt(1, folderId);
+
+ ResultSet set = st.executeQuery();
+
+ while(set.next()) {
+ rebuild(newParentsVector, set.getInt("id"));
+ }
+
+
+ /* rebuild all the indexes in this folder */
+
+ st = db.getConnection().prepareStatement("SELECT id
FROM indexes "+where);
+
+ if (folderId >= 0)
+ st.setInt(1, folderId);
+
+ set = st.executeQuery();
+
+ while(set.next()) {
+ rebuildIndex(newParentsVector,
set.getInt("id"));
+ }
+
+
+ /* rebuild this folder */
+
+ st = db.getConnection().prepareStatement("INSERT INTO
folderParents "+
+ "(folderId,
parentId) "+
+ "VALUES (?,
?)");
+
+ for (Iterator it = parents.iterator();
+ it.hasNext();) {
+ if (folderId >= 0)
+ st.setInt(1, folderId);
+ else
+ st.setNull(1, Types.INTEGER);
+
+ int parent = ((Integer)it.next()).intValue();
+
+ if (parent >= 0)
+ st.setInt(2, parent);
+ else
+ st.setNull(2, Types.INTEGER);
+
+ st.execute();
+ }
+
+ }
+
+ /**
+ * Take the db lock before calling this function !
+ */
public void rebuild() throws SQLException {
- /* TODO */
+ /* quick & dirty, as usual */
+ PreparedStatement st =
+ db.getConnection().prepareStatement("DELETE
FROM indexParents");
+ st.execute();
+ st = db.getConnection().prepareStatement("DELETE FROM
folderParents");
+ st.execute();
+
+ rebuild(new Vector(), -1);
+
}
+
public void run() {
if(core.getPluginManager().getPlugin("thaw.plugins.Hsqldb") == null) {
@@ -68,7 +175,9 @@
if (running) {
try {
- rebuild();
+ synchronized(db.dbLock) {
+ rebuild();
+ }
} catch(SQLException e) {
/* wow, getting creepy */
Logger.error(this, "Index tree
rebuild failed : "+e.toString());
@@ -78,15 +187,15 @@
}
if (running)
+ new WarningWindow(core,
+
I18n.getMessage("thaw.plugin.index.treeRebuilder.finished"));
+
+ if (running)
core.getPluginManager().runPlugin("thaw.plugins.IndexBrowser");
db.unregisterChild(parent);
}
- if (running)
- new WarningWindow(core,
-
I18n.getMessage("thaw.plugin.index.treeRebuilder.finished"));
-
core.getPluginManager().stopPlugin("thaw.plugins.IndexTreeRebuilder");
core.getPluginManager().unloadPlugin("thaw.plugins.IndexTreeRebuilder");