Author: jflesch
Date: 2007-08-02 00:41:02 +0000 (Thu, 02 Aug 2007)
New Revision: 14458

Modified:
   trunk/apps/Thaw/src/thaw/gui/Table.java
   trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
   trunk/apps/Thaw/src/thaw/i18n/thaw.properties
   trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
   trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
   trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
   trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
   trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
   trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
Log:
Allow to display a tree with all the messages

Modified: trunk/apps/Thaw/src/thaw/gui/Table.java
===================================================================
--- trunk/apps/Thaw/src/thaw/gui/Table.java     2007-08-01 21:20:07 UTC (rev 
14457)
+++ trunk/apps/Thaw/src/thaw/gui/Table.java     2007-08-02 00:41:02 UTC (rev 
14458)
@@ -39,6 +39,9 @@
  */
 public class Table extends JTable implements TableColumnModelListener, 
Runnable {

+       public final static Color COLOR_ONE = Color.WHITE;
+       public final static Color COLOR_TWO = new Color(240, 240, 240);
+
        private Config config;
        private String configPrefix;

@@ -159,14 +162,11 @@
                private boolean statusInProgressBars = true;
                private int columnWithKeys = -1;

-               private Color softGray;
-
                private JLabel labelRenderer;
                private TransferProgressBar transferProgressBarRenderer;
                private JTextArea textAreaRenderer;

                public DefaultRenderer() {
-                       softGray = new Color(240,240,240);
                        labelRenderer = new JLabel();
                        transferProgressBarRenderer = new 
TransferProgressBar(null, statusInProgressBars);
                        textAreaRenderer = new JTextArea();
@@ -184,6 +184,16 @@
                        columnWithKeys = c;
                }

+
+               public void setBackground(Component c, int row, boolean 
isSelected) {
+                       if (!isSelected) {
+                               if (row % 2 == 0)
+                                       c.setBackground(COLOR_ONE);
+                               else
+                                       c.setBackground(COLOR_TWO);
+                       }
+               }
+
                public Component getTableCellRendererComponent(final JTable 
table, Object value,
                                                               final boolean 
isSelected, final boolean hasFocus,
                                                               final int row, 
final int column) {
@@ -230,12 +240,7 @@

                        }

-                       if (!isSelected) {
-                               if (row % 2 == 0)
-                                       cell.setBackground(Color.WHITE);
-                               else
-                                       cell.setBackground(softGray);
-                       }
+                       setBackground(cell, row, isSelected);

                        cell.setForeground(Color.BLACK);


Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties     2007-08-01 
21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties     2007-08-02 
00:41:02 UTC (rev 14458)
@@ -599,3 +599,5 @@
 thaw.plugin.miniFrost.invalidRegexp=Une de vos regexp est invalide : X

 thaw.plugin.miniFrost.modifyRegexp=Modifier les r?gles de filtrage
+
+thaw.plugin.miniFrost.seeTree=Voir les messages sous forme d'arbre

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2007-08-01 21:20:07 UTC 
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2007-08-02 00:41:02 UTC 
(rev 14458)
@@ -618,3 +618,4 @@
 thaw.plugin.miniFrost.invalidRegexp=One of your regexp is invalid : X
 thaw.plugin.miniFrost.modifyRegexp=Modify the filtering rules

+thaw.plugin.miniFrost.seeTree=See message tree

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2007-08-01 21:20:07 UTC 
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2007-08-02 00:41:02 UTC 
(rev 14458)
@@ -593,9 +593,11 @@
 thaw.plugin.miniFrost.encrypted=Crypt\u00e9
 thaw.plugin.miniFrost.encryptedBody=Crypt\u00e9 pour 'X'

-thaw.plugin.miniFrost.regexpBlacklist=Archiver imm\u00e9diatement les messages 
correspondant aux expressions suivantes (une par line):
+thaw.plugin.miniFrost.regexpBlacklistLongDesc=Archiver imm\u00e9diatement les 
messages correspondant aux expressions suivantes (une par line):
 thaw.plugin.miniFrost.seeSunManual=(Voir X)
 thaw.plugin.miniFrost.regexpBlacklist=Filtrage
 thaw.plugin.miniFrost.invalidRegexp=Une de vos regexp est invalide : X

 thaw.plugin.miniFrost.modifyRegexp=Modifier les r\u00e8gles de filtrage
+
+thaw.plugin.miniFrost.seeTree=Voir les messages sous forme d'arbre

Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java      2007-08-01 21:20:07 UTC 
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java      2007-08-02 00:41:02 UTC 
(rev 14458)
@@ -236,6 +236,7 @@
                p.add(l);

                TransferProgressBar bar = new TransferProgressBar(q, true, 
true);
+               bar.refresh();
                progressBars.add(bar);
                p.add(bar);


Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java    
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java    
2007-08-02 00:41:02 UTC (rev 14458)
@@ -18,10 +18,15 @@
 import java.awt.Color;

 import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.DefaultCellEditor;
 import javax.swing.event.TableModelEvent;

+
 import java.util.Vector;
+import java.util.Iterator;
+import java.util.Enumeration;
+
 import java.awt.Component;

 import java.awt.event.ActionListener;
@@ -30,6 +35,7 @@
 import javax.swing.table.TableCellEditor;
 import javax.swing.event.CellEditorListener;

+
 import javax.swing.JComboBox;
 import javax.swing.JTextField;

@@ -44,8 +50,14 @@
 import java.awt.Font;

 import java.awt.event.KeyEvent;
+import javax.swing.JTree;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeNode;

+import java.util.HashMap;

+
 import thaw.gui.Table;
 import thaw.gui.IconBox;
 import thaw.core.I18n;
@@ -113,10 +125,18 @@
        private int orderBy;
        private boolean desc;

+       private JCheckBox seeTree;
        private JCheckBox seeUnsigned;
        private JComboBox minTrustLevel;
        private int minTrustLevelInt;

+
+
+       /** for the thread tree **/
+       private MessageNodeTree messageNodeTree;
+       private HashMap messageNodeHashMap;
+
+
        public MessageTreeTable(MiniFrostPanel mainPanel) {
                this.mainPanel = mainPanel;

@@ -182,9 +202,7 @@
                table.addMouseListener(this);

                setBoard(null);
-               refresh();

-
                panel.add(northPanel, BorderLayout.NORTH);
                panel.add(new JScrollPane(table), BorderLayout.CENTER);

@@ -216,8 +234,15 @@
                seeUnsigned = new 
JCheckBox(I18n.getMessage("thaw.plugin.miniFrost.seeUnsigned"), true);
                seeUnsigned.addActionListener(this);

+               seeTree = new 
JCheckBox(I18n.getMessage("thaw.plugin.miniFrost.seeTree"));
+               seeTree.setSelected(true);
+               seeTree.addActionListener(this);

+               JPanel southWestPanel = new JPanel(new GridLayout(2, 1));
+               southWestPanel.add(new JLabel(""));
+               southWestPanel.add(seeTree);

+
                JPanel southEastPanel = new JPanel(new GridLayout(2, 1));

                JPanel southEastPanelTop = new JPanel(new GridLayout(1, 2, 10, 
10));
@@ -229,12 +254,15 @@

                JPanel southPanel = new JPanel(new BorderLayout(5, 5));

+               southPanel.add(southWestPanel, BorderLayout.WEST);
                southPanel.add(new JLabel(""), BorderLayout.CENTER);
                southPanel.add(southEastPanel, BorderLayout.EAST);

                panel.add(southPanel, BorderLayout.SOUTH);

                mainPanel.getBoardTree().addObserver(this);
+
+               refresh();
        }


@@ -260,6 +288,196 @@
                return panel;
        }

+
+
+
+       protected class MessageNodeTree extends JTree {
+
+               public MessageNodeTree(TreeNode root) {
+                       super(root);
+
+                       DefaultTreeCellRenderer cellRenderer = 
(DefaultTreeCellRenderer)getCellRenderer();
+                       
cellRenderer.setOpenIcon(cellRenderer.getDefaultLeafIcon());
+                       
cellRenderer.setClosedIcon(cellRenderer.getDefaultLeafIcon());
+               }
+
+               protected int visibleRow;
+               protected int rowHeight;
+
+               public void setBounds(int x, int y, int w, int h) {
+                       super.setBounds(x, 0, w, table.getHeight());
+               }
+
+               public void paint(java.awt.Graphics g) {
+                       g.translate(0, (-(visibleRow+1) * rowHeight));
+                       super.paint(g);
+               }
+
+               public Component getTableCellRendererComponent(JTable table,
+                                                              Object value,
+                                                              boolean 
isSelected,
+                                                              boolean hasFocus,
+                                                              int row, int 
column) {
+                       if (isSelected)
+                               setSelectionRow(row+1); /* don't forget the 
root :) */
+
+                       setRowHeight(table.getRowHeight());
+                       rowHeight = table.getRowHeight();
+
+                       Message msg = ((MessageNode)value).getMessage();
+
+                       int mod = Font.PLAIN;
+
+                       if (msg != null) {
+
+                               if (!msg.isRead()) {
+                                       mod = Font.BOLD;
+                               }
+
+                               if (msg.isArchived()) {
+                                       if (mod == Font.BOLD)
+                                               mod = Font.ITALIC | Font.BOLD;
+                                       else
+                                               mod = Font.ITALIC;
+                               }
+
+                       } else
+                               mod = Font.ITALIC;
+
+                       setFont(getFont().deriveFont(mod));
+
+                       if (msg != null && msg.getSender().getIdentity() != 
null)
+                               
setForeground(msg.getSender().getIdentity().getTrustLevelColor());
+
+                       visibleRow = row;
+                       return this;
+               }
+       }
+
+
+       protected static class RootMessageNode implements TreeNode {
+               private Vector children;
+
+               public RootMessageNode(Vector nodes) {
+                       this.children = nodes;
+               }
+
+               public Enumeration children() {
+                       return children.elements();
+               }
+
+               public boolean getAllowsChildren() {
+                       return true;
+               }
+
+               public TreeNode getChildAt(int childIndex) {
+                       return (MessageNode)children.get(childIndex);
+               }
+
+               public int getChildCount() {
+                       return children.size();
+               }
+
+               public int getIndex(TreeNode node) {
+                       return children.indexOf(node);
+               }
+
+               public TreeNode getParent() {
+                       return null;
+               }
+
+               public boolean isLeaf() {
+                       return (children.size() == 0);
+               }
+       }
+
+
+       protected static class MessageNode implements TreeNode {
+               private Vector children;
+
+               private boolean hasParent;
+               private TreeNode parent;
+
+               private Message msg;
+
+               public MessageNode(Message msg) {
+                       this.parent = null;
+                       this.msg = msg;
+                       children = new Vector(0);
+               }
+
+               public Message getMessage() {
+                       return msg;
+               }
+
+               public void setParent(TreeNode node) {
+                       parent = node;
+               }
+
+               /**
+                * will register
+                */
+               public void setParent(HashMap messageNodes) {
+                       String inReplyTo;
+
+                       if (msg != null && (inReplyTo = msg.getInReplyToId()) 
!= null) {
+                               hasParent = true;
+
+                               MessageNode node = 
(MessageNode)messageNodes.get(inReplyTo);
+
+                               if (node != null) {
+                                       setParent(node);
+                                       node.registerChild(this);
+                               }
+                       }
+               }
+
+               public boolean hasParent() {
+                       return hasParent;
+               }
+
+               public void registerChild(MessageNode node) {
+                       children.add(node);
+               }
+
+               public java.util.Enumeration children() {
+                       return children.elements();
+               }
+
+               public boolean getAllowsChildren() {
+                       return true;
+               }
+
+               public TreeNode getChildAt(int childIndex) {
+                       return (MessageNode)children.get(childIndex);
+               }
+
+               public int getChildCount() {
+                       return children.size();
+               }
+
+               public int getIndex(TreeNode node) {
+                       return children.indexOf(node);
+               }
+
+               public TreeNode getParent() {
+                       return parent;
+               }
+
+               public boolean isLeaf() {
+                       return (children.size() == 0);
+               }
+
+               public String toString() {
+                       if (msg != null)
+                               return msg.getSubject();
+                       else
+                               return "(?)";
+               }
+       }
+
+
+
        protected class MessageTableRenderer extends Table.DefaultRenderer {
                private JCheckBox checkBoxRenderer;

@@ -273,27 +491,43 @@
                                                               final int row, 
final int column) {
                        Component c;

-                       Author author = model.getMsg(row).getSender();
+                       Message msg = model.getMsg(row);
+                       Author author = (msg != null ? msg.getSender() : null);

                        if (value instanceof Boolean) {
-                               
checkBoxRenderer.setSelected(((Boolean)value).booleanValue());

+                               checkBoxRenderer.setEnabled(msg != null);
+
+                               if (msg != null)
+                                       
checkBoxRenderer.setSelected(((Boolean)value).booleanValue());
+                               else
+                                       checkBoxRenderer.setSelected(false);
+
                                return checkBoxRenderer;
                        }

+                       if (value instanceof MessageNode) {
+                               return 
messageNodeTree.getTableCellRendererComponent(table,
+                                                                               
     value,
+                                                                               
     isSelected,
+                                                                               
     hasFocus,
+                                                                               
     row,
+                                                                               
     column);
+                       }
+
                        Color color = Color.BLACK;


-                       if (column == 2)
-                               value = author.toString();
-                       else if (column == 3) {
-                               if (author.getIdentity() != null)
+                       if (column == 2) {
+                               value = ((author != null) ? author.toString() : 
"(?)");
+                       } else if (column == 3) {
+                               if (author != null && author.getIdentity() != 
null)
                                        value = 
author.getIdentity().getTrustLevelStr();
                                else
                                        value = 
I18n.getMessage("thaw.plugin.signature.trustLevel.none");
                        }

-                       if (author.getIdentity() != null)
+                       if (author != null && author.getIdentity() != null)
                                color = 
author.getIdentity().getTrustLevelColor();

                        c = super.getTableCellRendererComponent(table, value, 
isSelected, hasFocus,
@@ -301,20 +535,22 @@

                        c.setForeground(color);

-                       Message msg = model.getMsg(row);
-
                        int mod = Font.PLAIN;

-                       if (!msg.isRead()) {
-                               mod = Font.BOLD;
-                       }
+                       if (msg != null) {
+                               if (!msg.isRead()) {
+                                       mod = Font.BOLD;
+                               }

-                       if (msg.isArchived()) {
-                               if (mod == Font.BOLD)
-                                       mod = Font.ITALIC | Font.BOLD;
-                               else
-                                       mod = Font.ITALIC;
+                               if (msg.isArchived()) {
+                                       if (mod == Font.BOLD)
+                                               mod = Font.ITALIC | Font.BOLD;
+                                       else
+                                               mod = Font.ITALIC;
+                               }
                        }
+                       else
+                               mod = Font.ITALIC;

                        c.setFont(c.getFont().deriveFont(mod));

@@ -349,7 +585,7 @@
                }

                public Message getMsg(int row) {
-                       return (Message)msgs.get(row);
+                       return ((MessageNode)msgs.get(row)).getMessage();
                }

                public Object getValueAt(int row, int column) {
@@ -358,25 +594,28 @@
                        }

                        if (column == 1) {
-                               Message msg = (Message)msgs.get(row);
-                               return "("+Integer.toString(msg.getRev()) + ") 
"+
-                                       msg.getSubject();
+                               return (MessageNode)msgs.get(row);
                        }

+                       Message msg = ((MessageNode)msgs.get(row)).getMessage();
+
+                       if (msg == null)
+                               return "(?)";
+
                        if (column == 2) {
-                               return ((Message)msgs.get(row)).getSender();
+                               return msg.getSender();
                        }

                        if (column == 3) {
-                               return ((Message)msgs.get(row)).getSender();
+                               return msg.getSender();
                        }

                        if (column == 4) {
-                               return ((Message)msgs.get(row)).getDate();
+                               return msg.getDate();
                        }

                        if (column == 5) {
-                               return ((Message)msgs.get(row));
+                               return msg; //.getMessage();
                        }

                        return null;
@@ -395,8 +634,12 @@


                public void setSelectedAll(boolean s) {
-                       for (int i = 0 ; i < selection.length ; i++)
-                               selection[i] = s;
+                       for (int i = 0 ; i < selection.length ; i++) {
+                               Message msg = 
((MessageNode)msgs.get(i)).getMessage();
+
+                               if (msg != null)
+                                       selection[i] = s;
+                       }
                }


@@ -406,7 +649,12 @@


                public void switchSelection(int row) {
-                       selection[row] = !selection[row];
+                       Message msg = ((MessageNode)msgs.get(row)).getMessage();
+
+                       if (msg != null)
+                               selection[row] = !selection[row];
+                       else
+                               selection[row] = false;
                }

                public Vector getMessages(Vector msgs) {
@@ -414,9 +662,14 @@
                }

                public void refresh(Message msg) {
-                       refresh(msgs.indexOf(msg));
+                       /* quick and dirty */
+                       refresh();
                }

+               public void refresh(MessageNode msgNode) {
+                       refresh(msgs.indexOf(msgNode));
+               }
+
                public void refresh(int row) {
                        if (row == -1) {
                                Logger.error(this, "Message not found in the 
list ?!");
@@ -447,14 +700,43 @@
                refresh(keywords, orderBy, desc, everywhereBox.isSelected());
        }

+
+       private boolean rebuildMsgList(Vector msgs, TreeNode node, int proof) {
+               if (node instanceof MessageNode)
+                       msgs.add(node);
+
+               if (proof >= 20) {
+                       Logger.notice(this, "Too proof, sorry");
+                       return false;
+               }
+
+               for(Enumeration e = node.children();
+                   e.hasMoreElements();) {
+                       TreeNode sub = (TreeNode)e.nextElement();
+                       if (!rebuildMsgList(msgs, sub, proof+1))
+                               return false;
+               }
+
+               return true;
+       }
+
+
+
        public void refresh(String[] keywords, int orderBy, boolean desc, 
boolean allBoards) {
                Vector msgs = null;

                if ((!allBoards) && targetBoard != null) {
-                       msgs = targetBoard.getMessages(keywords, orderBy,
-                                                      desc, 
seeArchived.isSelected(),
-                                                      seeUnsigned.isSelected(),
-                                                      minTrustLevelInt);
+                       Vector rawMsgs = targetBoard.getMessages(keywords, 
orderBy,
+                                                                desc, 
seeArchived.isSelected(),
+                                                                
seeUnsigned.isSelected(),
+                                                                
minTrustLevelInt);
+
+                       msgs = new Vector(rawMsgs.size());
+
+                       for(Iterator it = rawMsgs.iterator();
+                           it.hasNext();) {
+                               msgs.add(new MessageNode((Message)it.next()));
+                       }
                }

                if (allBoards) {
@@ -467,13 +749,97 @@
                                                                               
seeArchived.isSelected(),
                                                                               
seeUnsigned.isSelected(),
                                                                               
minTrustLevelInt);
-                               msgs.addAll(boardMsgs);
+                               for (Iterator it = boardMsgs.iterator();
+                                    it.hasNext();) {
+                                       msgs.add(new 
MessageNode((Message)it.next()));
+                               }
                        }
                }

-               if (msgs != null)
-                       model.setMessages(msgs);
+               if (msgs == null) {
+                       msgs = new Vector();
+               }

+               Logger.info(this, "Nmb msgs in the tree : 
"+Integer.toString(msgs.size()));
+
+               Vector rootNodes;
+
+               if (seeTree.isSelected()) {
+
+                       /** Filling in messageNodeHashMap **/
+                       messageNodeHashMap = new HashMap(msgs.size());
+
+                       for (Iterator it = msgs.iterator();
+                            it.hasNext();) {
+                               MessageNode node = (MessageNode)it.next();
+                               
messageNodeHashMap.put(node.getMessage().getMsgId(), node);
+                       }
+
+
+                       /** Building the tree **/
+                       for (Iterator it = msgs.iterator();
+                            it.hasNext();) {
+                               
((MessageNode)it.next()).setParent(messageNodeHashMap);
+                       }
+
+                       /** we search the nodes who should have a parent but 
haven't **/
+                       /* we don't use an iterator to avoid the collisions */
+                       for (int i = 0 ; i < msgs.size(); i++) {
+                               MessageNode node = (MessageNode)msgs.get(i);
+
+                               if (node.getParent() == null && 
node.hasParent()) {
+                                       MessageNode newEmptyNode = new 
MessageNode(null);
+                                       node.setParent(newEmptyNode);
+                                       newEmptyNode.registerChild(node);
+
+                                       /* we replace */
+                                       msgs.set(i, newEmptyNode);
+                                       /* and readd the other node at the end 
of the vector */
+                                       msgs.add(node);
+                               }
+                       }
+
+                       rootNodes = new Vector();
+
+                       /* Building the root tree */
+
+                       for (Iterator it = msgs.iterator();
+                            it.hasNext();) {
+                               MessageNode node = (MessageNode)it.next();
+
+                               if (node.getParent() == null)
+                                       rootNodes.add(node);
+                       }
+               } else
+                       rootNodes = msgs;
+
+
+               /* we add all the message without any parent to the root */
+               RootMessageNode rootNode = new RootMessageNode(rootNodes);
+
+               for (Iterator it = rootNodes.iterator();
+                    it.hasNext();) {
+                       ((MessageNode)it.next()).setParent(rootNode);
+               }
+
+
+               /** and to finish, the tree itself **/
+               messageNodeTree = new MessageNodeTree(rootNode);
+
+               for (int i = 0 ; i < messageNodeTree.getRowCount() ; i++) {
+                       messageNodeTree.expandRow(i);
+               }
+
+               /** next we check we have the same order in the tree and in the 
table **/
+
+               msgs = new Vector();
+
+               rebuildMsgList(msgs, rootNode, 0);
+
+               Logger.info(this, "Nmb msgs in the tree : 
"+Integer.toString(msgs.size()));
+
+               model.setMessages(msgs);
+
                model.refresh();
        }

@@ -520,7 +886,8 @@
        public void actionPerformed(ActionEvent e) {
                if (e.getSource() == seeUnsigned
                    || e.getSource() == minTrustLevel
-                   || e.getSource() == seeArchived) {
+                   || e.getSource() == seeArchived
+                   || e.getSource() == seeTree) {

                        minTrustLevelInt = 
Identity.getTrustLevel((String)(minTrustLevel.getSelectedItem()));
                        refresh();
@@ -588,12 +955,17 @@
                int row    = table.rowAtPoint(e.getPoint());
                int column = table.columnAtPoint(e.getPoint());

+               Logger.info(this, "Mouse clicked");
+
                if (column == 0) {
                        model.switchSelection(row);
                        refresh(row);
                } else {
-                       
mainPanel.getMessagePanel().setMessage(model.getMsg(row));
-                       mainPanel.displayMessage();
+                       Message msg = model.getMsg(row);
+                       if (msg != null) {
+                               mainPanel.getMessagePanel().setMessage(msg);
+                               mainPanel.displayMessage();
+                       }
                }
        }


Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java   
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java   
2007-08-02 00:41:02 UTC (rev 14458)
@@ -148,6 +148,8 @@
                                PreparedStatement st;

                                String query = "SELECT frostKSKMessages.id, "+
+                                       "       frostKSKMessages.msgId, "+
+                                       "       frostKSKMessages.inReplyToId, "+
                                        "       frostKSKMessages.subject, "+
                                        "       frostKSKMessages.nick, "+
                                        "       frostKSKMessages.sigId, "+
@@ -205,6 +207,8 @@
                                        String nick = set.getString("nickname");

                                        v.add(new KSKMessage(set.getInt("id"),
+                                                            
set.getString("msgId"),
+                                                            
set.getString("inReplyToId"),
                                                             
set.getString("subject"),
                                                             
set.getString("nick"),
                                                             sigId,
@@ -252,6 +256,8 @@
                                PreparedStatement st;

                                String query = "SELECT frostKSKMessages.id AS 
id, "+
+                                       "       frostKSKMessages.msgId AS 
msgId, "+
+                                       "       frostKSKMessages.inReplyToId AS 
inReplyToId, "+
                                        "       frostKSKMessages.subject AS 
subject, "+
                                        "       frostKSKMessages.nick AS nick, 
"+
                                        "       frostKSKMessages.sigId AS 
sigId, "+
@@ -286,6 +292,8 @@
                                        int sigId = set.getInt("sigId");

                                        return new KSKMessage(set.getInt("id"),
+                                                             
set.getString("msgId"),
+                                                             
set.getString("inReplyToId"),
                                                              
set.getString("subject"),
                                                              
set.getString("nick"),
                                                              sigId,

Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 
2007-08-02 00:41:02 UTC (rev 14458)
@@ -38,6 +38,8 @@

        /* content is not kept in memory (at least not here) */
        private int            id;
+       private String         idStr;
+       private String         inReplyToStr;
        private String         subject;
        private KSKAuthor      author;
        private int            sigId;
@@ -165,24 +167,36 @@
        }


-       public KSKMessage(int id,
+       public String getMsgId() {
+               return idStr;
+       }
+
+       public String getInReplyToId() {
+               return inReplyToStr;
+       }
+
+
+       public KSKMessage(int id, String idStr,
+                         String inReplyToStr,
                          String subject, String nick,
                          int sigId, Identity identity,
                          java.util.Date date, int rev,
                          boolean read, boolean archived,
                          Identity encryptedFor,
                          KSKBoard board) {
-               this.id        = id;
-               this.subject   = subject;
+               this.id           = id;
+               this.idStr        = idStr;
+               this.inReplyToStr = inReplyToStr;
+               this.subject      = subject;

-               this.author    = new KSKAuthor(nick, identity);
+               this.author       = new KSKAuthor(nick, identity);

-               this.sigId     = sigId;
-               this.date      = date;
-               this.rev       = rev;
-               this.read      = read;
-               this.archived  = archived;
-               this.board     = board;
+               this.sigId        = sigId;
+               this.date         = date;
+               this.rev          = rev;
+               this.read         = read;
+               this.archived     = archived;
+               this.board        = board;
                this.encryptedFor = encryptedFor;
        }

@@ -335,34 +349,7 @@
        }


-       protected String getMsgId() {
-               try {
-                       Hsqldb db = board.getFactory().getDb();

-                       synchronized(db.dbLock) {
-
-                               PreparedStatement st;
-
-                               st = 
db.getConnection().prepareStatement("SELECT msgId "+
-                                                                        "FROM 
frostKSKMessages "+
-                                                                        "WHERE 
id = ? "+
-                                                                        "LIMIT 
1");
-                               st.setInt(1, id);
-
-                               ResultSet set = st.executeQuery();
-
-                               if (!set.next())
-                                       return null;
-
-                               return set.getString("msgId");
-                       }
-               } catch(SQLException e) {
-                       Logger.error(this, "Error while getting the messages : 
"+e.toString());
-                       return null;
-               }
-       }
-
-
        public String getRawMessage() {
                try {
                        Hsqldb db = board.getFactory().getDb();

Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java  
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java  
2007-08-02 00:41:02 UTC (rev 14458)
@@ -8,6 +8,9 @@

 public interface Message /* extends TreeNode */ {

+       public String getMsgId();
+       public String getInReplyToId();
+
        //public int getParentId();

        public String getSubject();


Reply via email to