From bb684b4ba0ac8ef775eb91ecfa053c7ed58139cd Mon Sep 17 00:00:00 2001 From: Stefan Seelmann Date: Wed, 19 May 2021 07:13:49 +0200 Subject: DIRSTUDIO-1273, DIRSTUDIO-1276: Fix file delete issue on Windows --- .../studio/connection/core/ILdapLogger.java | 25 ++++++++++++++++++++++ .../core/io/api/LdifModificationLogger.java | 6 ++++++ .../connection/core/io/api/LdifSearchLogger.java | 6 ++++++ .../ModificationLogsViewUniversalListener.java | 25 ++-------------------- .../SearchLogsViewUniversalListener.java | 25 ++-------------------- 5 files changed, 41 insertions(+), 46 deletions(-) diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java index 8d561864e..9e3dfeef4 100644 --- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java +++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java @@ -20,6 +20,7 @@ package org.apache.directory.studio.connection.core; +import java.io.File; import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -236,4 +237,28 @@ public interface ILdapLogger return maskedAttributes; } + + /** + * Deletes a file. Retries up to 5 times to work around Windows file delete issues. + */ + default void deleteFileWithRetry( File file ) + { + for ( int i = 0; i < 6; i++ ) + { + if ( file != null && file.exists() ) + { + if ( file.delete() ) + { + break; + } + try + { + Thread.sleep( 500L ); + } + catch ( InterruptedException e ) + { + } + } + } + } } diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java index c0c6c706e..8144b6249 100644 --- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java +++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java @@ -194,6 +194,12 @@ public class LdifModificationLogger implements ILdapLogger handler.close(); } + File[] files = getLogFiles( connection ); + for ( File file : files ) + { + deleteFileWithRetry( file ); + } + loggers.remove( id ); } } diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java index f20e04895..2e04f9e92 100644 --- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java +++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java @@ -189,6 +189,12 @@ public class LdifSearchLogger implements ILdapLogger handler.close(); } + File[] files = getLogFiles( connection ); + for ( File file : files ) + { + deleteFileWithRetry( file ); + } + loggers.remove( id ); } } diff --git a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java index 3fb1341e3..48661577e 100644 --- a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java +++ b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java @@ -23,7 +23,6 @@ package org.apache.directory.studio.ldapbrowser.ui.views.modificationlogs; import java.io.File; import java.io.FileReader; -import java.io.FileWriter; import org.apache.directory.studio.connection.core.Connection; import org.apache.directory.studio.connection.core.ConnectionCorePlugin; @@ -153,9 +152,8 @@ public class ModificationLogsViewUniversalListener implements EntryUpdateListene int i = input.getIndex(); if ( 0 <= i && i < files.length && files[i] != null && files[i].exists() && files[i].canRead() ) { - try + try ( FileReader fr = new FileReader( files[i] ) ) { - FileReader fr = new FileReader( files[i] ); char[] cbuf = new char[4096]; for ( int length = fr.read( cbuf ); length > 0; length = fr.read( cbuf ) ) { @@ -227,29 +225,10 @@ public class ModificationLogsViewUniversalListener implements EntryUpdateListene { if ( input.getBrowserConnection().getConnection() != null ) { - StringBuffer sb = new StringBuffer( "" ); //$NON-NLS-1$ - FileWriter fw = null; LdifModificationLogger modificationLogger = ConnectionCorePlugin.getDefault().getLdifModificationLogger(); - File[] files = modificationLogger.getFiles( input.getBrowserConnection().getConnection() ); modificationLogger.dispose( input.getBrowserConnection().getConnection() ); - for ( int i = 0; i < files.length; i++ ) - { - try - { - if ( files[i] != null && files[i].exists() && !files[i].delete() ) - { - fw = new FileWriter( files[i] ); - fw.write( "" ); //$NON-NLS-1$ - } - - } - catch ( Exception e ) - { - sb.append( e.getMessage() ); - } - } view.getMainWidget().getSourceViewer().setTopIndex( 0 ); - view.getMainWidget().getSourceViewer().getDocument().set( sb.toString() ); + view.getMainWidget().getSourceViewer().getDocument().set( "" ); } } diff --git a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java index cd7c17791..45e334a44 100644 --- a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java +++ b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java @@ -23,7 +23,6 @@ package org.apache.directory.studio.ldapbrowser.ui.views.searchlogs; import java.io.File; import java.io.FileReader; -import java.io.FileWriter; import org.apache.directory.studio.connection.core.Connection; import org.apache.directory.studio.connection.core.ConnectionCorePlugin; @@ -165,9 +164,8 @@ public class SearchLogsViewUniversalListener implements BrowserConnectionUpdateL int i = input.getIndex(); if ( 0 <= i && i < files.length && files[i] != null && files[i].exists() && files[i].canRead() ) { - try + try ( FileReader fr = new FileReader( files[i] ) ) { - FileReader fr = new FileReader( files[i] ); char[] cbuf = new char[4096]; for ( int length = fr.read( cbuf ); length > 0; length = fr.read( cbuf ) ) { @@ -280,29 +278,10 @@ public class SearchLogsViewUniversalListener implements BrowserConnectionUpdateL { if ( input.getBrowserConnection().getConnection() != null ) { - StringBuffer sb = new StringBuffer( "" ); //$NON-NLS-1$ - FileWriter fw = null; LdifSearchLogger searchLogger = ConnectionCorePlugin.getDefault().getLdifSearchLogger(); - File[] files = searchLogger.getFiles( input.getBrowserConnection().getConnection() ); searchLogger.dispose( input.getBrowserConnection().getConnection() ); - for ( int i = 0; i < files.length; i++ ) - { - try - { - if ( files[i] != null && files[i].exists() && !files[i].delete() ) - { - fw = new FileWriter( files[i] ); - fw.write( "" ); //$NON-NLS-1$ - } - - } - catch ( Exception e ) - { - sb.append( e.getMessage() ); - } - } view.getMainWidget().getSourceViewer().setTopIndex( 0 ); - view.getMainWidget().getSourceViewer().getDocument().set( sb.toString() ); + view.getMainWidget().getSourceViewer().getDocument().set( "" ); } } -- cgit v1.2.3