X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FFileWatcher.java;h=bc9f70537a8e08ce9d35d4d695fa50785264382d;hb=c724c5585a7d245621daee3022f0b10a14ccb3ba;hp=84a5e0a38a05a2607fb8075e5553a7a7e83ff2ec;hpb=e7ae6b0d98fe72adbd42ca7a23975b87b75d0cbf;p=vamsas.git diff --git a/src/org/vamsas/client/simpleclient/FileWatcher.java b/src/org/vamsas/client/simpleclient/FileWatcher.java index 84a5e0a..bc9f705 100644 --- a/src/org/vamsas/client/simpleclient/FileWatcher.java +++ b/src/org/vamsas/client/simpleclient/FileWatcher.java @@ -16,7 +16,7 @@ public class FileWatcher { private File subject = null; private long lastStat[]; - + boolean waslocked=false; boolean exists = false; /** @@ -33,12 +33,13 @@ public class FileWatcher { if (tl.isLocked()) { tl.release(); return false; - } else { - return true; } + tl.release(); + return true; } return false; } + private long[] getStat(File subject) { return new long[] { subject.lastModified(), subject.length() }; } @@ -47,32 +48,57 @@ public class FileWatcher { return false; return true; } + /** + * Detect changes in file state and release of any + * lock in place during change. + * @return true if file state has changed + */ private boolean check() { if (subject != null) { if (!subject.exists()) { if (exists) { - exists = false; - return true; + if (!waslocked) { + // !checkLock()) { + + exists = false; + // waslocked=false; + return true; + } } + // locked - state change registered after lock is released return false; } else { - long[] newStat = getStat(subject); // subject.lastModified(); - if (exists && ((compStat(lastStat, newStat) || checkLock()))) { + if (!checkLock()) { + // file is free to access, return state change + if (!exists || !compStat(lastStat, newStat)) { + waslocked=false; + exists=true; + lastStat=newStat; + return true; + } + // no change + return false; + } else { + waslocked=true; return false; } - lastStat = newStat; - exists = true; - return true; } } return false; } - + public void setState() { + if (subject!=null) { + lastStat = getStat(subject); + exists = subject.exists(); + waslocked = checkLock(); + } + } + public FileWatcher(File subject) { // TODO Auto-generated constructor stub this.subject = subject; - check(); + setState(); } public boolean hasChanged() {