--- /dev/null
+package org.vamsas.client.simpleclient;
+
+import java.io.File;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * methods for setting and checking
+ * binary flags in a vamsas session directory.
+ * all methods apart from the constructor will
+ * throw a fatal error if the flagFile is not
+ * a valid java.io.File object.
+ * LATER: extract SessionFlag interface for generalizing the vamsas session code
+ * @author jimp
+ *
+ */
+public class SessionFlagFile {
+ private static Log log = LogFactory.getLog(SessionFlagFile.class);
+ protected File flagFile=null;
+ private void checkFlagFile() {
+ if (flagFile==null) {
+ log.fatal("Implementation error - uninitialized SessionFlagFile",
+ new Error("Implementation error - uninitialized SessionFlagFile"));
+ }
+ }
+ /**
+ * will log a warning if exceptions occur during flag creation.
+ * @return true if flag was set successfully
+ */
+ public boolean setFlag() {
+ checkFlagFile();
+ try {
+ if (flagFile.createNewFile()) {
+ log.debug("Set session flag "+flagFile);
+ } else {
+ log.debug("Session flag already set "+flagFile);
+ }
+ return true;
+ }
+ catch (Exception e) {
+ log.warn("Couldn't set session flag "+flagFile, e);
+ }
+ return false;
+ }
+ /**
+ *
+ * @return true if flag was cleared successfully
+ */
+ public boolean clearFlag() {
+ checkFlagFile();
+ if (flagFile.exists()) {
+ log.debug("clearing session flag "+flagFile);
+ if (!flagFile.delete()) {
+ log.warn("failed to clear session flag "+flagFile);
+ return false;
+ }
+ } else {
+ log.debug("clearFlag called for already cleared flag "+flagFile);
+ }
+ return true;
+ }
+ /**
+ *
+ * @return state of session flag
+ */
+ public boolean checkFlag() {
+ checkFlagFile();
+ if (flagFile.exists()) {
+ if (log.isDebugEnabled())
+ log.debug("Flag '"+flagFile+"' is set.");
+ return true;
+ }
+ if (log.isDebugEnabled())
+ log.debug("Flag '"+flagFile+"' is not set.");
+ return false;
+ }
+ /**
+ * @param flagFile
+ */
+ public SessionFlagFile(File flagFile) {
+ super();
+ this.flagFile = flagFile;
+ };
+}