test clientsFile handlers.
[vamsas.git] / src / org / vamsas / client / simpleclient / Lock.java
1 package org.vamsas.client.simpleclient;
2
3 import java.io.FileNotFoundException;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.RandomAccessFile;
7 import java.nio.channels.FileLock;
8
9 /**
10  * transient object representing a file lock
11  * 
12  * 
13  * @author jimp
14  * 
15  */
16
17 public class Lock {
18   FileLock lock = null;
19   RandomAccessFile rafile;
20   /**
21    * creates a valid Lock (test with <method>isLocked</method>)
22    * if a lock could be obtained for <param>lockfile</param>
23    * @param lockfile
24    */
25   public Lock(java.io.File lockfile) {
26     // try and get a lock.
27     lock = null;
28
29     try {
30       if (!lockfile.exists())
31         if (!lockfile.createNewFile()) {
32           return;
33         }
34
35       lock = (rafile=new RandomAccessFile(lockfile,"rw")).getChannel().tryLock();
36     } catch (FileNotFoundException e) {
37       System.err.println("Error! Couldn't create a lockfile at "
38           + lockfile.getAbsolutePath());
39       e.printStackTrace();
40     } catch (IOException e) {
41       System.err.println("Error! Problems with IO when creating a lock on "
42           + lockfile.getAbsolutePath());
43       e.printStackTrace();
44     }
45   }
46
47   boolean isLocked() {
48     if (lock != null && lock.isValid()) {
49       return true;
50     }
51     return false;
52   }
53
54   /* Explicitly release lock (probably don't need to do this!)
55    * @see java.lang.Object#finalize()
56    */
57   protected void finalize() throws Throwable {
58     if (lock!=null)
59       lock.release();
60     super.finalize();
61   }
62   
63 }