Author: jflesch
Date: 2007-06-01 16:37:00 +0000 (Fri, 01 Jun 2007)
New Revision: 13443

Modified:
   trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
   trunk/apps/Thaw/src/thaw/plugins/index/Index.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
Log:
Should hopefully fix the bug #1254 (Index who were modified are not highlighted 
correctly)

Modified: trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java     2007-06-01 
15:57:55 UTC (rev 13442)
+++ trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java     2007-06-01 
16:37:00 UTC (rev 13443)
@@ -83,7 +83,7 @@

        public int updateNext(int lastIdx) {
                if (browserPanel.getIndexTree().numberOfUpdatingIndexes() >= 
nmbIndexesPerInterval) {
-                       Logger.notice(this, "Too many indexes are updating ; 
won't auto-update another one");
+                       Logger.debug(this, "Too many indexes are updating ; 
won't auto-update another one");
                        return lastIdx;
                }

@@ -138,10 +138,7 @@

        public void update(java.util.Observable o, Object param) {

-               if (((Index)o).hasChanged())
-                       browserPanel.getIndexTree().redraw();
-               else
-                       browserPanel.getIndexTree().redraw();
+               
browserPanel.getIndexTree().refresh(((Index)o).getTreePath(browserPanel.getIndexTree()));

                if 
(o.equals(browserPanel.getTables().getFileTable().getFileList())) {
                        browserPanel.getTables().getFileTable().refresh();

Modified: trunk/apps/Thaw/src/thaw/plugins/index/Index.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/Index.java   2007-06-01 15:57:55 UTC 
(rev 13442)
+++ trunk/apps/Thaw/src/thaw/plugins/index/Index.java   2007-06-01 16:37:00 UTC 
(rev 13443)
@@ -19,6 +19,9 @@
 import javax.swing.tree.MutableTreeNode;
 import javax.swing.tree.TreeNode;

+import javax.swing.tree.TreePath;
+
+
 /* DOM */

 import javax.xml.parsers.DocumentBuilder;
@@ -70,6 +73,7 @@
 import thaw.plugins.signatures.Identity;


+
 public class Index extends Observable implements MutableTreeNode, 
FileAndLinkList, IndexTreeNode, Observer {
        private final static long MAX_SIZE = 5242880; /* 5MB */

@@ -2042,4 +2046,105 @@

                return 0;
        }
+
+
+       /* The user who is able to have so much depth in its tree
+        * is crazy.
+        */
+       public final static int MAX_DEPTH = 128;
+
+       public TreePath getTreePath(IndexTree tree) {
+
+               int[] folderIds = new int[MAX_DEPTH];
+
+               for (int i = 0 ; i < folderIds.length ; i++)
+                       folderIds[i] = -1;
+
+               synchronized(db.dbLock) {
+                       try {
+                               /* we find the id of the parents */
+
+                               PreparedStatement st = 
db.getConnection().prepareStatement("SELECT folderId FROM indexParents "+
+                                                                               
           "WHERE indexId = ? LIMIT 1");
+                               st.setInt(1, id);
+                               ResultSet res = st.executeQuery();
+
+                               if (!res.next()) {
+                                       Logger.error(this, "Can't find the 
index "+Integer.toString(id)+"in the db! The tree is probably broken !");
+                                       return null;
+                               }
+
+                               int i = 0;
+
+                               do {
+                                       int j = res.getInt("folderId");
+
+                                       if (j != 0) /* root */
+                                               folderIds[i] = j;
+
+                                       i++;
+                               } while(res.next());
+
+                               int nmb_folders = i+1; /* i + root */
+
+                               Object[] path = new Object[nmb_folders + 1]; /* 
folders + the index */
+
+                               for (i = 0 ; i < path.length ; i++)
+                                       path[i] = null;
+
+
+                               path[0] = indexTree.getRoot();
+
+
+                               for (i = 1 ; i < nmb_folders ; i++) {
+                                       IndexFolder folder = null;
+
+                                       for (int j = 0 ;
+                                            folder == null && j < 
folderIds.length && folderIds[j] != -1 ;
+                                            j++) {
+
+                                               folder = 
((IndexFolder)path[i-1]).getChildFolder(folderIds[j], false);
+
+                                       }
+
+                                       if (folder == null)
+                                               break;
+
+                                       path[i] = folder;
+                               }
+
+                               if (i >= 2)
+                                       path[i-1] = 
((IndexFolder)path[i-2]).getChildIndex(id, false);
+                               else
+                                       path[1] = 
indexTree.getRoot().getChildIndex(id, false);
+
+
+                               int non_null_elements = 0;
+                               /* we may have null elements if the tree wasn't 
fully loaded for this path */
+                               for (i = 0 ; i < path.length ; i++) {
+                                       if (path[i] == null)
+                                               break;
+                               }
+
+                               non_null_elements = i;
+
+                               if (non_null_elements != nmb_folders) {
+                                       /* we eliminate the null elements */
+                                       Object[] new_path = new 
Object[non_null_elements];
+
+                                       for (i = 0 ; i < non_null_elements; i++)
+                                               new_path[i] = path[i];
+
+                                       path = new_path;
+                               }
+
+                               return new TreePath(path);
+
+                       } catch(SQLException e) {
+                               Logger.error(this, "Error while getting index 
tree path : "+e.toString());
+                       }
+               }
+
+               return null;
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java     2007-06-01 
15:57:55 UTC (rev 13442)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java     2007-06-01 
16:37:00 UTC (rev 13443)
@@ -1355,14 +1355,22 @@


        public IndexFolder getChildFolder(int id) {
+               return getChildFolder(id, true);
+       }
+
+
+       public IndexFolder getChildFolder(int id, boolean loadChildren) {
                if (id < 0) {
                        Logger.notice(this, "getChildFolder() : Asked me to 
have the root ?!");
                        return null;
                }

-               if (children == null)
+               if (children == null && loadChildren)
                        loadChildren();

+               if (children == null)
+                       return null;
+
                for (Iterator it = children.iterator() ;
                     it.hasNext(); ) {
                        Object child = it.next();
@@ -1379,12 +1387,16 @@


        public Index getChildIndex(int id) {
+               return getChildIndex(id, true);
+       }
+
+       public Index getChildIndex(int id, boolean loadChildren) {
                if (id < 0) {
                        Logger.error(this, "getChildIndex() : Invalid parameter 
!");
                        return null;
                }

-               if (children == null)
+               if (children == null && loadChildren)
                        loadChildren();

                for (Iterator it = children.iterator() ;

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java       2007-06-01 
15:57:55 UTC (rev 13442)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java       2007-06-01 
16:37:00 UTC (rev 13443)
@@ -555,7 +555,9 @@


        public void refresh(TreePath path) {
-               refresh();
+               Object[] nodes = path.getPath();
+               for (int i = 0 ; i < nodes.length ; i++)
+                       refresh((IndexTreeNode)(nodes[i]));
        }


@@ -578,10 +580,11 @@
                //refresh(node);
                forceHasChangedFlagReload = true;
                if (treeModel != null) {
-                       if (node != null && node.isInTree())
+                       if (node != null && node.isInTree()) {
                                treeModel.nodeChanged(node.getTreeNode());
-                       else
+                       } else {
                                treeModel.nodeChanged(getRoot().getTreeNode());
+                       }
                }
                forceHasChangedFlagReload = false;
        }


Reply via email to