[Thaw-dev] r18024 - in trunk/apps/Thaw/src/thaw: fcp i18n pl…

Top Page
Delete this message
Reply to this message
Author: jflesch
Date:  
To: thaw
Subject: [Thaw-dev] r18024 - in trunk/apps/Thaw/src/thaw: fcp i18n plugins plugins/queueWatcher plugins/signatures plugins/webOfTrust
Author: jflesch
Date: 2008-02-17 20:39:29 +0000 (Sun, 17 Feb 2008)
New Revision: 18024

Added:
trunk/apps/Thaw/src/thaw/plugins/signatures/IdentityTable.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListTable.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustTab.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentityList.java
Modified:
trunk/apps/Thaw/src/thaw/fcp/FCPMetaTransferQuery.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/WebOfTrust.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListUploader.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustConfigTab.java
trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentity.java
Log:
WoT : Add a tab to browser users trust lists

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPMetaTransferQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPMetaTransferQuery.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPMetaTransferQuery.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -4,6 +4,7 @@
import java.util.Observable;
import java.util.Observer;
import java.util.Hashtable;
+import java.util.Vector;

import thaw.core.Logger;

@@ -33,7 +34,9 @@
    }
    
    private void add(String id, FCPTransferQuery query) {
-        idToQuery.put(id, query);
+        synchronized(idToQuery) {
+            idToQuery.put(id, query);
+        }
    }

    /***
@@ -83,7 +86,9 @@
    }
    
    private void remove(String id) {
-        idToQuery.remove(id);
+        synchronized(idToQuery) {
+            idToQuery.remove(id);
+        }
    }
    
    /**
@@ -112,11 +117,16 @@


    public void stopAll() {
-        for (Iterator it = idToQuery.values().iterator(); it.hasNext() ; ) {
-            
+        Vector queries = new Vector();
+
+        synchronized(idToQuery) {
+            for (Iterator it = idToQuery.values().iterator(); it.hasNext() ; )
+                queries.add(it.next());
+        }
+
+        for (Iterator it = queries.iterator(); it.hasNext() ; ) {
            FCPTransferQuery query = (FCPTransferQuery)it.next();
            stop(query);
-            
        }
    }

@@ -128,8 +138,12 @@
            String targetId;
            
            if (msg != null && (targetId = msg.getValue(idField)) != null) {
-                Observer obs = (Observer)(idToQuery.get(targetId));
+                Observer obs;
                
+                synchronized(idToQuery) {
+                    obs = (Observer)(idToQuery.get(targetId));
+                }
+                
                if (obs != null) {
                    /* we redirect only to the target FCPTransferQuery */
                    obs.update(o, param);

Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties    2008-02-17 20:39:29 UTC (rev 18024)
@@ -726,6 +726,12 @@
thaw.plugin.wot.usedIdentity=Identité utilisée pour publier la liste de confiances
thaw.plugin.wot.usedIdentity.none=[Ne pas publier la liste de confiance]
thaw.plugin.wot.numberOfRefresh=Nombre de liste de confiances à rafraichir simultanément
+thaw.plugin.wot.score=Score
+thaw.plugin.wot.yourTrustList=Votre liste de confiances:
+thaw.plugin.wot.itsTrustList=Liste de confiance de l'utilisateur:
+thaw.plugin.wot.itsTrustLevel=Niveau de confiance de l'utilisateur
+thaw.plugin.wot.yourTrustLevel=Votre niveau de confiance
+thaw.plugin.wot.wotTrustLevel=Niveau de confiance calculé par le WoT

## node configurator


Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties    2008-02-17 20:39:29 UTC (rev 18024)
@@ -733,6 +733,12 @@
thaw.plugin.wot.usedIdentity=Identity used to publish your trust list
thaw.plugin.wot.usedIdentity.none=[Don't publish the trust list]
thaw.plugin.wot.numberOfRefresh=Number of trust list to refresh simultaneously
+thaw.plugin.wot.score=Score
+thaw.plugin.wot.yourTrustList=Your trust list:
+thaw.plugin.wot.itsTrustList=User's trust list:
+thaw.plugin.wot.itsTrustLevel=User's trust level
+thaw.plugin.wot.yourTrustLevel=Your trust level
+thaw.plugin.wot.wotTrustLevel=Computed trust level

##?Node configurator


Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2008-02-17 20:39:29 UTC (rev 18024)
@@ -726,6 +726,12 @@
thaw.plugin.wot.usedIdentity=Identit\u00e9 utilis\u00e9e pour publier la liste de confiances
thaw.plugin.wot.usedIdentity.none=[Ne pas publier la liste de confiance]
thaw.plugin.wot.numberOfRefresh=Nombre de liste de confiances \u00e0 rafraichir simultan\u00e9ment
+thaw.plugin.wot.score=Score
+thaw.plugin.wot.yourTrustList=Votre liste de confiances:
+thaw.plugin.wot.itsTrustList=Liste de confiance de l'utilisateur:
+thaw.plugin.wot.itsTrustLevel=Niveau de confiance de l'utilisateur
+thaw.plugin.wot.yourTrustLevel=Votre niveau de confiance
+thaw.plugin.wot.wotTrustLevel=Niveau de confiance calcul\u00e9 par le WoT

## node configurator


Modified: trunk/apps/Thaw/src/thaw/plugins/WebOfTrust.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/WebOfTrust.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/WebOfTrust.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -20,6 +20,7 @@
    private Signatures sigs;
    
    private WebOfTrustConfigTab configTab = null;
+    private WebOfTrustTab wotTab = null;
    
    private int used = 0;
    
@@ -172,10 +173,23 @@
             thaw.gui.IconBox.minTrust,
             configTab.getPanel());
        
+        configTab.addAsObserver();
+        
        if (core.getConfig().getValue("wotActivated") == null
-                || Boolean.valueOf(core.getConfig().getValue("wotActivated")).booleanValue())
+                || Boolean.valueOf(core.getConfig().getValue("wotActivated")).booleanValue()) {
                initThread();
+                
+                wotTab = new WebOfTrustTab(db, core.getConfig());

+                core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.wot"),
+                             thaw.gui.IconBox.trust,
+                             wotTab.getPanel());
+
+                core.getMainWindow().getMainFrame().validate();
+
+                wotTab.loadState();
+        }
+
        return true;
    }
    
@@ -255,6 +269,7 @@
        used--;
        
        if (configTab != null) {
+            configTab.deleteAsObserver();
            core.getConfigWindow().removeTab(configTab.getPanel());
            configTab = null;
        }
@@ -263,6 +278,11 @@
            unloadDeps(core);
        }
        
+        if (wotTab != null) {
+            core.getMainWindow().removeTab(wotTab.getPanel());
+            wotTab = null;
+        }
+        
        stopThread();
    }


Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -86,8 +86,7 @@
    public QueueWatcher queueWatcher;

    public QueuePanel(final Core core, final QueueWatcher queueWatcher,
-             final DetailPanel detailPanel,
-             boolean isForInsertionQueue) {
+                    final DetailPanel detailPanel, boolean isForInsertionQueue) {

        this.queueWatcher = queueWatcher;


Added: trunk/apps/Thaw/src/thaw/plugins/signatures/IdentityTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/signatures/IdentityTable.java     (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/signatures/IdentityTable.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -0,0 +1,179 @@
+package thaw.plugins.signatures;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.Observable;
+import java.util.Vector;
+
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.TableModelEvent;
+import thaw.core.Config;
+import thaw.core.I18n;
+import thaw.gui.Table;
+
+public class IdentityTable extends Observable implements MouseListener {
+    private static final long serialVersionUID = -6972180330110075151L;
+    
+    private thaw.gui.Table table;
+    
+    private IdentityModel model;
+    private IdentityRenderer renderer;
+
+    public IdentityTable(Config config, String prefix, boolean showDup) {
+        model = new IdentityModel(showDup);
+        table = new Table(config, prefix, model);
+        table.setDefaultRenderer(table.getColumnClass(0), renderer = new IdentityRenderer(model));
+        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        table.addMouseListener(this);
+    }
+    
+    public void setModel(IdentityModel model) {
+        this.model = model;
+        table.setModel(model);
+        renderer.setModel(model);
+    }
+    
+    public static class IdentityModel extends javax.swing.table.AbstractTableModel {
+        private static final long serialVersionUID = -7614528570324908651L;
+
+        public static String[] columnNames = {
+            I18n.getMessage("thaw.plugin.signature.nickname"),
+            I18n.getMessage("thaw.plugin.signature.trustLevel"),
+            I18n.getMessage("thaw.plugin.signature.isDup")
+        };
+
+        private Vector identities;
+        
+        private boolean showDup;
+
+        public IdentityModel(boolean showDup) {
+            this.showDup = showDup;
+        }
+
+        public void setIdentities(Vector i) {
+            identities = i;
+
+            final TableModelEvent event = new TableModelEvent(this);
+            fireTableChanged(event);
+        }
+        
+        public Vector getIdentities() {
+            return identities;
+        }
+
+        public int getRowCount() {
+            if (identities == null)
+                return 0;
+
+            return identities.size();
+        }
+
+        public int getColumnCount() {
+            if (showDup)
+                return columnNames.length;
+            return columnNames.length-1;
+        }
+
+        public String getColumnName(final int column) {
+            return columnNames[column];
+        }
+
+        public Object getValueAt(int row, int column) {
+            if (identities == null)
+                return null;
+
+            if (column == 0)
+                return ((Identity)identities.get(row)).toString();
+
+            if (column == 1)
+                return ((Identity)identities.get(row)).getTrustLevelStr();
+
+            return null;
+        }
+
+        public Identity getIdentity(int line) {
+            return (Identity)identities.get(line);
+        }
+    }
+
+
+    
+    public static class IdentityRenderer extends thaw.gui.Table.DefaultRenderer {
+        private static final long serialVersionUID = 5405210731032136559L;
+        private IdentityModel model;
+
+        public IdentityRenderer(IdentityModel model) {
+            super();
+            setModel(model);
+        }
+        
+        public void setModel(IdentityModel model) {
+            this.model = model;
+        }
+
+        public java.awt.Component getTableCellRendererComponent(final JTable table, Object value,
+                                    final boolean isSelected, final boolean hasFocus,
+                                    final int row, final int column) {
+
+            if (value instanceof String
+             && "X".equals(value)) {
+                value = thaw.gui.IconBox.minClose;
+            }
+
+            java.awt.Component c = super.getTableCellRendererComponent(table, value,
+                                         isSelected, hasFocus,
+                                         row, column);
+            Identity i = model.getIdentity(row);
+
+            c.setForeground(i.getTrustLevelColor());
+
+            return c;
+        }
+
+    }
+
+    public void setIdentities(Vector ids) {
+        model.setIdentities(ids);
+    }
+    
+    public thaw.gui.Table getTable() {
+        return table;
+    }
+    
+    public Identity getIdentity(int row) {
+        return model.getIdentity(row);
+    }
+    
+    public Vector getIdentities() {
+        return model.getIdentities();
+    }
+
+
+    public void mouseClicked(MouseEvent arg0) {
+        setChanged();
+        notifyObservers(model.getIdentity(table.getSelectedRow()));
+    }
+
+
+
+    public void mouseEntered(MouseEvent arg0) {
+    }
+
+
+
+    public void mouseExited(MouseEvent arg0) {
+    }
+
+
+
+    public void mousePressed(MouseEvent arg0) {
+    }
+
+
+
+    public void mouseReleased(MouseEvent arg0) {
+    }
+
+
+}

Modified: trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -8,9 +8,7 @@
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
-import javax.swing.JTable;
import javax.swing.ListSelectionModel;
-import javax.swing.event.TableModelEvent;
import javax.swing.JComboBox;

import java.awt.BorderLayout;
@@ -33,8 +31,6 @@

import thaw.gui.IconBox;
import thaw.gui.FileChooser;
-import thaw.gui.Table;
-
import java.util.Observer;
import java.util.Observable;

@@ -379,106 +375,10 @@
    /********************* OTHER IDENTITIES **********************************/


-    protected class IdentityModel extends javax.swing.table.AbstractTableModel {
-        private static final long serialVersionUID = -7614528570324908651L;
-
-        public String[] columnNames = {
-            I18n.getMessage("thaw.plugin.signature.nickname"),
-            I18n.getMessage("thaw.plugin.signature.trustLevel"),
-            I18n.getMessage("thaw.plugin.signature.isDup")
-        };
-
-        private Vector identities;
-
-        public IdentityModel() {
-
-        }
-
-        public void setIdentities(Vector i) {
-            identities = i;
-
-            final TableModelEvent event = new TableModelEvent(this);
-            fireTableChanged(event);
-        }
-        
-        public Vector getIdentities() {
-            return identities;
-        }
-
-        public int getRowCount() {
-            if (identities == null)
-                return 0;
-
-            return identities.size();
-        }
-
-        public int getColumnCount() {
-            return columnNames.length;
-        }
-
-        public String getColumnName(final int column) {
-            return columnNames[column];
-        }
-
-        public Object getValueAt(int row, int column) {
-            if (identities == null)
-                return null;
-
-            if (column == 0)
-                return ((Identity)identities.get(row)).toString();
-
-            if (column == 1)
-                return ((Identity)identities.get(row)).getTrustLevelStr();
-
-            if (column == 2)
-                return ((Identity)identities.get(row)).isDup() ?
-                    "X" : "";
-
-            return null;
-        }
-
-        public Identity getIdentity(int line) {
-            return (Identity)identities.get(line);
-        }
-    }
-
-
-    protected class OtherIdentitiesRenderer extends thaw.gui.Table.DefaultRenderer {
-        private static final long serialVersionUID = 5405210731032136559L;
-        private IdentityModel model;
-
-        public OtherIdentitiesRenderer(IdentityModel model) {
-            super();
-            this.model = model;
-        }
-
-        public java.awt.Component getTableCellRendererComponent(final JTable table, Object value,
-                                    final boolean isSelected, final boolean hasFocus,
-                                    final int row, final int column) {
-
-            if (value instanceof String
-             && "X".equals(value)) {
-                value = thaw.gui.IconBox.minClose;
-            }
-
-            java.awt.Component c = super.getTableCellRendererComponent(table, value,
-                                         isSelected, hasFocus,
-                                         row, column);
-            Identity i = model.getIdentity(row);
-
-            c.setForeground(i.getTrustLevelColor());
-
-            return c;
-        }
-
-    }
-
-
    protected class OtherIdentitiesPanel implements ActionListener, TrustListParser.TrustListContainer {
        private JDialog dialog;
-        private IdentityModel model;

-        private Table table;
+        private IdentityTable table;

        private JButton close;

@@ -497,16 +397,11 @@

            dialog.getContentPane().add(label, BorderLayout.NORTH);

-            model = new IdentityModel();
+            table = new IdentityTable(config, "other_identities_table", true);

-            OtherIdentitiesRenderer renderer = new OtherIdentitiesRenderer(model);
+            dialog.getContentPane().add(new JScrollPane(table.getTable()),
+                                        BorderLayout.CENTER);

-            table = new Table(config, "other_identities_table", model);
-            table.setDefaultRenderer(table.getColumnClass(0), renderer);
-
-            dialog.getContentPane().add(new JScrollPane(table),
-                         BorderLayout.CENTER);
-
            JPanel eastPanel = new JPanel(new BorderLayout());

            JPanel buttonsPanel = new JPanel(new GridLayout(Identity.trustLevelInt.length +4, 1));
@@ -564,7 +459,7 @@
        }

        public void updateList() {
-            model.setIdentities(Identity.getOtherIdentities(db));
+            table.setIdentities(Identity.getOtherIdentities(db));
        }

        public void actionPerformed(ActionEvent e) {
@@ -583,7 +478,7 @@
                
                File file = chooser.askOneFile();

-                TrustListParser.exportTrustList(model.getIdentities(), file);
+                TrustListParser.exportTrustList(table.getIdentities(), file);

                return;

@@ -603,7 +498,7 @@
                return;
            }

-            int[] rows = table.getSelectedRows();
+            int[] rows = table.getTable().getSelectedRows();

            for (int i = 0 ; i < rows.length ; i++) {
                int row = rows[i];
@@ -611,7 +506,7 @@
                if (row < 0)
                    continue;

-                Identity target = model.getIdentity(row);
+                Identity target = table.getIdentity(row);

                if (target == null)
                    continue;

Added: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListTable.java     (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListTable.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -0,0 +1,120 @@
+package thaw.plugins.webOfTrust;
+
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
+
+import javax.swing.event.TableModelEvent;
+
+import thaw.core.Config;
+import thaw.core.I18n;
+import thaw.gui.Table;
+import thaw.plugins.Hsqldb;
+import thaw.plugins.signatures.Identity;
+import thaw.plugins.signatures.IdentityTable;
+
+public class TrustListTable extends Observable implements Observer {
+    private Hsqldb db;
+    
+    private IdentityTable table;
+    private TrustListModel model;
+    
+    public TrustListTable(Hsqldb db, Config config) {
+        this.db = db;
+        
+        model = new TrustListModel();
+
+        table = new IdentityTable(config, "wotIdList_", false);
+        table.setModel(model);
+        table.addObserver(this);
+
+        refresh(null);
+    }
+    
+    public static class TrustListModel extends IdentityTable.IdentityModel {
+        private static final long serialVersionUID = 2742525676359889703L;
+        
+        private Vector trustLinks = null;
+
+        public TrustListModel() {
+            super(false);
+        }
+        public static String[] columnNames = {
+            I18n.getMessage("thaw.plugin.signature.nickname"),
+            I18n.getMessage("thaw.plugin.wot.itsTrustLevel"),
+            I18n.getMessage("thaw.plugin.wot.yourTrustLevel"),
+            I18n.getMessage("thaw.plugin.wot.wotTrustLevel")
+        };
+
+        public void setIdentities(Vector i) {
+            trustLinks = i;
+
+            final TableModelEvent event = new TableModelEvent(this);
+            fireTableChanged(event);
+        }
+        
+        public Vector getIdentities() {
+            return null;
+        }
+
+        public int getRowCount() {
+            if (trustLinks == null)
+                return 0;
+
+            return trustLinks.size();
+        }
+
+        public int getColumnCount() {
+            return columnNames.length;
+        }
+
+        public String getColumnName(final int column) {
+            return columnNames[column];
+        }
+
+        public Object getValueAt(int row, int column) {
+            if (trustLinks == null)
+                return null;
+
+            if (column == 0)
+                return ((WotIdentity.TrustLink)trustLinks.get(row)).getDestination().toString();
+            
+            if (column == 1)
+                return Identity.getTrustLevelStr(((WotIdentity.TrustLink)trustLinks.get(row)).getLinkTrustLevel());
+            
+            if (column == 2)
+                return ((WotIdentity.TrustLink)trustLinks.get(row)).getDestination().getUserTrustLevelStr();
+
+            if (column == 3)
+                return ((WotIdentity.TrustLink)trustLinks.get(row)).getDestination().getTrustLevelStr();
+        
+
+            return null;
+        }
+
+        public Identity getIdentity(int row) {
+            return ((WotIdentity.TrustLink)trustLinks.get(row)).getDestinationAsSeenByTheSource();
+        }
+        
+    }
+    
+    public void refresh(Identity src) {
+        Vector ids;
+
+        if (src != null)
+            ids = WotIdentity.getTrustList(db, src);
+        else
+            ids = new Vector();
+
+        model.setIdentities(ids);
+    }
+    
+    public Table getTable() {
+        return table.getTable();
+    }
+
+    public void update(Observable arg0, Object arg1) {
+        setChanged();
+        notifyObservers(arg1);
+    }
+}

Modified: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListUploader.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListUploader.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/TrustListUploader.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -264,7 +264,7 @@
                                            "trustList", FreenetURIHelper.convertSSKtoUSK(privateKey)+"/", /* the convertion fonction forget the '/' */
                                            2, /* priority */
                                         false, /* global */
-                                         FCPClientPut.PERSISTENCE_FOREVER); /* persistence */
+                                         FCPClientPut.PERSISTENCE_UNTIL_DISCONNECT); /* persistence */
                upload.addObserver(this);

                queueManager.addQueryToTheRunningQueue(upload);

Modified: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustConfigTab.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustConfigTab.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustConfigTab.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -16,9 +16,10 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.plugins.Hsqldb;
+import thaw.plugins.Signatures;
import thaw.plugins.signatures.Identity;

-public class WebOfTrustConfigTab implements Observer, ActionListener {
+public class WebOfTrustConfigTab implements Observer, ActionListener, Signatures.SignaturesObserver {
    private thaw.core.ConfigWindow configWindow;
    private Config config;
    private Hsqldb db;
@@ -58,9 +59,18 @@
        readActivated();
        
        activated.addActionListener(this);
+    }
+    
+    public void addAsObserver() {
        configWindow.addObserver(this);
+        Signatures.addObserver(this);
    }
    
+    public void deleteAsObserver() {
+        configWindow.deleteObserver(this);
+        Signatures.deleteObserver(this);
+    }
+    
    private void resetContentOfIdentitySelector() {
        Vector identities = Identity.getYourIdentities(db);
        
@@ -142,4 +152,18 @@
    public void actionPerformed(ActionEvent e) {
        readActivated();
    }
+
+    public void identityUpdated(Identity i) {
+        // TODO Raccord de méthode auto-généré
+        
+    }
+
+    public void privateIdentityAdded(Identity i) {
+        reloadSettings();
+    }
+
+    public void publicIdentityAdded(Identity i) {
+        // TODO Raccord de méthode auto-généré
+        
+    }
}

Added: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustTab.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustTab.java     (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WebOfTrustTab.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -0,0 +1,93 @@
+package thaw.plugins.webOfTrust;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.util.Observable;
+import java.util.Observer;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+
+import thaw.core.Config;
+import thaw.core.I18n;
+import thaw.plugins.Hsqldb;
+import thaw.plugins.Signatures;
+import thaw.plugins.signatures.Identity;
+
+
+public class WebOfTrustTab implements Signatures.SignaturesObserver, Observer {
+    
+    private Config config;
+    
+    private JSplitPane mainSplit;
+    private JPanel rightPanel;
+    private JPanel itsTrustListPanel;
+
+    private WotIdentityList idList;
+    private TrustListTable trustListTable;
+    
+    public WebOfTrustTab(Hsqldb db, Config config) {
+        this.config = config;
+        
+        JPanel leftPanel;
+                
+        leftPanel = new JPanel(new BorderLayout(5,5));
+        rightPanel = new JPanel(new GridLayout(1, 1));
+        itsTrustListPanel = new JPanel(new BorderLayout(5,5));
+        
+        idList = new WotIdentityList(db, config);
+        trustListTable = new TrustListTable(db, config);
+        
+        leftPanel.add(new JLabel(I18n.getMessage("thaw.plugin.wot.yourTrustList")), BorderLayout.NORTH);
+        leftPanel.add(new JScrollPane(idList.getList()), BorderLayout.CENTER);
+        itsTrustListPanel.add(new JLabel(I18n.getMessage("thaw.plugin.wot.itsTrustList")), BorderLayout.NORTH);
+        itsTrustListPanel.add(new JScrollPane(trustListTable.getTable()), BorderLayout.CENTER);
+        
+        rightPanel.add(itsTrustListPanel);
+        
+        mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
+                                    leftPanel, rightPanel);
+        
+        idList.addObserver(this);
+    }
+    
+    public void loadState() {
+        Signatures.addObserver(this);
+        
+        mainSplit.setResizeWeight(0.5);
+        
+        String val;
+
+        if ((val = config.getValue("wotMainSplitPosition")) != null)
+            mainSplit.setDividerLocation(Integer.parseInt(val));
+        else
+            mainSplit.setDividerLocation(350);
+    }
+    
+    public JSplitPane getPanel() {
+        return mainSplit;
+    }
+    
+    public void saveState() {
+        Signatures.deleteObserver(this);
+        
+        config.setValue("wotMainSplitPosition",
+                        Integer.toString(mainSplit.getDividerLocation()));
+    }
+    
+    public void refresh() {
+        idList.refresh();
+    }
+
+    public void identityUpdated(Identity i) { refresh(); }
+    public void privateIdentityAdded(Identity i) { refresh(); }
+    public void publicIdentityAdded(Identity i) { refresh(); }
+
+    public void update(Observable o, Object param) {
+        if (o == idList) {
+            trustListTable.refresh((Identity)param);
+        }
+    }
+}

Modified: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentity.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentity.java    2008-02-17 18:35:20 UTC (rev 18023)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentity.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -7,6 +7,7 @@

import java.io.File;
import java.sql.*;
+import java.util.Vector;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -36,6 +37,10 @@
        return super.getTrustLevel();
    }
    
+    public String getUserTrustLevelStr() {
+        return super.getTrustLevelStr();
+    }
+    
    /**
     * @return true if lastUpdate in the db is == NULL
     */
@@ -315,4 +320,131 @@
        
        return null;
    }
+    
+    /**
+     * Just a container
+     * @author jflesch
+     */
+    public static class TrustLink {
+        private WotIdentity src;
+        private WotIdentity dst;
+        private Identity destinationAsSeenByTheSource;
+        
+        public TrustLink(Hsqldb db, WotIdentity src, WotIdentity dst, int linkTrustLevel) {
+            this.src = src;
+            this.dst = dst;
+            destinationAsSeenByTheSource = new Identity(db, dst.getId(),
+                                        dst.getNick(), dst.getPublicKey(),
+                                        dst.getPrivateKey(), dst.isDup(),
+                                        linkTrustLevel);
+        }
+        
+        public WotIdentity getSource() {
+            return src;
+        }
+        
+        public WotIdentity getDestination() {
+            return dst;
+        }
+        
+        public int getLinkTrustLevel() {
+            return destinationAsSeenByTheSource.getTrustLevel();
+        }
+        
+        public Identity getDestinationAsSeenByTheSource() {
+            return destinationAsSeenByTheSource;
+        }
+    }
+    
+    /**
+     * @param db
+     * @param idSrc
+     * @return a vector of TrustLink
+     */
+    public static Vector getTrustList(Hsqldb db, Identity idSrc) {
+        Vector v = new Vector();
+        
+        WotIdentity src = new WotIdentity(idSrc);
+        
+        try {
+            synchronized(db.dbLock) {
+                PreparedStatement st;
+                
+                st = db.getConnection().prepareStatement("SELECT signatures.id AS id, "+
+                                                        " signatures.nickname AS nickname, "+
+                                                        " signatures.publicKey AS publicKey, "+
+                                                        " signatures.privateKey AS privateKey, "+
+                                                        " signatures.isDup AS isDup, "+
+                                                        " signatures.trustLevel AS yourTrustLevel, "+
+                                                        " wotTrustLists.trustLevel AS linkTrustLevel "+
+                                        "FROM wotTrustLists INNER JOIN signatures ON wotTrustLists.destination = signatures.id "+
+                                        "WHERE source = ?");
+                st.setInt(1, idSrc.getId());
+                
+                ResultSet set = st.executeQuery();
+                
+                while(set.next()) {
+                    WotIdentity dst = new WotIdentity(new Identity(db,
+                                                    set.getInt("id"),
+                                                    set.getString("nickName"),
+                                                    set.getString("publicKey"),
+                                                    set.getString("privateKey"),
+                                                    set.getBoolean("isDup"),
+                                                    set.getInt("yourTrustLevel")));
+                    int linkTrustLevel = set.getInt("linkTrustLevel");
+                    
+                    TrustLink l = new TrustLink(db, src, dst, linkTrustLevel);
+                    
+                    v.add(l);
+                }
+                
+                st.close();
+            }
+        } catch(SQLException e) {
+            Logger.error(new WotIdentity(), "Error while getting trust list : "+e.toString());
+            e.printStackTrace();
+        }
+        
+        return v;
+    }
+    
+    /**
+     * Returns only the identities with a trust > 0
+     */
+    public static Vector getOtherIdentities(Hsqldb db) {
+        Vector v = new Vector();
+        
+        try {
+            synchronized(db.dbLock) {
+                PreparedStatement st;
+                
+                st = db.getConnection().prepareStatement("SELECT id, "+
+                                                        " nickname, publicKey, "+
+                                                        " privateKey, isDup, trustLevel "+
+                                                        "FROM signatures WHERE privateKey IS NULL AND trustLevel >= 0");
+                ResultSet set = st.executeQuery();
+                
+                /* TODO : Optimize if possible */
+                
+                while(set.next()) {
+                    WotIdentity wi = new WotIdentity(new Identity(db,
+                                                 set.getInt("id"),
+                                                 set.getString("nickName"),
+                                                 set.getString("publicKey"),
+                                                 set.getString("privateKey"),
+                                                 set.getBoolean("isDup"),
+                                                 set.getInt("trustLevel")));
+                    if (wi.getTrustLevel() > 0 && wi.getTrustLevel() != Identity.trustLevelInt[0])
+                        v.add(wi);
+                }
+                
+                st.close();
+            }
+        } catch(SQLException e) {
+            Logger.error(new WotIdentity(), "Error while gettings identities used in the WoT : "+e.toString());
+            e.printStackTrace();
+        }
+        
+        return v;
+    }
}

Added: trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentityList.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentityList.java     (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/webOfTrust/WotIdentityList.java    2008-02-17 20:39:29 UTC (rev 18024)
@@ -0,0 +1,39 @@
+package thaw.plugins.webOfTrust;
+
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
+
+import thaw.core.Config;
+import thaw.gui.Table;
+import thaw.plugins.Hsqldb;
+import thaw.plugins.signatures.IdentityTable;
+
+public class WotIdentityList extends Observable implements Observer {
+    private Hsqldb db;
+    
+    private IdentityTable table;
+    
+    public WotIdentityList(Hsqldb db, Config config) {
+        this.db = db;
+
+        table = new IdentityTable(config, "wotIdList_", false);
+        table.addObserver(this);
+
+        refresh();
+    }
+    
+    public void refresh() {
+        Vector ids = WotIdentity.getOtherIdentities(db);
+        table.setIdentities(ids);
+    }
+    
+    public Table getList() {
+        return table.getTable();
+    }
+
+    public void update(Observable arg0, Object arg1) {
+        setChanged();
+        notifyObservers(arg1);
+    }
+}