/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Contributors:  Mathias Bogaert

package org.apache.log4j.helpers;

import java.io.File;

/**
 * Checks every now and then that a certain file has not changed. If it has, then call the {@link #doOnChange} method.
 *
 * @since version 0.9.1
 */
public abstract class FileWatchdog extends Thread {

    /**
     * The default delay between every file modification check, set to 60 seconds.
     */
    static final public long DEFAULT_DELAY = 60_000;

    /**
     * The name of the file to observe for changes.
     */
    protected String filename;

    /**
     * The delay to observe between every check. By default set {@link #DEFAULT_DELAY}.
     */
    protected long delay = DEFAULT_DELAY;

    File file;
    long lastModif = 0;
    boolean warnedAlready = false;
    boolean interrupted = false;

    protected FileWatchdog(final String filename) {
        super("FileWatchdog");
        this.filename = filename;
        file = new File(filename);
        setDaemon(true);
        checkAndConfigure();
    }

    protected void checkAndConfigure() {
        boolean fileExists;
        try {
            fileExists = file.exists();
        } catch (final SecurityException e) {
            LogLog.warn("Was not allowed to read check file existance, file:[" + filename + "].");
            interrupted = true; // there is no point in continuing
            return;
        }

        if (fileExists) {
            final long l = file.lastModified(); // this can also throw a SecurityException
            if (l > lastModif) { // however, if we reached this point this
                lastModif = l; // is very unlikely.
                doOnChange();
                warnedAlready = false;
            }
        } else {
            if (!warnedAlready) {
                LogLog.debug("[" + filename + "] does not exist.");
                warnedAlready = true;
            }
        }
    }

    abstract protected void doOnChange();

    @Override
    public void run() {
        while (!interrupted) {
            try {
                Thread.sleep(delay);
            } catch (final InterruptedException e) {
                // no interruption expected
            }
            checkAndConfigure();
        }
    }

    /**
     * Sets the delay to observe between each check of the file changes.
     */
    public void setDelay(final long delay) {
        this.delay = delay;
    }
}

@@ -1533,12 +1533,11 @@
 odif
- = 0
+ied
 ;%0A  
@@ -1555,32 +1555,24 @@
 arnedAlready
- = false
 ;%0A    boolea
@@ -1584,24 +1584,16 @@
 errupted
- = false
 ;%0A%0A    p
@@ -1627,25 +1627,25 @@
  String file
-n
+N
 ame) %7B%0A     
@@ -1694,25 +1694,25 @@
 ename = file
-n
+N
 ame;%0A       
@@ -1708,24 +1708,29 @@
 me;%0A        
+this.
 file = new F
@@ -1737,17 +1737,17 @@
 ile(file
-n
+N
 ame);%0A  
@@ -2220,17 +2220,27 @@
 al long 
-l
+fileLastMod
  = file.
@@ -2314,17 +2314,27 @@
     if (
-l
+fileLastMod
  %3E lastM
@@ -2337,16 +2337,19 @@
 astModif
+ied
 ) %7B // h
@@ -2415,12 +2415,25 @@
 odif
- = l
+ied = fileLastMod
 ; //
@@ -3072,32 +3072,48 @@
  Sets the delay 
+in milliseconds 
 to observe betwe
@@ -3139,32 +3139,92 @@
 e file changes.%0A
+     * %0A     * @param delayMillis the delay in milliseconds%0A
      */%0A    publ
@@ -3256,16 +3256,22 @@
 ng delay
+Millis
 ) %7B%0A    
@@ -3292,16 +3292,22 @@
  = delay
+Millis
 ;%0A    %7D%0A

Use better internal names.