import java.io.FileOutputStream;
import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/**
* Basic methods for classes handling locked IO on files
* monitored by all (simpleclient) clients in a vamsas session.
* @author jimp
- *
+ *TODO: support non nio file locking capable systems
*/
public class SessionFile {
-
+ private static Log log = LogFactory.getLog(SessionFile.class);
protected File sessionFile;
protected Lock fileLock = null;
return fileLock.isLocked();
}
} else
- throw new Error(
- "org.vamsas.client.simpleclient.SessionFile.lockFile called for non-initialised SessionFile!");
+ log.error("lockFile called for non-initialised SessionFile!");
// no lock possible
return false;
fileLock.rafile.length());
tos.close();
} catch (FileNotFoundException e1) {
- System.err.println("Can't create temp file for "+sessionFile.getName());
- e1.printStackTrace(System.err);
+ log.warn("Can't create temp file for "+sessionFile.getName(),e1);
tempfile=null;
} catch (IOException e1) {
- System.err
- .println("Error when copying content to temp file for "+sessionFile.getName());
- e1.printStackTrace(System.err);
+ log.warn("Error when copying content to temp file for "+sessionFile.getName(),e1);
tempfile=null;
}
}
return tempfile;
}
-
+ /**
+ * Replaces data in sessionFile with data from file handled by another sessionFile
+ * passes up any exceptions.
+ * @param newData source for new data
+ */
+ protected void updateFrom(Lock extantLock, SessionFile newData) throws IOException {
+ log.debug("Updating "+sessionFile.getAbsolutePath()+" from "+newData.sessionFile.getAbsolutePath());
+ if (newData==null)
+ throw new IOException("Null newData object.");
+ if (newData.sessionFile==null)
+ throw new IOException("Null SessionFile in newData.");
+
+ lockFile(extantLock);
+ newData.lockFile();
+ fileLock.rafile.getChannel().transferFrom(newData.fileLock.rafile.getChannel(), 0,
+ newData.fileLock.rafile.length());
+ }
}