1 19 20 package org.lucane.applications.administrator; 21 22 import java.awt.Dimension ; 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 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 (800, 550)); 60 win.show(); 61 } 62 63 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 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 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 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 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 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 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 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 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 e) { 165 allServices = new ArrayList(); 166 DialogBox.error(tr("err") + e); 167 } 168 } 169 170 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 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 e) { 187 list = new ArrayList(); 188 DialogBox.error(tr("err") + e); 189 } 190 191 return list; 192 } 193 194 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 ack = oc.readString(); 202 if(ack.startsWith("FAILED")) 203 DialogBox.error(tr("err.storeConcept") + concept); 204 205 oc.close(); 206 } catch(Exception 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 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 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 ack = oc.readString(); 245 if(ack.startsWith("FAILED")) 246 DialogBox.error(tr("err.removeConcept") + concept); 247 248 oc.close(); 249 } catch(Exception e) { 250 DialogBox.error(tr("err") + e); 251 } 252 } 253 } 254 255 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 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 e) { 286 DialogBox.error(tr("err") + e); 287 e.printStackTrace(); 288 } 289 return list; 290 } 291 292 298 private boolean isConnected(UserConcept user) 299 { 300 List users = Client.getInstance().getUserList(); 301 return users.contains(user.getName()); 302 } 303 304 307 private boolean updateIsSafe(Concept concept) 308 { 309 if(concept.getName().equals("Admins") && concept instanceof GroupConcept) 311 { 312 GroupConcept group = (GroupConcept)concept; 313 314 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 if(!group.getUsers().hasNext()) 326 return askForConfirmation(tr("dangerous.update")); 327 } 328 329 if(concept.getName().equals("admin") && concept instanceof UserConcept) 331 return askForConfirmation(tr("dangerous.update")); 332 333 return true; 334 } 335 336 339 private boolean removeIsSafe(Concept concept) 340 { 341 String [] dangerous = { 342 "Admins", "admin", "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 361 private boolean askForConfirmation(String message) 362 { 363 return DialogBox.question(getTitle(), message); 364 } 365 } | Popular Tags |