From 348b156e4ab1f209b181d68698ec1068ed9a7277 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 18 Nov 2008 13:32:15 +0000
Subject: [PATCH] Fix for issue 3614 (control panel: restore fails when the available backup is a directory)

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java |   66 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
index 1878bc5..ac6a741 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
@@ -57,7 +57,6 @@
 import javax.swing.SwingUtilities;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
-import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 
 import org.opends.guitools.controlpanel.datamodel.BackupDescriptor;
@@ -139,6 +138,8 @@
    */
   private boolean backupDirectoryInitialized;
 
+  private BackupTableCellRenderer renderer;
+
   private static final Logger LOG =
     Logger.getLogger(RestorePanel.class.getName());
 
@@ -246,7 +247,8 @@
         ListSelectionModel.SINGLE_SELECTION);
     backupList.setShowGrid(false);
     backupList.setIntercellSpacing(new Dimension(0, 0));
-    TableCellRenderer renderer = new BackupTableCellRenderer();
+    renderer = new BackupTableCellRenderer();
+    renderer.setParentPath(new File(DUMMY_PARENT_PATH));
     for (int i=0; i<model.getColumnCount(); i++)
     {
       TableColumn col = backupList.getColumn(model.getColumnName(i));
@@ -341,6 +343,7 @@
     lRefreshingList.setVisible(true);
     final int lastSelectedRow = backupList.getSelectedRow();
 
+    final String parentPath = parentDirectory.getText();
     BackgroundTask<Set<BackupInfo>> worker =
       new BackgroundTask<Set<BackupInfo>>()
     {
@@ -355,45 +358,48 @@
         try
         {
           BackupDirectory backupDir =
-            BackupDirectory.readBackupDirectoryDescriptor(
-                parentDirectory.getText());
+            BackupDirectory.readBackupDirectoryDescriptor(parentPath);
           backups.addAll(backupDir.getBackups().values());
         }
         catch (Throwable t)
         {
           firstThrowable = t;
-          // Check the subdirectories
-          File f = new File(parentDirectory.getText());
+        }
+        // Check the subdirectories
+        File f = new File(parentPath);
 
-          if (f.isDirectory())
+        // Check the first level of directories (we might have done a backup
+        // of one backend and then a backup of several backends under the
+        // same directory).
+        if (f.isDirectory())
+        {
+          File[] children = f.listFiles();
+          for (int i=0; i<children.length; i++)
           {
-            File[] children = f.listFiles();
-            for (int i=0; i<children.length; i++)
+            if (children[i].isDirectory())
             {
-              if (children[i].isDirectory())
+              try
               {
-                try
-                {
-                  BackupDirectory backupDir =
-                    BackupDirectory.readBackupDirectoryDescriptor(
-                        children[i].getAbsolutePath());
+                BackupDirectory backupDir =
+                  BackupDirectory.readBackupDirectoryDescriptor(
+                      children[i].getAbsolutePath());
 
-                  backups.addAll(backupDir.getBackups().values());
-                }
-                catch (Throwable t2)
+                backups.addAll(backupDir.getBackups().values());
+              }
+              catch (Throwable t2)
+              {
+                if (!children[i].getName().equals("tasks") &&
+                    (firstThrowable != null))
                 {
-                  if (!children[i].getName().equals("tasks"))
-                  {
-                    LOG.log(Level.WARNING, "Error searching backup: "+t2, t2);
-                  }
+                  LOG.log(Level.WARNING, "Error searching backup: "+t2, t2);
                 }
               }
             }
           }
-          if (backups.size() == 0)
-          {
-            throw firstThrowable;
-          }
+        }
+        if ((backups.size() == 0) && (firstThrowable != null))
+        {
+          throw firstThrowable;
         }
         return backups;
       }
@@ -405,6 +411,7 @@
       {
         BackupTableModel model = (BackupTableModel)backupList.getModel();
         model.clear();
+        renderer.setParentPath(new File(parentPath));
         if (t == null)
         {
           if (returnValue.size() > 0)
@@ -482,6 +489,7 @@
     worker.startBackgroundTask();
   }
 
+  private final String DUMMY_PARENT_PATH = "/local/OpenDS-X.X.X/bak";
   /**
    * Creates a list with backup descriptor.  This is done simply to have a good
    * initial size for the table.
@@ -491,15 +499,15 @@
   {
     ArrayList<BackupDescriptor> list = new ArrayList<BackupDescriptor>();
     list.add(new BackupDescriptor(
-        new File("/local/OpenDS-0.9.0/bak/200704201567Z"),
+        new File(DUMMY_PARENT_PATH+"/200704201567Z"),
         new GregorianCalendar(2007, 5, 20, 8, 10).getTime(),
         BackupDescriptor.Type.FULL, "id"));
     list.add(new BackupDescriptor(
-        new File("/local/OpenDS-0.9.0/bak/200704201567Z"),
+        new File(DUMMY_PARENT_PATH+"/200704201567Z"),
         new GregorianCalendar(2007, 5, 22, 8, 10).getTime(),
         BackupDescriptor.Type.INCREMENTAL, "id"));
     list.add(new BackupDescriptor(
-        new File("/local/OpenDS-0.9.0/bak/200704221567Z"),
+        new File(DUMMY_PARENT_PATH+"/200704221567Z"),
         new GregorianCalendar(2007, 5, 25, 8, 10).getTime(),
         BackupDescriptor.Type.INCREMENTAL, "id"));
     return list;

--
Gitblit v1.10.0