001    /*
002    
003      $Id: InternalCommandManager.java,v 1.15 2003/05/15 12:05:55 culdesac Exp $
004    
005    */
006    
007    package sharpster.daemon.commandmanagement;
008    
009    import sharpster.daemon.filemanagement.FileManager;
010    import sharpster.daemon.sharemanagement.ShareManager;
011    import sharpster.daemon.usermanagement.UserManager;
012    import sharpster.daemon.externalcommunication.ExternalCommunication;
013    import sharpster.daemon.groupmanagement.GroupController;
014    import sharpster.common.*;
015    import java.util.LinkedList;
016    import java.util.ListIterator;
017    import net.jxta.id.*;
018    
019    /**
020     * Interface of the Command Management Module. It is used by the Client
021     * Communication Module to invoke the execution of commands, requested
022     * by the user of the client.
023     */
024    
025    public class InternalCommandManager {
026    
027        private FileManager fileManager;
028        private ShareManager shareManager;
029        private UserManager userManager;
030        private GroupController groupController;
031        private ExternalCommunication externalCommunication;
032    
033        /**
034         * Constructs an object
035         */
036        public void initialize(FileManager fmi,
037                               ShareManager smi,
038                               UserManager umi,
039                               ExternalCommunication eci,
040                               Mutex globalMutex,
041                               GroupController gci) {
042            fileManager = fmi;
043            shareManager = smi;
044            userManager = umi;
045            externalCommunication = eci;
046            groupController = gci;
047        }
048    
049        /**
050         * Executes a shareFiles call received from the client.
051         */
052        public ResponseCollection shareFiles(FileCollection files,
053                                             String workingDirectory) {
054            ResponseCollection resp, responses;
055    
056            responses = new ResponseCollection();
057    
058            resp = fileManager.translateLocalPaths(files,
059                                                   workingDirectory,
060                                                   true);
061    
062            responses.appendCollection(resp);
063            if(resp.hasError()) {
064                return responses;
065            }
066    
067            resp = shareManager.shareFiles(files, false);
068    
069            responses.appendCollection(resp);
070    
071            return responses;
072        }
073    
074        /**
075         * Executes a unshareFiles call received from the client.
076         */
077        public ResponseCollection unshareFiles(FileCollection files,
078                                               String workingDirectory) {
079            ResponseCollection resp, responses;
080    
081            responses = new ResponseCollection();
082    
083            resp = fileManager.translateLocalPaths(files,
084                                                   workingDirectory,
085                                                   true);
086    
087            responses.appendCollection(resp);
088            if(resp.hasError()) return responses;
089    
090            resp = shareManager.unshareFiles(files, false);
091    
092            responses.appendCollection(resp);
093            if(resp.hasError()) return responses;
094    
095            return responses;
096        }
097    
098        /**
099         * Excecutes a localDoCVS call received from the client.
100         */
101        public ResponseCollection localDoCVS(String command,
102                                             String workingDirectory) {
103            ResponseCollection resp = fileManager.localDoCVS(command, workingDirectory);
104    
105            shareManager.synchronizeShares();
106            shareManager.saveToFile(null);
107    
108            return resp;
109        }
110    
111        /**
112         * Excecutes a remoteCheckoutFiles call received from the client.
113         */
114        public ResponseCollection remoteCheckoutFiles(FileCollection files,
115                                                      String fromUser,
116                                                      String workingDirectory,
117                                                      String role) {
118            ResponseCollection responses, respCol;
119    
120            responses = externalCommunication.checkoutFiles(files, fromUser, role);
121            if(responses.hasError()) return responses;
122    
123            for(int i=0;i<responses.getResponseCount();i++) {
124                Response resp = responses.getResponse(i);
125                if(resp.getType() == ResponseType.FILE) {
126                    FileResponse fileResp = (FileResponse)resp;
127                    respCol = fileManager.localSaveFiles(fileResp.getFiles(),workingDirectory);
128                    responses.appendCollection(respCol);
129                }
130            }
131    
132            return responses;
133        }
134    
135        /**
136         * Excecutes a remoteUpdateFiles call received from the client.
137         */
138        public ResponseCollection remoteUpdateFiles(FileCollection files,
139                                                    String fromUser,
140                                                    String workingDirectory) {
141            ResponseCollection responses = new ResponseCollection();
142            ResponseCollection resp, respCol;
143    
144            resp = fileManager.localLoadFiles(files,workingDirectory);
145            responses.appendCollection(resp);
146            if(responses.hasError()) return responses;
147    
148            resp = fileManager.translateLocalPaths(files,
149                                                   workingDirectory,
150                                                   false);
151            responses.appendCollection(resp);
152            if(responses.hasError()) return responses;
153    
154            resp = externalCommunication.updateFiles(files, fromUser);
155            responses.appendCollection(resp);
156    
157            for(int i=0;i<responses.getResponseCount();i++) {
158                Response resp2 = responses.getResponse(i);
159                if(resp2.getType() == ResponseType.FILE) {
160                    FileResponse fileResp = (FileResponse)resp2;
161                    respCol = fileManager.localSaveFiles(fileResp.getFiles(),workingDirectory);
162                    responses.appendCollection(respCol);
163                }
164            }
165    
166            return responses;
167        }
168    
169        /**
170         * Excecutes a remoteCommitFiles call received from the client.
171         */
172        public ResponseCollection remoteCommitFiles(FileCollection files,
173                                                    String fromUser,
174                                                    String workingDirectory,
175                                                    String role) {
176    
177            ResponseCollection responses = new ResponseCollection();
178            ResponseCollection resp, respCol;
179    
180            resp = fileManager.localLoadFiles(files,workingDirectory);
181            responses.appendCollection(resp);
182            if(responses.hasError()) return responses;
183    
184            resp = fileManager.translateLocalPaths(files,
185                                                   workingDirectory,
186                                                   false);
187            responses.appendCollection(resp);
188            if(responses.hasError()) return responses;
189    
190            resp = externalCommunication.commitFiles(files, fromUser, role);
191            responses.appendCollection(resp);
192    
193            for(int i=0;i<responses.getResponseCount();i++) {
194                Response resp2 = responses.getResponse(i);
195                if(resp2.getType() == ResponseType.FILE) {
196                    FileResponse fileResp = (FileResponse)resp2;
197                    respCol = fileManager.localSaveFiles(fileResp.getFiles(),workingDirectory);
198                    responses.appendCollection(respCol);
199                }
200            }
201    
202            return responses;
203        }
204      
205      public ResponseCollection groupCommand(GroupCommand command) {
206        ResponseCollection responses;
207        responses = groupController.groupCommand(command);
208        return responses;
209      }
210      
211      /**
212       * Excecutes a remoteAddFiles call received from the client.
213       */
214      public ResponseCollection remoteAddFiles(FileCollection files,
215                                               String fromUser,
216                                               String workingDirectory) {
217        ResponseCollection responses;
218        responses = externalCommunication.addFiles(files, fromUser);
219        if(responses.hasError()) return responses;
220        
221        return responses;
222      }
223      
224        /**
225         * Excecutes a remoteRemoveFiles call received from the client.
226         */
227        public ResponseCollection remoteRemoveFiles(FileCollection files,
228                                                    String fromUser,
229                                                    String workingDirectory) {
230            ResponseCollection responses;
231            responses = externalCommunication.removeFiles(files, fromUser);
232            if(responses.hasError()) return responses;
233    
234            return responses;
235        }
236    
237        /**
238         * Excecutes a viewFileSharing call received from the client.
239         */
240        public ResponseCollection viewFileSharing() {
241            return shareManager.viewFileSharing();
242        }
243    
244        /**
245         * Excecutes a viewUsers call received from the client.
246         */
247        public ResponseCollection viewUsers() {
248            return userManager.viewUsers();
249        }
250    
251        /**
252         * Excecutes a viewFileAccess call received from the client.
253         */
254        public ResponseCollection viewFileAccess() {
255            return userManager.viewFileAccess();
256        }
257    
258        /**
259         * Excecutes a synchronizeCVS call received from the client.
260         */
261        public ResponseCollection synchronizeCVS(String workingDirectory) {
262            ResponseCollection resp = fileManager.synchronizeCVS(workingDirectory);
263    
264            shareManager.synchronizeShares();
265            shareManager.saveToFile(null);
266    
267            return resp;
268        }
269    }
270    
271    
272    
273