import org.vamsas.client.ClientHandle;
import org.vamsas.client.UserHandle;
/**
- * Holds the file handlers and watchers for a session.
+ * Does all the IO operations for a SimpleClient instance accessing
+ * a SimpleClient vamsas session.
*
- * TODO: delete the stuff below - prolly irrelevant now
+ * Basically, it defines the various standard names for the files
+ * in the session directory (that maps to the sessionUrn),
+ * provides constructors for the file handlers and watchers of
+ * those file entities, and some higher level methods
+ * to check and change the state flags for the session.
+ *
+ * TODO: move the stuff below to the SimpleClientFactory documentation.
+ * much may not be valid now :
* Vamsas client is intialised with a path to create live session directories.
* This path may contain a vamsas.properties file
* that sets additional parameters (otherwise client
* During the session
* - Update watcher checks for file change -
*
+ * Procedures for file based session message exchange
+ * - session document modification flag
+ *
*/
public class VamsasSession {
*/
public static final String CLOSEANDSAVE_FILE="stored.log";
/**
- * state of vamsas document when it was last stored outside the session directory
+ * session file storing the last_stored_stat data
*/
- protected long last_stored_stat[]=null;
- protected void updateLastStoredStat() {
-
+ public static final String MODIFIEDDOC_FILE="modified";
+
+ /**
+ * called to clear update flag after a successful offline storage event
+ */
+ protected void clearUnsavedFlag() {
+ SessionFlagFile laststored = new SessionFlagFile(new File(sessionDir, MODIFIEDDOC_FILE));
+ if (!laststored.clearFlag())
+ log.warn("Unsaved flag was not cleared for "+sessionDir);
+ }
+ /**
+ * called to indicate session document has been modified.
+ *
+ */
+ protected void setUnsavedFlag() {
+ SessionFlagFile laststored = new SessionFlagFile(new File(sessionDir, MODIFIEDDOC_FILE));
+ if (!laststored.setFlag())
+ log.warn("Couldn't set the Unsaved flag for "+sessionDir);
+ }
+ /**
+ *
+ * @return true if session document has been modified since last offline storage event
+ */
+ protected boolean getUnsavedFlag() {
+ SessionFlagFile laststored = new SessionFlagFile(new File(sessionDir, MODIFIEDDOC_FILE));
+ return laststored.checkFlag();
}
/**
* log file location
* @throws IOException
*/
private void initLog() throws IOException {
- // TODO: LATER: make dedicated appender format for session log.
+ // LATER: make dedicated appender format for session log.
Appender app = slog.getAppender("SESSION_LOG");
slog.addAppender(new FileAppender(app.getLayout(), new File(sessionDir, SESSION_LOG).getAbsolutePath()));
}
public FileWatcher getClientWatcher() {
return new FileWatcher(clist.sessionFile);
}
+ FileWatcher session_doc_watcher=null;
/**
* make a new watcher object for the vamsas Document
* @return new ClientFile watcher instance
*/
public FileWatcher getDocWatcher() {
+ if (session_doc_watcher==null)
+ return session_doc_watcher = new FileWatcher(vamArchive.sessionFile);
return new FileWatcher(vamArchive.sessionFile);
}
FileWatcher store_doc_file=null;
/**
* make a new watcher object for the messages file
+ * (thread safe - keeps a reference to the first watcher)
* @return new watcher instance
*/
public FileWatcher getStoreWatcher() {
- return store_doc_file = new FileWatcher(new File(CLOSEANDSAVE_FILE));
+ if (store_doc_file==null)
+ return store_doc_file = new FileWatcher(new File(CLOSEANDSAVE_FILE));
+ return new FileWatcher(new File(CLOSEANDSAVE_FILE));
+
}
/**
* write to the StoreWatcher file to indicate that a storeDocumentRequest has been made.
log.info("Trying to get lock for "+vamArchive.sessionFile);
// TODO: LATER: decide if session archive provenance should be written in vamsasDocument file for this export.
newdoc.updateFrom(extlock, vamArchive);
- // TODO: SOON: fix use of updateFrom for file systems where locks cannot be made (because they don't have a lockManager, ie NFS/Unix, etc).
+ // LATER: LATER: fix use of updateFrom for file systems where locks cannot be made (because they don't have a lockManager, ie NFS/Unix, etc).
vamArchive.unLock();
newdoc.unlockFile();
log.debug("Transfer complete.");