1 7 8 package com.memoire.vainstall.builder; 9 10 import com.memoire.vainstall.VAGlobals; 11 12 import com.memoire.vainstall.builder.action.*; 13 import com.memoire.vainstall.builder.event.*; 14 import com.memoire.vainstall.builder.gui.*; 15 import com.memoire.vainstall.builder.util.*; 16 17 import java.awt.event.*; 18 import java.io.File ; 19 import java.util.*; 20 21 import javax.swing.*; 22 import javax.swing.event.*; 23 import javax.swing.tree.*; 24 25 35 public class VAIProductController implements VAIProductListener, InternalFrameListener, ActionListener, MouseListener { 36 37 40 VAIProductInternalFrame frame = new VAIProductInternalFrame(); 41 42 45 String title = ""; 46 47 50 VAIProductModel model = new VAIProductModel(); 51 52 55 AbstractVAIProductNode root; 56 57 60 private Hashtable actionList = new Hashtable(); 61 62 65 ProductStepsNode productStepsNode; 66 67 70 public VAIProductController() { 71 super(); 72 73 model.addVAIProductListener(this); 75 76 frame.addInternalFrameListener(this); 77 78 getActionList(); 80 81 frame.getTree().addMouseListener(this); 82 83 } 84 85 public Hashtable getActionList() { 86 87 if(actionList.size() == 0) { 88 89 ProductAddRequiredStepsAction productAddRequiredStepsAction = new ProductAddRequiredStepsAction(); 91 productAddRequiredStepsAction.initialize(this); 92 actionList.put("ProductAddRequiredStepsAction",productAddRequiredStepsAction); 93 } 94 return actionList; 95 } 96 97 101 public boolean isDirty() { 102 return model.isDirty(); 103 } 104 105 109 public void productChanged(VAIProductEvent evt) { 110 111 switch (evt.getType()) { 112 case VAIProductEvent.PROJECT_LOADED: 113 frame.setNode(getRootNode()); 115 116 TreePath stepsPath = new TreePath(((DefaultTreeModel)frame.getTree().getModel()).getPathToRoot(productStepsNode)); 117 frame.getTree().expandPath(stepsPath); 118 119 title = getModel().getProductName() 121 + VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_Version") 122 + getModel().getProductVersion(); 123 frame.setTitle(title); 124 break; 125 case VAIProductEvent.PROJECT_SAVED: 126 frame.setTitle(title); 127 break; 128 case VAIProductEvent.PROJECT_DIRTY: 129 frame.setTitle(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_Dirty") + title); 130 break; 131 } 132 } 133 134 138 public VAIProductInternalFrame getFrame() { 139 return frame; 140 } 141 142 146 public VAIProductModel getModel() { 147 return model; 148 } 149 150 154 public void actionPerformed(ActionEvent evt) { 155 156 Object source = evt.getSource(); 158 159 try { 161 getFrame().setVisible(true); 162 getFrame().setSelected(true); 163 getFrame().setMaximum(true); 164 } catch(Exception exc) { 165 } 168 169 } 170 171 175 public void internalFrameOpened(InternalFrameEvent evt) { 176 } 177 178 182 public void internalFrameClosing(InternalFrameEvent evt) { 183 } 184 185 189 public void internalFrameClosed(InternalFrameEvent evt) { 190 } 191 192 196 public void internalFrameIconified(InternalFrameEvent evt) { 197 } 198 199 203 public void internalFrameDeiconified(InternalFrameEvent evt) { 204 } 205 206 210 public void internalFrameDeactivated(InternalFrameEvent evt) { 211 getModel().fireVAIProductEvent(new VAIProductEvent(this,VAIProductEvent.PROJECT_DEACTIVATED)); 212 } 213 214 218 public void internalFrameActivated(InternalFrameEvent evt) { 219 220 if (getModel().getRequiredList().size() == 0) { 221 if (getModel().isDirty() == false) { 222 getModel().fireVAIProductEvent(new VAIProductEvent(this,VAIProductEvent.PROJECT_REQUIREMENTS_MET)); 223 } 224 } else { 225 getModel().fireVAIProductEvent(new VAIProductEvent(this,VAIProductEvent.PROJECT_REQUIREMENTS_NOTMET)); 226 } 227 228 229 getModel().fireVAIProductEvent(new VAIProductEvent(this,VAIProductEvent.PROJECT_ACTIVATED)); 230 } 231 232 240 public void createProject(String projectName, String projectVersion, String projectDirectory, String productType) throws VAIBuilderException { 241 242 if (new File (projectDirectory).exists() == true) { 244 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_CreateProject"), 245 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_AlreadyExists"), 246 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_AlreadyExistsHelp")); 247 } 248 249 try { 250 boolean ok = new File (projectDirectory).mkdir(); 251 if (ok == false) { 252 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_CreateProject"), 253 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_NotCreated"), 254 null); 255 } 256 } catch (SecurityException exc) { 257 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_CreateProject"), 258 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_NotCreatedSecurity"), 259 null); 260 } 261 262 model.setProductName(projectName); 263 model.setProductVersion(projectVersion); 264 model.setProductDirectory(projectDirectory); 265 model.setProductType(productType); 266 267 try { 268 model.save(); 269 } catch (Exception exc) { 270 try { 271 new File (projectDirectory).delete(); 272 } catch (Exception innerexc) { 273 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_CreateProject"), 274 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_NotSaved"), 275 null); 276 } 277 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_CreateProject"), 278 VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_NotSaved"), 279 null); 280 } 281 282 frame.setNode(getRootNode()); 284 285 TreePath stepsPath = new TreePath(((DefaultTreeModel)frame.getTree().getModel()).getPathToRoot(productStepsNode)); 286 frame.getTree().expandPath(stepsPath); 287 288 title = getModel().getProductName() 290 + VAGlobals.getResource("com.memoire.vainstall.builder.Language","VAIProductController_Version") 291 + getModel().getProductVersion(); 292 frame.setTitle(title); 293 } 294 295 private AbstractVAIProductNode buildUINodes() { 296 297 root = new ProductBaseNode(); 298 root.initialize(this); 299 300 ProductTargetNode targetNode = new ProductTargetNode(); 302 targetNode.initialize(this); 303 root.add(targetNode); 304 305 ProductVisualNode visualNode = new ProductVisualNode(); 307 visualNode.initialize(this); 308 root.add(visualNode); 309 310 ProductLanguageNode languageNode = new ProductLanguageNode(); 312 languageNode.initialize(this); 313 root.add(languageNode); 314 315 AbstractVAIProductNode packageType = null; 316 if (getModel().getProductType().equals("install") == true) { 317 packageType = new ProductInstallNode(); 318 } 319 if (getModel().getProductType().equals("update") == true) { 320 packageType = new ProductUpdateNode(); 321 } 322 if (getModel().getProductType().equals("module") == true) { 323 packageType = new ProductModuleNode(); 324 } 325 326 if (packageType == null) { 327 return root; 329 } 330 331 packageType.initialize(this); 332 root.add(packageType); 333 334 ProductUninstallNode uninstallNode = new ProductUninstallNode(); 336 uninstallNode.initialize(this); 337 root.add(uninstallNode); 338 339 ProductFilesNode filesNode = new ProductFilesNode(); 341 filesNode.initialize(this); 342 packageType.add(filesNode); 343 344 productStepsNode = new ProductStepsNode(); 346 productStepsNode.initialize(this); 347 packageType.add(productStepsNode); 348 349 if(getModel().getStepsList().size() > 0) { 350 ListIterator iterator = getModel().getStepsList().listIterator(); 351 while (iterator.hasNext() == true) { 352 String type = (String )iterator.next(); 353 354 if (type.equals("language") == true) { 356 ProductStepLanguageNode language = new ProductStepLanguageNode(); 357 language.initialize(this); 358 productStepsNode.add(language); 359 } 360 if (type.equals("welcome") == true) { 361 ProductStepWelcomeNode welcome = new ProductStepWelcomeNode(); 362 welcome.initialize(this); 363 productStepsNode.add(welcome); 364 } 365 if (type.equals("license") == true) { 366 ProductStepLicenseNode license = new ProductStepLicenseNode(); 367 license.initialize(this); 368 productStepsNode.add(license); 369 } 370 if (type.equals("readme") == true) { 371 ProductStepReadmeNode readme = new ProductStepReadmeNode(); 372 readme.initialize(this); 373 productStepsNode.add(readme); 374 } 375 if (type.equals("upgrade") == true) { 376 ProductStepUpgradeNode upgrade = new ProductStepUpgradeNode(); 377 upgrade.initialize(this); 378 productStepsNode.add(upgrade); 379 } 380 if (type.equals("directory") == true) { 381 ProductStepDirectoryNode directory = new ProductStepDirectoryNode(); 382 directory.initialize(this); 383 productStepsNode.add(directory); 384 } 385 if (type.equals("install") == true) { 386 ProductStepInstallNode install = new ProductStepInstallNode(); 387 install.initialize(this); 388 productStepsNode.add(install); 389 } 390 if (type.equals("shortcut") == true) { 391 ProductStepShortcutsNode shortcut = new ProductStepShortcutsNode(); 392 shortcut.initialize(this); 393 productStepsNode.add(shortcut); 394 } 395 if (type.equals("end") == true) { 396 ProductStepEndNode end = new ProductStepEndNode(); 397 end.initialize(this); 398 productStepsNode.add(end); 399 } 400 401 } 402 } 403 return root; 404 } 405 406 410 public void addUINodeBefore(String uiName, AbstractVAIProductNode node) { 411 412 Enumeration nodes = root.postorderEnumeration(); 413 while(nodes.hasMoreElements() == true) { 414 AbstractVAIProductNode tmpNode = (AbstractVAIProductNode)nodes.nextElement(); 415 if(tmpNode.getName().equals(uiName) == true) { 416 int index = tmpNode.getParent().getIndex(tmpNode); 417 if (index == 0) { 418 tmpNode.add(node); 419 } else { 420 ((MutableTreeNode)tmpNode.getParent()).insert(node,index-1); 421 } 422 break; 423 } 424 } 425 ((DefaultTreeModel)frame.getTree().getModel()).nodeStructureChanged(node); 426 } 427 428 431 public void addUINodeAfter(String uiName, AbstractVAIProductNode node) { 432 433 Enumeration nodes = root.postorderEnumeration(); 434 while(nodes.hasMoreElements() == true) { 435 AbstractVAIProductNode tmpNode = (AbstractVAIProductNode)nodes.nextElement(); 436 if(tmpNode.getName().equals(uiName) == true) { 437 ((MutableTreeNode)tmpNode.getParent()).insert(node,tmpNode.getParent().getIndex(tmpNode)); 438 break; 439 } 440 } 441 ((DefaultTreeModel)frame.getTree().getModel()).nodeStructureChanged(node); 442 } 443 444 447 public void removeUINode(String uiName) { 448 449 AbstractVAIProductNode parent = null; 450 451 Enumeration nodes = root.postorderEnumeration(); 452 while(nodes.hasMoreElements() == true) { 453 AbstractVAIProductNode tmpNode = (AbstractVAIProductNode)nodes.nextElement(); 454 if(tmpNode.getName().equals(uiName) == true) { 455 parent = (AbstractVAIProductNode)tmpNode.getParent(); 456 tmpNode.removeFromParent(); 457 tmpNode = null; 458 break; 459 } 460 } 461 ((DefaultTreeModel)frame.getTree().getModel()).nodeStructureChanged(parent); 462 } 463 464 468 public void addUIChildNodeBefore(String uiName, AbstractVAIProductNode node) { 469 470 Enumeration nodes = root.postorderEnumeration(); 471 while(nodes.hasMoreElements() == true) { 472 AbstractVAIProductNode tmpNode = (AbstractVAIProductNode)nodes.nextElement(); 473 if(tmpNode.getName().equals(uiName) == true) { 474 int index = tmpNode.getIndex(tmpNode); 475 if (index == 0) { 476 tmpNode.add(node); 477 } else { 478 tmpNode.insert((MutableTreeNode)node,index-1); 479 } 480 break; 481 } 482 } 483 ((DefaultTreeModel)frame.getTree().getModel()).nodeStructureChanged(node); 484 } 485 486 489 public void addUIChildNodeAfter(String uiName, AbstractVAIProductNode node) { 490 491 Enumeration nodes = root.postorderEnumeration(); 492 while(nodes.hasMoreElements() == true) { 493 AbstractVAIProductNode tmpNode = (AbstractVAIProductNode)nodes.nextElement(); 494 if(tmpNode.getName().equals(uiName) == true) { 495 tmpNode.insert((MutableTreeNode)node,tmpNode.getParent().getIndex(tmpNode)); 496 break; 497 } 498 } 499 500 ((DefaultTreeModel)frame.getTree().getModel()).nodeStructureChanged(node); 501 } 502 503 504 public AbstractVAIProductNode getRootNode() { 505 if (root == null) { 506 buildUINodes(); 507 } 508 return root; 509 } 510 511 public void mouseClicked(MouseEvent e){} 512 public void mouseEntered(MouseEvent e){} 513 public void mouseExited(MouseEvent e){} 514 515 public void mousePressed(MouseEvent evt) { 516 517 if (evt.isPopupTrigger()) { 518 519 TreePath path = frame.getTree().getSelectionPath(); 520 if (path == null) { 521 return; 522 } 523 Object obj = path.getLastPathComponent(); 524 525 if (obj instanceof DefaultMutableTreeNode) { 526 Object userObject = ((DefaultMutableTreeNode)obj).getUserObject(); 527 528 if (userObject instanceof AbstractVAIProductNode) { 529 AbstractVAIProductNode node = (AbstractVAIProductNode)userObject; 530 if (node.getPopupMenu() != null) { 531 node.getPopupMenu().show(evt.getComponent(), evt.getX(), evt.getY()); 532 } 533 } 534 } 535 536 } 537 } 538 539 public void mouseReleased(MouseEvent evt) { 540 if (evt.isPopupTrigger()) { 541 542 TreePath path = frame.getTree().getSelectionPath(); 543 if (path == null) { 544 return; 545 } 546 Object obj = path.getLastPathComponent(); 547 548 if (obj instanceof DefaultMutableTreeNode) { 549 Object userObject = ((DefaultMutableTreeNode)obj).getUserObject(); 550 551 if (userObject instanceof AbstractVAIProductNode) { 552 AbstractVAIProductNode node = (AbstractVAIProductNode)userObject; 553 if (node.getPopupMenu() != null) { 554 node.getPopupMenu().show(evt.getComponent(), evt.getX(), evt.getY()); 555 } 556 } 557 } 558 559 } 560 } 561 562 } 563 | Popular Tags |