git://source.jalview.org
/
vamsas.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added automatic channel closure for failed locks. (suggest this class becomes a singl...
[vamsas.git]
/
src
/
org
/
vamsas
/
client
/
simpleclient
/
FileWatcher.java
diff --git
a/src/org/vamsas/client/simpleclient/FileWatcher.java
b/src/org/vamsas/client/simpleclient/FileWatcher.java
index
84a5e0a
..
bc9f705
100644
(file)
--- 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[];
private File subject = null;
private long lastStat[];
-
+ boolean waslocked=false;
boolean exists = false;
/**
boolean exists = false;
/**
@@
-33,12
+33,13
@@
public class FileWatcher {
if (tl.isLocked()) {
tl.release();
return false;
if (tl.isLocked()) {
tl.release();
return false;
- } else {
- return true;
}
}
+ tl.release();
+ return true;
}
return false;
}
}
return false;
}
+
private long[] getStat(File subject) {
return new long[] { subject.lastModified(), subject.length() };
}
private long[] getStat(File subject) {
return new long[] { subject.lastModified(), subject.length() };
}
@@
-47,32
+48,57
@@
public class FileWatcher {
return false;
return true;
}
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) {
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 {
return false;
} else {
-
long[] newStat = getStat(subject); // subject.lastModified();
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;
}
return false;
}
- lastStat = newStat;
- exists = true;
- return true;
}
}
return false;
}
}
}
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;
public FileWatcher(File subject) {
// TODO Auto-generated constructor stub
this.subject = subject;
- check();
+ setState();
}
public boolean hasChanged() {
}
public boolean hasChanged() {