KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > applications > administrator > AdministratorPlugin


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2003 Vincent Fiack <vfiack@mail15.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package org.lucane.applications.administrator;
21
22 import java.awt.Dimension JavaDoc;
23 import java.util.*;
24
25 import org.lucane.client.*;
26 import org.lucane.client.widgets.*;
27 import org.lucane.common.*;
28 import org.lucane.common.concepts.*;
29 import org.lucane.common.net.ObjectConnection;
30 import org.lucane.applications.administrator.gui.*;
31
32 public class AdministratorPlugin extends StandalonePlugin
33 {
34     private ConnectInfo service;
35     private ArrayList allGroups = null;
36     private ArrayList allUsers = null;
37     private ArrayList allPlugins = null;
38     private ArrayList allServices = null;
39     
40     
41     //-- from Plugin
42
public AdministratorPlugin()
43     {
44     }
45     
46     
47     public Plugin newInstance(ConnectInfo[] friends)
48     {
49         return new AdministratorPlugin();
50     }
51
52     public void start()
53     {
54         service = Communicator.getInstance().getConnectInfo("org.lucane.applications.administrator");
55         
56         ManagedWindow win = new ManagedWindow(this, "Admin plugin");
57         win.setExitPluginOnClose(true);
58         win.getContentPane().add(new MainPanel(this));
59         win.setPreferredSize(new Dimension JavaDoc(800, 550));
60         win.show();
61     }
62     
63     //-- get cached concepts
64

65     public ArrayList getAllGroups(boolean fetch)
66     {
67         if(fetch || allGroups == null)
68             fetchAllGroups();
69         
70         return allGroups;
71     }
72     
73     public ArrayList getAllUsers(boolean fetch)
74     {
75         if(fetch || allUsers == null)
76             fetchAllUsers();
77         
78         return allUsers;
79     }
80     
81     public ArrayList getAllPlugins(boolean fetch)
82     {
83         if(fetch || allPlugins == null)
84             fetchAllPlugins();
85         
86         return allPlugins;
87     }
88     public ArrayList getAllServices(boolean fetch)
89     {
90         if(fetch || allServices == null)
91             fetchAllServices();
92         
93         return allServices;
94     }
95     
96     // -- really fetch concepts
97

98     private void fetchAllGroups()
99     {
100         try {
101             AdminAction action = new AdminAction(AdminAction.GET_ALL_GROUPS);
102             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
103             String JavaDoc ack = oc.readString();
104             if(ack.startsWith("FAILED"))
105                 DialogBox.error(tr("err.fetchAllGroups"));
106
107             allGroups = (ArrayList)oc.read();
108
109             oc.close();
110         } catch(Exception JavaDoc e) {
111             allGroups = new ArrayList();
112             DialogBox.error(tr("err") + e);
113         }
114     }
115     
116     private void fetchAllUsers()
117     {
118         try {
119             AdminAction action = new AdminAction(AdminAction.GET_ALL_USERS);
120             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
121             String JavaDoc ack = oc.readString();
122             if(ack.startsWith("FAILED"))
123                 DialogBox.error(tr("err.fetchAllUsers"));
124
125             allUsers = (ArrayList)oc.read();
126
127             oc.close();
128         } catch(Exception JavaDoc e) {
129             allUsers = new ArrayList();
130             DialogBox.error(tr("err") + e);
131         }
132     }
133     
134     private void fetchAllPlugins()
135     {
136         try {
137             AdminAction action = new AdminAction(AdminAction.GET_ALL_PLUGINS);
138             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
139             String JavaDoc ack = oc.readString();
140             if(ack.startsWith("FAILED"))
141                 DialogBox.error(tr("err.fetchAllPlugins"));
142
143             allPlugins = (ArrayList)oc.read();
144
145             oc.close();
146         } catch(Exception JavaDoc e) {
147             allPlugins = new ArrayList();
148             DialogBox.error(tr("err") + e);
149         }
150     }
151     
152     private void fetchAllServices()
153     {
154         try {
155             AdminAction action = new AdminAction(AdminAction.GET_ALL_SERVICES);
156             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
157             String JavaDoc ack = oc.readString();
158             if(ack.startsWith("FAILED"))
159                 DialogBox.error(tr("err.fetchAllServices"));
160
161             allServices = (ArrayList)oc.read();
162
163             oc.close();
164         } catch(Exception JavaDoc e) {
165             allServices = new ArrayList();
166             DialogBox.error(tr("err") + e);
167         }
168     }
169     
170     //--
171

172     public ArrayList getAuthorizedPlugins(UserConcept user)
173     {
174         ArrayList list = null;
175         
176         try {
177             AdminAction action = new AdminAction(AdminAction.GET_AUTHORIZED_PLUGINS, user);
178             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
179             String JavaDoc ack = oc.readString();
180             if(ack.startsWith("FAILED"))
181                 DialogBox.error(tr("err.getAuthorizedPluginsFor") + user);
182
183             list = (ArrayList)oc.read();
184
185             oc.close();
186         } catch(Exception JavaDoc e) {
187             list = new ArrayList();
188             DialogBox.error(tr("err") + e);
189         }
190         
191         return list;
192     }
193     
194     //-- update concept storage
195

196     public void storeConcept(Concept concept)
197     {
198         try {
199             AdminAction action = new AdminAction(AdminAction.STORE, concept);
200             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
201             String JavaDoc ack = oc.readString();
202             if(ack.startsWith("FAILED"))
203                 DialogBox.error(tr("err.storeConcept") + concept);
204
205             oc.close();
206         } catch(Exception JavaDoc e) {
207             DialogBox.error(tr("err") + e);
208         }
209     }
210     
211     public void updateConcept(Concept concept)
212     {
213         this.updateConcept(concept, true);
214     }
215     
216     public void updateConcept(Concept concept, boolean verbose)
217     {
218         if(!verbose || updateIsSafe(concept))
219         {
220             try {
221                 AdminAction action = new AdminAction(AdminAction.UPDATE, concept);
222                 ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
223                 String JavaDoc ack = oc.readString();
224                 if(ack.startsWith("FAILED"))
225                     DialogBox.error(tr("err.updateConcept") + concept);
226                 else if(verbose)
227                     DialogBox.info(tr("msg.conceptUpdated") + concept);
228     
229                 oc.close();
230             } catch(Exception JavaDoc e) {
231                 DialogBox.error(tr("err") + e);
232             }
233         }
234         
235     }
236     
237     public void removeConcept(Concept concept)
238     {
239         if(removeIsSafe(concept))
240         {
241             try {
242                 AdminAction action = new AdminAction(AdminAction.REMOVE, concept);
243                 ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
244                 String JavaDoc ack = oc.readString();
245                 if(ack.startsWith("FAILED"))
246                     DialogBox.error(tr("err.removeConcept") + concept);
247     
248                 oc.close();
249             } catch(Exception JavaDoc e) {
250                 DialogBox.error(tr("err") + e);
251             }
252         }
253     }
254
255     //-- fetch users
256

257     public List getAllConnectedUsers()
258     {
259         return Client.getInstance().getUserList();
260     }
261
262     public ArrayList getConnectedUsersForConcept(Concept concept)
263     {
264         ArrayList list = new ArrayList();
265
266         try {
267             AdminAction action = new AdminAction(AdminAction.GET_USERS_FOR, concept);
268             ObjectConnection oc = Communicator.getInstance().sendMessageTo(service, service.getName(), action);
269             String JavaDoc ack = oc.readString();
270             if(ack.startsWith("FAILED"))
271                 DialogBox.error(tr("err.getUsersForConcept") + concept);
272             else
273             {
274                 ArrayList users = (ArrayList)oc.read();
275                 Iterator i = users.iterator();
276                 while(i.hasNext())
277                 {
278                     UserConcept user = (UserConcept)i.next();
279                     if(isConnected(user))
280                         list.add(user.getName());
281                 }
282             }
283
284             oc.close();
285         } catch(Exception JavaDoc e) {
286             DialogBox.error(tr("err") + e);
287             e.printStackTrace();
288         }
289         return list;
290     }
291     
292     /**
293      * Check if a user is connected
294      *
295      * @param user the UserConcept
296      * @return true if connected
297      */

298     private boolean isConnected(UserConcept user)
299     {
300         List users = Client.getInstance().getUserList();
301         return users.contains(user.getName());
302     }
303     
304     /**
305      * Removing plugins or users from admin concept is dangerous
306      */

307     private boolean updateIsSafe(Concept concept)
308     {
309         //admin group
310
if(concept.getName().equals("Admins") && concept instanceof GroupConcept)
311         {
312             GroupConcept group = (GroupConcept)concept;
313             
314             //basic applications
315
if(!group.hasPlugin(new PluginConcept("org.lucane.application.quicklaunch", "version")))
316                 return askForConfirmation(tr("dangerous.update"));
317             if(!group.hasPlugin(new PluginConcept("org.lucane.application.maininterface", "version")))
318                 return askForConfirmation(tr("dangerous.update"));
319             if(!group.hasPlugin(new PluginConcept("org.lucane.application.administrator", "version")))
320                 return askForConfirmation(tr("dangerous.update"));
321             if(!group.hasService(new ServiceConcept("org.lucane.application.administrator", false)))
322                 return askForConfirmation(tr("dangerous.update"));
323                 
324             //at least one user
325
if(!group.getUsers().hasNext())
326                 return askForConfirmation(tr("dangerous.update"));
327         }
328
329         //admin user
330
if(concept.getName().equals("admin") && concept instanceof UserConcept)
331             return askForConfirmation(tr("dangerous.update"));
332             
333         return true;
334     }
335     
336     /**
337      * Removing a plugin might break everything
338      */

339     private boolean removeIsSafe(Concept concept)
340     {
341         String JavaDoc[] dangerous = {
342             "Admins", //group
343
"admin", //user
344
"org.lucane.applications.maininterface",
345             "org.lucane.applications.quicklaunch",
346             "org.lucane.applications.administrator",
347         };
348         
349         for(int i=0;i<dangerous.length;i++)
350         {
351             if(dangerous[i].equals(concept.getName()))
352                 return askForConfirmation(tr("dangerous.remove"));
353         }
354         
355         return true;
356     }
357     
358     /**
359      * Ask the user before screwing everything
360      */

361     private boolean askForConfirmation(String JavaDoc message)
362     {
363         return DialogBox.question(getTitle(), message);
364     }
365 }
Popular Tags