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");



Reply via email to