]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/FrameworkWizardUI.java
1. Replace openDialog with saveDialog when generating guids.xref file
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / FrameworkWizardUI.java
index c05c9eeecbe2416f682d1bb09b4b267d52200439..5efa81b25d2a1c2552161f353e8ae17dc1922b15 100644 (file)
@@ -17,10 +17,17 @@ package org.tianocore.frameworkwizard;
 \r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ComponentEvent;\r
+import java.awt.event.KeyEvent;\r
+import java.awt.event.KeyListener;\r
 import java.awt.event.MouseEvent;\r
 import java.awt.event.MouseListener;\r
 import java.awt.event.WindowEvent;\r
+import java.io.BufferedWriter;\r
+import java.io.File;\r
+import java.io.FileWriter;\r
 import java.io.IOException;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
 import java.util.Vector;\r
 \r
 import javax.swing.JButton;\r
@@ -41,6 +48,7 @@ import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;\r
 import javax.swing.event.TreeSelectionEvent;\r
 import javax.swing.event.TreeSelectionListener;\r
+import javax.swing.tree.TreePath;\r
 \r
 import org.apache.xmlbeans.XmlException;\r
 import org.tianocore.PackageSurfaceAreaDocument;\r
@@ -106,7 +114,8 @@ import org.tianocore.frameworkwizard.toolchain.Preferences;
  It extends IFrame implements MouseListener, TreeSelectionListener, ComponentListener and MenuListener\r
 \r
  **/\r
-public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSelectionListener, MenuListener {\r
+public class FrameworkWizardUI extends IFrame implements KeyListener, MouseListener, TreeSelectionListener,\r
+                                             MenuListener {\r
     ///\r
     /// Define class Serial Version UID\r
     ///\r
@@ -143,6 +152,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private JMenuItem jMenuItemFileNew = null;\r
 \r
+    private JMenuItem jMenuItemFileRefresh = null;\r
+\r
     private JMenuItem jMenuItemFileSaveAs = null;\r
 \r
     private JMenuItem jMenuItemFileExit = null;\r
@@ -298,6 +309,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     ///\r
     private static FrameworkWizardUI fwui = null;\r
 \r
+    private JMenuItem jMenuItemToolsGenerateGuidsXref = null;\r
+\r
     /**\r
      If the class hasn't an instnace, new one.\r
      \r
@@ -424,6 +437,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             jMenuFile.add(getJMenuItemFileSaveAll());\r
             jMenuFile.addSeparator();\r
 \r
+            jMenuFile.add(getJMenuItemFileRefresh());\r
+            jMenuFile.addSeparator();\r
+\r
             jMenuFile.add(getJMenuItemFilePageSetup());\r
             jMenuFile.add(getJMenuItemFilePrint());\r
             jMenuFile.add(getJMenuItemFileImport());\r
@@ -452,6 +468,23 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         return jMenuItemFileSaveAs;\r
     }\r
 \r
+    /**\r
+     This method initializes jMenuItemFileRefresh \r
+     \r
+     @return javax.swing.JMenuItem jMenuItemFileRefresh\r
+     \r
+     **/\r
+    private JMenuItem getJMenuItemFileRefresh() {\r
+        if (jMenuItemFileRefresh == null) {\r
+            jMenuItemFileRefresh = new JMenuItem();\r
+            jMenuItemFileRefresh.setText("Refresh");\r
+            jMenuItemFileRefresh.setMnemonic('R');\r
+            jMenuItemFileRefresh.addActionListener(this);\r
+            jMenuItemFileRefresh.setVisible(true);\r
+        }\r
+        return jMenuItemFileRefresh;\r
+    }\r
+\r
     /**\r
      This method initializes jMenuItemModuleExit \r
      \r
@@ -627,6 +660,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             jMenuHelp = new JMenu();\r
             jMenuHelp.setText("Help");\r
+            jMenuHelp.setMnemonic('H');\r
 \r
             //\r
             // Add sub menu items\r
@@ -650,6 +684,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         if (jMenuItemHelpAbout == null) {\r
             jMenuItemHelpAbout = new JMenuItem();\r
             jMenuItemHelpAbout.setText("About...");\r
+            jMenuItemHelpAbout.setMnemonic('A');\r
             jMenuItemHelpAbout.addActionListener(this);\r
         }\r
         return jMenuItemHelpAbout;\r
@@ -754,6 +789,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
             jMenuTools.add(getJMenuItemToolsToolChainConfiguration());\r
             jMenuTools.add(getJMenuItemToolsBuildPreferences());\r
+            jMenuTools.addSeparator();\r
+\r
+            jMenuTools.add(getJMenuItemToolsGenerateGuidsXref());\r
         }\r
         return jMenuTools;\r
     }\r
@@ -876,6 +914,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         if (jMenuItemFileCloseAll == null) {\r
             jMenuItemFileCloseAll = new JMenuItem();\r
             jMenuItemFileCloseAll.setText("Close All");\r
+            jMenuItemFileCloseAll.setMnemonic('A');\r
             jMenuItemFileCloseAll.setEnabled(true);\r
             jMenuItemFileCloseAll.addActionListener(this);\r
         }\r
@@ -1727,6 +1766,21 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         return jMenuItemEditFindLibraryInstance;\r
     }\r
 \r
+    /**\r
+     * This method initializes jMenuItemProjectGenerateGuidsXref       \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemToolsGenerateGuidsXref() {\r
+        if (jMenuItemToolsGenerateGuidsXref == null) {\r
+            jMenuItemToolsGenerateGuidsXref = new JMenuItem();\r
+            jMenuItemToolsGenerateGuidsXref.setText("Generate guids.xref");\r
+            jMenuItemToolsGenerateGuidsXref.setMnemonic('G');\r
+            jMenuItemToolsGenerateGuidsXref.addActionListener(this);\r
+        }\r
+        return jMenuItemToolsGenerateGuidsXref;\r
+    }\r
+\r
     /* (non-Javadoc)\r
      * @see org.tianocore.packaging.common.ui.IFrame#main(java.lang.String[])\r
      *\r
@@ -1753,6 +1807,12 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void init() {\r
+        //\r
+        // Show splash screen\r
+        //\r
+        SplashScreen ss = new SplashScreen();\r
+        ss.setVisible(true);\r
+\r
         //\r
         // Set current workspace and check\r
         // Check if exists WORKSPACE\r
@@ -1771,6 +1831,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         GlobalData.init();\r
 \r
+        //\r
+        // Close splash screen\r
+        //\r
+        ss.dispose();\r
+\r
         //\r
         // Init the frame\r
         //\r
@@ -1828,6 +1893,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
         if (arg0.getSource() == this.jMenuItemFileCloseAll) {\r
             this.closeAll();\r
+            this.makeEmptyTree();\r
         }\r
 \r
         if (arg0.getSource() == this.jMenuItemFileSave) {\r
@@ -1842,6 +1908,12 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             this.saveAll();\r
         }\r
 \r
+        if (arg0.getSource() == this.jMenuItemFileRefresh) {\r
+            this.closeAll();\r
+            this.refresh();\r
+            this.makeEmptyTree();\r
+        }\r
+\r
         if (arg0.getSource() == this.jMenuItemFileExit) {\r
             this.exit();\r
         }\r
@@ -1902,6 +1974,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             this.setupToolChainConfiguration();\r
         }\r
 \r
+        if (arg0.getSource() == this.jMenuItemToolsGenerateGuidsXref) {\r
+            this.generateGuidsXref();\r
+        }\r
+\r
         if (arg0.getSource() == this.jMenuItemHelpAbout) {\r
             About a = new About(this, true);\r
             int result = a.showDialog();\r
@@ -1919,12 +1995,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Make root\r
         //\r
-        dmtnRoot = new IDefaultMutableTreeNode("WORKSPACE", IDefaultMutableTreeNode.WORKSPACE, -1);\r
+        dmtnRoot = new IDefaultMutableTreeNode("WORKSPACE", IDefaultMutableTreeNode.WORKSPACE, false, null, null);\r
 \r
         //\r
         // Make Module Description\r
         //\r
-        dmtnModuleDescription = new IDefaultMutableTreeNode("Modules", IDefaultMutableTreeNode.MODULE, -1);\r
+        dmtnModuleDescription = new IDefaultMutableTreeNode("Modules", IDefaultMutableTreeNode.MODULE_DESCRIPTION,\r
+                                                            false, null, dmtnRoot);\r
 \r
         //\r
         // First add package\r
@@ -1937,13 +2014,16 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
                 dmtnModulePackage = new IDefaultMutableTreeNode(GlobalData.vPackageList.elementAt(index).getName(),\r
                                                                 IDefaultMutableTreeNode.MODULE_PACKAGE, false,\r
-                                                                GlobalData.vPackageList.elementAt(index));\r
+                                                                GlobalData.vPackageList.elementAt(index),\r
+                                                                this.dmtnModuleDescription);\r
                 dmtnModulePackageLibrary = new IDefaultMutableTreeNode("Library",\r
                                                                        IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY,\r
-                                                                       false, GlobalData.vPackageList.elementAt(index));\r
+                                                                       false, GlobalData.vPackageList.elementAt(index),\r
+                                                                       this.dmtnModuleDescription);\r
                 dmtnModulePackageModule = new IDefaultMutableTreeNode("Module",\r
                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
-                                                                      false, GlobalData.vPackageList.elementAt(index));\r
+                                                                      false, GlobalData.vPackageList.elementAt(index),\r
+                                                                      this.dmtnModuleDescription);\r
                 //\r
                 // And then add each module in its package\r
                 //\r
@@ -1952,11 +2032,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                     if (vModule.get(indexJ).isLibrary()) {\r
                         dmtnModulePackageLibrary.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
                                                                                  IDefaultMutableTreeNode.MODULE, false,\r
-                                                                                 vModule.get(indexJ)));\r
+                                                                                 vModule.get(indexJ),\r
+                                                                                 this.dmtnModuleDescription));\r
                     } else {\r
                         dmtnModulePackageModule.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
                                                                                 IDefaultMutableTreeNode.MODULE, false,\r
-                                                                                vModule.get(indexJ)));\r
+                                                                                vModule.get(indexJ),\r
+                                                                                this.dmtnModuleDescription));\r
                     }\r
                 }\r
                 if (dmtnModulePackageModule.getChildCount() > 0) {\r
@@ -1973,26 +2055,31 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Make Package Description\r
         //\r
-        dmtnPackageDescription = new IDefaultMutableTreeNode("Packages", IDefaultMutableTreeNode.PACKAGE, -1);\r
+        dmtnPackageDescription = new IDefaultMutableTreeNode("Packages", IDefaultMutableTreeNode.PACKAGE_DESCRIPTION,\r
+                                                             false, null, this.dmtnRoot);\r
         if (GlobalData.vPackageList.size() > 0) {\r
             for (int index = 0; index < GlobalData.vPackageList.size(); index++) {\r
                 dmtnPackageDescription.add(new IDefaultMutableTreeNode(GlobalData.vPackageList.elementAt(index)\r
                                                                                               .getName(),\r
                                                                        IDefaultMutableTreeNode.PACKAGE, false,\r
-                                                                       GlobalData.vPackageList.elementAt(index)));\r
+                                                                       GlobalData.vPackageList.elementAt(index),\r
+                                                                       this.dmtnPackageDescription));\r
             }\r
         }\r
 \r
         //\r
         // Make Platform Description\r
         //\r
-        dmtnPlatformDescription = new IDefaultMutableTreeNode("Platforms", IDefaultMutableTreeNode.PLATFORM, -1);\r
+        dmtnPlatformDescription = new IDefaultMutableTreeNode("Platforms",\r
+                                                              IDefaultMutableTreeNode.PLATFORM_DESCRIPTION, false,\r
+                                                              null, this.dmtnRoot);\r
         if (GlobalData.vPlatformList.size() > 0) {\r
             for (int index = 0; index < GlobalData.vPlatformList.size(); index++) {\r
                 dmtnPlatformDescription.add(new IDefaultMutableTreeNode(GlobalData.vPlatformList.elementAt(index)\r
                                                                                                 .getName(),\r
                                                                         IDefaultMutableTreeNode.PLATFORM, false,\r
-                                                                        GlobalData.vPlatformList.elementAt(index)));\r
+                                                                        GlobalData.vPlatformList.elementAt(index),\r
+                                                                        this.dmtnPlatformDescription));\r
             }\r
         }\r
 \r
@@ -2004,6 +2091,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         dmtnRoot.add(dmtnPlatformDescription);\r
         iTree = new ITree(dmtnRoot);\r
         iTree.addMouseListener(this);\r
+        iTree.addKeyListener(this);\r
         jScrollPaneTree.setViewportView(iTree);\r
     }\r
 \r
@@ -2024,10 +2112,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      * \r
      */\r
     public void mouseClicked(MouseEvent arg0) {\r
-        if (arg0.getButton() == MouseEvent.BUTTON1) {\r
-        }\r
-        if (arg0.getButton() == MouseEvent.BUTTON3) {\r
-        }\r
         //\r
         // When double click\r
         //\r
@@ -2125,8 +2209,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Add new MsaHeader node to the tree\r
         //\r
-        IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(mid.getName(), IDefaultMutableTreeNode.MODULE, true,\r
-                                                                   mid);\r
+        IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(mid.getName(), IDefaultMutableTreeNode.MODULE,\r
+                                                                   false, mid, this.dmtnModuleDescription);\r
         //\r
         // First find the module belongs to which package\r
         //\r
@@ -2160,7 +2244,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             if (!hasModule) {\r
                 parentModuleNode = new IDefaultMutableTreeNode("Module", IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
-                                                               false, mid.getPackageId());\r
+                                                               false, mid.getPackageId(), this.dmtnModuleDescription);\r
                 iTree.addNode(packageNode, parentModuleNode);\r
             }\r
 \r
@@ -2177,7 +2261,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             if (!hasLibrary) {\r
                 parentLibraryNode = new IDefaultMutableTreeNode("Library",\r
                                                                 IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY, false,\r
-                                                                mid.getPackageId());\r
+                                                                mid.getPackageId(), this.dmtnModuleDescription);\r
                 iTree.addNode(packageNode, parentLibraryNode);\r
             }\r
 \r
@@ -2191,7 +2275,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      @param path input file path\r
      \r
      **/\r
-    private void openModule(String path) {\r
+    private void openModule(String path, IDefaultMutableTreeNode belongNode) {\r
         ModuleIdentification id = GlobalData.openingModuleList.getIdByPath(path);\r
         if (id == null) {\r
             //\r
@@ -2204,29 +2288,33 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Make the node selected\r
         //\r
-        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
-                                                                     IDefaultMutableTreeNode.MODULE)));\r
+        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(belongNode, id, IDefaultMutableTreeNode.MODULE)));\r
+\r
         //\r
         // Update opening Module list information\r
         //\r
-        if (!GlobalData.openingModuleList.getModuleOpen(id)) {\r
+        if (!iTree.getSelectNode().isOpening()) {\r
             //\r
             // Insert sub node of module\r
             //\r
-            insertModuleTreeNode(id);\r
+            insertModuleTreeNode(id, belongNode);\r
             iTree.getSelectNode().setOpening(true);\r
 \r
             //\r
             // Update opening module list\r
             //\r
             GlobalData.openingModuleList.setModuleOpen(id, true);\r
-            GlobalData.openingModuleList.setTreePathById(id, iTree.getSelectionPath());\r
+            Set<TreePath> temp = GlobalData.openingModuleList.getTreePathById(id);\r
+            temp.add(iTree.getSelectionPath());\r
+            GlobalData.openingModuleList.setTreePathById(id, temp);\r
         }\r
         //\r
         // Select msa header node and show it in editor panel\r
         //\r
-        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
-                                                                     IDefaultMutableTreeNode.MSA_HEADER)));\r
+        iTree\r
+             .setSelectionPath(iTree\r
+                                    .getPathOfNode(iTree\r
+                                                        .getNodeById(belongNode, id, IDefaultMutableTreeNode.MSA_HEADER)));\r
         showModuleElement(IDefaultMutableTreeNode.MSA_HEADER, GlobalData.openingModuleList.getOpeningModuleById(id));\r
         this.currentOpeningModuleIndex = GlobalData.openingModuleList.findIndexOfListById(id);\r
     }\r
@@ -2266,7 +2354,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             // Update opening module list\r
             //\r
             GlobalData.openingPackageList.setPackageOpen(id, true);\r
-            GlobalData.openingPackageList.setTreePathById(id, iTree.getSelectionPath());\r
+            Set<TreePath> temp = GlobalData.openingPackageList.getTreePathById(id);\r
+            temp.add(iTree.getSelectionPath());\r
+            GlobalData.openingPackageList.setTreePathById(id, temp);\r
         }\r
         //\r
         // Show spd header in editor panel\r
@@ -2312,7 +2402,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             // Update opening module list\r
             //\r
             GlobalData.openingPlatformList.setPlatformOpen(id, true);\r
-            GlobalData.openingPlatformList.setTreePathById(id, iTree.getSelectionPath());\r
+            Set<TreePath> temp = GlobalData.openingPlatformList.getTreePathById(id);\r
+            temp.add(iTree.getSelectionPath());\r
+            GlobalData.openingPlatformList.setTreePathById(id, temp);\r
         }\r
         //\r
         // Show fpd header in editor panel\r
@@ -2417,56 +2509,136 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
     }\r
 \r
-    private void insertModuleTreeNode(Identification id) {\r
-        iTree.addNode(new IDefaultMutableTreeNode("Module Header", IDefaultMutableTreeNode.MSA_HEADER, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Source Files", IDefaultMutableTreeNode.MSA_SOURCEFILES, true, id));\r
+    private void insertModuleTreeNode(Identification id, IDefaultMutableTreeNode belongNode) {\r
+        iTree.addNode(new IDefaultMutableTreeNode("Module Header", IDefaultMutableTreeNode.MSA_HEADER, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Source Files", IDefaultMutableTreeNode.MSA_SOURCEFILES, true, id,\r
+                                                  belongNode));\r
         iTree.addNode(new IDefaultMutableTreeNode("Library Class Definitions",\r
-                                                  IDefaultMutableTreeNode.MSA_LIBRARYCLASSDEFINITIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Package Dependencies",\r
-                                                  IDefaultMutableTreeNode.MSA_PACKAGEDEPENDENCIES, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Protocols", IDefaultMutableTreeNode.MSA_PROTOCOLS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Events", IDefaultMutableTreeNode.MSA_EVENTS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Hobs", IDefaultMutableTreeNode.MSA_HOBS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Ppis", IDefaultMutableTreeNode.MSA_PPIS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Variables", IDefaultMutableTreeNode.MSA_VARIABLES, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Boot Modes", IDefaultMutableTreeNode.MSA_BOOTMODES, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("System Tables", IDefaultMutableTreeNode.MSA_SYSTEMTABLES, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Data Hubs", IDefaultMutableTreeNode.MSA_DATAHUBS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Hii Packages", IDefaultMutableTreeNode.MSA_HIIPACKAGES, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Guids", IDefaultMutableTreeNode.MSA_GUIDS, true, id));\r
+                                                  IDefaultMutableTreeNode.MSA_LIBRARYCLASSDEFINITIONS, true, id,\r
+                                                  belongNode));\r
         iTree\r
-             .addNode(new IDefaultMutableTreeNode("External Defintions", IDefaultMutableTreeNode.MSA_EXTERNS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Pcd Coded", IDefaultMutableTreeNode.MSA_PCDS, true, id));\r
+             .addNode(new IDefaultMutableTreeNode("Package Dependencies",\r
+                                                  IDefaultMutableTreeNode.MSA_PACKAGEDEPENDENCIES, true, id, belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Protocols", IDefaultMutableTreeNode.MSA_PROTOCOLS, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Events", IDefaultMutableTreeNode.MSA_EVENTS, true, id, belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Hobs", IDefaultMutableTreeNode.MSA_HOBS, true, id, belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Ppis", IDefaultMutableTreeNode.MSA_PPIS, true, id, belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Variables", IDefaultMutableTreeNode.MSA_VARIABLES, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Boot Modes", IDefaultMutableTreeNode.MSA_BOOTMODES, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("System Tables", IDefaultMutableTreeNode.MSA_SYSTEMTABLES, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Data Hubs", IDefaultMutableTreeNode.MSA_DATAHUBS, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Hii Packages", IDefaultMutableTreeNode.MSA_HIIPACKAGES, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Guids", IDefaultMutableTreeNode.MSA_GUIDS, true, id, belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("External Defintions", IDefaultMutableTreeNode.MSA_EXTERNS, true, id,\r
+                                                  belongNode));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Pcd Coded", IDefaultMutableTreeNode.MSA_PCDS, true, id, belongNode));\r
     }\r
 \r
     private void insertPackageTreeNode(Identification id) {\r
-        iTree.addNode(new IDefaultMutableTreeNode("Package Header", IDefaultMutableTreeNode.SPD_HEADER, true, id));\r
+        IDefaultMutableTreeNode idmtTemp = this.dmtnPackageDescription;\r
+        iTree.addNode(new IDefaultMutableTreeNode("Package Header", IDefaultMutableTreeNode.SPD_HEADER, true, id,\r
+                                                  idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Library Class Declarations",\r
-                                                  IDefaultMutableTreeNode.SPD_LIBRARYCLASSDECLARATIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Msa Files", IDefaultMutableTreeNode.SPD_MSAFILES, false, id));\r
+                                                  IDefaultMutableTreeNode.SPD_LIBRARYCLASSDECLARATIONS, true, id,\r
+                                                  idmtTemp));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Msa Files", IDefaultMutableTreeNode.SPD_MSAFILES, false, id,\r
+                                                  idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Package Includes", IDefaultMutableTreeNode.SPD_PACKAGEHEADERS, true,\r
-                                                  id));\r
+                                                  id, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Guid Declarations", IDefaultMutableTreeNode.SPD_GUIDDECLARATIONS,\r
-                                                  true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Protocol Declarations",\r
-                                                  IDefaultMutableTreeNode.SPD_PROTOCOLDECLARATIONS, true, id));\r
+                                                  true, id, idmtTemp));\r
+        iTree\r
+             .addNode(new IDefaultMutableTreeNode("Protocol Declarations",\r
+                                                  IDefaultMutableTreeNode.SPD_PROTOCOLDECLARATIONS, true, id, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Ppi Declarations", IDefaultMutableTreeNode.SPD_PPIDECLARATIONS,\r
-                                                  true, id));\r
+                                                  true, id, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Pcd Declarations", IDefaultMutableTreeNode.SPD_PCDDECLARATIONS,\r
-                                                  true, id));\r
+                                                  true, id, idmtTemp));\r
+        //\r
+        // Add modules in this package\r
+        //\r
+        IDefaultMutableTreeNode dmtnModulePackageLibrary = null;\r
+        IDefaultMutableTreeNode dmtnModulePackageModule = null;\r
+\r
+        dmtnModulePackageLibrary = new IDefaultMutableTreeNode("Library",\r
+                                                               IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY, false,\r
+                                                               id, idmtTemp);\r
+        dmtnModulePackageModule = new IDefaultMutableTreeNode("Module", IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
+                                                              false, id, idmtTemp);\r
+\r
+        Vector<ModuleIdentification> vModule = wt.getAllModules(new PackageIdentification(id));\r
+        for (int indexJ = 0; indexJ < vModule.size(); indexJ++) {\r
+            if (vModule.get(indexJ).isLibrary()) {\r
+                dmtnModulePackageLibrary.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                         IDefaultMutableTreeNode.MODULE, false,\r
+                                                                         vModule.get(indexJ), idmtTemp));\r
+            } else {\r
+                dmtnModulePackageModule.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                        IDefaultMutableTreeNode.MODULE, false,\r
+                                                                        vModule.get(indexJ), idmtTemp));\r
+            }\r
+        }\r
+        if (dmtnModulePackageModule.getChildCount() > 0) {\r
+            iTree.addNode(dmtnModulePackageModule);\r
+        }\r
+        if (dmtnModulePackageLibrary.getChildCount() > 0) {\r
+            iTree.addNode(dmtnModulePackageLibrary);\r
+        }\r
     }\r
 \r
     private void insertPlatformTreeNode(Identification id) {\r
+        IDefaultMutableTreeNode idmtTemp = this.dmtnPlatformDescription;\r
         iTree.addNode(new IDefaultMutableTreeNode("Platform Header", IDefaultMutableTreeNode.FPD_PLATFORMHEADER, true,\r
-                                                  id));\r
+                                                  id, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Platform Definitions",\r
-                                                  IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Flash Information", IDefaultMutableTreeNode.FPD_FLASH, true, id));\r
+                                                  IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS, true, id, idmtTemp));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Flash Information", IDefaultMutableTreeNode.FPD_FLASH, true, id,\r
+                                                  idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Framework Modules", IDefaultMutableTreeNode.FPD_FRAMEWORKMODULES,\r
-                                                  true, id));\r
+                                                  true, id, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Dynamic PCD Build Declarations",\r
-                                                  IDefaultMutableTreeNode.FPD_PCDDYNAMICBUILDDECLARATIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Build Options", IDefaultMutableTreeNode.FPD_BUILDOPTIONS, true, id));\r
+                                                  IDefaultMutableTreeNode.FPD_PCDDYNAMICBUILDDECLARATIONS, true, id,\r
+                                                  idmtTemp));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Build Options", IDefaultMutableTreeNode.FPD_BUILDOPTIONS, true, id,\r
+                                                  idmtTemp));\r
+\r
+        //\r
+        // Add modules in this platform\r
+        //\r
+        IDefaultMutableTreeNode dmtnModulePackageLibrary = null;\r
+        IDefaultMutableTreeNode dmtnModulePackageModule = null;\r
+\r
+        dmtnModulePackageLibrary = new IDefaultMutableTreeNode("Library",\r
+                                                               IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY, false,\r
+                                                               id, idmtTemp);\r
+        dmtnModulePackageModule = new IDefaultMutableTreeNode("Module", IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
+                                                              false, id, idmtTemp);\r
+\r
+        Vector<ModuleIdentification> vModule = wt.getAllModules(new PlatformIdentification(id));\r
+        for (int indexJ = 0; indexJ < vModule.size(); indexJ++) {\r
+            if (vModule.get(indexJ).isLibrary()) {\r
+                dmtnModulePackageLibrary.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                         IDefaultMutableTreeNode.MODULE, false,\r
+                                                                         vModule.get(indexJ), idmtTemp));\r
+            } else {\r
+                dmtnModulePackageModule.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                        IDefaultMutableTreeNode.MODULE, false,\r
+                                                                        vModule.get(indexJ), idmtTemp));\r
+            }\r
+        }\r
+        if (dmtnModulePackageModule.getChildCount() > 0) {\r
+            iTree.addNode(dmtnModulePackageModule);\r
+        }\r
+        if (dmtnModulePackageLibrary.getChildCount() > 0) {\r
+            iTree.addNode(dmtnModulePackageLibrary);\r
+        }\r
     }\r
 \r
     /**\r
@@ -2477,24 +2649,33 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         Identification id = null;\r
         int intCategory = -1;\r
         String path = null;\r
+        IDefaultMutableTreeNode belongNode = null;\r
 \r
         try {\r
-            id = iTree.getSelectNode().getId();\r
+            //\r
+            // Get selected tree node\r
+            //\r
+            if (iTree.getSelectNode() != null) {\r
+                id = iTree.getSelectNode().getId();\r
+            }\r
+\r
+            //\r
+            // If id is null, return directly\r
+            //\r
+            if (id == null) {\r
+                return;\r
+            }\r
+\r
             intCategory = iTree.getSelectCategory();\r
+            belongNode = iTree.getSelectNode().getBelongNode();\r
 \r
             //              \r
             // If the node is not opened yet\r
             // Insert top level elements first\r
             //\r
             if (intCategory == IDefaultMutableTreeNode.MODULE) {\r
-\r
-                if (intCategory == IDefaultMutableTreeNode.MODULE) {\r
-                    path = iTree.getSelectNode().getId().getPath();\r
-                }\r
-                if (intCategory == IDefaultMutableTreeNode.PACKAGE) {\r
-                    path = iTree.getSelectNode().getId().getPath();\r
-                }\r
-                openModule(path);\r
+                path = iTree.getSelectNode().getId().getPath();\r
+                openModule(path, belongNode);\r
                 return;\r
             }\r
             if (intCategory == IDefaultMutableTreeNode.PACKAGE) {\r
@@ -2535,8 +2716,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                                                                                  .findIndexOfListById(new PlatformIdentification(\r
                                                                                                                                  id));\r
             }\r
-        } catch (RuntimeException e) {\r
+        } catch (Exception e) {\r
             Log.err("double click category: " + intCategory);\r
+            Log.err("double click belong node: " + belongNode.toString());\r
             Log.err("double click id path: " + id);\r
             Log.err("double click exception: " + e.getMessage());\r
         }\r
@@ -2778,7 +2960,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                     //\r
                     // Open the node\r
                     //\r
-                    this.openModule(mid.getPath());\r
+                    this.openModule(mid.getPath(), this.dmtnModuleDescription);\r
                 }\r
             }\r
         } else if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
@@ -2812,14 +2994,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                     //\r
                     IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(pid.getName(),\r
                                                                                IDefaultMutableTreeNode.MODULE_PACKAGE,\r
-                                                                               false, pid);\r
+                                                                               false, pid, this.dmtnModuleDescription);\r
 \r
                     iTree.addNode(dmtnModuleDescription, node);\r
 \r
                     //\r
                     // Add new SpdHeader node to the tree\r
                     //\r
-                    node = new IDefaultMutableTreeNode(pid.getName(), IDefaultMutableTreeNode.PACKAGE, true, pid);\r
+                    node = new IDefaultMutableTreeNode(pid.getName(), IDefaultMutableTreeNode.PACKAGE, true, pid,\r
+                                                       this.dmtnPackageDescription);\r
                     iTree.addNode(dmtnPackageDescription, node);\r
 \r
                     this.openPackage(pid.getPath());\r
@@ -2855,7 +3038,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                     //\r
                     IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(fid.getName(),\r
                                                                                IDefaultMutableTreeNode.PLATFORM, true,\r
-                                                                               fid);\r
+                                                                               fid, this.dmtnPlatformDescription);\r
                     iTree.addNode(dmtnPlatformDescription, node);\r
                     this.openPlatform(fid.getPath());\r
                 }\r
@@ -2884,7 +3067,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             String path = fc.getSelectedFile().getPath();\r
             String match = path.substring(path.length() - 4);\r
             if (match.equals(DataType.FILE_EXT_SEPARATOR + DataType.MODULE_SURFACE_AREA_EXT)) {\r
-                openModule(path);\r
+                openModule(path, this.dmtnModuleDescription);\r
             } else if (match.equals(DataType.FILE_EXT_SEPARATOR + DataType.PACKAGE_SURFACE_AREA_EXT)) {\r
                 openPackage(path);\r
             } else if (match.equals(DataType.FILE_EXT_SEPARATOR + DataType.PLATFORM_SURFACE_AREA_EXT)) {\r
@@ -2898,6 +3081,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void close() {\r
+        TreePath item = null;\r
         switch (this.jTabbedPaneEditor.getSelectedIndex()) {\r
         //\r
         // Current is module\r
@@ -2916,9 +3100,19 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree\r
-                     .removeNodeChildrenByPath(GlobalData.openingModuleList\r
-                                                                           .getTreePathByIndex(currentOpeningModuleIndex));\r
+\r
+                //\r
+                // Remove all tree paths for the module\r
+                //\r
+                Set<TreePath> openingTreePaths = GlobalData.openingModuleList\r
+                                                                             .getTreePathByIndex(currentOpeningModuleIndex);\r
+                Iterator<TreePath> openingTreePathsIter = openingTreePaths.iterator();\r
+                while (openingTreePathsIter.hasNext()) {\r
+                    item = openingTreePathsIter.next();\r
+                    iTree.getNodeByPath(item).setOpening(false);\r
+                    iTree.removeNodeChildrenByPath(item);\r
+                }\r
+\r
                 GlobalData.openingModuleList.setModuleOpen(this.currentOpeningModuleIndex, false);\r
                 this.cleanDesktopPaneModule();\r
                 this.currentOpeningModuleIndex = -1;\r
@@ -2941,9 +3135,19 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree\r
-                     .removeNodeChildrenByPath(GlobalData.openingPackageList\r
-                                                                            .getTreePathByIndex(currentOpeningPackageIndex));\r
+\r
+                //\r
+                // Remove all tree paths for the module\r
+                //\r
+                Set<TreePath> openingTreePaths = GlobalData.openingPackageList\r
+                                                                              .getTreePathByIndex(currentOpeningPackageIndex);\r
+                Iterator<TreePath> openingTreePathsIter = openingTreePaths.iterator();\r
+                while (openingTreePathsIter.hasNext()) {\r
+                    item = openingTreePathsIter.next();\r
+                    iTree.getNodeByPath(item).setOpening(false);\r
+                    iTree.removeNodeChildrenByPath(item);\r
+                }\r
+\r
                 GlobalData.openingPackageList.setPackageOpen(this.currentOpeningPackageIndex, false);\r
                 this.cleanDesktopPanePackage();\r
                 this.currentOpeningPackageIndex = -1;\r
@@ -2966,9 +3170,19 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree\r
-                     .removeNodeChildrenByPath(GlobalData.openingPlatformList\r
-                                                                             .getTreePathByIndex(currentOpeningPlatformIndex));\r
+\r
+                //\r
+                // Remove all tree paths for the module\r
+                //\r
+                Set<TreePath> openingTreePaths = GlobalData.openingPlatformList\r
+                                                                               .getTreePathByIndex(currentOpeningPlatformIndex);\r
+                Iterator<TreePath> openingTreePathsIter = openingTreePaths.iterator();\r
+                while (openingTreePathsIter.hasNext()) {\r
+                    item = openingTreePathsIter.next();\r
+                    iTree.getNodeByPath(item).setOpening(false);\r
+                    iTree.removeNodeChildrenByPath(item);\r
+                }\r
+\r
                 GlobalData.openingPlatformList.setPlatformOpen(this.currentOpeningPlatformIndex, false);\r
                 this.cleanDesktopPanePlatform();\r
                 this.currentOpeningPlatformIndex = -1;\r
@@ -3002,7 +3216,14 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         GlobalData.openingModuleList.closeAll();\r
         GlobalData.openingPackageList.closeAll();\r
         GlobalData.openingPlatformList.closeAll();\r
-        this.makeEmptyTree();\r
+    }\r
+\r
+    /**\r
+     Refresh all global data from disk to memory\r
+     \r
+     **/\r
+    private void refresh() {\r
+        GlobalData.init();\r
     }\r
 \r
     /**\r
@@ -3152,13 +3373,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             // Reinit whole window\r
             //\r
-            closeAll();\r
+            this.closeAll();\r
             this.setTitle(DataType.PROJECT_NAME + " " + DataType.PROJECT_VERSION + " " + "- ["\r
                           + Workspace.getCurrentWorkspace() + "]");\r
             //\r
-            // Reinit Global Data\r
+            // Refrash the tree\r
             //\r
-            GlobalData.init();\r
+            this.refresh();\r
         }\r
         sw.dispose();\r
     }\r
@@ -3190,6 +3411,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION,\r
                                           JOptionPane.INFORMATION_MESSAGE);\r
             this.closeAll();\r
+            this.refresh();\r
+            this.makeEmptyTree();\r
         }\r
         iso.dispose();\r
     }\r
@@ -3206,6 +3429,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION,\r
                                           JOptionPane.INFORMATION_MESSAGE);\r
             this.closeAll();\r
+            this.refresh();\r
+            this.makeEmptyTree();\r
         }\r
         dso.dispose();\r
     }\r
@@ -3222,6 +3447,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION,\r
                                           JOptionPane.INFORMATION_MESSAGE);\r
             this.closeAll();\r
+            this.refresh();\r
+            this.makeEmptyTree();\r
         }\r
         uso.dispose();\r
     }\r
@@ -3256,23 +3483,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
         int category = iTree.getSelectCategory();\r
         Identification id = iTree.getSelectNode().getId();\r
-        if (category == IDefaultMutableTreeNode.MODULE || category == IDefaultMutableTreeNode.PACKAGE\r
-            || category == IDefaultMutableTreeNode.PLATFORM) {\r
-            Log.wrn("Clone", "Please select a target to clone!");\r
-            return;\r
-        }\r
 \r
         if (category == IDefaultMutableTreeNode.WORKSPACE) {\r
             mode = DataType.RETURN_TYPE_WORKSPACE;\r
             id = null;\r
         }\r
-        if (category >= IDefaultMutableTreeNode.MSA_HEADER && category < IDefaultMutableTreeNode.SPD_HEADER) {\r
+        if ((category == IDefaultMutableTreeNode.MODULE)\r
+            || (category >= IDefaultMutableTreeNode.MSA_HEADER && category < IDefaultMutableTreeNode.SPD_HEADER)) {\r
             mode = DataType.RETURN_TYPE_MODULE_SURFACE_AREA;\r
         }\r
-        if (category >= IDefaultMutableTreeNode.SPD_HEADER && category < IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
+        if ((category == IDefaultMutableTreeNode.PACKAGE)\r
+            || (category >= IDefaultMutableTreeNode.SPD_HEADER && category < IDefaultMutableTreeNode.FPD_PLATFORMHEADER)) {\r
             mode = DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA;\r
         }\r
-        if (category >= IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
+        if ((category == IDefaultMutableTreeNode.PLATFORM) || (category >= IDefaultMutableTreeNode.FPD_PLATFORMHEADER)) {\r
             mode = DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA;\r
         }\r
 \r
@@ -3287,32 +3511,30 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
         if (result == DataType.RETURN_TYPE_MODULE_SURFACE_AREA) {\r
             Tools.showInformationMessage("Module Clone Completed!");\r
-            GlobalData.vModuleList.addElement(c.getMid());\r
             addModuleToTree(c.getMid());\r
         }\r
         if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
             Tools.showInformationMessage("Package Clone Completed!");\r
-            GlobalData.vPackageList.addElement(c.getPid());\r
             //\r
             // Add new SpdHeader node to the tree\r
             //\r
             IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(GlobalData.vPackageList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.SPD_HEADER, true,\r
-                                                                       GlobalData.vPackageList.lastElement());\r
-            iTree.addNode(dmtnPackageDescription, node);\r
+                                                                       IDefaultMutableTreeNode.PACKAGE, false,\r
+                                                                       GlobalData.vPackageList.lastElement(),\r
+                                                                       this.dmtnPackageDescription);\r
+            iTree.addNode(this.dmtnPackageDescription, node);\r
         }\r
         if (result == DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA) {\r
             Tools.showInformationMessage("Platform Surface Area Clone Finished");\r
-            GlobalData.vPlatformList.addElement(c.getFid());\r
             //\r
             // Add new SpdHeader node to the tree\r
             //\r
             IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(\r
                                                                        GlobalData.vPlatformList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.FPD_PLATFORMHEADER,\r
-                                                                       true, GlobalData.vPlatformList.lastElement());\r
-            iTree.addNode(dmtnPlatformDescription, node);\r
-            //this.openPlatform(c.getFid().getPath());\r
+                                                                       IDefaultMutableTreeNode.PLATFORM, false,\r
+                                                                       GlobalData.vPlatformList.lastElement(),\r
+                                                                       this.dmtnPlatformDescription);\r
+            iTree.addNode(this.dmtnPlatformDescription, node);\r
         }\r
         if (result == DataType.RETURN_TYPE_OK) {\r
 \r
@@ -3365,8 +3587,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                 jMenuItemToolsClone.setEnabled(false);\r
             } else {\r
                 int category = iTree.getSelectCategory();\r
-                if (category == IDefaultMutableTreeNode.MODULE || category == IDefaultMutableTreeNode.PACKAGE\r
-                    || category == IDefaultMutableTreeNode.PLATFORM\r
+                if (category == IDefaultMutableTreeNode.MODULE_DESCRIPTION\r
+                    || category == IDefaultMutableTreeNode.PACKAGE_DESCRIPTION\r
+                    || category == IDefaultMutableTreeNode.PLATFORM_DESCRIPTION\r
                     || category == IDefaultMutableTreeNode.MODULE_PACKAGE\r
                     || category == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY\r
                     || category == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
@@ -3377,4 +3600,79 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             }\r
         }\r
     }\r
+\r
+    public void keyTyped(KeyEvent arg0) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    public void keyPressed(KeyEvent arg0) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    public void keyReleased(KeyEvent arg0) {\r
+        if (arg0.getSource() == this.iTree) {\r
+            if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {\r
+                this.doubleClickModuleTreeNode();\r
+            }\r
+        }\r
+    }\r
+\r
+    /**\r
+     Search whole workspace and find all module's name and guid, and save them to a file\r
+     \r
+     **/\r
+    private void generateGuidsXref() {\r
+        //\r
+        // Init File Chooser\r
+        //\r
+        JFileChooser fc = new JFileChooser();\r
+        fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace()));\r
+        fc.setSelectedFile(new File(Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r
+                                    + DataType.GUIDS_XREF_FILE_NAME));\r
+        fc.setMultiSelectionEnabled(false);\r
+\r
+        //\r
+        // Get guids xref and save to file\r
+        //\r
+        int result = fc.showSaveDialog(new JPanel());\r
+        if (result == JFileChooser.APPROVE_OPTION) {\r
+            Vector<String> v = wt.getAllModuleGuidXref();\r
+            if (v.size() < 1) {\r
+                Log.wrn("No guids found!!!");\r
+                return;\r
+            }\r
+            File f = fc.getSelectedFile();\r
+            if (!f.exists()) {\r
+                try {\r
+                    f.createNewFile();\r
+                } catch (IOException e) {\r
+                    Log.wrn("Fail to create file", e.getMessage());\r
+                    Log.err("Fail to create file when generating guids.xref", e.getMessage());\r
+                }\r
+            }\r
+            FileWriter fw = null;\r
+            BufferedWriter bw = null;\r
+            try {\r
+                fw = new FileWriter(f);\r
+                bw = new BufferedWriter(fw);\r
+                for (int index = 0; index < v.size(); index++) {\r
+                    bw.write(v.get(index));\r
+                    bw.newLine();\r
+                }\r
+                bw.flush();\r
+                fw.flush();\r
+                bw.close();\r
+                fw.close();\r
+            } catch (IOException e) {\r
+                Log.wrn("Fail to write file", e.getMessage());\r
+                Log.err("Fail to write file when generating guids.xref", e.getMessage());\r
+                return;\r
+            }\r
+\r
+            JOptionPane.showConfirmDialog(null, "File is created", "Generate guids.xref", JOptionPane.DEFAULT_OPTION,\r
+                                          JOptionPane.INFORMATION_MESSAGE);\r
+        }\r
+    }\r
 }\r