Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Logback: the reliable, generic, fast and flexible logging framework. Copyright (C) 1999-2011, QOS.ch. All rights reserved. This program and the accompanying materials are dual-licensed under either the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation or (per the licensee's choosing) under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.
 
 package ch.qos.logback.core.rolling.helper;
 
 import java.io.File;
 import java.util.Date;
 
 
 abstract public class DefaultArchiveRemover extends ContextAwareBase implements
         ArchiveRemover {
 
   static protected final long UNINITIALIZED = -1;
   // aim for 64 days, except in case of hourly rollover
   static protected final long INACTIVITY_TOLERANCE_IN_MILLIS = 64L * (long.;
   static final int MAX_VALUE_FOR_INACTIVITY_PERIODS = 14 * 24; // 14 days in case of hourly rollover
 
   final RollingCalendar rc;
   final boolean parentClean;
 
   public DefaultArchiveRemover(FileNamePattern fileNamePattern,
                                RollingCalendar rc) {
     this. = fileNamePattern;
     this. = rc;
     this. = computeParentCleaningFlag(fileNamePattern);
   }
 
 
   int computeElapsedPeriodsSinceLastClean(long nowInMillis) {
     long periodsElapsed = 0;
     if ( == ) {
       addInfo("first clean up after appender initialization");
       periodsElapsed = .periodsElapsed(nowInMillisnowInMillis + );
       if (periodsElapsed > )
         periodsElapsed = ;
     } else {
       periodsElapsed = .periodsElapsed(nowInMillis);
       if (periodsElapsed < 1) {
         addWarn("Unexpected periodsElapsed value " + periodsElapsed);
         periodsElapsed = 1;
       }
     }
     return (intperiodsElapsed;
   }
 
   public void clean(Date now) {
     long nowInMillis = now.getTime();
     int periodsElapsed = computeElapsedPeriodsSinceLastClean(nowInMillis);
      = nowInMillis;
     if (periodsElapsed > 1) {
       addInfo("periodsElapsed = " + periodsElapsed);
     }
     for (int i = 0; i < periodsElapsedi++) {
     }
   }
 
   abstract void cleanByPeriodOffset(Date nowint periodOffset);
 
   boolean computeParentCleaningFlag(FileNamePattern fileNamePattern) {
     DateTokenConverter dtc = fileNamePattern.getPrimaryDateTokenConverter();
     // if the date pattern has a /, then we need parent cleaning
     if (dtc.getDatePattern().indexOf('/') != -1) {
       return true;
     }
     // if the literal string subsequent to the dtc contains a /, we also
     // need parent cleaning
 
     Converter<Objectp = fileNamePattern.headTokenConverter;
 
     // find the date converter
     while (p != null) {
       if (p instanceof DateTokenConverter) {
         break;
       }
       p = p.getNext();
     }
 
     while (p != null) {
       if (p instanceof LiteralConverter) {
         String s = p.convert(null);
         if (s.indexOf('/') != -1) {
          return true;
        }
      }
      p = p.getNext();
    }
    // no /, so we don't need parent cleaning
    return false;
  }
  void removeFolderIfEmpty(File dir) {
    removeFolderIfEmpty(dir, 0);
  }

  
Will remove the directory passed as parameter if empty. After that, if the parent is also becomes empty, remove the parent dir as well but at most 3 times.

Parameters:
dir
depth
  private void removeFolderIfEmpty(File dirint depth) {
    // we should never go more than 3 levels higher
    if (depth >= 3) {
      return;
    }
    if (dir.isDirectory() && FileFilterUtil.isEmptyDirectory(dir)) {
      addInfo("deleting folder [" + dir + "]");
      dir.delete();
      removeFolderIfEmpty(dir.getParentFile(), depth + 1);
    }
  }
  public void setMaxHistory(int maxHistory) {
    this. = -maxHistory - 1;
  }
New to GrepCode? Check out our FAQ X