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;
}