132280e504cc0a36e8c4f83a62594216da7e87da
[vamsas.git] / src / org / vamsas / client / simpleclient / ClientsFile.java
1 package org.vamsas.client.simpleclient;
2 import org.vamsas.client.*;
3
4 import java.io.BufferedInputStream;
5 import java.io.BufferedOutputStream;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.FileNotFoundException;
9 import java.io.FileOutputStream;
10 import java.io.IOException;
11 import java.io.InputStreamReader;
12 import java.io.ObjectInputStream;
13 import java.io.ObjectOutput;
14 import java.io.ObjectOutputStream;
15 import java.io.OutputStream;
16 import java.util.Vector;
17
18 /**
19  * @author jim
20  * Handler for the clientsFile within a vamsas session.
21  */
22 public class ClientsFile {
23   private File filelist;
24   /**
25    * number of my client in list 
26    * (not known at start but used when known to make lock)
27    */
28   private int syncnum=1;
29   
30   ClientsFile(File filelist) {
31     this.filelist=filelist;
32   }
33   public ClientHandle[] retrieveClientList() {
34     if (filelist!=null) {
35       if (filelist.exists()) {
36         Lock listlock;
37         do {
38           listlock  = new Lock(filelist); // TODO: wait around if we can't get the lock.
39         } while (!listlock.isLocked());
40         try {
41           ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(new java.io.FileInputStream(filelist)));
42           ClientHandle[] clients;
43           clients = (ClientHandle[]) ((Vector) is.readObject()).toArray();
44           return clients;
45         }
46         catch (FileNotFoundException e) {
47           // TODO Auto-generated catch block
48           e.printStackTrace();
49         } catch (Exception e) {
50           e.printStackTrace();
51         }
52       }
53       // else return null.
54     } else {
55       throw new Error("Tried to retrieve a clientList without specifying client list filename");
56     }
57     return null;
58        
59   }
60   public boolean putClientList(ClientHandle[] clients) {
61     if (filelist!=null) {
62       if (filelist.exists()) {
63         Lock listlock;
64         do {
65           listlock  = new Lock(filelist); // TODO: wait around if we can't get the lock?  should return and make client wait until write has finished so it can read new client info...
66         } while (!listlock.isLocked());
67         try {
68           File templist=File.createTempFile(filelist.getName(),".temp",filelist);
69           ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(templist)));
70           os.writeObject(clients);
71           os.close();
72         }
73         catch (FileNotFoundException e) {
74           // TODO Auto-generated catch block
75           e.printStackTrace();
76         } catch (Exception e) {
77           e.printStackTrace();
78         }
79       }
80       // else return null.
81     } else {
82       throw new Error("Tried to retrieve a clientList without specifying client list filename");
83     }
84     return false;
85   }
86 }