X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FFileWatcher.java;fp=src%2Forg%2Fvamsas%2Fclient%2Fsimpleclient%2FFileWatcher.java;h=0000000000000000000000000000000000000000;hb=156ad51b0a85ed5902f7f9ff051620c832acbea6;hp=fe72381831db41936f19412eaf14752944d408c9;hpb=5c0c34895c290164caad28e0aeac86b5a52ee655;p=vamsas.git diff --git a/src/org/vamsas/client/simpleclient/FileWatcher.java b/src/org/vamsas/client/simpleclient/FileWatcher.java deleted file mode 100644 index fe72381..0000000 --- a/src/org/vamsas/client/simpleclient/FileWatcher.java +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - */ -package org.vamsas.client.simpleclient; - -import java.io.File; - - -/** - * Watches a particular file for its creation, deletion, or - * modification. The watcher is thread safe and different - * instances watching the state of a particular file carry - * their own state record for the file. - */ -public class FileWatcher { - - private File subject = null; - - private long lastStat[]; - boolean waslocked=false; - boolean exists = false; - /** - * transient lock on subject - can be passed back to calling class - * to preserve new state of file for immediate reading. - */ - private Lock subjectLock = null; - /** - * clear local locks on subject. - * - */ - private void clearLock() { - if (subjectLock!=null) - subjectLock.release(); - subjectLock=null; - } - /** - * - * @return true if subject exists and is locked by another process. - */ - private boolean checkLock() { - if (subject!=null && subject.exists()) { - if (subjectLock!=null) { - subjectLock.release(); - } - subjectLock = LockFactory.tryLock(subject); - if (subjectLock.isLocked()) { - return false; - } - clearLock(); - return true; - } - return false; - } - - private long[] getStat(File subject) { - return new long[] { subject.lastModified(), subject.length() }; - } - private boolean compStat(long[] stat, long[] newstat) { - if (stat[0]!=newstat[0] || stat[1]!=newstat[1]) - 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. Leaves lock in subjectLock (ready to be passed to caller) - */ - private boolean check() { - if (subject != null) { - if (!subject.exists()) { - if (exists) { - 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 (!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; - } - } - } - return false; - } - /** - * updates internal record of file state when caller has intentionally - * modified subject. (ignores locked-state of subject) - */ - public void setState() { - if (subject!=null) { - if (exists = subject.exists()) { - lastStat = getStat(subject); - waslocked = false; - } - } - } - - /** - * Make a watcher for a particular file. If the file doesn't exist, the - * watcher will watch for its creation (and indicate a change of state) - * For locked files, the removal of a lock constitutes a change of - * state if the file was modified. - * - * @param subject - */ - - public FileWatcher(File subject) { - this.subject = subject; - setState(); - } - /** - * Test for change in file state. Only indicates a change - * after any lock on a file has been released. - * @return true if file has been modified. - */ - public boolean hasChanged() { - boolean res = check(); - clearLock(); - return res; - } - /** - * passes lock back to caller if hasChanged returned true. - * @return - */ - public Lock getChangedState() { - boolean res = check(); - if (res) - return subjectLock; - else { - clearLock(); - return null; - } - } - /** - * safely? getting current state of the watched file - * @return - */ - public long[] getCurrentState() { - return getStat(subject); - } - /** - * safely compare an externally recorded state with the current state - * for significant modifications. - * @param a - * @param b - * @return - */ - public boolean diffState(long[] a, long[] b) { - return compStat(a,b); - } -}