Author: jflesch
Date: 2007-03-31 00:38:20 +0000 (Sat, 31 Mar 2007)
New Revision: 12463

Added:
   trunk/apps/Thaw/images/copy.png
   trunk/apps/Thaw/images/file.png
   trunk/apps/Thaw/images/min-copy.png
   trunk/apps/Thaw/images/min-file.png
   trunk/apps/Thaw/images/min-key.png
   trunk/apps/Thaw/src/thaw/plugins/index/BlackList.java
Modified:
   trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
   trunk/apps/Thaw/src/thaw/core/Core.java
   trunk/apps/Thaw/src/thaw/core/FreenetURIHelper.java
   trunk/apps/Thaw/src/thaw/core/MainWindow.java
   trunk/apps/Thaw/src/thaw/core/SplashScreen.java
   trunk/apps/Thaw/src/thaw/gui/IconBox.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/FetchPlugin.java
   trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
   trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
   trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java
   trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
   trunk/apps/Thaw/src/thaw/plugins/Restarter.java
   trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java
   trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
   trunk/apps/Thaw/src/thaw/plugins/index/Index.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexBrowserPanel.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexConfigPanel.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java
   trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
   trunk/apps/Thaw/src/thaw/plugins/index/Link.java
   trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
   trunk/apps/Thaw/src/thaw/plugins/index/LinkTable.java
   trunk/apps/Thaw/src/thaw/plugins/index/SearchResult.java
   trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
   trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
Log:
Implement an index black list + add a lot of icons

Added: trunk/apps/Thaw/images/copy.png
===================================================================
(Binary files differ)


Property changes on: trunk/apps/Thaw/images/copy.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/apps/Thaw/images/file.png
===================================================================
(Binary files differ)


Property changes on: trunk/apps/Thaw/images/file.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/apps/Thaw/images/min-copy.png
===================================================================
(Binary files differ)


Property changes on: trunk/apps/Thaw/images/min-copy.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/apps/Thaw/images/min-file.png
===================================================================
(Binary files differ)


Property changes on: trunk/apps/Thaw/images/min-file.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/apps/Thaw/images/min-key.png
===================================================================
(Binary files differ)


Property changes on: trunk/apps/Thaw/images/min-key.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ConfigWindow.java     2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/core/ConfigWindow.java     2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -229,6 +229,13 @@
        }


+       public void close() {
+               setVisible(false);
+               setChanged();
+               this.notifyObservers(cancelButton); /* Equivalent to a click on 
the cancel button */
+       }
+
+
        public void windowActivated(final WindowEvent e) {

        }

Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java     2007-03-31 00:35:06 UTC (rev 
12462)
+++ trunk/apps/Thaw/src/thaw/core/Core.java     2007-03-31 00:38:20 UTC (rev 
12463)
@@ -168,7 +168,11 @@
                if(!initConfig())
                        return false;

-               splashScreen.setProgressionAndStatus(10, "Connecting ...");
+               splashScreen.setProgressionAndStatus(10, "Applying look and 
feel ...");
+               if (!initializeLookAndFeel())
+                       return false;
+
+               splashScreen.setProgressionAndStatus(20, "Connecting ...");
                splashScreen.addIcon(IconBox.connectAction);
                if(!initConnection())
                        new WarningWindow(this, 
I18n.getMessage("thaw.warning.unableToConnectTo")+
@@ -395,7 +399,7 @@
         * This method sets the look and feel specified with setLookAndFeel().
         * If none was specified, the System Look and Feel is set.
         */
-       private void initializeLookAndFeel() { /* non static, else I can't call 
correctly Logger functions */
+       private boolean initializeLookAndFeel() { /* non static, else I can't 
call correctly Logger functions */

                JFrame.setDefaultLookAndFeelDecorated(false); /* Don't touch my 
window decorations ! */
                JDialog.setDefaultLookAndFeelDecorated(false);
@@ -410,11 +414,15 @@
                        } else {
                                UIManager.setLookAndFeel(Core.lookAndFeel);
                        }
+
+                       if (splashScreen != null)
+                               splashScreen.rebuild();
                } catch (final Exception e) {
                        Logger.warning(this, "Exception while setting the L&F : 
" + e.getMessage());
                        Logger.warning(this, "Using the default lookAndFeel");
                }

+               return true;
        }


@@ -422,7 +430,7 @@
         * Init graphics.
         */
        public boolean initGraphics() {
-               initializeLookAndFeel();
+               //initializeLookAndFeel();

                mainWindow = new MainWindow(this);


Modified: trunk/apps/Thaw/src/thaw/core/FreenetURIHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/FreenetURIHelper.java 2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/core/FreenetURIHelper.java 2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -5,7 +5,7 @@
  */
 public class FreenetURIHelper {

-       public FreenetURIHelper() {
+       private FreenetURIHelper() {

        }

@@ -192,7 +192,7 @@

                                for (int j = 0 ; j < subsplit.length-1 ; j++) {
                                        if (j == 0)
-                                               key = key + subsplit[j];
+                                               key = key + "/" + subsplit[j];
                                        else
                                                key = key + "-" + subsplit[j];
                                }
@@ -256,7 +256,7 @@

        /**
         * will lower the case !
-        * compare only with another result from this function
+        * will return the begining of the key.
         */
        public static String getComparablePart(String key) {
                if (key == null)
@@ -273,6 +273,9 @@
        }


+       /**
+        * this process is not costless.
+        */
        public static boolean compareKeys(String keyA, String keyB) {
                if (keyA == keyB)
                        return true;
@@ -304,9 +307,15 @@
                if (keyA.startsWith("SSK@")) {
                        keyA = changeSSKRevision(keyA, 0, 0);
                        keyB = changeSSKRevision(keyB, 0, 0);
+
+                       keyA = keyA.replaceAll(".frdx", ".xml"); /* we consider 
.frdx equivalent to .xml */
+                       keyB = keyB.replaceAll(".frdx", ".xml"); /* we consider 
.frdx equivalent to .xml */
                }

-               return keyA.equals(keyB);
+               if ( keyA.equals(keyB) )
+                       return true;
+
+               return false;
        }
 }


Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/MainWindow.java       2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/core/MainWindow.java       2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -146,19 +146,20 @@

                // TOOLBAR
                connectButton = new JButton(IconBox.connectAction);
+               connectButton.setBorderPainted(false);
                
connectButton.setToolTipText(I18n.getMessage("thaw.toolbar.button.connect"));
-               connectButton.setBorderPainted(false);
+
                disconnectButton = new JButton(IconBox.disconnectAction);
+               disconnectButton.setBorderPainted(false);
                
disconnectButton.setToolTipText(I18n.getMessage("thaw.toolbar.button.disconnect"));
-               disconnectButton.setBorderPainted(false);

                settingsButton = new JButton(IconBox.settings);
+               settingsButton.setBorderPainted(false);
                
settingsButton.setToolTipText(I18n.getMessage("thaw.toolbar.button.settings"));
-               settingsButton.setBorderPainted(false);

                quitButton = new JButton(IconBox.quitAction);
+               quitButton.setBorderPainted(false);
                
quitButton.setToolTipText(I18n.getMessage("thaw.toolbar.button.quit"));
-               quitButton.setBorderPainted(false);

                connectButton.addActionListener(this);
                disconnectButton.addActionListener(this);

Modified: trunk/apps/Thaw/src/thaw/core/SplashScreen.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/SplashScreen.java     2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/core/SplashScreen.java     2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -157,4 +157,9 @@
                progressBar = null;
        }

+
+       public void rebuild() {
+               if (splashScreen != null)
+                       
javax.swing.SwingUtilities.updateComponentTreeUI(splashScreen);
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/gui/IconBox.java
===================================================================
--- trunk/apps/Thaw/src/thaw/gui/IconBox.java   2007-03-31 00:35:06 UTC (rev 
12462)
+++ trunk/apps/Thaw/src/thaw/gui/IconBox.java   2007-03-31 00:38:20 UTC (rev 
12463)
@@ -23,6 +23,12 @@
        public static ImageIcon disconnectAction;
        public static ImageIcon minDisconnectAction;

+       public static ImageIcon stop;
+       public static ImageIcon minStop;
+
+       public static ImageIcon copy;
+       public static ImageIcon minCopy;
+
        public static ImageIcon queue;
        public static ImageIcon minQueue;

@@ -40,16 +46,21 @@
        public static ImageIcon insertAndAddToIndexAction;

        public static ImageIcon makeALinkAction;
+       public static ImageIcon minMakeALinkAction;

        public static ImageIcon minIndex;
        public static ImageIcon minIndexReadOnly;

        public static ImageIcon indexNew;
+       public static ImageIcon minIndexNew;
+
        public static ImageIcon indexReuse;

        public static ImageIcon delete;
+       public static ImageIcon minDelete;

        public static ImageIcon refreshAction;
+       public static ImageIcon minRefreshAction;

        public static ImageIcon settings;
        public static ImageIcon minSettings;
@@ -61,15 +72,18 @@
        public static ImageIcon minQuitAction;

        public static ImageIcon key;
+       public static ImageIcon minKey;

        public static ImageIcon help;
        public static ImageIcon minHelp;

        public static ImageIcon folderNew;
+       public static ImageIcon minFolderNew;

        public static ImageIcon mainWindow;

        public static ImageIcon add;
+       public static ImageIcon minAdd;
        public static ImageIcon remove;

        public static ImageIcon terminal;
@@ -92,7 +106,15 @@
        public static ImageIcon lookAndFeel;
        public static ImageIcon minLookAndFeel;

+       public static ImageIcon close;
+       public static ImageIcon minClose;

+       public static ImageIcon link;
+       public static ImageIcon minLink;
+
+       public static ImageIcon file;
+       public static ImageIcon minFile;
+
        /**
         * Not really used
         */
@@ -135,6 +157,8 @@
                IconBox.connectAction       = IconBox.loadIcon("connect.png");
                IconBox.minConnectAction    = 
IconBox.loadIcon("min-connect.png");
                IconBox.disconnectAction    = 
IconBox.loadIcon("disconnect.png");
+               IconBox.minStop             = 
IconBox.loadIcon("min-disconnect.png");
+               IconBox.stop                = 
IconBox.loadIcon("disconnect.png");
                IconBox.minDisconnectAction = 
IconBox.loadIcon("min-disconnect.png");
                IconBox.queue               = IconBox.loadIcon("connect.png");
                IconBox.minQueue            = 
IconBox.loadIcon("min-connect.png");
@@ -143,6 +167,7 @@
                IconBox.minIndex            = IconBox.loadIcon("min-index.png");
                IconBox.minIndexReadOnly    = 
IconBox.loadIcon("min-indexReadOnly.png");
                IconBox.indexNew            = IconBox.loadIcon("index-new.png");
+               IconBox.minIndexNew         = 
IconBox.loadIcon("min-index-new.png");
                IconBox.indexReuse          = 
IconBox.loadIcon("indexReadOnly.png");
                IconBox.downloads           = IconBox.loadIcon("download.png");
                IconBox.minDownloads        = 
IconBox.loadIcon("min-download.png");
@@ -152,16 +177,22 @@
                IconBox.minIndexBrowser     = IconBox.loadIcon("min-index.png");
                IconBox.addToIndexAction    = IconBox.loadIcon("add.png");
                IconBox.add                 = IconBox.loadIcon("add.png");
+               IconBox.minAdd              = IconBox.loadIcon("min-add.png");
                IconBox.insertAndAddToIndexAction = 
IconBox.loadIcon("index.png");
                IconBox.makeALinkAction     = IconBox.loadIcon("makeLink.png");
+               IconBox.minMakeALinkAction  = 
IconBox.loadIcon("min-makeLink.png");
                IconBox.reconnectAction     = IconBox.loadIcon("refresh.png");
                IconBox.minReconnectAction  = 
IconBox.loadIcon("min-refresh.png");
                IconBox.refreshAction       = IconBox.loadIcon("refresh.png");
+               IconBox.minRefreshAction    = 
IconBox.loadIcon("min-refresh.png");
                IconBox.quitAction          = IconBox.loadIcon("quit.png");
                IconBox.minQuitAction       = IconBox.loadIcon("min-quit.png");
                IconBox.key                 = IconBox.loadIcon("key.png");
+               IconBox.minKey              = IconBox.loadIcon("min-key.png");
                IconBox.delete              = IconBox.loadIcon("delete.png");
+               IconBox.minDelete           = 
IconBox.loadIcon("min-delete.png");
                IconBox.folderNew           = 
IconBox.loadIcon("folder-new.png");
+               IconBox.minFolderNew        = 
IconBox.loadIcon("min-folder-new.png");
                IconBox.help                = IconBox.loadIcon("help.png");
                IconBox.minHelp             = IconBox.loadIcon("min-help.png");
                IconBox.mainWindow          = 
IconBox.loadIcon("mainWindow.png");
@@ -179,6 +210,14 @@
                IconBox.peers               = IconBox.loadIcon("peers.png");
                IconBox.lookAndFeel         = 
IconBox.loadIcon("lookAndFeel.png");
                IconBox.minLookAndFeel      = 
IconBox.loadIcon("min-lookAndFeel.png");
+               IconBox.close               = 
IconBox.loadIcon("emblem-unreadable.png");
+               IconBox.minClose            = 
IconBox.loadIcon("min-emblem-unreadable.png");
+               IconBox.copy                = IconBox.loadIcon("copy.png");
+               IconBox.minCopy             = IconBox.loadIcon("min-copy.png");
+               IconBox.file                = IconBox.loadIcon("file.png");
+               IconBox.minFile             = IconBox.loadIcon("min-file.png");
+               IconBox.link                = 
IconBox.loadIcon("indexBrowser.png");
+               IconBox.minLink             = 
IconBox.loadIcon("min-indexBrowser.png");
        }

 }

Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties     2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties     2007-03-31 
00:38:20 UTC (rev 12463)
@@ -3,11 +3,12 @@

 ## Commons
 # Note for devs and translators: These words must be/are always used alone.
+thaw.common.queueWatcher=Transferts
 thaw.common.node=Node
 thaw.common.plugins=Plugins
 thaw.common.add=Ajouter
 thaw.common.remove=Enlever
-thaw.common.status=Transferts
+thaw.common.status=Status
 thaw.common.identifier=Identifiant

 thaw.common.insertion=Insertion
@@ -77,7 +78,10 @@

 thaw.common.autodetect=Auto-detecter

+thaw.common.closeTab=Fermer cette tabulation

+
+
 ## Errors
 thaw.error.idAlreadyUsed=Impossible de se connecter. Notre identifiant est 
d?j? utilis? par un autre client connect? au noeud.

@@ -131,6 +135,8 @@


 ## Plugins
+thaw.plugin.queueWatcher=Transferts
+
 thaw.plugin.insert.fileToInsert=Fichier ? ins?rer
 thaw.plugin.insert.filesToInsert=Fichier(s) ? ins?rer
 thaw.plugin.insert.selectKey=Selectionner le type de clef voulu
@@ -314,7 +320,12 @@

 thaw.plugin.index.indexLoading=Chargement d'index

+thaw.plugin.index.blackList=Liste noire d'indexes
+thaw.plugin.index.editBlackList=Editer la liste noire d'indexes
+thaw.plugin.index.addToBlackList=Ajouter ? la liste noire d'indexes

+
+
 thaw.plugin.peerMonitor.peerMonitor=Connexion
 thaw.plugin.peerMonitor.yourReference=Votre r?f?rence:
 thaw.plugin.peerMonitor.copyReference=Copier votre r?f?rence vers le 
presse-papier
@@ -339,6 +350,9 @@
 thaw.plugin.peerMonitor.infos.nodeMemory=Memoire du noeud
 thaw.plugin.peerMonitor.infos.thawMemory=Memoire de Thaw

+
+
+
 thaw.plugin.themeSelector.themeSelector=S?lecteur de th?me
 thaw.plugin.themeSelector.selectATheme=Selectionnez un th?me:
 thaw.plugin.themeSelector.theme=Th?me

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -3,6 +3,7 @@

 ## Commons
 # Note for devs and translators: These words must be/are always used alone.
+
 thaw.common.node=Node
 thaw.common.plugins=Plugins
 thaw.common.add=Add
@@ -72,7 +73,9 @@

 thaw.common.paste=Paste

+thaw.common.closeTab=Close this tab

+
 thaw.common.autodetect=Auto-detect


@@ -127,6 +130,8 @@
 thaw.config.uncheckIfProblem=(Uncheck this option if you have any troubles)

 ## Plugins
+thaw.plugin.queueWatcher=Transfers
+
 thaw.plugin.insert.fileToInsert=File to insert
 thaw.plugin.insert.filesToInsert=File(s) to insert
 thaw.plugin.insert.selectKey=Select the kind of key wanted
@@ -307,7 +312,13 @@

 thaw.plugin.index.indexLoading=Index loading

+thaw.plugin.index.blackList=Index black list
+thaw.plugin.index.editBlackList=Edit the index blacklist
+thaw.plugin.index.addToBlackList=Add to the index black list

+thaw.plugin.index.ultimateWarning=You're about to delete all your indexes ! 
ARE YOU SURE ?
+
+
 thaw.plugin.peerMonitor.peerMonitor=Connection
 thaw.plugin.peerMonitor.yourReference=Your reference:
 thaw.plugin.peerMonitor.copyReference=Copy your reference to the clipboard
@@ -333,10 +344,17 @@
 thaw.plugin.peerMonitor.infos.nodeMemory=Node memory
 thaw.plugin.peerMonitor.infos.thawMemory=Thaw memory

+
+
 thaw.plugin.themeSelector.themeSelector=Theme selector
 thaw.plugin.themeSelector.selectATheme=Select a theme:
 thaw.plugin.themeSelector.theme=Theme

+
+
+thaw.plugin.index.blackList=Index blacklist
+
+
 # ZeroConf

 thaw.zeroconf.searchingNode=Searching freenet nodes ...

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties    2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -3,11 +3,12 @@

 ## Commons
 # Note for devs and translators: These words must be/are always used alone.
+thaw.common.queueWatcher=Transferts
 thaw.common.node=Node
 thaw.common.plugins=Plugins
 thaw.common.add=Ajouter
 thaw.common.remove=Enlever
-thaw.common.status=Transferts
+thaw.common.status=Status
 thaw.common.identifier=Identifiant

 thaw.common.insertion=Insertion
@@ -77,7 +78,10 @@

 thaw.common.autodetect=Auto-detecter

+thaw.common.closeTab=Fermer cette tabulation

+
+
 ## Errors
 thaw.error.idAlreadyUsed=Impossible de se connecter. Notre identifiant est 
d\u00e9j\u00e0 utilis\u00e9 par un autre client connect\u00e9 au noeud.

@@ -131,6 +135,8 @@


 ## Plugins
+thaw.plugin.queueWatcher=Transferts
+
 thaw.plugin.insert.fileToInsert=Fichier \u00e0 ins\u00e9rer
 thaw.plugin.insert.filesToInsert=Fichier(s) \u00e0 ins\u00e9rer
 thaw.plugin.insert.selectKey=Selectionner le type de clef voulu
@@ -314,7 +320,12 @@

 thaw.plugin.index.indexLoading=Chargement d'index

+thaw.plugin.index.blackList=Liste noire d'indexes
+thaw.plugin.index.editBlackList=Editer la liste noire d'indexes
+thaw.plugin.index.addToBlackList=Ajouter \u00e0 la liste noire d'indexes

+
+
 thaw.plugin.peerMonitor.peerMonitor=Connexion
 thaw.plugin.peerMonitor.yourReference=Votre r\u00e9f\u00e9rence:
 thaw.plugin.peerMonitor.copyReference=Copier votre r\u00e9f\u00e9rence vers le 
presse-papier
@@ -339,6 +350,9 @@
 thaw.plugin.peerMonitor.infos.nodeMemory=Memoire du noeud
 thaw.plugin.peerMonitor.infos.thawMemory=Memoire de Thaw

+
+
+
 thaw.plugin.themeSelector.themeSelector=S\u00e9lecteur de th\u00e8me
 thaw.plugin.themeSelector.selectATheme=Selectionnez un th\u00e8me:
 thaw.plugin.themeSelector.theme=Th\u00e8me

Modified: trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java   2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java   2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -54,7 +54,7 @@
                
buttonInToolBar.setToolTipText(I18n.getMessage("thaw.common.download"));
                buttonInToolBar.addActionListener(this);

-               menuItem = new 
JMenuItem(I18n.getMessage("thaw.common.addDownloads"));
+               menuItem = new 
JMenuItem(I18n.getMessage("thaw.common.addDownloads"), IconBox.minDownloads);
                menuItem.addActionListener(this);

                
if(core.getPluginManager().getPlugin("thaw.plugins.QueueWatcher") == null) {

Modified: trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java  2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java  2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -56,7 +56,7 @@

                newDb = DatabaseManager.init(hsqldb, core.getConfig(), 
core.getSplashScreen());

-               browserPanel = new IndexBrowserPanel(hsqldb, 
core.getQueueManager(), core.getConfig(), core.getMainWindow());
+               browserPanel = new IndexBrowserPanel(hsqldb, core);
                setMainWindow(core.getMainWindow());
                core.getMainWindow().getTabbedPane().addChangeListener(this);

@@ -73,7 +73,7 @@
                stateChanged(null);


-               configPanel = new IndexConfigPanel(core.getConfigWindow(), 
core.getConfig());
+               configPanel = new IndexConfigPanel(core.getConfigWindow(), 
core.getConfig(), browserPanel);
                configPanel.addTab();

                autoRefresh = null;

Modified: trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java  2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java  2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -63,7 +63,7 @@
                
buttonInToolBar.setToolTipText(I18n.getMessage("thaw.common.insertion"));
                buttonInToolBar.addActionListener(this);

-               menuItem = new 
JMenuItem(I18n.getMessage("thaw.common.addInsertions"));
+               menuItem = new 
JMenuItem(I18n.getMessage("thaw.common.addInsertions"), IconBox.minInsertions);
                menuItem.addActionListener(this);

                
if(core.getPluginManager().getPlugin("thaw.plugins.QueueWatcher") == null) {

Modified: trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java   2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java   2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -102,13 +102,11 @@

                peerPanel = new PeerMonitorPanel(core.getConfig());

-               if (advancedMode)
-                       
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.peerMonitor.peerMonitor"),
-                                                   
thaw.gui.IconBox.minPeerMonitor,
-                                                   peerPanel.getTabPanel());
+               
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.peerMonitor.peerMonitor"),
+                                           thaw.gui.IconBox.minPeerMonitor,
+                                           peerPanel.getTabPanel());
+               peerPanel.addObserver(this);

-               if (advancedMode)
-                       peerPanel.addObserver(this);

                core.getMainWindow().addComponent(peerPanel.getPeerListPanel(),
                                                  BorderLayout.EAST);
@@ -123,9 +121,7 @@


        public boolean stop() {
-               if(advancedMode)
-                       core.getMainWindow().removeTab(peerPanel.getTabPanel());
-
+               core.getMainWindow().removeTab(peerPanel.getTabPanel());
                
core.getMainWindow().removeComponent(peerPanel.getPeerListPanel());
                running = false;
                return false;

Modified: trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java  2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java  2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -92,7 +92,7 @@

                setMainWindow(core.getMainWindow());
                core.getMainWindow().getTabbedPane().addChangeListener(this);
-               
core.getMainWindow().addTab(I18n.getMessage("thaw.common.status"),
+               
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.queueWatcher"),
                                            IconBox.minQueue,
                                            panelAdded);


Modified: trunk/apps/Thaw/src/thaw/plugins/Restarter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Restarter.java     2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/Restarter.java     2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -71,7 +71,9 @@
                configPanel.add(restartIntervalField);
                configPanel.add(restartFatalsBox);

-               
core.getConfigWindow().addTab(I18n.getMessage("thaw.plugin.restarter.configTabName"),
 configPanel);
+               
core.getConfigWindow().addTab(I18n.getMessage("thaw.plugin.restarter.configTabName"),
+                                             thaw.gui.IconBox.minRefreshAction,
+                                             configPanel);
                core.getConfigWindow().addObserver(this);

                running = true;

Added: trunk/apps/Thaw/src/thaw/plugins/index/BlackList.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/BlackList.java                       
        (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/index/BlackList.java       2007-03-31 
00:38:20 UTC (rev 12463)
@@ -0,0 +1,349 @@
+package thaw.plugins.index;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+
+import javax.swing.JScrollPane;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JList;
+import javax.swing.JButton;
+import javax.swing.JTextField;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+import java.sql.*; /* I'm lazy */
+
+import java.util.Vector;
+import java.util.Iterator;
+
+import thaw.core.I18n;
+import thaw.core.Logger;
+import thaw.core.Core;
+import thaw.core.FreenetURIHelper;
+
+import thaw.gui.IconBox;
+
+import thaw.plugins.Hsqldb;
+
+
+/**
+ * mix of View (non-static methods) and Modele management (static methods) => 
berk :p
+ */
+public class BlackList implements ActionListener {
+
+       private Core core;
+       private Hsqldb db;
+       private IndexBrowserPanel indexBrowser = null;
+
+       private JPanel panel = null;
+       private JButton hideButton = null;
+       private JList blackList = null;
+       private JButton removeButton = null;
+       private JTextField keyField = null;
+       private JButton addButton = null;
+
+       private boolean visible;
+
+       private BlackList() {
+
+       }
+
+
+       public BlackList(Core core, Hsqldb db, IndexBrowserPanel indexBrowser) {
+               this.core = core;
+               this.db = db;
+               this.indexBrowser = indexBrowser;
+
+
+               panel = new JPanel(new BorderLayout(5, 5));
+
+               JPanel northPanel = new JPanel(new BorderLayout());
+
+               hideButton = new JButton(IconBox.minClose);
+               hideButton.setBorderPainted(false);
+               
hideButton.setToolTipText(I18n.getMessage("thaw.common.closeTab"));
+               hideButton.addActionListener(this);
+
+               northPanel.add(hideButton, BorderLayout.EAST);
+               northPanel.add(new 
JLabel(I18n.getMessage("thaw.plugin.index.blackList")), BorderLayout.CENTER);
+
+               JPanel centerPanel = new JPanel(new BorderLayout());
+               blackList = new JList();
+               
blackList.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+
+               removeButton = new 
JButton(I18n.getMessage("thaw.common.remove"), IconBox.delete);
+               removeButton.addActionListener(this);
+
+               centerPanel.add(new JScrollPane(blackList), 
BorderLayout.CENTER);
+               centerPanel.add(removeButton, BorderLayout.SOUTH);
+
+
+               JPanel southPanel = new JPanel(new BorderLayout());
+
+               keyField = new JTextField("");
+               addButton = new JButton(I18n.getMessage("thaw.common.add"), 
IconBox.minAdd);
+               addButton.addActionListener(this);
+
+               southPanel.add(new JLabel(I18n.getMessage("thaw.common.key") + 
" : "), BorderLayout.WEST);
+               southPanel.add(keyField, BorderLayout.CENTER);
+               southPanel.add(addButton, BorderLayout.EAST);
+
+               panel.add(northPanel, BorderLayout.NORTH);
+               panel.add(centerPanel, BorderLayout.CENTER);
+               panel.add(southPanel, BorderLayout.SOUTH);
+
+               visible = false;
+       }
+
+       public JPanel getPanel() {
+               return panel;
+       }
+
+
+       protected class BlackListedLink {
+               private int id;
+               private String name;
+               private String publicKey;
+
+               public BlackListedLink(int id, String name, String key) {
+                       this.id = id;
+                       this.name = name;
+                       this.publicKey = key;
+               }
+
+               public int getId() {
+                       return id;
+               }
+
+               public String getName() {
+                       return name;
+               }
+
+               public String getPublicKey() {
+                       return publicKey;
+               }
+
+               public String toString() {
+                       return getName();
+               }
+       }
+
+
+       public void updateList() {
+               if (!visible)
+                       return;
+
+               Vector list = new Vector();
+
+               try {
+                       synchronized(db.dbLock) {
+                               PreparedStatement st;
+
+                               st = 
db.getConnection().prepareStatement("SELECT id, name, publicKey FROM 
indexBlackList ORDER BY name");
+
+                               ResultSet res = st.executeQuery();
+
+                               while(res.next()) {
+                                       list.add(new 
BlackListedLink(res.getInt("id"),
+                                                                    
res.getString("name"),
+                                                                    
res.getString("publicKey")));
+                               }
+
+                       }
+               } catch(SQLException e) {
+                       Logger.error(this, "SQLException while accessing black 
list : "+e.toString());
+                       purgeList();
+                       return;
+               }
+
+               blackList.setListData(list);
+       }
+
+
+       /**
+        * Avoid useless memory use
+        */
+       protected void purgeList() {
+               blackList.setListData(new Vector());
+       }
+
+
+       public void displayPanel() {
+               visible = true;
+               updateList();
+               
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.index.blackList"),
+                                           IconBox.minStop, panel);
+               core.getMainWindow().setSelectedTab(panel);
+       }
+
+
+       public void hidePanel() {
+               visible = false;
+               purgeList();
+               core.getMainWindow().removeTab(panel);
+               core.getMainWindow().setSelectedTab(indexBrowser.getPanel());
+       }
+
+
+
+
+       public void actionPerformed(ActionEvent e) {
+               if (e.getSource() == hideButton) {
+                       hidePanel();
+                       return;
+               }
+
+               if (e.getSource() == addButton) {
+                       if (addToBlackList(db, keyField.getText()))
+                               keyField.setText("");
+                       return;
+               }
+
+
+               if (e.getSource() == removeButton) {
+                       Object[] targets = 
(Object[])blackList.getSelectedValues();
+
+                       for (int i = 0 ; i < targets.length ; i++) {
+                               BlackListedLink link = 
(BlackListedLink)targets[i];
+                               removeFromBlackList(db, link.getPublicKey());
+                       }
+
+                       updateList();
+
+                       return;
+               }
+       }
+
+
+       public static int isBlackListed(Hsqldb db, String key) {
+               key = FreenetURIHelper.cleanURI(key);
+
+               if (key == null) {
+                       Logger.error(new BlackList(), "isBlackListed() : 
Invalid key !");
+                       return -1;
+               }
+
+               try {
+                       synchronized(db.dbLock) {
+                               PreparedStatement st;
+
+                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey FROM indexBlackList 
WHERE "+
+                                                                        
"LOWER(publicKey) LIKE ?");
+                               st.setString(1, 
FreenetURIHelper.getComparablePart(key) +"%");
+
+                               ResultSet res = st.executeQuery();
+
+                               while(res.next()) {
+                                       String pubKey = 
res.getString("publicKey").replaceAll(".xml", ".frdx");
+
+                                       if 
(FreenetURIHelper.compareKeys(pubKey, key)) {
+                                               return res.getInt("id");
+                                       }
+                               }
+                       }
+               } catch(SQLException e) {
+                       Logger.error(new BlackList(), "Error while checking if 
a given key is blacklisted : "+ e.toString());
+                       return -1;
+               }
+
+               return -1;
+       }
+
+       /**
+        * @param key must be an USK@ well formed with everything
+        * @return true if success
+        */
+       public static boolean addToBlackList(Hsqldb db, String key) {
+               if (isBlackListed(db, key) >= 0) {
+                       Logger.notice(new BlackList(), "Key already 
blacklisted");
+                       return false;
+               }
+
+               key = FreenetURIHelper.cleanURI(key);
+
+               if (key == null) {
+                       Logger.error(new BlackList(), "addToBlackList() : 
Invalid key");
+                       return false;
+               }
+
+               try {
+                       synchronized(db.dbLock) {
+                               PreparedStatement st = 
db.getConnection().prepareStatement("INSERT INTO indexBlackList (publicKey, 
name) VALUES (?, ?)");
+                               PreparedStatement anotherSt = 
db.getConnection().prepareStatement("UPDATE links SET blackListed = true WHERE 
id = ?");
+
+                               st.setString(1, key);
+                               st.setString(2, Index.getNameFromKey(key));
+                               st.execute();
+
+
+                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey FROM links WHERE "+
+                                                                        
"LOWER(publicKey) LIKE ?");
+                               st.setString(1, 
FreenetURIHelper.getComparablePart(key) +"%");
+
+                               ResultSet res = st.executeQuery();
+
+                               while(res.next()) {
+                                       String pubKey = 
res.getString("publicKey").replaceAll(".xml", ".frdx");
+
+                                       if 
(FreenetURIHelper.compareKeys(pubKey, key)) {
+                                               anotherSt.setInt(1, 
res.getInt("id"));
+                                               anotherSt.execute();
+                                       }
+                               }
+
+                       }
+               } catch(SQLException e) {
+                       Logger.error(new BlackList(), "Error while adding an 
entry to the blacklist : "+e.toString());
+                       return false;
+               }
+
+               return true;
+       }
+
+
+       /**
+        * @return true if success
+        */
+       public static boolean removeFromBlackList(Hsqldb db, String key) {
+               int id;
+
+               if ((id = isBlackListed(db, key)) < 0) {
+                       Logger.notice(new BlackList(), "Key not blacklisted");
+                       return false;
+               }
+
+               try {
+                       synchronized(db.dbLock) {
+                               PreparedStatement st = 
db.getConnection().prepareStatement("SELECT id, publicKey FROM links WHERE "+
+                                                                               
           "LOWER(publicKey) LIKE ?");
+                               PreparedStatement anotherSt = 
db.getConnection().prepareStatement("UPDATE links SET blackListed = false WHERE 
id = ?");
+
+                               st.setString(1, 
FreenetURIHelper.getComparablePart(key) +"%");
+
+                               ResultSet res = st.executeQuery();
+
+                               while(res.next()) {
+                                       String pubKey = 
res.getString("publicKey").replaceAll(".xml", ".frdx");
+
+                                       if 
(FreenetURIHelper.compareKeys(pubKey, key)) {
+                                               anotherSt.setInt(1, 
res.getInt("id"));
+                                               anotherSt.execute();
+                                       }
+                               }
+
+
+                               st = 
db.getConnection().prepareStatement("DELETE FROM indexBlackList WHERE id = ?");
+                               st.setInt(1, id);
+                               st.execute();
+                       }
+               } catch(SQLException e) {
+                       Logger.error(new BlackList(), "Error while removing an 
entry from the blacklist : "+e.toString());
+                       return false;
+               }
+
+               return true;
+       }
+
+}

Modified: trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java 2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java 2007-03-31 
00:38:20 UTC (rev 12463)
@@ -70,6 +70,8 @@
  * indexParents(indexId, folderId) # table de jointure
  * folderParents(folderId, parentId) # table de jointure
  *
+ * indexBlackList(id, key) # key are complete USK@
+ *
  * </pre>
  *
  * positionInTree == position in its JTree branch.
@@ -92,7 +94,7 @@

                if (config.getValue("indexDatabaseVersion") == null) {
                        newDb = true;
-                       config.setValue("indexDatabaseVersion", "3");
+                       config.setValue("indexDatabaseVersion", "4");
                } else {

                        /* CONVERTIONS */
@@ -114,6 +116,13 @@
                                        config.setValue("indexDatabaseVersion", 
"3");
                        }

+                       if 
("3".equals(config.getValue("indexDatabaseVersion"))) {
+                               if (splashScreen != null)
+                                       splashScreen.setStatus("Converting 
database ...");
+                               if (convertDatabase_3_to_4(db))
+                                       config.setValue("indexDatabaseVersion", 
"4");
+                       }
+
                        /* ... */
                }

@@ -206,6 +215,7 @@
                          + "indexTarget INTEGER NULL,"
                          + "toDelete BOOLEAN DEFAULT false NOT NULL,"
                          + "dontDelete BOOLEAN DEFAULT false NOT NULL,"
+                         + "blackListed BOOLEAN DEFAULT false NOT NULL,"
                          + "PRIMARY KEY (id),"
                          + "FOREIGN KEY (indexParent) REFERENCES indexes (id),"
                          + "FOREIGN KEY (indexTarget) REFERENCES indexes 
(id))");
@@ -226,6 +236,11 @@
                          + "FOREIGN KEY (fileId) REFERENCES files (id),"
                          + "FOREIGN KEY (nameId) REFERENCES metadataNames 
(id))");

+               sendQuery(db,
+                         "CREATE CACHED TABLE indexBlackList ("
+                         + "id INTEGER IDENTITY NOT NULL,"
+                         + "publicKey VARCHAR(350) NOT NULL,"
+                         + "name VARCHAR(255) NOT NULL)");
        }


@@ -847,4 +862,14 @@

                return true;
        }
+
+
+       public static boolean convertDatabase_3_to_4(Hsqldb db) {
+               if (!sendQuery(db, "ALTER TABLE links ADD COLUMN blackListed 
BOOLEAN DEFAULT false")) {
+                       Logger.error(new DatabaseManager(), "Error while 
converting the database (3 to 4) ! (adding column to link table)");
+                       return false;
+               }
+
+               return true;
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java       2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java       2007-03-31 
00:38:20 UTC (rev 12463)
@@ -113,7 +113,7 @@
                JButton button;
                JMenuItem item;

-               item = new 
JMenuItem(I18n.getMessage("thaw.common.action.download"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.common.action.download"), IconBox.minDownloads);
                button = new JButton(IconBox.downloads);
                
button.setToolTipText(I18n.getMessage("thaw.common.action.download"));
                toolbarActions.add(new 
FileManagementHelper.FileDownloader(config, queueManager, indexBrowser, 
button));
@@ -121,7 +121,7 @@
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.FileDownloader(config, queueManager, indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.insert"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.insert"), IconBox.minInsertions);
                button = new JButton(IconBox.insertions);
                
button.setToolTipText(I18n.getMessage("thaw.plugin.index.insert"));
                toolbarActions.add(new 
FileManagementHelper.FileInserter(queueManager, indexBrowser, button));
@@ -129,7 +129,7 @@
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.FileInserter(queueManager, indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.recalculateKeys"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.recalculateKeys"), IconBox.minKey);
                button = new JButton(IconBox.key);
                
button.setToolTipText(I18n.getMessage("thaw.plugin.index.recalculateKeys"));
                toolbarActions.add(new 
FileManagementHelper.FileKeyComputer(queueManager, indexBrowser, button));
@@ -137,11 +137,11 @@
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.FileKeyComputer(queueManager, indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.common.removeFromTheList"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.common.removeFromTheList"), IconBox.minStop);
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.TransferCanceller(queueManager, indexBrowser, item));

-               item = new JMenuItem(I18n.getMessage("thaw.common.remove"));
+               item = new JMenuItem(I18n.getMessage("thaw.common.remove"), 
IconBox.minDelete);
                button = new JButton(IconBox.delete);
                button.setToolTipText(I18n.getMessage("thaw.common.remove"));
                toolbarActions.add(new 
FileManagementHelper.FileRemover(indexBrowser, button));
@@ -149,7 +149,7 @@
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.FileRemover(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.common.copyKeysToClipboard"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.common.copyKeysToClipboard"), IconBox.minCopy);
                rightClickMenu.add(item);
                rightClickActions.add(new 
FileManagementHelper.PublicKeyCopier(item));

@@ -180,7 +180,8 @@
        protected void updateRightClickMenu(final Vector selectedFiles) {
                FileManagementHelper.FileAction action;

-               firstSelectedFile = selectedFiles != null ? 
((thaw.plugins.index.File)selectedFiles.get(0)) : null;
+               firstSelectedFile = selectedFiles != null && 
selectedFiles.size() > 0 ?
+                       ((thaw.plugins.index.File)selectedFiles.get(0)) : null;

                for(final Iterator it = rightClickActions.iterator();
                    it.hasNext();) {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/Index.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/Index.java   2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/Index.java   2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -864,14 +864,16 @@

                                PreparedStatement st;

-                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey FROM links WHERE 
indexParent = ?");
+                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey, blackListed FROM 
links WHERE indexParent = ?");

                                st.setInt(1, id);

                                ResultSet res = st.executeQuery();

                                while(res.next()) {
-                                       Link l = new Link(db, res.getInt("id"), 
res.getString("publicKey"), this);
+                                       Link l = new Link(db, res.getInt("id"), 
res.getString("publicKey"),
+                                                         
res.getBoolean("blackListed"),
+                                                         this);
                                        links.add(l);
                                }

@@ -1183,11 +1185,6 @@
                                int nextId;

                                try {
-                                       if (insertLinkSt == null)
-                                               insertLinkSt = 
db.getConnection().prepareStatement("INSERT INTO links "
-                                                                               
                   + "(publicKey, mark, comment, indexParent, indexTarget) "
-                                                                               
                   + "VALUES (?, 0, ?, ?, NULL)");
-
                                        String key = attrs.getValue("key");

                                        if (key == null) /* it was the 
beginning of the index */
@@ -1195,9 +1192,19 @@

                                        key = key.trim();

+
+                                       boolean blackListed = 
(BlackList.isBlackListed(db, key) >= 0);
+
+
+                                       if (insertLinkSt == null)
+                                               insertLinkSt = 
db.getConnection().prepareStatement("INSERT INTO links "
+                                                                               
                   + "(publicKey, mark, comment, indexParent, indexTarget, 
blackListed) "
+                                                                               
                   + "VALUES (?, 0, ?, ?, NULL, ?)");
+
                                        insertLinkSt.setString(1, key);
                                        insertLinkSt.setString(2, "No 
comment"); /* comment not used at the moment */
                                        insertLinkSt.setInt(3, id);
+                                       insertLinkSt.setBoolean(4, blackListed);

                                        insertLinkSt.execute();
                                } catch(SQLException e) {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexBrowserPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexBrowserPanel.java       
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexBrowserPanel.java       
2007-03-31 00:38:20 UTC (rev 12463)
@@ -5,10 +5,12 @@
 import javax.swing.JPanel;
 import javax.swing.JSplitPane;

+import thaw.core.Core;
 import thaw.core.Config;
 import thaw.core.I18n;
 import thaw.core.Logger;
 import thaw.core.MainWindow;
+
 import thaw.fcp.FCPQueueManager;
 import thaw.plugins.Hsqldb;

@@ -20,6 +22,8 @@
        private UnknownIndexList unknownList;
        private IndexProgressBar indexProgressBar;

+       private BlackList blackList;
+
        private JSplitPane split;

        private JPanel listAndDetails;
@@ -33,12 +37,14 @@
        private MainWindow mainWindow;


-       public IndexBrowserPanel(final Hsqldb db, final FCPQueueManager 
queueManager, final Config config, final MainWindow mainWindow) {
+       public IndexBrowserPanel(final Hsqldb db, final Core core) {
                this.db = db;
-               this.queueManager = queueManager;
-               this.config = config;
-               this.mainWindow = mainWindow;
+               this.queueManager = core.getQueueManager();
+               this.config       = core.getConfig();
+               this.mainWindow   = core.getMainWindow();

+               blackList = new BlackList(core, db, this);
+
                unknownList = new UnknownIndexList(queueManager, this);

                indexTree = new 
IndexTree(I18n.getMessage("thaw.plugin.index.indexes"),
@@ -120,13 +126,18 @@
                return mainWindow;
        }

+       public BlackList getBlackList() {
+               return blackList;
+       }

+
        public JPanel getPanel() {
                return globalPanel;
        }

        public void stopAllThreads() {
                tables.stopRefresh();
+               blackList.hidePanel();
        }

        public void saveState() {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexConfigPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexConfigPanel.java        
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexConfigPanel.java        
2007-03-31 00:38:20 UTC (rev 12463)
@@ -1,6 +1,7 @@
 package thaw.plugins.index;

 import java.awt.GridLayout;
+import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;

@@ -8,6 +9,7 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
+import javax.swing.JButton;

 import thaw.core.Config;
 import thaw.core.ConfigWindow;
@@ -26,10 +28,15 @@

        private JCheckBox loadOnTheFly;

+       private JButton editBlackList;

-       public IndexConfigPanel(ConfigWindow configWindow, Config config) {
+       private IndexBrowserPanel indexBrowser;
+
+
+       public IndexConfigPanel(ConfigWindow configWindow, Config config, 
IndexBrowserPanel indexBrowser) {
                this.configWindow = configWindow;
                this.config = config;
+               this.indexBrowser = indexBrowser;

                panel = new JPanel();
                panel.setLayout(new GridLayout(15, 1));
@@ -51,11 +58,21 @@
                configWindow.getOkButton().addActionListener(this);
                configWindow.getCancelButton().addActionListener(this);

+
+               editBlackList = new 
JButton(I18n.getMessage("thaw.plugin.index.editBlackList")+ " ...");
+               editBlackList.addActionListener(this);
+
+               JPanel editBlackListPanel = new JPanel(new BorderLayout());
+               editBlackListPanel.add(new JLabel(""), BorderLayout.CENTER);
+               editBlackListPanel.add(editBlackList, BorderLayout.EAST);
+
+
                panel.add(autorefreshActivated);
                panel.add(refreshIntervalLabel);
                panel.add(refreshInterval);
                panel.add(indexPerRefreshLabel);
                panel.add(indexPerRefresh);
+               panel.add(editBlackListPanel);

                if 
(Boolean.valueOf(config.getValue("advancedMode")).booleanValue()) {
                        panel.add(new JLabel(" "));
@@ -143,6 +160,11 @@
                if (e.getSource() == configWindow.getCancelButton()) {
                        resetValues();
                }
+
+               if (e.getSource() == editBlackList) {
+                       configWindow.close();
+                       indexBrowser.getBlackList().displayPanel();
+               }
        }

 }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java     2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java     2007-03-31 
00:38:20 UTC (rev 12463)
@@ -54,6 +54,12 @@
                this.name = name;
        }

+
+       protected Hsqldb getDb() {
+               return db;
+       }
+
+
        public boolean isInTree() {
                return (parentNode != null);
        }
@@ -151,6 +157,11 @@
        }


+       protected Vector getChildren() {
+               return children;
+       }
+
+
        public void unloadChildren() {
                children = null;
        }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java   
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java   
2007-03-31 00:38:20 UTC (rev 12463)
@@ -1007,8 +1007,7 @@

                        if (getActionSource() != null)
                                getActionSource().setEnabled(node != null
-                                                            && 
(getIndexBrowserPanel().getIndexTree() != null
-                                                                && node != 
getIndexBrowserPanel().getIndexTree().getRoot()));
+                                                            && 
(getIndexBrowserPanel().getIndexTree() != null));
                }

                public void apply() {
@@ -1032,7 +1031,35 @@
        }


+       /**
+        * Can be used on indexes only
+        */
+       public static class IndexBlackLister extends IndexDeleter {
+               private IndexBrowserPanel indexBrowser;

+               public IndexBlackLister(final IndexBrowserPanel indexBrowser, 
final AbstractButton actionSource) {
+                       super(indexBrowser, actionSource);
+
+                       this.indexBrowser = indexBrowser;
+               }
+
+               public void setTarget(final IndexTreeNode node) {
+                       if (node != null && node instanceof Index)
+                               super.setTarget(node);
+                       else
+                               super.setTarget(null);
+               }
+
+               public void apply() {
+                       BlackList.addToBlackList(indexBrowser.getDb(), 
getTarget().getPublicKey());
+                       super.apply();
+                       indexBrowser.getBlackList().updateList();
+               }
+       }
+
+
+
+
        public static class FileInserterAndAdder extends BasicIndexAction {
                private Config config;

@@ -1402,8 +1429,8 @@

                                int nextId = DatabaseManager.getNextId(db, 
"links");

-                               st = 
db.getConnection().prepareStatement("INSERT INTO links (id, publicKey, mark, 
comment, indexParent, indexTarget) "+
-                                                                        
"VALUES (?, ?, ?, ?, ?, ?)");
+                               st = 
db.getConnection().prepareStatement("INSERT INTO links (id, publicKey, mark, 
comment, indexParent, indexTarget, blackListed) "+
+                                                                        
"VALUES (?, ?, ?, ?, ?, ?, FALSE)");

                                st.setInt(1, nextId);
                                st.setString(2, linkKey);

Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java       2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java       2007-03-31 
00:38:20 UTC (rev 12463)
@@ -4,8 +4,12 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;

+import javax.swing.JOptionPane;
+
 import thaw.core.I18n;
 import thaw.core.Logger;
+import thaw.core.MainWindow;
+
 import thaw.fcp.FCPQueueManager;
 import thaw.plugins.Hsqldb;

@@ -14,12 +18,16 @@
        private FCPQueueManager queueManager;
        private IndexBrowserPanel indexBrowser;

+       private MainWindow mainWindow;
+
        public IndexRoot(final FCPQueueManager queueManager,
                         final IndexBrowserPanel indexBrowser,
                         final String name,
                         final boolean loadOnTheFly) {
                super(indexBrowser.getDb(), -1, loadOnTheFly);

+               mainWindow = indexBrowser.getMainWindow();
+
                this.queueManager = queueManager;
                this.indexBrowser = indexBrowser;

@@ -66,5 +74,57 @@
                return IndexManagementHelper.addIndexFolder(indexBrowser, this, 
fname);
        }

+
+
+       public void delete() {
+               Logger.warning(this, "The user will do something dangerous");
+
+               int ret = 
JOptionPane.showConfirmDialog(mainWindow.getMainFrame(),
+                                                       
I18n.getMessage("thaw.plugin.index.ultimateWarning"),
+                                                       
I18n.getMessage("thaw.warning.title"),
+                                                       
JOptionPane.YES_NO_OPTION,
+                                                       
JOptionPane.WARNING_MESSAGE);
+
+               if (ret != JOptionPane.YES_OPTION) {
+                       Logger.info(this, "Cancelled");
+                       return;
+               }
+
+               Logger.warning(this, "DELETING ALL THE INDEXES");
+
+               try {
+                       synchronized(getDb().dbLock) {
+                               PreparedStatement st;
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM FILES");
+                               st.execute();
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM LINKS");
+                               st.execute();
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM INDEXES");
+                               st.execute();
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM INDEXFOLDERS");
+                               st.execute();
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM INDEXPARENTS");
+                               st.execute();
+
+                               st = 
getDb().getConnection().prepareStatement("DELETE FROM FOLDERPARENTS");
+                               st.execute();
+                       }
+               } catch(SQLException e) {
+                       Logger.error(this, "Woops, error while destroying the 
world : "+e.toString());
+                       return;
+               }
+
+               IndexManagementHelper.addIndex(queueManager, indexBrowser, null,
+                                              
thaw.plugins.IndexBrowser.DEFAULT_INDEX);
+
+               forceReload();
+
+               Logger.notice(this, "Destruction of the world done, have a nice 
day.");
+       }
 }


Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java       2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java       2007-03-31 
00:38:20 UTC (rev 12463)
@@ -150,13 +150,17 @@
                indexAndFileMenu = new JPopupMenu();
                indexAndFileActions = new Vector();
                indexMenu = new 
JMenu(I18n.getMessage("thaw.plugin.index.index"));
+               indexMenu.setIcon(IconBox.minIndex);
                fileMenu = new JMenu(I18n.getMessage("thaw.common.files"));
+               fileMenu.setIcon(IconBox.minFile);
                linkMenu = new 
JMenu(I18n.getMessage("thaw.plugin.index.links"));
+               linkMenu.setIcon(IconBox.minLink);


                // Folder menu

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.downloadIndexes"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.downloadIndexes"),
+                                    IconBox.minRefreshAction);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexDownloader(queueManager, indexBrowser, item));

@@ -168,15 +172,17 @@
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexFolderReorderer(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addAlreadyExistingIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addAlreadyExistingIndex"),
+                                    IconBox.minIndexReadOnly);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexReuser(queueManager, indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addCategory"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addCategory"),
+                                    IconBox.minFolderNew);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexFolderAdder(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.createIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.createIndex"), 
IconBox.minIndexNew);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexCreator(queueManager, indexBrowser, item));

@@ -184,21 +190,23 @@
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexRenamer(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.delete"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.delete"), IconBox.minDelete);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.IndexDeleter(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKeys"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKeys"), IconBox.minCopy);
                indexFolderMenu.add(item);
                indexFolderActions.add(new 
IndexManagementHelper.PublicKeyCopier(item));


                // Index menu
-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.downloadIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.downloadIndex"),
+                                    IconBox.minRefreshAction);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexDownloader(queueManager, indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.insertIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.insertIndex"),
+                                    IconBox.minInsertions);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexUploader(queueManager, indexBrowser, item));

@@ -206,50 +214,64 @@
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexRenamer(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.exportIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.exportIndex"),
+                                    IconBox.minExportAction);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexExporter(item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.importIndex"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.importIndex"),
+                                    IconBox.minImportAction);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexImporter(item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.delete"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.delete"),
+                                    IconBox.minDelete);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexDeleter(indexBrowser, item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.changeIndexKeys"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addToBlackList"),
+                                    IconBox.minStop);
                indexMenu.add(item);
+               indexAndFileActions.add(new 
IndexManagementHelper.IndexBlackLister(indexBrowser, item));
+
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.changeIndexKeys"),
+                                    IconBox.minKey);
+               indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.IndexKeyModifier(indexBrowser, item));

                item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyPrivateKey"));
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.PrivateKeyCopier(item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKey"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKey"),
+                                    IconBox.minCopy);
                indexMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.PublicKeyCopier(item));


                // File menu

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addFilesWithInserting"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addFilesWithInserting"),
+                                    IconBox.minInsertions);
                fileMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.FileInserterAndAdder(config, queueManager, indexBrowser, 
item));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addFilesWithoutInserting"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addFilesWithoutInserting"),
+                                    IconBox.minAdd);
                fileMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.FileAdder(config, queueManager, indexBrowser, item));


-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addKeys"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addKeys"),
+                                    IconBox.minKey);
                fileMenu.add(item);
                IndexManagementHelper.IndexAction ac = new 
IndexManagementHelper.KeyAdder(indexBrowser, item);
                indexAndFileActions.add(ac);


                // Link menu
-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addLink"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addLink"),
+                                    IconBox.minMakeALinkAction);
                linkMenu.add(item);
                indexAndFileActions.add(new 
IndexManagementHelper.LinkAdder(indexBrowser, item));

@@ -652,7 +674,7 @@
                                                                       final 
boolean leaf,
                                                                       final 
int row,
                                                                       final 
boolean hasFocus) {
-                       setBackgroundNonSelectionColor(Color.WHITE);
+                       setBackgroundNonSelectionColor(tree.getBackground());
                        setBackgroundSelectionColor(IndexTree.SELECTION_COLOR);

                        if(value instanceof DefaultMutableTreeNode || value 
instanceof IndexTreeNode) {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/Link.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/Link.java    2007-03-31 00:35:06 UTC 
(rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/Link.java    2007-03-31 00:38:20 UTC 
(rev 12463)
@@ -20,7 +20,9 @@
        private int parentId;
        private Index parent = null;

+       private boolean blackListed = false;

+
        public Link(final Hsqldb hsqldb, final int id) {
                this.id = id;
                this.db = hsqldb;
@@ -29,31 +31,34 @@
        }


-       public Link(final Hsqldb hsqldb, final int id, String publicKey,
+       public Link(final Hsqldb hsqldb, final int id, String publicKey, 
boolean blackListed,
                    int parentId) {
                this.id = id;
                this.db = hsqldb;
                this.publicKey = publicKey;
+               this.blackListed = blackListed;
                this.parentId = parentId;
        }


-       public Link(final Hsqldb hsqldb, final int id, String publicKey,
+       public Link(final Hsqldb hsqldb, final int id, String publicKey, 
boolean blackListed,
                    Index parent) {
                this.id = id;
                this.db = hsqldb;
                this.publicKey = publicKey;
+               this.blackListed = blackListed;
                this.parentId = parent.getId();
                this.parent = parent;
        }

+
        public void reloadDataFromDb(int id) {
                this.id = id;

                try {
                        PreparedStatement st;

-                       st = db.getConnection().prepareStatement("SELECT 
publicKey, indexParent FROM links "+
+                       st = db.getConnection().prepareStatement("SELECT 
publicKey, blackListed, indexParent FROM links "+
                                                                 "WHERE id = ? 
LIMIT 1");

                        st.setInt(1, id);
@@ -63,6 +68,7 @@
                        if (rs.next()) {
                                publicKey = rs.getString("publicKey");
                                parentId = rs.getInt("indexParent");
+                               blackListed = rs.getBoolean("blackListed");
                        } else {
                                Logger.error(this, "Link 
'"+Integer.toString(id)+"' not found.");
                        }
@@ -71,6 +77,10 @@
                }
        }

+       public boolean isBlackListed() {
+               return blackListed;
+       }
+
        public String getPublicKey() {
                if (publicKey == null)
                        reloadDataFromDb(id);
@@ -237,4 +247,5 @@

                return index.isModifiable();
        }
+
 }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java    
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java    
2007-03-31 00:38:20 UTC (rev 12463)
@@ -10,8 +10,11 @@

 import javax.swing.AbstractButton;

+import thaw.core.Logger;
+import thaw.plugins.Hsqldb;
 import thaw.fcp.FCPQueueManager;

+
 public class LinkManagementHelper {
        public interface LinkAction extends ActionListener {

@@ -158,4 +161,64 @@
        }


+       public static class BlackListDisplayer implements LinkAction {
+               private AbstractButton src;
+               private BlackList blackList;
+
+               public BlackListDisplayer(final AbstractButton actionSource, 
BlackList blackList) {
+                       src = actionSource;
+
+                       if (actionSource != null)
+                               actionSource.addActionListener(this);
+
+                       this.blackList = blackList;
+               }
+
+               public void setTarget(final Vector targets) {
+                       src.setEnabled(true);
+               }
+
+               public void actionPerformed(final ActionEvent e) {
+                       blackList.displayPanel();
+               }
+       }
+
+
+       public static class ToBlackListAdder implements LinkAction {
+               private AbstractButton src;
+               private Vector t;
+
+               private IndexBrowserPanel indexBrowser;
+
+               public ToBlackListAdder(final AbstractButton actionSource, 
IndexBrowserPanel indexBrowser) {
+                       src = actionSource;
+
+                       this.indexBrowser = indexBrowser;
+
+                       if (actionSource != null)
+                               actionSource.addActionListener(this);
+               }
+
+               public void setTarget(final Vector targets) {
+                       t = targets;
+                       src.setEnabled((targets != null) && (targets.size() > 
0));
+               }
+
+               public void actionPerformed(final ActionEvent e) {
+                       if (t == null) {
+                               Logger.error(this, "No target !?");
+                               return;
+                       }
+
+                       for (Iterator it = t.iterator();
+                            it.hasNext(); ) {
+                               Link link = (Link)it.next();
+
+                               BlackList.addToBlackList(indexBrowser.getDb(), 
link.getPublicKey());
+                               
indexBrowser.getUnknownIndexList().removeLink(link);
+                       }
+
+                       indexBrowser.getBlackList().updateList();
+               }
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/plugins/index/LinkTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/LinkTable.java       2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/LinkTable.java       2007-03-31 
00:38:20 UTC (rev 12463)
@@ -79,7 +79,7 @@
                JMenuItem item;
                JButton button;

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addIndexesFromLink"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addIndexesFromLink"), 
IconBox.minAdd);
                button = new JButton(IconBox.indexReuse);
                
button.setToolTipText(I18n.getMessage("thaw.plugin.index.addIndexesFromLink"));
                toolbarActions.add(new LinkManagementHelper.IndexAdder(button, 
queueManager,
@@ -90,11 +90,11 @@
                rightClickActions.add(new LinkManagementHelper.IndexAdder(item, 
queueManager,
                                                                          
indexBrowser, true));

-               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKeys"));
+               item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKeys"), IconBox.minCopy);
                rightClickMenu.add(item);
                rightClickActions.add(new 
LinkManagementHelper.PublicKeyCopier(item));

-               item = new JMenuItem(I18n.getMessage("thaw.common.remove"));
+               item = new JMenuItem(I18n.getMessage("thaw.common.remove"), 
IconBox.minDelete);
                button = new JButton(IconBox.delete);
                button.setToolTipText(I18n.getMessage("thaw.common.remove"));
                toolbarActions.add(new 
LinkManagementHelper.LinkRemover(indexBrowser, button));
@@ -124,7 +124,8 @@
        protected void updateRightClickMenu(final Vector selectedLinks) {
                LinkManagementHelper.LinkAction action;

-               firstSelectedLink = selectedLinks != null ? 
((Link)selectedLinks.get(0)) : null;
+               firstSelectedLink = selectedLinks != null && 
selectedLinks.size() > 0 ?
+                       ((Link)selectedLinks.get(0)) : null;

                for (final Iterator it = rightClickActions.iterator();
                     it.hasNext(); ) {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/SearchResult.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/SearchResult.java    2007-03-31 
00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/SearchResult.java    2007-03-31 
00:38:20 UTC (rev 12463)
@@ -110,17 +110,20 @@
                        try {
                                PreparedStatement st;

-                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey, indexParent "+
+                               st = 
db.getConnection().prepareStatement("SELECT id, publicKey, indexParent, 
blackListed "+
                                                                         "FROM 
links "+
                                                                         "WHERE 
"+getWhereClause(false));
                                fillInStatement(st);
                                ResultSet set = st.executeQuery();

                                while(set.next()) {
-                                       v.add(new Link(db,
-                                                      set.getInt("id"),
-                                                      
set.getString("publicKey"),
-                                                      
set.getInt("indexParent")));
+                                       if (!set.getBoolean("blackListed")) {
+                                               v.add(new Link(db,
+                                                              set.getInt("id"),
+                                                              
set.getString("publicKey"),
+                                                              false,
+                                                              
set.getInt("indexParent") ));
+                                       }
                                }

                        } catch(SQLException e) {

Modified: trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java        
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java        
2007-03-31 00:38:20 UTC (rev 12463)
@@ -42,6 +42,7 @@
        private FCPQueueManager queueManager;
        private IndexBrowserPanel indexBrowser;

+
        public UnknownIndexList(final FCPQueueManager queueManager, 
IndexBrowserPanel indexBrowser) {
                this.queueManager = queueManager;
                this.indexBrowser = indexBrowser;
@@ -124,6 +125,25 @@
                return ret;
        }

+
+       public boolean removeLink(final Link link) {
+               boolean ret = false;
+
+               for (int i = 0 ; i < linkList.length ; i++) {
+                       if ((linkList[i] != null) && linkList[i].compare(link)) 
{
+                               if (!full)
+                                       vList.remove(linkList[i]);
+                               erase(i);
+                               ret = true;
+                       }
+               }
+
+               refresh();
+
+               return ret;
+       }
+
+
        public void makePlace(int i) {
                int j;
                for (j = linkList.length - 1; j > i ; j--) {
@@ -137,6 +157,7 @@
         */
        public boolean addLink(final Link link) {
                if ((link == null)
+                   || link.isBlackListed()
                    || Index.isAlreadyKnown(indexBrowser.getDb(), 
link.getPublicKey()) >= 0
                    || isInList(link))
                        return false;
@@ -189,17 +210,28 @@

        protected void updateRightClickMenu(Vector links) {
                if (rightClickMenu == null) {
+                       /* first time */
+                       /* I don't remember why it's done here .... */
+
                        rightClickMenu = new JPopupMenu();
                        rightClickActions = new Vector();
                        JMenuItem item;

-                       item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addIndexesFromLink"));
+                       item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addIndexesFromLink"), 
IconBox.minAdd);
                        rightClickMenu.add(item);
                        rightClickActions.add(new 
LinkManagementHelper.IndexAdder(item, queueManager, indexBrowser, false));

                        item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.copyKeys"));
                        rightClickMenu.add(item);
                        rightClickActions.add(new 
LinkManagementHelper.PublicKeyCopier(item));
+
+                       item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.editBlackList"));
+                       rightClickMenu.add(item);
+                       rightClickActions.add(new 
LinkManagementHelper.BlackListDisplayer(item, indexBrowser.getBlackList()));
+
+                       item = new 
JMenuItem(I18n.getMessage("thaw.plugin.index.addToBlackList"), IconBox.minStop);
+                       rightClickMenu.add(item);
+                       rightClickActions.add(new 
LinkManagementHelper.ToBlackListAdder(item, indexBrowser));
                }

                LinkManagementHelper.LinkAction action;

Modified: trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java  
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java  
2007-03-31 00:38:20 UTC (rev 12463)
@@ -153,16 +153,16 @@
                refPanel.add(refTitle, BorderLayout.NORTH);
                refPanel.add(new JScrollPane(refArea), BorderLayout.CENTER);

-               mainPanel.add(refPanel);
-
                detailsLabel = new JLabel();
                detailsPanel = new JPanel();

                JPanel globalDetailsPanel = new JPanel(new BorderLayout(5, 5));
+
                globalDetailsPanel.add(detailsLabel, BorderLayout.NORTH);
                globalDetailsPanel.add(new JScrollPane(detailsPanel), 
BorderLayout.CENTER);

                mainPanel.add(globalDetailsPanel);
+               mainPanel.add(refPanel);

                tabPanel.add(mainPanel, BorderLayout.CENTER);
        }
@@ -488,7 +488,7 @@


        public void valueChanged(ListSelectionEvent e) {
-               if (e.getFirstIndex() == 0) {
+               if (e.getFirstIndex() == 0 && advanced) {
                        
displayInfos(I18n.getMessage("thaw.plugin.peerMonitor.nodeInfos"), nodeInfos);
                } else {
                        Peer peer;

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2007-03-31 00:35:06 UTC (rev 12462)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2007-03-31 00:38:20 UTC (rev 12463)
@@ -138,13 +138,14 @@
                tableModel.addTableModelListener(table);

                rightClickMenu = new JPopupMenu();
+
                clearFinishedItem = new 
JMenuItem(I18n.getMessage("thaw.common.clearFinished"));
-               removeItem = new 
JMenuItem(I18n.getMessage("thaw.common.removeFromTheList"));
-               cancelItem = new 
JMenuItem(I18n.getMessage("thaw.common.cancel"));
+               removeItem = new 
JMenuItem(I18n.getMessage("thaw.common.removeFromTheList"), IconBox.minDelete);
+               cancelItem = new 
JMenuItem(I18n.getMessage("thaw.common.cancel"), IconBox.minStop);
                delayItem = new JMenuItem(I18n.getMessage("thaw.common.delay"));
                downloadItem = new 
JMenuItem(I18n.getMessage("thaw.common.downloadLocally"));
-               forceRestartItem = new 
JMenuItem(I18n.getMessage("thaw.common.forceRestart"));
-               copyKeysItem = new 
JMenuItem(I18n.getMessage("thaw.common.copyKeysToClipboard"));
+               forceRestartItem = new 
JMenuItem(I18n.getMessage("thaw.common.forceRestart"), 
IconBox.minRefreshAction);
+               copyKeysItem = new 
JMenuItem(I18n.getMessage("thaw.common.copyKeysToClipboard"), IconBox.minCopy);
                final JMenu priorityMenu = new 
JMenu(I18n.getMessage("thaw.common.priority"));

                priorityGroup = new ButtonGroup();


Reply via email to