]> source.dussan.org Git - aspectj.git/commitdiff
delay until after final last-modified-time stamp on newly-staged files
authorwisberg <wisberg>
Sat, 31 May 2003 07:22:44 +0000 (07:22 +0000)
committerwisberg <wisberg>
Sat, 31 May 2003 07:22:44 +0000 (07:22 +0000)
since last-modified-time stamp can be delayed by filesystem buffering.

util/src/org/aspectj/util/FileUtil.java
util/src/org/aspectj/util/LangUtil.java

index 89ed1fe4ad1eb1d7437ff513deb6ef470fa1d2e5..c9d5fe32450df3a1d55e1b1c7052aca8c1b700bc 100644 (file)
@@ -1169,6 +1169,31 @@ public class FileUtil {
                return new BufferedOutputStream(new FileOutputStream(file));
        }
 
+    /**
+     * Sleep until after the last last-modified stamp from the files.
+     * @param files the File[] of files to inspect for last modified times
+     *        (this ignores null or empty files array
+     *         and null or non-existing components of files array)
+     * @return true if succeeded without 100 interrupts
+     */
+    public static boolean sleepPastFinalModifiedTime(File[] files) {
+        if ((null == files) || (0 == files.length)) {
+            return true;
+        }
+        long delayUntil = System.currentTimeMillis();
+        for (int i = 0; i < files.length; i++) {
+            File file = files[i];
+            if ((null == file) || !file.exists()) {
+                continue;
+            }
+            long nextModTime = file.lastModified();
+            if (nextModTime > delayUntil) {
+                delayUntil = nextModTime;
+            }
+        }
+        return LangUtil.sleepUntil(++delayUntil);
+    }
+
     /** map name to result, removing any fromSuffix and adding any toSuffix */
     private static String map(String name, String fromSuffix, String toSuffix) {
         if (null != name) {
@@ -1386,4 +1411,5 @@ public class FileUtil {
         protected void completing(long totalWritten, Throwable thrown) {
         }
     }
+
 }
index 5d8de7f7b8c4864ef325541ffb97d77cb3a79a53..4887fda4e9b02ac60996d545186509974c872790 100644 (file)
@@ -980,6 +980,44 @@ public class LangUtil {
             }
         }
         return result;
+    } 
+    
+    /**
+     * Sleep for a particular period (in milliseconds).
+     * @param time the long time in milliseconds to sleep
+     * @return true if delay succeeded, false if interrupted 100 times
+     */
+    public static boolean sleep(long milliseconds) {
+        if (milliseconds == 0) {
+            return true;
+        } else if (milliseconds < 0) {
+            throw new IllegalArgumentException("negative: " + milliseconds);
+        }
+        return sleepUntil(milliseconds + System.currentTimeMillis());
+    }
+    
+    /**
+     * Sleep until a particular time.
+     * @param time the long time in milliseconds to sleep until
+     * @return true if delay succeeded, false if interrupted 100 times
+     */
+    public static boolean sleepUntil(long time) {
+        if (time == 0) {
+            return true;
+        } else if (time < 0) {
+            throw new IllegalArgumentException("negative: " + time);
+        }
+        final Thread thread = Thread.currentThread();
+        long curTime = System.currentTimeMillis();
+        for (int i = 0; (i < 100) && (curTime < time); i++) {
+            try {
+                thread.sleep(time-curTime);            
+            } catch (InterruptedException e) {
+                // ignore
+            }
+            curTime = System.currentTimeMillis();
+        }
+        return (curTime >= time);
     }  
       
     /**
@@ -1336,7 +1374,8 @@ public class LangUtil {
                 }
             }
         } // class Thrown
-    }  // class ProcessController
+    }
+
 }