001 /*
002
003 $Id: DaemonCommunication.java,v 1.10 2003/05/02 20:29:47 culdesac Exp $
004
005 */
006
007 package sharpster.client.daemoncommunication;
008
009 import sharpster.common.*;
010 import sharpster.common.ClientDaemonMessage;
011 import sharpster.common.FileCollection;
012 import sharpster.common.ResponseCollection;
013 import sharpster.common.InternalMessageType;
014 import java.net.Socket;
015 import java.io.*;
016
017 /**
018 * Class responsible for forwarding commands from the client to the daemon.
019 *
020 */
021 public class DaemonCommunication {
022
023 /**
024 * Holds the data which is to be sent to the daemon.
025 */
026 private ClientDaemonMessage message;
027
028 /**
029 * Constructs a daemon communication object
030 */
031 public DaemonCommunication() {
032 message = new ClientDaemonMessage();
033 message.clear();
034 }
035
036 /**
037 * Transfers the initialized message to the daemon and waits for
038 * a response.
039 */
040 private boolean transferMessage() {
041 Socket socket = null;
042 try {
043 // adress to connect to. (localhost)
044 String adress = "127.0.0.1";
045 // portnumber to connect to.
046 int port = 7000;
047 // try to create the new socket.
048 socket = new Socket(adress, port);
049 } catch(IOException e) {
050 System.out.println("DaemonCommuncation::DaemonCommunication could "+
051 "not connect to daemon\n");
052 // we got an error, set socket to null to be on the safe side.
053 socket = null;
054 }
055
056 if (null == socket)
057 return false;
058
059 boolean retval = true;
060 try {
061 /* send the object */
062 ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
063 oos.writeObject(message);
064 oos.flush();
065
066 /* receive answer */
067 ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
068 message = (ClientDaemonMessage) ois.readObject();
069
070 /* close the connections. */
071 oos.close();
072 ois.close();
073 socket.close();
074 } catch (Exception e) { // IOException, java.lang.ClassNotFoundException
075 System.out.println("DaemonCommuncation::transferMessage error " + e.getMessage());
076 retval = false;
077 }
078 return retval;
079 }
080
081 /**
082 * Utility function that gets the current working directory.
083 */
084 private String getCurrentWorkingDirectory() {
085 return new String(System.getProperty("user.dir"));
086 }
087
088 /**
089 * Forwards a shareFiles call to the daemon.
090 */
091 public ResponseCollection shareFiles(FileCollection files) {
092 message.clear();
093 message.commandId = InternalMessageType.SHARE_FILES;
094 message.files = files;
095 message.workingDirectory = getCurrentWorkingDirectory();
096
097 if (!transferMessage())
098 return null;
099
100 return message.response;
101 }
102
103 /**
104 * Forwards a unshareFiles call to the daemon.
105 */
106 public ResponseCollection unShareFiles(FileCollection files) {
107 message.clear();
108 message.commandId = InternalMessageType.UNSHARE_FILES;
109 message.files = files;
110 message.workingDirectory = getCurrentWorkingDirectory();
111 if (!transferMessage())
112 return null;
113
114 return message.response;
115 }
116
117 /**
118 * Forwards a localDoCVS call to the daemon.
119 */
120 public ResponseCollection localDoCVS(String command) {
121 message.clear();
122 message.commandId = InternalMessageType.LOCAL_DO_CVS;
123 message.CVScommand = command;
124 message.workingDirectory = getCurrentWorkingDirectory();
125 if (!transferMessage())
126 return null;
127
128 return message.response;
129 }
130
131 /**
132 * Forwards a remoteCheckoutFiles call to the daemon.
133 */
134 public ResponseCollection remoteCheckoutFiles(FileCollection files,
135 String fromUser,
136 String role) {
137 message.clear();
138 message.commandId = InternalMessageType.REMOTE_CHECKOUT;
139 message.files = files;
140 message.fromUser = fromUser;
141 message.role = role;
142 message.workingDirectory = getCurrentWorkingDirectory();
143 if (!transferMessage())
144 return null;
145
146 return message.response;
147 }
148
149 /**
150 * Forwards a remoteUpdateFiles call to the daemon.
151 */
152 public ResponseCollection remoteUpdateFiles(FileCollection files,
153 String fromUser) {
154 message.clear();
155 message.commandId = InternalMessageType.REMOTE_UPDATE;
156 message.files = files;
157 message.fromUser = fromUser;
158 message.workingDirectory = getCurrentWorkingDirectory();
159 if (!transferMessage())
160 return null;
161
162 return message.response;
163 }
164
165 /**
166 * Forwards a remoteCommitFiles call to the daemon.
167 */
168 public ResponseCollection remoteCommitFiles(FileCollection files,
169 String fromUser,
170 String role) {
171 message.clear();
172 message.commandId = InternalMessageType.REMOTE_COMMIT;
173 message.files = files;
174 message.fromUser = fromUser;
175 message.role = role;
176 message.workingDirectory = getCurrentWorkingDirectory();
177 if (!transferMessage())
178 return null;
179
180 return message.response;
181 }
182
183
184 /**
185 * Forwards a groupCommand call to the daemon.
186 */
187 public ResponseCollection groupCommand(GroupCommand command) {
188 message.clear();
189 message.commandId = InternalMessageType.GROUP_COMMAND;
190 message.command = command;
191 message.workingDirectory = getCurrentWorkingDirectory();
192 if (!transferMessage())
193 return null;
194
195 return message.response;
196 }
197
198
199 /**
200 * Forwards a remoteAddFiles call to the daemon.
201 */
202 public ResponseCollection remoteAddFiles(FileCollection files,
203 String fromUser) {
204 message.clear();
205 message.commandId = InternalMessageType.REMOTE_ADD;
206 message.files = files;
207 message.fromUser = fromUser;
208 message.workingDirectory = getCurrentWorkingDirectory();
209 if (!transferMessage())
210 return null;
211
212 return message.response;
213 }
214
215 /**
216 * Forwards a remoteRemoveFiles call to the daemon.
217 */
218 public ResponseCollection remoteRemoveFiles(FileCollection files,
219 String fromUser) {
220 message.clear();
221 message.commandId = InternalMessageType.REMOTE_REMOVE;
222 message.files = files;
223 message.fromUser = fromUser;
224 message.workingDirectory = getCurrentWorkingDirectory();
225 if (!transferMessage())
226 return null;
227
228 return message.response;
229 }
230
231 /**
232 * Forwards a viewFileSharing call to the daemon.
233 */
234 public ResponseCollection viewFileSharing() {
235 message.clear();
236 message.commandId = InternalMessageType.VIEW_SHARING;
237 if (!transferMessage())
238 return null;
239
240 return message.response;
241 }
242
243 /**
244 * Forwards a viewUsers call to the daemon.
245 */
246 public ResponseCollection viewUsers() {
247 message.clear();
248 message.commandId = InternalMessageType.VIEW_USERS;
249 if (!transferMessage())
250 return null;
251
252 return message.response;
253 }
254
255 /**
256 * Forwards a viewFileAccess call to the daemon.
257 */
258 public ResponseCollection viewFileAccess() {
259 message.clear();
260 message.commandId = InternalMessageType.VIEW_ACCESS;
261 if (!transferMessage())
262 return null;
263
264 return message.response;
265 }
266
267 /**
268 * Forwards a viewFileAccess call to the daemon.
269 */
270 public ResponseCollection synchronizeCVS() {
271 message.clear();
272 message.commandId = InternalMessageType.SYNCHRONIZE_CVS;
273 message.workingDirectory = getCurrentWorkingDirectory();
274 if (!transferMessage())
275 return null;
276
277 return message.response;
278 }
279
280
281
282
283 }
284
285
286
287
288
289
290
291
292