]> 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 589a97e09bef261b13405b75dd1460055fe9c9df..5efa81b25d2a1c2552161f353e8ae17dc1922b15 100644 (file)
@@ -17,11 +17,17 @@ package org.tianocore.frameworkwizard;
 \r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ComponentEvent;\r
-import java.awt.event.ComponentListener;\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
@@ -42,32 +48,32 @@ 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.ModuleSurfaceAreaDocument;\r
 import org.tianocore.PackageSurfaceAreaDocument;\r
-import org.tianocore.PlatformSurfaceAreaDocument;\r
 import org.tianocore.frameworkwizard.common.DataType;\r
+import org.tianocore.frameworkwizard.common.GlobalData;\r
 import org.tianocore.frameworkwizard.common.IFileFilter;\r
 import org.tianocore.frameworkwizard.common.Log;\r
 import org.tianocore.frameworkwizard.common.SaveFile;\r
 import org.tianocore.frameworkwizard.common.Tools;\r
 import org.tianocore.frameworkwizard.common.Identifications.Identification;\r
-import org.tianocore.frameworkwizard.common.Identifications.OpenFile;\r
-import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleList;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
-import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageList;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
-import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformList;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
+import org.tianocore.frameworkwizard.common.find.FindResult;\r
 import org.tianocore.frameworkwizard.common.ui.IDefaultMutableTreeNode;\r
 import org.tianocore.frameworkwizard.common.ui.IDesktopManager;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
 import org.tianocore.frameworkwizard.common.ui.ITree;\r
+import org.tianocore.frameworkwizard.far.createui.CreateStepOne;\r
+import org.tianocore.frameworkwizard.far.deleteui.DeleteStepOne;\r
+import org.tianocore.frameworkwizard.far.installui.InstallStepOne;\r
+import org.tianocore.frameworkwizard.far.updateui.UpdateStepOne;\r
 import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleBootModes;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleDataHubs;\r
-import org.tianocore.frameworkwizard.module.ui.ModuleDefinitions;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleEvents;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleExterns;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleGuids;\r
@@ -87,7 +93,6 @@ import org.tianocore.frameworkwizard.packaging.ui.SpdGuidDecls;
 import org.tianocore.frameworkwizard.packaging.ui.SpdHeader;\r
 import org.tianocore.frameworkwizard.packaging.ui.SpdLibClassDecls;\r
 import org.tianocore.frameworkwizard.packaging.ui.SpdMsaFiles;\r
-import org.tianocore.frameworkwizard.packaging.ui.SpdPackageDefinitions;\r
 import org.tianocore.frameworkwizard.packaging.ui.SpdPackageHeaders;\r
 import org.tianocore.frameworkwizard.packaging.ui.SpdPcdDefs;\r
 import org.tianocore.frameworkwizard.packaging.ui.SpdPpiDecls;\r
@@ -102,40 +107,32 @@ import org.tianocore.frameworkwizard.platform.ui.FpdPlatformDefs;
 import org.tianocore.frameworkwizard.workspace.Workspace;\r
 import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
 import org.tianocore.frameworkwizard.workspace.ui.SwitchWorkspace;\r
+import org.tianocore.frameworkwizard.toolchain.Preferences;\r
 \r
 /**\r
- The class is used to show main GUI of ModuleEditor\r
- It extends IFrame implements MouseListener, TreeSelectionListener\r
+ The class is used to show main GUI of FrameworkWizard\r
+ It extends IFrame implements MouseListener, TreeSelectionListener, ComponentListener and MenuListener\r
 \r
  **/\r
-public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSelectionListener, ComponentListener,\r
+public class FrameworkWizardUI extends IFrame implements KeyListener, MouseListener, TreeSelectionListener,\r
                                              MenuListener {\r
     ///\r
     /// Define class Serial Version UID\r
     ///\r
     private static final long serialVersionUID = -7103240960573031772L;\r
 \r
-    //\r
-    // To save information of all files\r
-    //\r
-    private Vector<ModuleIdentification> vModuleList = new Vector<ModuleIdentification>();\r
-\r
-    private Vector<PackageIdentification> vPackageList = new Vector<PackageIdentification>();\r
-\r
-    private Vector<PlatformIdentification> vPlatformList = new Vector<PlatformIdentification>();\r
-\r
-    private OpeningModuleList openingModuleList = new OpeningModuleList();\r
-\r
-    private OpeningPackageList openingPackageList = new OpeningPackageList();\r
-\r
-    private OpeningPlatformList openingPlatformList = new OpeningPlatformList();\r
-\r
+    ///\r
+    /// Used to record current operation target\r
+    ///\r
     private int currentOpeningModuleIndex = -1;\r
 \r
     private int currentOpeningPackageIndex = -1;\r
 \r
     private int currentOpeningPlatformIndex = -1;\r
 \r
+    ///\r
+    /// Used to generate tree structure\r
+    ///\r
     private IDefaultMutableTreeNode dmtnRoot = null;\r
 \r
     private IDefaultMutableTreeNode dmtnModuleDescription = null;\r
@@ -144,6 +141,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private IDefaultMutableTreeNode dmtnPlatformDescription = null;\r
 \r
+    ///\r
+    /// Used for UI\r
+    ///\r
     private JPanel jContentPane = null;\r
 \r
     private JMenuBar jMenuBar = null;\r
@@ -152,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
@@ -226,8 +228,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private JMenuItem jMenuItemEditSelectAll = null;\r
 \r
-    private JMenuItem jMenuItemEditFind = null;\r
-\r
     private JMenuItem jMenuItemEditFindNext = null;\r
 \r
     private JMenu jMenuView = null;\r
@@ -250,11 +250,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private JMenuItem jMenuItemProjectChangeWorkspace = null;\r
 \r
-    private JMenu jMenuProjectBuildTargets = null;\r
+    private JMenuItem jMenuItemToolsBuildPreferences = null;\r
 \r
-    private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsDebug = null;\r
+    //    private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsDebug = null;\r
 \r
-    private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsRelease = null;\r
+    //    private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsRelease = null;\r
 \r
     private JMenuItem jMenuItemToolsToolChainConfiguration = null;\r
 \r
@@ -288,16 +288,35 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private JMenuItem jMenuItemProjectRemoveFar = null;\r
 \r
-    //private JToolBar jToolBarFile = null;\r
+    private JMenuItem jMenuItemProjectCreateFar = null;\r
+\r
+    private JMenu jMenuEditFind = null;\r
+\r
+    private JMenuItem jMenuItemEditFindPcd = null;\r
+\r
+    private JMenuItem jMenuItemEditFindLibraryClass = null;\r
 \r
-    //private JToolBar jToolBarEdit = null;\r
+    private JMenuItem jMenuItemEditFindPpi = null;\r
 \r
-    //private JToolBar jToolBarWindow = null;\r
+    private JMenuItem jMenuItemEditFindProtocol = null;\r
 \r
+    private JMenuItem jMenuItemEditFindGuid = null;\r
+\r
+    private JMenuItem jMenuItemEditFindLibraryInstance = null;\r
+\r
+    ///\r
+    /// A static definition for this class itself\r
+    ///\r
     private static FrameworkWizardUI fwui = null;\r
 \r
-    private JMenuItem jMenuItemProjectCreateFar = null;\r
+    private JMenuItem jMenuItemToolsGenerateGuidsXref = null;\r
 \r
+    /**\r
+     If the class hasn't an instnace, new one.\r
+     \r
+     @return FrameworkWizardUI The instance of this class\r
+     \r
+     **/\r
     public static FrameworkWizardUI getInstance() {\r
         if (fwui == null) {\r
             fwui = new FrameworkWizardUI();\r
@@ -347,7 +366,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JTabbedPane   \r
      \r
-     */\r
+     **/\r
     private JTabbedPane getJTabbedPaneEditor() {\r
         if (jTabbedPaneEditor == null) {\r
             jTabbedPaneEditor = new JTabbedPane();\r
@@ -359,7 +378,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                              .setMinimumSize(new java.awt.Dimension(\r
                                                                     DataType.MAIN_FRAME_EDITOR_PANEL_PREFERRED_SIZE_WIDTH,\r
                                                                     DataType.MAIN_FRAME_EDITOR_PANEL_PREFERRED_SIZE_HEIGHT));\r
-            //jTabbedPaneEditor.addChangeListener(this);\r
             jTabbedPaneEditor.addTab("Module", null, getJDesktopPaneModule(), null);\r
             jTabbedPaneEditor.addTab("Package", null, getJDesktopPanePackage(), null);\r
             jTabbedPaneEditor.addTab("Platform", null, getJDesktopPanePlatform(), null);\r
@@ -372,7 +390,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JTabbedPane   \r
      \r
-     */\r
+     **/\r
     private JTabbedPane getJTabbedPaneTree() {\r
         if (jTabbedPaneTree == null) {\r
             jTabbedPaneTree = new JTabbedPane();\r
@@ -396,29 +414,38 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private JMenu getJMenuFile() {\r
         if (jMenuFile == null) {\r
+            //\r
+            // Set jMenuFile's attributes\r
+            //\r
             jMenuFile = new JMenu();\r
             jMenuFile.setText("File");\r
             jMenuFile.setMnemonic('F');\r
+            jMenuFile.addMenuListener(this);\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuFile.add(getJMenuItemFileNew());\r
             jMenuFile.add(getJMenuItemFileOpen());\r
             jMenuFile.add(getJMenuItemFileClose());\r
             jMenuFile.add(getJMenuItemFileCloseAll());\r
             jMenuFile.addSeparator();\r
+\r
             jMenuFile.add(getJMenuFileRecentFiles());\r
-            //jMenuFile.addSeparator();\r
             jMenuFile.add(getJMenuItemFileSave());\r
             jMenuFile.add(getJMenuItemFileSaveAs());\r
             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.addSeparator();\r
             jMenuFile.add(getJMenuItemFileImport());\r
-            //jMenuFile.addSeparator();\r
             jMenuFile.add(getJMenuItemFileProperties());\r
-            //jMenuFile.addSeparator();\r
+\r
             jMenuFile.add(getJMenuItemFileExit());\r
-            jMenuFile.addMenuListener(this);\r
         }\r
         return jMenuFile;\r
     }\r
@@ -441,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
@@ -465,22 +509,31 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private JMenu getJMenuEdit() {\r
         if (jMenuEdit == null) {\r
+            //\r
+            // Set jMenuEdit's attributes\r
+            //\r
             jMenuEdit = new JMenu();\r
             jMenuEdit.setText("Edit");\r
             jMenuEdit.setMnemonic('E');\r
+            jMenuEdit.setVisible(true);\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuEdit.add(getJMenuItemEditUndo());\r
             jMenuEdit.add(getJMenuItemEditRedo());\r
-            jMenuEdit.addSeparator();\r
+            //jMenuEdit.addSeparator();\r
+\r
             jMenuEdit.add(getJMenuItemEditCut());\r
             jMenuEdit.add(getJMenuItemEditCopy());\r
             jMenuEdit.add(getJMenuItemEditPaste());\r
             jMenuEdit.add(getJMenuItemEditDelete());\r
-            jMenuEdit.addSeparator();\r
+            //jMenuEdit.addSeparator();\r
+\r
             jMenuEdit.add(getJMenuItemEditSelectAll());\r
-            jMenuEdit.add(getJMenuItemEditFind());\r
+            jMenuEdit.add(getJMenuEditFind());\r
             jMenuEdit.add(getJMenuItemEditFindNext());\r
-            jMenuEdit.addSeparator();\r
-            jMenuEdit.setVisible(false);\r
+            //jMenuEdit.addSeparator();\r
         }\r
         return jMenuEdit;\r
     }\r
@@ -567,7 +620,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     private JScrollPane getJScrollPaneTree() {\r
         if (jScrollPaneTree == null) {\r
             jScrollPaneTree = new JScrollPane();\r
-            //jScrollPaneTree.setBounds(new java.awt.Rectangle(0, 1, 290, 545));\r
             jScrollPaneTree\r
                            .setPreferredSize(new java.awt.Dimension(\r
                                                                     DataType.MAIN_FRAME_TREE_PANEL_PREFERRED_SIZE_WIDTH,\r
@@ -603,12 +655,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private JMenu getJMenuHelp() {\r
         if (jMenuHelp == null) {\r
+            //\r
+            // Set jMenuHelp's attributes\r
+            //\r
             jMenuHelp = new JMenu();\r
             jMenuHelp.setText("Help");\r
+            jMenuHelp.setMnemonic('H');\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuHelp.add(getJMenuItemHelpContents());\r
             jMenuHelp.add(getJMenuItemHelpIndex());\r
             jMenuHelp.add(getJMenuItemHelpSearch());\r
-            //jMenuHelp.addSeparator();\r
+\r
             jMenuHelp.add(getJMenuItemHelpAbout());\r
         }\r
         return jMenuHelp;\r
@@ -624,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
@@ -640,84 +701,17 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             jMenuItemEditDelete = new JMenuItem();\r
             jMenuItemEditDelete.setText("Delete");\r
             jMenuItemEditDelete.setMnemonic('D');\r
+            jMenuItemEditDelete.setVisible(false);\r
+            jMenuItemEditDelete.setEnabled(false);\r
             jMenuItemEditDelete.addActionListener(this);\r
             //\r
-            //Disabled when no module is open\r
+            //Disabled first when no module is open\r
             //\r
             jMenuItemEditDelete.setEnabled(false);\r
         }\r
         return jMenuItemEditDelete;\r
     }\r
 \r
-    //    /**\r
-    //     This method initializes jPopupMenu \r
-    //     \r
-    //     @return javax.swing.JPopupMenu jPopupMenu\r
-    //     \r
-    //     **/\r
-    //    private JPopupMenu getJPopupMenu() {\r
-    //        if (jPopupMenu == null) {\r
-    //            jPopupMenu = new JPopupMenu();\r
-    //            //\r
-    //            //Add menu items of popup menu\r
-    //            //\r
-    //            jPopupMenu.add(getJMenuItemPopupAdd());\r
-    //            jPopupMenu.add(getJMenuItemPopupUpdate());\r
-    //            jPopupMenu.add(getJMenuItemPopupDelete());\r
-    //            jPopupMenu.setBorder(new BevelBorder(BevelBorder.RAISED));\r
-    //            jPopupMenu.addMouseListener(this);\r
-    //        }\r
-    //        return jPopupMenu;\r
-    //    }\r
-    //\r
-    //    /**\r
-    //     This method initializes jMenuItemPopupAdd \r
-    //     \r
-    //     @return javax.swing.JMenuItem jMenuItemPopupAdd\r
-    //     \r
-    //     **/\r
-    //    private JMenuItem getJMenuItemPopupAdd() {\r
-    //        if (jMenuItemPopupAdd == null) {\r
-    //            jMenuItemPopupAdd = new JMenuItem();\r
-    //            jMenuItemPopupAdd.setText("Add");\r
-    //            jMenuItemPopupAdd.addActionListener(this);\r
-    //            jMenuItemPopupAdd.setEnabled(false);\r
-    //        }\r
-    //        return jMenuItemPopupAdd;\r
-    //    }\r
-    //\r
-    //    /**\r
-    //     This method initializes jMenuItemPopupUpdate \r
-    //     \r
-    //     @return javax.swing.JMenuItem jMenuItemPopupUpdate\r
-    //     \r
-    //     **/\r
-    //    private JMenuItem getJMenuItemPopupUpdate() {\r
-    //        if (jMenuItemPopupUpdate == null) {\r
-    //            jMenuItemPopupUpdate = new JMenuItem();\r
-    //            jMenuItemPopupUpdate.setText("Update");\r
-    //            jMenuItemPopupUpdate.addActionListener(this);\r
-    //            jMenuItemPopupUpdate.setEnabled(false);\r
-    //        }\r
-    //        return jMenuItemPopupUpdate;\r
-    //    }\r
-    //\r
-    //    /**\r
-    //     This method initializes jMenuItemPopupDelete \r
-    //     \r
-    //     @return javax.swing.JMenuItem jMenuItemPopupDelete\r
-    //     \r
-    //     **/\r
-    //    private JMenuItem getJMenuItemPopupDelete() {\r
-    //        if (jMenuItemPopupDelete == null) {\r
-    //            jMenuItemPopupDelete = new JMenuItem();\r
-    //            jMenuItemPopupDelete.setText("Delete");\r
-    //            jMenuItemPopupDelete.addActionListener(this);\r
-    //            jMenuItemPopupDelete.setEnabled(false);\r
-    //        }\r
-    //        return jMenuItemPopupDelete;\r
-    //    }\r
-\r
     /**\r
      This method initializes jMenuFileNew \r
      \r
@@ -777,15 +771,27 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private JMenu getJMenuTools() {\r
         if (jMenuTools == null) {\r
+            //\r
+            // Set jMenuTools's attributes\r
+            //\r
             jMenuTools = new JMenu();\r
             jMenuTools.setText("Tools");\r
             jMenuTools.setMnemonic('T');\r
-            jMenuTools.add(getJMenuItemToolsToolChainConfiguration());\r
-            jMenuTools.addSeparator();\r
+            jMenuTools.addMenuListener(this);\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
+\r
             jMenuTools.add(getJMenuItemToolsClone());\r
-            //jMenuTools.addSeparator();\r
             jMenuTools.add(getJMenuItemToolsCodeScan());\r
-            jMenuTools.addMenuListener(this);\r
+            jMenuTools.addSeparator();\r
+\r
+            jMenuTools.add(getJMenuItemToolsToolChainConfiguration());\r
+            jMenuTools.add(getJMenuItemToolsBuildPreferences());\r
+            jMenuTools.addSeparator();\r
+\r
+            jMenuTools.add(getJMenuItemToolsGenerateGuidsXref());\r
         }\r
         return jMenuTools;\r
     }\r
@@ -799,25 +805,36 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private JMenu getJMenuWindow() {\r
         if (jMenuWindow == null) {\r
+            //\r
+            // Set jMenuWindow's attribute\r
+            //\r
             jMenuWindow = new JMenu();\r
             jMenuWindow.setText("Window");\r
             jMenuWindow.setMnemonic('W');\r
+            jMenuWindow.setVisible(false);\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuWindow.add(getJMenuItemWindowDisplaySide());\r
             jMenuWindow.add(getJMenuItemWindowDisplayTopBottom());\r
             jMenuWindow.addSeparator();\r
+\r
             jMenuWindow.add(getJMenuItemWindowTabView());\r
             jMenuWindow.addSeparator();\r
+\r
             jMenuWindow.add(getJMenuItemWindowSource());\r
             jMenuWindow.add(getJMenuItemWindowXML());\r
             jMenuWindow.addSeparator();\r
+\r
             jMenuWindow.add(getJMenuItemWindowPreferences());\r
-            jMenuWindow.setVisible(false);\r
         }\r
         return jMenuWindow;\r
     }\r
 \r
     /**\r
-     This method initializes jPanelOperation \r
+     This method initializes jPanelOperation\r
+     Reserved\r
      \r
      @return javax.swing.JPanel jPanelOperation\r
      \r
@@ -835,7 +852,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     /**\r
-     This method initializes jButtonOk \r
+     This method initializes jButtonOk\r
+     Reserved\r
      \r
      @return javax.swing.JButton jButtonOk\r
      \r
@@ -852,7 +870,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     /**\r
-     This method initializes jButtonCancel \r
+     This method initializes jButtonCancel\r
+     Reserved\r
      \r
      @return javax.swing.JButton jButtonCancel\r
      \r
@@ -873,7 +892,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFileOpen \r
      \r
      @return javax.swing.JMenuItem jMenuItemFileOpen\r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFileOpen() {\r
         if (jMenuItemFileOpen == null) {\r
             jMenuItemFileOpen = new JMenuItem();\r
@@ -888,11 +908,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFileCloseAll     \r
      \r
      @return javax.swing.JMenuItem jMenuItemFileOpen\r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFileCloseAll() {\r
         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
@@ -903,7 +925,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFileSaveAll      \r
      \r
      @return javax.swing.JMenuItem jMenuItemFileSaveAll\r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFileSaveAll() {\r
         if (jMenuItemFileSaveAll == null) {\r
             jMenuItemFileSaveAll = new JMenuItem();\r
@@ -919,7 +942,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFilePageSetup    \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFilePageSetup() {\r
         if (jMenuItemFilePageSetup == null) {\r
             jMenuItemFilePageSetup = new JMenuItem();\r
@@ -936,7 +960,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFilePrint        \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFilePrint() {\r
         if (jMenuItemFilePrint == null) {\r
             jMenuItemFilePrint = new JMenuItem();\r
@@ -953,7 +978,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemFileImport       \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFileImport() {\r
         if (jMenuItemFileImport == null) {\r
             jMenuItemFileImport = new JMenuItem();\r
@@ -967,10 +993,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     /**\r
-     * This method initializes jMenuItemFileProperties \r
-     *         \r
-     * @return javax.swing.JMenuItem   \r
-     */\r
+     This method initializes jMenuItemFileProperties   \r
+     \r
+     @return javax.swing.JMenuItem     \r
+     \r
+     **/\r
     private JMenuItem getJMenuItemFileProperties() {\r
         if (jMenuItemFileProperties == null) {\r
             jMenuItemFileProperties = new JMenuItem();\r
@@ -984,10 +1011,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     /**\r
-     * This method initializes jMenuFileRecentFiles    \r
-     *         \r
-     * @return javax.swing.JMenu       \r
-     */\r
+     This method initializes jMenuFileRecentFiles      \r
+     \r
+     @return javax.swing.JMenu \r
+     \r
+     **/\r
     private JMenu getJMenuFileRecentFiles() {\r
         if (jMenuFileRecentFiles == null) {\r
             jMenuFileRecentFiles = new JMenu();\r
@@ -1003,14 +1031,16 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     /**\r
      This method initializes jMenuItemEditUndo \r
      \r
-     @return javax.swing.JMenuItem     \r
-     */\r
+     @return javax.swing.JMenuItem\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditUndo() {\r
         if (jMenuItemEditUndo == null) {\r
             jMenuItemEditUndo = new JMenuItem();\r
             jMenuItemEditUndo.setText("Undo");\r
             jMenuItemEditUndo.setMnemonic('U');\r
             jMenuItemEditUndo.setEnabled(false);\r
+            jMenuItemEditUndo.setVisible(false);\r
             jMenuItemEditUndo.addActionListener(this);\r
         }\r
         return jMenuItemEditUndo;\r
@@ -1020,13 +1050,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemEditRedo \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditRedo() {\r
         if (jMenuItemEditRedo == null) {\r
             jMenuItemEditRedo = new JMenuItem();\r
             jMenuItemEditRedo.setText("Redo");\r
             jMenuItemEditRedo.setMnemonic('R');\r
             jMenuItemEditRedo.setEnabled(false);\r
+            jMenuItemEditRedo.setVisible(false);\r
             jMenuItemEditRedo.addActionListener(this);\r
         }\r
         return jMenuItemEditRedo;\r
@@ -1036,13 +1068,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemEditCut  \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditCut() {\r
         if (jMenuItemEditCut == null) {\r
             jMenuItemEditCut = new JMenuItem();\r
             jMenuItemEditCut.setText("Cut");\r
             jMenuItemEditCut.setMnemonic('t');\r
             jMenuItemEditCut.setEnabled(false);\r
+            jMenuItemEditCut.setVisible(false);\r
             jMenuItemEditCut.addActionListener(this);\r
         }\r
         return jMenuItemEditCut;\r
@@ -1052,13 +1086,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemEditCopy \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditCopy() {\r
         if (jMenuItemEditCopy == null) {\r
             jMenuItemEditCopy = new JMenuItem();\r
             jMenuItemEditCopy.setText("Copy");\r
             jMenuItemEditCopy.setMnemonic('C');\r
             jMenuItemEditCopy.setEnabled(false);\r
+            jMenuItemEditCopy.setVisible(false);\r
             jMenuItemEditCopy.addActionListener(this);\r
         }\r
         return jMenuItemEditCopy;\r
@@ -1068,13 +1104,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItemEditPaste        \r
      \r
      return javax.swing.JMenuItem      \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditPaste() {\r
         if (jMenuItemEditPaste == null) {\r
             jMenuItemEditPaste = new JMenuItem();\r
             jMenuItemEditPaste.setText("Paste");\r
             jMenuItemEditPaste.setMnemonic('P');\r
             jMenuItemEditPaste.setEnabled(false);\r
+            jMenuItemEditPaste.setVisible(false);\r
             jMenuItemEditPaste.addActionListener(this);\r
         }\r
         return jMenuItemEditPaste;\r
@@ -1084,46 +1122,33 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      This method initializes jMenuItem \r
      \r
      @return javax.swing.JMenuItem     \r
-     */\r
+     \r
+     **/\r
     private JMenuItem getJMenuItemEditSelectAll() {\r
         if (jMenuItemEditSelectAll == null) {\r
             jMenuItemEditSelectAll = new JMenuItem();\r
             jMenuItemEditSelectAll.setText("Select All");\r
             jMenuItemEditSelectAll.setMnemonic('A');\r
             jMenuItemEditSelectAll.setEnabled(false);\r
+            jMenuItemEditSelectAll.setVisible(false);\r
             jMenuItemEditSelectAll.addActionListener(this);\r
         }\r
         return jMenuItemEditSelectAll;\r
     }\r
 \r
-    /**\r
-     This method initializes jMenuItemEditFind \r
-     \r
-     @return javax.swing.JMenuItem     \r
-     */\r
-    private JMenuItem getJMenuItemEditFind() {\r
-        if (jMenuItemEditFind == null) {\r
-            jMenuItemEditFind = new JMenuItem();\r
-            jMenuItemEditFind.setText("Find");\r
-            jMenuItemEditFind.setMnemonic('F');\r
-            jMenuItemEditFind.setEnabled(false);\r
-            jMenuItemEditFind.addActionListener(this);\r
-        }\r
-        return jMenuItemEditFind;\r
-    }\r
-\r
     /**\r
      This method initializes jMenuItemEditFindNext     \r
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemEditFindNext() {\r
         if (jMenuItemEditFindNext == null) {\r
             jMenuItemEditFindNext = new JMenuItem();\r
             jMenuItemEditFindNext.setText("Find Next");\r
             jMenuItemEditFindNext.setMnemonic('n');\r
             jMenuItemEditFindNext.setEnabled(false);\r
+            jMenuItemEditFindNext.setVisible(false);\r
             jMenuItemEditFindNext.addActionListener(this);\r
         }\r
         return jMenuItemEditFindNext;\r
@@ -1134,17 +1159,24 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenu \r
      \r
-     */\r
+     **/\r
     private JMenu getJMenuView() {\r
         if (jMenuView == null) {\r
+            //\r
+            // Set jMenuView's attributes\r
+            //\r
             jMenuView = new JMenu();\r
             jMenuView.setText("View");\r
             jMenuView.setMnemonic('V');\r
+            jMenuView.setVisible(false);\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuView.add(getJMenuViewToolbars());\r
             jMenuView.add(getJMenuItemViewAdvanced());\r
             jMenuView.add(getJMenuItemViewStandard());\r
             jMenuView.add(getJMenuItemViewXML());\r
-            jMenuView.setVisible(false);\r
         }\r
         return jMenuView;\r
     }\r
@@ -1154,12 +1186,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenu \r
      \r
-     */\r
+     **/\r
     private JMenu getJMenuViewToolbars() {\r
         if (jMenuViewToolbars == null) {\r
             jMenuViewToolbars = new JMenu();\r
             jMenuViewToolbars.setText("Toolbars");\r
             jMenuViewToolbars.setMnemonic('T');\r
+\r
             jMenuViewToolbars.add(getJCheckBoxMenuItemViewToolbarsFile());\r
             jMenuViewToolbars.add(getJCheckBoxMenuItemViewToolbarsEdit());\r
             jMenuViewToolbars.add(getJCheckBoxMenuItemViewToolbarsWindow());\r
@@ -1172,7 +1205,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JCheckBoxMenuItem     \r
      \r
-     */\r
+     **/\r
     private JCheckBoxMenuItem getJCheckBoxMenuItemViewToolbarsFile() {\r
         if (jCheckBoxMenuItemViewToolbarsFile == null) {\r
             jCheckBoxMenuItemViewToolbarsFile = new JCheckBoxMenuItem();\r
@@ -1188,7 +1221,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JCheckBoxMenuItem     \r
      \r
-     */\r
+     **/\r
     private JCheckBoxMenuItem getJCheckBoxMenuItemViewToolbarsEdit() {\r
         if (jCheckBoxMenuItemViewToolbarsEdit == null) {\r
             jCheckBoxMenuItemViewToolbarsEdit = new JCheckBoxMenuItem();\r
@@ -1204,7 +1237,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JCheckBoxMenuItem     \r
      \r
-     */\r
+     **/\r
     private JCheckBoxMenuItem getJCheckBoxMenuItemViewToolbarsWindow() {\r
         if (jCheckBoxMenuItemViewToolbarsWindow == null) {\r
             jCheckBoxMenuItemViewToolbarsWindow = new JCheckBoxMenuItem();\r
@@ -1220,7 +1253,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemViewStandard() {\r
         if (jMenuItemViewStandard == null) {\r
             jMenuItemViewStandard = new JMenuItem();\r
@@ -1237,7 +1270,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemViewAdvanced() {\r
         if (jMenuItemViewAdvanced == null) {\r
             jMenuItemViewAdvanced = new JMenuItem();\r
@@ -1254,22 +1287,29 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenu \r
      \r
-     */\r
+     **/\r
     private JMenu getJMenuProject() {\r
         if (jMenuProject == null) {\r
+            //\r
+            // Set jMenuProject's attributes\r
+            //\r
             jMenuProject = new JMenu();\r
             jMenuProject.setText("Project");\r
             jMenuProject.setMnemonic('P');\r
+\r
+            //\r
+            // Add sub menu items\r
+            //\r
             jMenuProject.add(getJMenuItemProjectAdmin());\r
-            //jMenuProject.addSeparator();\r
+\r
             jMenuProject.add(getJMenuItemProjectChangeWorkspace());\r
             jMenuProject.addSeparator();\r
+\r
             jMenuProject.add(getJMenuItemProjectCreateFar());\r
             jMenuProject.add(getJMenuItemProjectInstallFar());\r
             jMenuProject.add(getJMenuItemProjectUpdateFar());\r
             jMenuProject.add(getJMenuItemProjectRemoveFar());\r
-            //jMenuProject.addSeparator();\r
-            jMenuProject.add(getJMenuProjectBuildTargets());\r
+\r
         }\r
         return jMenuProject;\r
     }\r
@@ -1279,7 +1319,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemProjectAdmin() {\r
         if (jMenuItemProjectAdmin == null) {\r
             jMenuItemProjectAdmin = new JMenuItem();\r
@@ -1297,7 +1337,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemProjectChangeWorkspace() {\r
         if (jMenuItemProjectChangeWorkspace == null) {\r
             jMenuItemProjectChangeWorkspace = new JMenuItem();\r
@@ -1310,51 +1350,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     /**\r
-     This method initializes jMenuProjectBuildTargets  \r
+     This method initializes jMenuProjectBuildPreferences      \r
      \r
      @return javax.swing.JMenu \r
      \r
-     */\r
-    private JMenu getJMenuProjectBuildTargets() {\r
-        if (jMenuProjectBuildTargets == null) {\r
-            jMenuProjectBuildTargets = new JMenu();\r
-            jMenuProjectBuildTargets.setText("Build Targets");\r
-            jMenuProjectBuildTargets.setMnemonic('T');\r
-            jMenuProjectBuildTargets.add(getJCheckBoxMenuItemProjectBuildTargetsDebug());\r
-            jMenuProjectBuildTargets.add(getJCheckBoxMenuItemProjectBuildTargetsRelease());\r
-            jMenuProjectBuildTargets.setVisible(false);\r
-        }\r
-        return jMenuProjectBuildTargets;\r
-    }\r
-\r
-    /**\r
-     This method initializes jCheckBoxMenuItemProjectBuildTargetsDebug \r
-     \r
-     @return javax.swing.JCheckBoxMenuItem     \r
-     \r
-     */\r
-    private JCheckBoxMenuItem getJCheckBoxMenuItemProjectBuildTargetsDebug() {\r
-        if (jCheckBoxMenuItemProjectBuildTargetsDebug == null) {\r
-            jCheckBoxMenuItemProjectBuildTargetsDebug = new JCheckBoxMenuItem();\r
-            jCheckBoxMenuItemProjectBuildTargetsDebug.setText("Debug");\r
-            jCheckBoxMenuItemProjectBuildTargetsDebug.setEnabled(false);\r
-        }\r
-        return jCheckBoxMenuItemProjectBuildTargetsDebug;\r
-    }\r
-\r
-    /**\r
-     This method initializes jCheckBoxMenuItemProjectBuildTargetsRelease       \r
-     \r
-     @return javax.swing.JCheckBoxMenuItem     \r
-     \r
-     */\r
-    private JCheckBoxMenuItem getJCheckBoxMenuItemProjectBuildTargetsRelease() {\r
-        if (jCheckBoxMenuItemProjectBuildTargetsRelease == null) {\r
-            jCheckBoxMenuItemProjectBuildTargetsRelease = new JCheckBoxMenuItem();\r
-            jCheckBoxMenuItemProjectBuildTargetsRelease.setText("Release");\r
-            jCheckBoxMenuItemProjectBuildTargetsRelease.setEnabled(false);\r
+     **/\r
+    private JMenuItem getJMenuItemToolsBuildPreferences() {\r
+        if (jMenuItemToolsBuildPreferences == null) {\r
+            jMenuItemToolsBuildPreferences = new JMenuItem();\r
+            jMenuItemToolsBuildPreferences.setText("Build Preferences");\r
+            jMenuItemToolsBuildPreferences.setMnemonic('P');\r
+            jMenuItemToolsBuildPreferences.setEnabled(true);\r
+            jMenuItemToolsBuildPreferences.addActionListener(this);\r
         }\r
-        return jCheckBoxMenuItemProjectBuildTargetsRelease;\r
+        return jMenuItemToolsBuildPreferences;\r
     }\r
 \r
     /**\r
@@ -1362,7 +1371,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemToolsToolChainConfiguration() {\r
         if (jMenuItemToolsToolChainConfiguration == null) {\r
             jMenuItemToolsToolChainConfiguration = new JMenuItem();\r
@@ -1378,7 +1387,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemToolsClone() {\r
         if (jMenuItemToolsClone == null) {\r
             jMenuItemToolsClone = new JMenuItem();\r
@@ -1395,7 +1404,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemToolsCodeScan() {\r
         if (jMenuItemToolsCodeScan == null) {\r
             jMenuItemToolsCodeScan = new JMenuItem();\r
@@ -1413,7 +1422,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowDisplaySide() {\r
         if (jMenuItemWindowDisplaySide == null) {\r
             jMenuItemWindowDisplaySide = new JMenuItem();\r
@@ -1430,7 +1439,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowDisplayTopBottom() {\r
         if (jMenuItemWindowDisplayTopBottom == null) {\r
             jMenuItemWindowDisplayTopBottom = new JMenuItem();\r
@@ -1447,7 +1456,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemViewXML() {\r
         if (jMenuItemViewXML == null) {\r
             jMenuItemViewXML = new JMenuItem();\r
@@ -1464,7 +1473,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowTabView() {\r
         if (jMenuItemWindowTabView == null) {\r
             jMenuItemWindowTabView = new JMenuItem();\r
@@ -1481,7 +1490,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowSource() {\r
         if (jMenuItemWindowSource == null) {\r
             jMenuItemWindowSource = new JMenuItem();\r
@@ -1498,7 +1507,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowXML() {\r
         if (jMenuItemWindowXML == null) {\r
             jMenuItemWindowXML = new JMenuItem();\r
@@ -1515,7 +1524,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemWindowPreferences() {\r
         if (jMenuItemWindowPreferences == null) {\r
             jMenuItemWindowPreferences = new JMenuItem();\r
@@ -1532,7 +1541,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemHelpContents() {\r
         if (jMenuItemHelpContents == null) {\r
             jMenuItemHelpContents = new JMenuItem();\r
@@ -1550,7 +1559,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      @return javax.swing.JMenuItem     \r
      \r
-     */\r
+     **/\r
     private JMenuItem getJMenuItemHelpIndex() {\r
         if (jMenuItemHelpIndex == null) {\r
             jMenuItemHelpIndex = new JMenuItem();\r
@@ -1581,30 +1590,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         return jMenuItemHelpSearch;\r
     }\r
 \r
-    /**\r
-     * This method initializes jToolBar        \r
-     *         \r
-     * @return javax.swing.JToolBar    \r
-     */\r
-    // private JToolBar getJToolBarFile() {\r
-    //         if (jToolBarFile == null) {\r
-    //                 jToolBarFile = new JToolBar();\r
-    //                 jToolBarFile.setFloatable(false);\r
-    //         }\r
-    //         return jToolBarFile;\r
-    // }\r
-    /**\r
-     * This method initializes jToolBarEdit    \r
-     *         \r
-     * @return javax.swing.JToolBar    \r
-     */\r
-    // private JToolBar getJToolBarEdit() {\r
-    //         if (jToolBarEdit == null) {\r
-    //                 jToolBarEdit = new JToolBar();\r
-    //                 jToolBarEdit.setFloatable(false);\r
-    //         }\r
-    //         return jToolBarEdit;\r
-    // }\r
     /**\r
      * This method initializes jMenuItemToolsInstallPackage    \r
      *         \r
@@ -1633,6 +1618,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             jMenuItemProjectUpdateFar.setMnemonic('U');\r
             jMenuItemProjectUpdateFar.setEnabled(true);\r
             jMenuItemProjectUpdateFar.addActionListener(this);\r
+            jMenuItemProjectUpdateFar.setVisible(true);\r
         }\r
         return jMenuItemProjectUpdateFar;\r
     }\r
@@ -1668,20 +1654,147 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         return jMenuItemProjectCreateFar;\r
     }\r
 \r
-    /* (non-Javadoc)\r
-     * @see org.tianocore.packaging.common.ui.IFrame#main(java.lang.String[])\r
-     *\r
-     * Main class, start the GUI\r
-     * \r
+    /**\r
+     * This method initializes jMenuEditFind   \r
+     *         \r
+     * @return javax.swing.JMenu       \r
      */\r
-    public static void main(String[] args) {\r
-        FrameworkWizardUI module = FrameworkWizardUI.getInstance();\r
-        module.setVisible(true);\r
+    private JMenu getJMenuEditFind() {\r
+        if (jMenuEditFind == null) {\r
+            jMenuEditFind = new JMenu();\r
+            jMenuEditFind.setText("Find");\r
+            jMenuEditFind.setMnemonic('F');\r
+\r
+            jMenuEditFind.add(getJMenuItemEditFindPpi());\r
+            jMenuEditFind.add(getJMenuItemEditFindProtocol());\r
+            jMenuEditFind.add(getJMenuItemEditFindGuid());\r
+            jMenuEditFind.add(getJMenuItemEditFindPcd());\r
+            jMenuEditFind.add(getJMenuItemEditFindLibraryClass());\r
+            jMenuEditFind.add(getJMenuItemEditFindLibraryInstance());\r
+        }\r
+        return jMenuEditFind;\r
     }\r
 \r
     /**\r
-     This is the default constructor\r
-     \r
+     * This method initializes jMenuItemEditFindPcd    \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindPcd() {\r
+        if (jMenuItemEditFindPcd == null) {\r
+            jMenuItemEditFindPcd = new JMenuItem();\r
+            jMenuItemEditFindPcd.setText("All PCD entries");\r
+            jMenuItemEditFindPcd.setMnemonic('P');\r
+            jMenuItemEditFindPcd.addActionListener(this);\r
+        }\r
+        return jMenuItemEditFindPcd;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemEditFindLibraryClass   \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindLibraryClass() {\r
+        if (jMenuItemEditFindLibraryClass == null) {\r
+            jMenuItemEditFindLibraryClass = new JMenuItem();\r
+            jMenuItemEditFindLibraryClass.setText("All Library Classes");\r
+            jMenuItemEditFindLibraryClass.setMnemonic('C');\r
+            jMenuItemEditFindLibraryClass.addActionListener(this);\r
+        }\r
+        return jMenuItemEditFindLibraryClass;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemEditFindPpi    \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindPpi() {\r
+        if (jMenuItemEditFindPpi == null) {\r
+            jMenuItemEditFindPpi = new JMenuItem();\r
+            jMenuItemEditFindPpi.setText("All PPIs");\r
+            jMenuItemEditFindPpi.setMnemonic('I');\r
+            jMenuItemEditFindPpi.addActionListener(this);\r
+        }\r
+        return jMenuItemEditFindPpi;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemEditFindProtocol       \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindProtocol() {\r
+        if (jMenuItemEditFindProtocol == null) {\r
+            jMenuItemEditFindProtocol = new JMenuItem();\r
+            jMenuItemEditFindProtocol.setText("All Protocols");\r
+            jMenuItemEditFindProtocol.setMnemonic('r');\r
+            jMenuItemEditFindProtocol.addActionListener(this);\r
+        }\r
+        return jMenuItemEditFindProtocol;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemEditFindGuid   \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindGuid() {\r
+        if (jMenuItemEditFindGuid == null) {\r
+            jMenuItemEditFindGuid = new JMenuItem();\r
+            jMenuItemEditFindGuid.setText("All GUIDs");\r
+            jMenuItemEditFindGuid.setMnemonic('G');\r
+            jMenuItemEditFindGuid.addActionListener(this);\r
+        }\r
+        return jMenuItemEditFindGuid;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemEditFindLibraryInstance        \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemEditFindLibraryInstance() {\r
+        if (jMenuItemEditFindLibraryInstance == null) {\r
+            jMenuItemEditFindLibraryInstance = new JMenuItem();\r
+            jMenuItemEditFindLibraryInstance.setText("All Library Instances");\r
+            jMenuItemEditFindLibraryInstance.setMnemonic('n');\r
+            jMenuItemEditFindLibraryInstance.addActionListener(this);\r
+            jMenuItemEditFindLibraryInstance.setVisible(false);\r
+        }\r
+        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
+     * Main class, start the GUI\r
+     * \r
+     */\r
+    public static void main(String[] args) {\r
+        FrameworkWizardUI module = FrameworkWizardUI.getInstance();\r
+        module.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     This is the default constructor\r
+     \r
      **/\r
     public FrameworkWizardUI() {\r
         super();\r
@@ -1694,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
@@ -1707,11 +1826,22 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             System.exit(0);\r
         }\r
 \r
+        //\r
+        // Init Global Data\r
+        //\r
+        GlobalData.init();\r
+\r
+        //\r
+        // Close splash screen\r
+        //\r
+        ss.dispose();\r
+\r
+        //\r
+        // Init the frame\r
+        //\r
         this.setSize(DataType.MAIN_FRAME_PREFERRED_SIZE_WIDTH, DataType.MAIN_FRAME_PREFERRED_SIZE_HEIGHT);\r
         this.setResizable(true);\r
         this.setJMenuBar(getjJMenuBar());\r
-        this.addComponentListener(this);\r
-        this.getCompontentsFromFrameworkDatabase();\r
         this.setContentPane(getJContentPane());\r
         this.setTitle(DataType.PROJECT_NAME + " " + DataType.PROJECT_VERSION + " " + "- ["\r
                       + Workspace.getCurrentWorkspace() + "]");\r
@@ -1749,67 +1879,106 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Operations of Menu\r
         //\r
-        if (arg0.getSource() == jMenuItemFileNew) {\r
+        if (arg0.getSource() == this.jMenuItemFileNew) {\r
             this.fileNew();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileOpen) {\r
+        if (arg0.getSource() == this.jMenuItemFileOpen) {\r
             this.open();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileClose) {\r
+        if (arg0.getSource() == this.jMenuItemFileClose) {\r
             this.close();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileCloseAll) {\r
+        if (arg0.getSource() == this.jMenuItemFileCloseAll) {\r
             this.closeAll();\r
+            this.makeEmptyTree();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileSave) {\r
+        if (arg0.getSource() == this.jMenuItemFileSave) {\r
             this.save();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileSaveAs) {\r
+        if (arg0.getSource() == this.jMenuItemFileSaveAs) {\r
             this.saveAs();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileSaveAll) {\r
+        if (arg0.getSource() == this.jMenuItemFileSaveAll) {\r
             this.saveAll();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemFileExit) {\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
 \r
-        if (arg0.getSource() == jMenuItemProjectChangeWorkspace) {\r
-            changeWorkspace();\r
+        if (arg0.getSource() == this.jMenuItemEditFindPpi) {\r
+            this.findPpi();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemProjectCreateFar) {\r
+        if (arg0.getSource() == this.jMenuItemEditFindProtocol) {\r
+            this.findProtocol();\r
+        }\r
 \r
+        if (arg0.getSource() == this.jMenuItemEditFindGuid) {\r
+            this.findGuid();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemProjectInstallFar) {\r
-            this.closeAll();\r
+        if (arg0.getSource() == this.jMenuItemEditFindPcd) {\r
+            this.findPcd();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemProjectRemoveFar) {\r
-            this.closeAll();\r
+        if (arg0.getSource() == this.jMenuItemEditFindLibraryClass) {\r
+            this.findLibraryClass();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemProjectUpdateFar) {\r
-            this.closeAll();\r
+        if (arg0.getSource() == this.jMenuItemEditFindLibraryInstance) {\r
+            this.findLibraryInstance();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemToolsClone) {\r
-            cloneItem();\r
+        if (arg0.getSource() == jMenuItemToolsBuildPreferences) {\r
+            configBuildPreferences();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemToolsToolChainConfiguration) {\r
-            setupToolChainConfiguration();\r
+        if (arg0.getSource() == this.jMenuItemProjectChangeWorkspace) {\r
+            this.changeWorkspace();\r
         }\r
 \r
-        if (arg0.getSource() == jMenuItemHelpAbout) {\r
+        if (arg0.getSource() == this.jMenuItemProjectCreateFar) {\r
+            this.createFar();\r
+        }\r
+\r
+        if (arg0.getSource() == this.jMenuItemProjectInstallFar) {\r
+            this.installFar();\r
+        }\r
+\r
+        if (arg0.getSource() == this.jMenuItemProjectRemoveFar) {\r
+            this.removeFar();\r
+        }\r
+\r
+        if (arg0.getSource() == this.jMenuItemProjectUpdateFar) {\r
+            this.updateFar();\r
+        }\r
+\r
+        if (arg0.getSource() == this.jMenuItemToolsClone) {\r
+            this.cloneItem();\r
+        }\r
+\r
+        if (arg0.getSource() == this.jMenuItemToolsToolChainConfiguration) {\r
+            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
             if (result == DataType.RETURN_TYPE_OK) {\r
@@ -1823,41 +1992,53 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void makeEmptyTree() {\r
+        //\r
         // Make root\r
-        dmtnRoot = new IDefaultMutableTreeNode("WORKSPACE", IDefaultMutableTreeNode.WORKSPACE, -1);\r
+        //\r
+        dmtnRoot = new IDefaultMutableTreeNode("WORKSPACE", IDefaultMutableTreeNode.WORKSPACE, false, null, null);\r
 \r
+        //\r
         // Make Module Description\r
-        dmtnModuleDescription = new IDefaultMutableTreeNode("ModuleDescription", IDefaultMutableTreeNode.MODULE, -1);\r
+        //\r
+        dmtnModuleDescription = new IDefaultMutableTreeNode("Modules", IDefaultMutableTreeNode.MODULE_DESCRIPTION,\r
+                                                            false, null, dmtnRoot);\r
 \r
         //\r
         // First add package\r
         //\r
-        if (this.vPackageList.size() > 0) {\r
-            for (int index = 0; index < this.vPackageList.size(); index++) {\r
+        if (GlobalData.vPackageList.size() > 0) {\r
+            for (int index = 0; index < GlobalData.vPackageList.size(); index++) {\r
                 IDefaultMutableTreeNode dmtnModulePackage = null;\r
                 IDefaultMutableTreeNode dmtnModulePackageLibrary = null;\r
                 IDefaultMutableTreeNode dmtnModulePackageModule = null;\r
 \r
-                dmtnModulePackage = new IDefaultMutableTreeNode(this.vPackageList.elementAt(index).getName(),\r
+                dmtnModulePackage = new IDefaultMutableTreeNode(GlobalData.vPackageList.elementAt(index).getName(),\r
                                                                 IDefaultMutableTreeNode.MODULE_PACKAGE, false,\r
-                                                                this.vPackageList.elementAt(index));\r
+                                                                GlobalData.vPackageList.elementAt(index),\r
+                                                                this.dmtnModuleDescription);\r
                 dmtnModulePackageLibrary = new IDefaultMutableTreeNode("Library",\r
                                                                        IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY,\r
-                                                                       false, this.vPackageList.elementAt(index));\r
+                                                                       false, GlobalData.vPackageList.elementAt(index),\r
+                                                                       this.dmtnModuleDescription);\r
                 dmtnModulePackageModule = new IDefaultMutableTreeNode("Module",\r
                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
-                                                                      false, this.vPackageList.elementAt(index));\r
-\r
-                Vector<ModuleIdentification> vModule = wt.getAllModules(this.vPackageList.elementAt(index));\r
+                                                                      false, GlobalData.vPackageList.elementAt(index),\r
+                                                                      this.dmtnModuleDescription);\r
+                //\r
+                // And then add each module in its package\r
+                //\r
+                Vector<ModuleIdentification> vModule = wt.getAllModules(GlobalData.vPackageList.elementAt(index));\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.MSA_HEADER,\r
-                                                                                 false, vModule.get(indexJ)));\r
+                                                                                 IDefaultMutableTreeNode.MODULE, false,\r
+                                                                                 vModule.get(indexJ),\r
+                                                                                 this.dmtnModuleDescription));\r
                     } else {\r
                         dmtnModulePackageModule.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
-                                                                                IDefaultMutableTreeNode.MSA_HEADER,\r
-                                                                                false, vModule.get(indexJ)));\r
+                                                                                IDefaultMutableTreeNode.MODULE, false,\r
+                                                                                vModule.get(indexJ),\r
+                                                                                this.dmtnModuleDescription));\r
                     }\r
                 }\r
                 if (dmtnModulePackageModule.getChildCount() > 0) {\r
@@ -1871,40 +2052,46 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             }\r
         }\r
 \r
-        //                if (this.vModuleList.size() > 0) {\r
-        //                    for (int index = 0; index < this.vModuleList.size(); index++) {\r
-        //                        dmtnModuleDescription.add(new IDefaultMutableTreeNode(this.vModuleList.elementAt(index).getName(),\r
-        //                                                                              IDefaultMutableTreeNode.MSA_HEADER, false,\r
-        //                                                                              this.vModuleList.elementAt(index)));\r
-        //                    }\r
-        //                }\r
-\r
+        //\r
         // Make Package Description\r
-        dmtnPackageDescription = new IDefaultMutableTreeNode("PackageDescription", IDefaultMutableTreeNode.PACKAGE, -1);\r
-        if (this.vPackageList.size() > 0) {\r
-            for (int index = 0; index < this.vPackageList.size(); index++) {\r
-                dmtnPackageDescription.add(new IDefaultMutableTreeNode(this.vPackageList.elementAt(index).getName(),\r
-                                                                       IDefaultMutableTreeNode.SPD_HEADER, false,\r
-                                                                       this.vPackageList.elementAt(index)));\r
+        //\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
+                                                                       this.dmtnPackageDescription));\r
             }\r
         }\r
 \r
+        //\r
         // Make Platform Description\r
-        dmtnPlatformDescription = new IDefaultMutableTreeNode("PlatformDescription", IDefaultMutableTreeNode.PLATFORM,\r
-                                                              -1);\r
-        if (this.vPlatformList.size() > 0) {\r
-            for (int index = 0; index < this.vPlatformList.size(); index++) {\r
-                dmtnPlatformDescription.add(new IDefaultMutableTreeNode(this.vPlatformList.elementAt(index).getName(),\r
-                                                                        IDefaultMutableTreeNode.FPD_PLATFORMHEADER,\r
-                                                                        false, this.vPlatformList.elementAt(index)));\r
+        //\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
+                                                                        this.dmtnPlatformDescription));\r
             }\r
         }\r
 \r
+        //\r
+        // Add sub nodes to root node\r
+        //\r
         dmtnRoot.add(dmtnModuleDescription);\r
         dmtnRoot.add(dmtnPackageDescription);\r
         dmtnRoot.add(dmtnPlatformDescription);\r
         iTree = new ITree(dmtnRoot);\r
         iTree.addMouseListener(this);\r
+        iTree.addKeyListener(this);\r
         jScrollPaneTree.setViewportView(iTree);\r
     }\r
 \r
@@ -1925,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
@@ -2015,287 +2198,125 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         fc.addChoosableFileFilter(new IFileFilter(ext));\r
         return fc.showSaveDialog(new JPanel());\r
     }\r
-    \r
-    /**\r
-    Open Module\r
-\r
-    @param path input file path\r
-    \r
-    **/\r
-   private void openModule(String path, ModuleIdentification moduleId) {\r
-       ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = null;\r
-       try {\r
-           msa = OpenFile.openMsaFile(path);\r
-       } catch (IOException e) {\r
-           Log.err("Open Module Surface Area " + path, e.getMessage());\r
-           return;\r
-       } catch (XmlException e) {\r
-           Log.err("Open Module Surface Area " + path, e.getMessage());\r
-           return;\r
-       } catch (Exception e) {\r
-           Log.err("Open Module Surface Area " + path, "Invalid file type");\r
-           return;\r
-       }\r
-       Identification id = new Identification(msa.getMsaHeader().getModuleName(), msa.getMsaHeader().getGuidValue(),\r
-                                              msa.getMsaHeader().getVersion(), path);\r
-       //\r
-       // Generate module id\r
-       //\r
-       PackageIdentification pid = wt.getPackageIdByModuleId(id);\r
-       if (pid != null) {\r
-           //\r
-           // To judge if the module existed in vModuleList\r
-           // If not, add it to vModuleList\r
-           //\r
-           boolean isFind = false;\r
-           for (int index = 0; index < vModuleList.size(); index++) {\r
-               if (vModuleList.elementAt(index).equals(id)) {\r
-                   isFind = true;\r
-                   break;\r
-               }\r
-           }\r
-           if (!isFind) {\r
-               ModuleIdentification mid = new ModuleIdentification(id, pid, moduleId.isLibrary());\r
-               vModuleList.addElement(mid);\r
-               //\r
-               // Add new MsaHeader node to the tree\r
-               //\r
-               IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(mid.getName(),\r
-                                                                          IDefaultMutableTreeNode.MSA_HEADER, true,\r
-                                                                          mid);\r
-               //\r
-               // First find the module belongs to which package\r
-               //\r
-               IDefaultMutableTreeNode packageNode = iTree.getNodeById(dmtnModuleDescription, mid.getPackageId(),\r
-                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE);\r
-               //\r
-               // To check if has module node or library node\r
-               //\r
-               IDefaultMutableTreeNode parentModuleNode = null;\r
-               IDefaultMutableTreeNode parentLibraryNode = null;\r
-               boolean hasModule = false;\r
-               boolean hasLibrary = false;\r
-               for (int index = 0; index < packageNode.getChildCount(); index++) {\r
-                   IDefaultMutableTreeNode iNode = (IDefaultMutableTreeNode) packageNode.getChildAt(index);\r
-                   if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY) {\r
-                       hasLibrary = true;\r
-                       parentLibraryNode = iNode;\r
-                   }\r
-                   if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
-                       hasModule = true;\r
-                       parentModuleNode = iNode;\r
-                   }\r
-               }\r
-\r
-               //\r
-               // If is a module\r
-               //\r
-               if (!mid.isLibrary()) {\r
-                   //\r
-                   // Create parent node first if has no parent node\r
-                   //\r
-                   if (!hasModule) {\r
-                       parentModuleNode = new IDefaultMutableTreeNode("Module",\r
-                                                                      IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
-                                                                      false, mid.getPackageId());\r
-                       iTree.addNode(packageNode, parentModuleNode);\r
-                   }\r
-\r
-                   iTree.addNode(parentModuleNode, node);\r
-               }\r
-\r
-               //\r
-               // If is a Library\r
-               //\r
-               if (mid.isLibrary()) {\r
-                   //\r
-                   // Create parent node first if has no parent node\r
-                   //\r
-                   if (!hasLibrary) {\r
-                       parentLibraryNode = new IDefaultMutableTreeNode("Library",\r
-                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY,\r
-                                                                       false, mid.getPackageId());\r
-                       iTree.addNode(packageNode, parentLibraryNode);\r
-                   }\r
-\r
-                   iTree.addNode(parentLibraryNode, node);\r
-               }\r
-           }\r
-       } else {\r
-           //\r
-           // The module is not in existing packages\r
-           //\r
-           Log.err("The module hasn't been added to any package of current workspace!");\r
-           return;\r
-       }\r
-       \r
-       //\r
-       // Make the node selected\r
-       //\r
-       iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
-                                                                    IDefaultMutableTreeNode.MSA_HEADER)));\r
-       //\r
-       // Update opening Module list information\r
-       //\r
-       if (!openingModuleList.existsModule(id)) {\r
-           //\r
-           // Insert sub node of module\r
-           //\r
-           insertModuleTreeNode(id);\r
-           iTree.getSelectNode().setOpening(true);\r
-\r
-           //\r
-           // Update opening module list\r
-           //\r
-           openingModuleList.insertToOpeningModuleList(id, msa);\r
-           openingModuleList.setTreePathById(id, iTree.getSelectionPath());\r
-       }\r
-       //\r
-       // Show msa header in editor panel\r
-       //\r
-       showModuleElement(IDefaultMutableTreeNode.MSA_HEADER, openingModuleList.getOpeningModuleById(id));\r
-       this.currentOpeningModuleIndex = openingModuleList.findIndexOfListById(id);\r
-   }\r
 \r
     /**\r
-     Open Module\r
-\r
-     @param path input file path\r
+     Add a module to tree\r
+     \r
+     @param mid The module node to be added\r
      \r
      **/\r
-    private void openModule(String path) {\r
-        ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = null;\r
-        try {\r
-            msa = OpenFile.openMsaFile(path);\r
-        } catch (IOException e) {\r
-            Log.err("Open Module Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (XmlException e) {\r
-            Log.err("Open Module Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (Exception e) {\r
-            Log.err("Open Module Surface Area " + path, "Invalid file type");\r
-            return;\r
+    private void addModuleToTree(ModuleIdentification mid) {\r
+        //\r
+        // Add new MsaHeader node to the tree\r
+        //\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
+        IDefaultMutableTreeNode packageNode = iTree.getNodeById(dmtnModuleDescription, mid.getPackageId(),\r
+                                                                IDefaultMutableTreeNode.MODULE_PACKAGE);\r
+        //\r
+        // To check if has module node or library node\r
+        //\r
+        IDefaultMutableTreeNode parentModuleNode = null;\r
+        IDefaultMutableTreeNode parentLibraryNode = null;\r
+        boolean hasModule = false;\r
+        boolean hasLibrary = false;\r
+        for (int index = 0; index < packageNode.getChildCount(); index++) {\r
+            IDefaultMutableTreeNode iNode = (IDefaultMutableTreeNode) packageNode.getChildAt(index);\r
+            if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY) {\r
+                hasLibrary = true;\r
+                parentLibraryNode = iNode;\r
+            }\r
+            if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
+                hasModule = true;\r
+                parentModuleNode = iNode;\r
+            }\r
         }\r
-        Identification id = new Identification(msa.getMsaHeader().getModuleName(), msa.getMsaHeader().getGuidValue(),\r
-                                               msa.getMsaHeader().getVersion(), path);\r
+\r
         //\r
-        // Generate module id\r
+        // If is a module\r
         //\r
-        PackageIdentification pid = wt.getPackageIdByModuleId(id);\r
-        if (pid != null) {\r
+        if (!mid.isLibrary()) {\r
             //\r
-            // To judge if the module existed in vModuleList\r
-            // If not, add it to vModuleList\r
+            // Create parent node first if has no parent node\r
             //\r
-            boolean isFind = false;\r
-            for (int index = 0; index < vModuleList.size(); index++) {\r
-                if (vModuleList.elementAt(index).equals(id)) {\r
-                    isFind = true;\r
-                    break;\r
-                }\r
+            if (!hasModule) {\r
+                parentModuleNode = new IDefaultMutableTreeNode("Module", IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
+                                                               false, mid.getPackageId(), this.dmtnModuleDescription);\r
+                iTree.addNode(packageNode, parentModuleNode);\r
             }\r
-            if (!isFind) {\r
-                ModuleIdentification mid = new ModuleIdentification(id, pid);\r
-                vModuleList.addElement(mid);\r
-                //\r
-                // Add new MsaHeader node to the tree\r
-                //\r
-                IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(mid.getName(),\r
-                                                                           IDefaultMutableTreeNode.MSA_HEADER, true,\r
-                                                                           mid);\r
-                //\r
-                // First find the module belongs to which package\r
-                //\r
-                IDefaultMutableTreeNode packageNode = iTree.getNodeById(dmtnModuleDescription, mid.getPackageId(),\r
-                                                                        IDefaultMutableTreeNode.MODULE_PACKAGE);\r
-                //\r
-                // To check if has module node or library node\r
-                //\r
-                IDefaultMutableTreeNode parentModuleNode = null;\r
-                IDefaultMutableTreeNode parentLibraryNode = null;\r
-                boolean hasModule = false;\r
-                boolean hasLibrary = false;\r
-                for (int index = 0; index < packageNode.getChildCount(); index++) {\r
-                    IDefaultMutableTreeNode iNode = (IDefaultMutableTreeNode) packageNode.getChildAt(index);\r
-                    if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY) {\r
-                        hasLibrary = true;\r
-                        parentLibraryNode = iNode;\r
-                    }\r
-                    if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
-                        hasModule = true;\r
-                        parentModuleNode = iNode;\r
-                    }\r
-                }\r
 \r
-                //\r
-                // If is a module\r
-                //\r
-                if (!mid.isLibrary()) {\r
-                    //\r
-                    // Create parent node first if has no parent node\r
-                    //\r
-                    if (!hasModule) {\r
-                        parentModuleNode = new IDefaultMutableTreeNode("Module",\r
-                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
-                                                                       false, mid.getPackageId());\r
-                        iTree.addNode(packageNode, parentModuleNode);\r
-                    }\r
+            iTree.addNode(parentModuleNode, node);\r
+        }\r
 \r
-                    iTree.addNode(parentModuleNode, node);\r
-                }\r
+        //\r
+        // If is a Library\r
+        //\r
+        if (mid.isLibrary()) {\r
+            //\r
+            // Create parent node first if has no parent node\r
+            //\r
+            if (!hasLibrary) {\r
+                parentLibraryNode = new IDefaultMutableTreeNode("Library",\r
+                                                                IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY, false,\r
+                                                                mid.getPackageId(), this.dmtnModuleDescription);\r
+                iTree.addNode(packageNode, parentLibraryNode);\r
+            }\r
 \r
-                //\r
-                // If is a Library\r
-                //\r
-                if (mid.isLibrary()) {\r
-                    //\r
-                    // Create parent node first if has no parent node\r
-                    //\r
-                    if (!hasLibrary) {\r
-                        parentLibraryNode = new IDefaultMutableTreeNode("Library",\r
-                                                                        IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY,\r
-                                                                        false, mid.getPackageId());\r
-                        iTree.addNode(packageNode, parentLibraryNode);\r
-                    }\r
+            iTree.addNode(parentLibraryNode, node);\r
+        }\r
+    }\r
 \r
-                    iTree.addNode(parentLibraryNode, node);\r
-                }\r
-            }\r
-        } else {\r
+    /**\r
+     Open Module\r
+\r
+     @param path input file path\r
+     \r
+     **/\r
+    private void openModule(String path, IDefaultMutableTreeNode belongNode) {\r
+        ModuleIdentification id = GlobalData.openingModuleList.getIdByPath(path);\r
+        if (id == null) {\r
             //\r
             // The module is not in existing packages\r
             //\r
-            Log.err("The module hasn't been added to any package of current workspace!");\r
+            Log.wrn("Open Module", "The module does not belong to any package in the current workspace!");\r
             return;\r
         }\r
-        \r
+\r
         //\r
         // Make the node selected\r
         //\r
-        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
-                                                                     IDefaultMutableTreeNode.MSA_HEADER)));\r
+        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(belongNode, id, IDefaultMutableTreeNode.MODULE)));\r
+\r
         //\r
         // Update opening Module list information\r
         //\r
-        if (!openingModuleList.existsModule(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
-            openingModuleList.insertToOpeningModuleList(id, msa);\r
-            openingModuleList.setTreePathById(id, iTree.getSelectionPath());\r
+            GlobalData.openingModuleList.setModuleOpen(id, true);\r
+            Set<TreePath> temp = GlobalData.openingModuleList.getTreePathById(id);\r
+            temp.add(iTree.getSelectionPath());\r
+            GlobalData.openingModuleList.setTreePathById(id, temp);\r
         }\r
         //\r
-        // Show msa header in editor panel\r
+        // Select msa header node and show it in editor panel\r
         //\r
-        showModuleElement(IDefaultMutableTreeNode.MSA_HEADER, openingModuleList.getOpeningModuleById(id));\r
-        this.currentOpeningModuleIndex = openingModuleList.findIndexOfListById(id);\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
 \r
     /**\r
@@ -2305,37 +2326,12 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void openPackage(String path) {\r
-        PackageSurfaceAreaDocument.PackageSurfaceArea spd = null;\r
-        try {\r
-            spd = OpenFile.openSpdFile(path);\r
-        } catch (IOException e) {\r
-            Log.err("Open Package Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (XmlException e) {\r
-            Log.err("Open Package Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (Exception e) {\r
-            Log.err("Open Package Surface Area " + path, "Invalid file type");\r
-            return;\r
-        }\r
-        Identification id = new Identification(spd.getSpdHeader().getPackageName(), spd.getSpdHeader().getGuidValue(),\r
-                                               spd.getSpdHeader().getVersion(), path);\r
-        //\r
-        // To judge if the package existed in vPackageList\r
-        // If not, add it to vPackageList\r
-        //\r
-        boolean isFind = false;\r
-        for (int index = 0; index < vPackageList.size(); index++) {\r
-            if (vPackageList.elementAt(index).equals(id)) {\r
-                isFind = true;\r
-                break;\r
-            }\r
-        }\r
-        if (!isFind) {\r
+        PackageIdentification id = GlobalData.openingPackageList.getIdByPath(path);\r
+        if (id == null) {\r
             //\r
-            // The module is not in existing packages\r
+            // The package is not in current workspace\r
             //\r
-            Log.err("The package hasn't been added to current workspace!");\r
+            Log.wrn("Open Package", "The package has not been installed in the current workspace!");\r
             return;\r
         }\r
 \r
@@ -2343,11 +2339,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         // Make the node selected\r
         //\r
         iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnPackageDescription, id,\r
-                                                                     IDefaultMutableTreeNode.SPD_HEADER)));\r
+                                                                     IDefaultMutableTreeNode.PACKAGE)));\r
         //\r
         // Update opening package list information\r
         //\r
-        if (!openingPackageList.existsPackage(id)) {\r
+        if (!GlobalData.openingPackageList.getPackageOpen(id)) {\r
             //\r
             // Insert sub node of module\r
             //\r
@@ -2357,14 +2353,18 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             // Update opening module list\r
             //\r
-            openingPackageList.insertToOpeningPackageList(id, spd);\r
-            openingPackageList.setTreePathById(id, iTree.getSelectionPath());\r
+            GlobalData.openingPackageList.setPackageOpen(id, true);\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
         //\r
-        showPackageElement(IDefaultMutableTreeNode.SPD_HEADER, openingPackageList.getOpeningPackageById(id));\r
-        this.currentOpeningPackageIndex = openingPackageList.findIndexOfListById(id);\r
+        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnPackageDescription, id,\r
+                                                                     IDefaultMutableTreeNode.SPD_HEADER)));\r
+        showPackageElement(IDefaultMutableTreeNode.SPD_HEADER, GlobalData.openingPackageList.getOpeningPackageById(id));\r
+        this.currentOpeningPackageIndex = GlobalData.openingPackageList.findIndexOfListById(id);\r
     }\r
 \r
     /**\r
@@ -2374,38 +2374,12 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void openPlatform(String path) {\r
-        PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd = null;\r
-        try {\r
-            fpd = OpenFile.openFpdFile(path);\r
-        } catch (IOException e) {\r
-            Log.err("Open Platform Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (XmlException e) {\r
-            Log.err("Open Platform Surface Area " + path, e.getMessage());\r
-            return;\r
-        } catch (Exception e) {\r
-            Log.err("Open Platform Surface Area " + path, "Invalid file type");\r
-            return;\r
-        }\r
-        Identification id = new Identification(fpd.getPlatformHeader().getPlatformName(), fpd.getPlatformHeader()\r
-                                                                                             .getGuidValue(),\r
-                                               fpd.getPlatformHeader().getVersion(), path);\r
-        //\r
-        // To judge if the platform existed in vPlatformList\r
-        // If not, add it to vPlatformList\r
-        //\r
-        boolean isFind = false;\r
-        for (int index = 0; index < vPlatformList.size(); index++) {\r
-            if (vPlatformList.elementAt(index).equals(id)) {\r
-                isFind = true;\r
-                break;\r
-            }\r
-        }\r
-        if (!isFind) {\r
+        PlatformIdentification id = GlobalData.openingPlatformList.getIdByPath(path);\r
+        if (id == null) {\r
             //\r
-            // The module is not in existing packages\r
+            // The platform is not in current workspace\r
             //\r
-            Log.err("The platform hasn't been added to current workspace!");\r
+            Log.wrn("Open Platform", "The platform has not been installed in the current workspace!");\r
             return;\r
         }\r
 \r
@@ -2413,11 +2387,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         // Make the node selected\r
         //\r
         iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnPlatformDescription, id,\r
-                                                                     IDefaultMutableTreeNode.FPD_PLATFORMHEADER)));\r
+                                                                     IDefaultMutableTreeNode.PLATFORM)));\r
         //\r
         // Update opening package list information\r
         //\r
-        if (!openingPlatformList.existsPlatform(id)) {\r
+        if (!GlobalData.openingPlatformList.getPlatformOpen(id)) {\r
             //\r
             // Insert sub node of module\r
             //\r
@@ -2427,14 +2401,19 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             // Update opening module list\r
             //\r
-            openingPlatformList.insertToOpeningPlatformList(id, fpd);\r
-            openingPlatformList.setTreePathById(id, iTree.getSelectionPath());\r
+            GlobalData.openingPlatformList.setPlatformOpen(id, true);\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
         //\r
-        showPlatformElement(IDefaultMutableTreeNode.FPD_PLATFORMHEADER, openingPlatformList.getOpeningPlatformById(id));\r
-        this.currentOpeningPlatformIndex = openingPlatformList.findIndexOfListById(id);\r
+        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnPlatformDescription, id,\r
+                                                                     IDefaultMutableTreeNode.FPD_PLATFORMHEADER)));\r
+        showPlatformElement(IDefaultMutableTreeNode.FPD_PLATFORMHEADER,\r
+                            GlobalData.openingPlatformList.getOpeningPlatformById(id));\r
+        this.currentOpeningPlatformIndex = GlobalData.openingPlatformList.findIndexOfListById(id);\r
     }\r
 \r
     /**\r
@@ -2442,7 +2421,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void saveModule(int index) {\r
-        OpeningModuleType omt = openingModuleList.getOpeningModuleByIndex(index);\r
+        OpeningModuleType omt = GlobalData.openingModuleList.getOpeningModuleByIndex(index);\r
         if (omt.isNew()) {\r
             if (getNewFilePath(DataType.MODULE_SURFACE_AREA_EXT) != JFileChooser.APPROVE_OPTION) {\r
                 return;\r
@@ -2450,9 +2429,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
         try {\r
             SaveFile.saveMsaFile(omt.getId().getPath(), omt.getXmlMsa());\r
-            openingModuleList.setNew(omt.getId(), false);\r
-            openingModuleList.setModuleSaved(omt.getId(), true);\r
+            GlobalData.openingModuleList.setNew(omt.getId(), false);\r
+            GlobalData.openingModuleList.setModuleSaved(omt.getId(), true);\r
         } catch (Exception e) {\r
+            Log.wrn("Save Module", e.getMessage());\r
             Log.err("Save Module", e.getMessage());\r
         }\r
     }\r
@@ -2462,7 +2442,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void savePackage(int index) {\r
-        OpeningPackageType opt = openingPackageList.getOpeningPackageByIndex(index);\r
+        OpeningPackageType opt = GlobalData.openingPackageList.getOpeningPackageByIndex(index);\r
         if (opt.isNew()) {\r
             if (getNewFilePath(DataType.PACKAGE_SURFACE_AREA_EXT) != JFileChooser.APPROVE_OPTION) {\r
                 return;\r
@@ -2470,9 +2450,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
         try {\r
             SaveFile.saveSpdFile(opt.getId().getPath(), opt.getXmlSpd());\r
-            openingPackageList.setNew(opt.getId(), false);\r
-            openingPackageList.setPackageSaved(opt.getId(), true);\r
+            GlobalData.openingPackageList.setNew(opt.getId(), false);\r
+            GlobalData.openingPackageList.setPackageSaved(opt.getId(), true);\r
         } catch (Exception e) {\r
+            Log.wrn("Save Package", e.getMessage());\r
             Log.err("Save Package", e.getMessage());\r
         }\r
     }\r
@@ -2482,7 +2463,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void savePlatform(int index) {\r
-        OpeningPlatformType opt = openingPlatformList.getOpeningPlatformByIndex(index);\r
+        OpeningPlatformType opt = GlobalData.openingPlatformList.getOpeningPlatformByIndex(index);\r
         if (opt.isNew()) {\r
             if (getNewFilePath(DataType.PACKAGE_SURFACE_AREA_EXT) != JFileChooser.APPROVE_OPTION) {\r
                 return;\r
@@ -2490,33 +2471,21 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
         try {\r
             SaveFile.saveFpdFile(opt.getId().getPath(), opt.getXmlFpd());\r
-            openingPlatformList.setNew(opt.getId(), false);\r
-            openingPlatformList.setPlatformSaved(opt.getId(), true);\r
+            GlobalData.openingPlatformList.setNew(opt.getId(), false);\r
+            GlobalData.openingPlatformList.setPlatformSaved(opt.getId(), true);\r
         } catch (Exception e) {\r
+            Log.wrn("Save Package", e.getMessage());\r
             Log.err("Save Package", e.getMessage());\r
         }\r
     }\r
 \r
-    public void componentHidden(ComponentEvent arg0) {\r
-        // TODO Auto-generated method stub\r
-\r
-    }\r
-\r
-    public void componentMoved(ComponentEvent arg0) {\r
-        // TODO Auto-generated method stub\r
-\r
-    }\r
-\r
     public void componentResized(ComponentEvent arg0) {\r
-        this.jSplitPane.setSize(this.getWidth() - DataType.MAIN_FRAME_WIDTH_SPACING,\r
-                                this.getHeight() - DataType.MAIN_FRAME_HEIGHT_SPACING);\r
-        this.jSplitPane.validate();\r
-        resizeDesktopPanel();\r
-    }\r
-\r
-    public void componentShown(ComponentEvent arg0) {\r
-        // TODO Auto-generated method stub\r
-\r
+        if (this.jSplitPane != null) {\r
+            this.jSplitPane.setSize(this.getWidth() - DataType.MAIN_FRAME_WIDTH_SPACING,\r
+                                    this.getHeight() - DataType.MAIN_FRAME_HEIGHT_SPACING);\r
+            this.jSplitPane.validate();\r
+            resizeDesktopPanel();\r
+        }\r
     }\r
 \r
     /**\r
@@ -2540,61 +2509,136 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         }\r
     }\r
 \r
-    private void getCompontentsFromFrameworkDatabase() {\r
-        this.vModuleList = wt.getAllModules();\r
-        this.vPackageList = wt.getAllPackages();\r
-        this.vPlatformList = wt.getAllPlatforms();\r
-    }\r
-\r
-    private void insertModuleTreeNode(Identification id) {\r
-        iTree.addNode(new IDefaultMutableTreeNode("Module Definitions", IDefaultMutableTreeNode.MSA_MODULEDEFINITIONS,\r
-                                                  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("Source Files", IDefaultMutableTreeNode.MSA_SOURCEFILES, 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
-        iTree.addNode(new IDefaultMutableTreeNode("Externs", IDefaultMutableTreeNode.MSA_EXTERNS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("PcdCoded", IDefaultMutableTreeNode.MSA_PCDS, true, id));\r
+                                                  IDefaultMutableTreeNode.MSA_LIBRARYCLASSDEFINITIONS, true, id,\r
+                                                  belongNode));\r
+        iTree\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 Definitions",\r
-                                                  IDefaultMutableTreeNode.SPD_PACKAGEDEFINITIONS, 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
-        iTree.addNode(new IDefaultMutableTreeNode("Package Headers", IDefaultMutableTreeNode.SPD_PACKAGEHEADERS, true,\r
-                                                  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, 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, idmtTemp));\r
         iTree.addNode(new IDefaultMutableTreeNode("Platform Definitions",\r
-                                                  IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Flash", 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
-        iTree.addNode(new IDefaultMutableTreeNode("Pcd Dynamic Build Declarations",\r
-                                                  IDefaultMutableTreeNode.FPD_PCDDYNAMICBUILDDECLARATIONS, true, id));\r
-        iTree.addNode(new IDefaultMutableTreeNode("Build Options", IDefaultMutableTreeNode.FPD_BUILDOPTIONS, true, id));\r
+                                                  true, id, idmtTemp));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Dynamic PCD Build Declarations",\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
@@ -2602,50 +2646,81 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      \r
      **/\r
     private void doubleClickModuleTreeNode() {\r
-        Identification id = iTree.getSelectNode().getId();\r
-        int intCategory = iTree.getSelectCategory();\r
+        Identification id = null;\r
+        int intCategory = -1;\r
         String path = null;\r
-        //          \r
-        // If the node is not opened yet\r
-        // Insert top level elements first\r
-        //\r
-        //if (intCategory == IDefaultMutableTreeNode.MSA_HEADER || intCategory == IDefaultMutableTreeNode.SPD_MSAFILES) {\r
-        if (intCategory == IDefaultMutableTreeNode.MSA_HEADER) {\r
+        IDefaultMutableTreeNode belongNode = null;\r
+\r
+        try {\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
-            if (intCategory == IDefaultMutableTreeNode.MSA_HEADER) {\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
                 path = iTree.getSelectNode().getId().getPath();\r
+                openModule(path, belongNode);\r
+                return;\r
             }\r
-            if (intCategory == IDefaultMutableTreeNode.SPD_MSAFILES) {\r
+            if (intCategory == IDefaultMutableTreeNode.PACKAGE) {\r
                 path = iTree.getSelectNode().getId().getPath();\r
+                openPackage(path);\r
+                return;\r
             }\r
-            openModule(path);\r
-            return;\r
-        }\r
-        if (intCategory == IDefaultMutableTreeNode.SPD_HEADER) {\r
-            path = iTree.getSelectNode().getId().getPath();\r
-            openPackage(path);\r
-            return;\r
-        }\r
-        if (intCategory == IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
-            path = iTree.getSelectNode().getId().getPath();\r
-            openPlatform(path);\r
-            return;\r
-        }\r
-        //\r
-        // Show editor panel\r
-        //\r
-        if (intCategory >= IDefaultMutableTreeNode.MSA_HEADER && intCategory < IDefaultMutableTreeNode.SPD_HEADER) {\r
-            showModuleElement(intCategory, openingModuleList.getOpeningModuleById(id));\r
-            this.currentOpeningModuleIndex = openingModuleList.findIndexOfListById(id);\r
-        }\r
-        if (intCategory >= IDefaultMutableTreeNode.SPD_HEADER\r
-            && intCategory < IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
-            showPackageElement(intCategory, openingPackageList.getOpeningPackageById(id));\r
-            this.currentOpeningPackageIndex = openingPackageList.findIndexOfListById(id);\r
-        }\r
-        if (intCategory >= IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
-            showPlatformElement(intCategory, openingPlatformList.getOpeningPlatformById(id));\r
-            this.currentOpeningPlatformIndex = openingPlatformList.findIndexOfListById(id);\r
+            if (intCategory == IDefaultMutableTreeNode.PLATFORM) {\r
+                path = iTree.getSelectNode().getId().getPath();\r
+                openPlatform(path);\r
+                return;\r
+            }\r
+\r
+            //\r
+            // Show editor panel\r
+            //\r
+            if (intCategory >= IDefaultMutableTreeNode.MSA_HEADER && intCategory < IDefaultMutableTreeNode.SPD_HEADER) {\r
+                showModuleElement(intCategory,\r
+                                  GlobalData.openingModuleList.getOpeningModuleById(new ModuleIdentification(id)));\r
+                this.currentOpeningModuleIndex = GlobalData.openingModuleList\r
+                                                                             .findIndexOfListById(new ModuleIdentification(\r
+                                                                                                                           id));\r
+            }\r
+            if (intCategory >= IDefaultMutableTreeNode.SPD_HEADER\r
+                && intCategory < IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
+                showPackageElement(intCategory,\r
+                                   GlobalData.openingPackageList.getOpeningPackageById(new PackageIdentification(id)));\r
+                this.currentOpeningPackageIndex = GlobalData.openingPackageList\r
+                                                                               .findIndexOfListById(new PackageIdentification(\r
+                                                                                                                              id));\r
+            }\r
+            if (intCategory >= IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
+                showPlatformElement(\r
+                                    intCategory,\r
+                                    GlobalData.openingPlatformList\r
+                                                                  .getOpeningPlatformById(new PlatformIdentification(id)));\r
+                this.currentOpeningPlatformIndex = GlobalData.openingPlatformList\r
+                                                                                 .findIndexOfListById(new PlatformIdentification(\r
+                                                                                                                                 id));\r
+            }\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
     }\r
 \r
@@ -2704,10 +2779,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             SpdHeader frmSpdHeader = new SpdHeader(spd);\r
             getJDesktopPanePackage().add(frmSpdHeader, 1);\r
             break;\r
-        case IDefaultMutableTreeNode.SPD_PACKAGEDEFINITIONS:\r
-            SpdPackageDefinitions frmSpdPackageDefinitions = new SpdPackageDefinitions(spd);\r
-            getJDesktopPanePackage().add(frmSpdPackageDefinitions, 1);\r
-            break;\r
         case IDefaultMutableTreeNode.SPD_LIBRARYCLASSDECLARATIONS:\r
             SpdLibClassDecls frmSlcd = new SpdLibClassDecls(spd);\r
             getJDesktopPanePackage().add(frmSlcd, 1);\r
@@ -2755,10 +2826,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             MsaHeader frmMsaHeader = new MsaHeader(msa);\r
             getJDesktopPaneModule().add(frmMsaHeader, 1);\r
             break;\r
-        case IDefaultMutableTreeNode.MSA_MODULEDEFINITIONS:\r
-            ModuleDefinitions frmMd = new ModuleDefinitions(msa);\r
-            getJDesktopPaneModule().add(frmMd, 1);\r
-            break;\r
         case IDefaultMutableTreeNode.MSA_LIBRARYCLASSDEFINITIONS:\r
             ModuleLibraryClassDefinitions frmMlcd = new ModuleLibraryClassDefinitions(msa);\r
             getJDesktopPaneModule().add(frmMlcd, 1);\r
@@ -2854,26 +2921,47 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                 smb.dispose();\r
                 return;\r
             } else if (result == DataType.RETURN_TYPE_OK) {\r
-                PackageSurfaceAreaDocument.PackageSurfaceArea psa = null;\r
-                if (this.openingPackageList.existsPackage(smb.getMid().getPackageId())) {\r
-                    psa = openingPackageList.getPackageSurfaceAreaFromId(smb.getMid().getPackageId());\r
-                }\r
-                try {\r
-                    wt.addModuleToPackage(smb.getMid(), psa);\r
-                } catch (IOException e) {\r
-                    Log.err("Upddate MsaFiles of Package", e.getMessage());\r
-                    e.printStackTrace();\r
-                    return;\r
-                } catch (XmlException e) {\r
-                    Log.err("Upddate MsaFiles of Package", e.getMessage());\r
-                    e.printStackTrace();\r
-                    return;\r
-                } catch (Exception e) {\r
-                    Log.err("Upddate MsaFiles of Package", e.getMessage());\r
-                    e.printStackTrace();\r
-                    return;\r
+                ModuleIdentification mid = smb.getMid();\r
+                if (mid != null) {\r
+                    //\r
+                    // Update package of workspace first\r
+                    //\r
+                    PackageSurfaceAreaDocument.PackageSurfaceArea psa = null;\r
+                    if (GlobalData.openingPackageList.existsPackage(mid.getPackageId())) {\r
+                        psa = GlobalData.openingPackageList.getPackageSurfaceAreaFromId(mid.getPackageId());\r
+                    }\r
+                    try {\r
+                        wt.addModuleToPackage(mid, psa);\r
+                    } catch (IOException e) {\r
+                        Log.wrn("Update MsaFiles in Package", e.getMessage());\r
+                        Log.err("Update MsaFiles in Package", e.getMessage());\r
+                        return;\r
+                    } catch (XmlException e) {\r
+                        Log.wrn("Update MsaFiles in Package", e.getMessage());\r
+                        Log.err("Update MsaFiles in Package", e.getMessage());\r
+                        return;\r
+                    } catch (Exception e) {\r
+                        Log.wrn("Update MsaFiles in Package", e.getMessage());\r
+                        Log.err("Update MsaFiles in Package", e.getMessage());\r
+                        return;\r
+                    }\r
+\r
+                    //\r
+                    // Update Global Data\r
+                    //\r
+                    GlobalData.openingModuleList.insertToOpeningModuleList(mid, smb.getMsa());\r
+                    GlobalData.vModuleList.addElement(mid);\r
+\r
+                    //\r
+                    // Create new node on the tree\r
+                    //\r
+                    addModuleToTree(mid);\r
+\r
+                    //\r
+                    // Open the node\r
+                    //\r
+                    this.openModule(mid.getPath(), this.dmtnModuleDescription);\r
                 }\r
-                this.openModule(smb.getMid().getPath(), smb.getMid());\r
             }\r
         } else if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
             //\r
@@ -2887,21 +2975,38 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                 smb.dispose();\r
                 return;\r
             } else if (result == DataType.RETURN_TYPE_OK) {\r
-                try {\r
-                    wt.addPackageToDatabase(smb.getPid());\r
-                } catch (Exception e) {\r
-                    // TODO Auto-generated catch block\r
-                    e.printStackTrace();\r
+                PackageIdentification pid = smb.getPid();\r
+                if (pid != null) {\r
+                    try {\r
+                        wt.addPackageToDatabase(smb.getPid());\r
+                    } catch (Exception e) {\r
+                        Log.err("addPackageToDatabase", e.getMessage());\r
+                    }\r
+\r
+                    //\r
+                    // Update Global Data\r
+                    //\r
+                    GlobalData.openingPackageList.insertToOpeningPackageList(pid, smb.getSpd());\r
+                    GlobalData.vPackageList.addElement(pid);\r
+\r
+                    //\r
+                    // Add to Module Description node\r
+                    //\r
+                    IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(pid.getName(),\r
+                                                                               IDefaultMutableTreeNode.MODULE_PACKAGE,\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
+                                                       this.dmtnPackageDescription);\r
+                    iTree.addNode(dmtnPackageDescription, node);\r
+\r
+                    this.openPackage(pid.getPath());\r
                 }\r
-                vPackageList.addElement(smb.getPid());\r
-                //\r
-                // Add new SpdHeader node to the tree\r
-                //\r
-                IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vPackageList.lastElement().getName(),\r
-                                                                           IDefaultMutableTreeNode.SPD_HEADER, true,\r
-                                                                           vPackageList.lastElement());\r
-                iTree.addNode(dmtnPackageDescription, node);\r
-                this.openPackage(smb.getPid().getPath());\r
             }\r
         } else if (result == DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA) {\r
             //\r
@@ -2915,21 +3020,28 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                 smb.dispose();\r
                 return;\r
             } else if (result == DataType.RETURN_TYPE_OK) {\r
-                try {\r
-                    wt.addPlatformToDatabase(smb.getFid());\r
-                } catch (Exception e) {\r
-                    // TODO Auto-generated catch block\r
-                    e.printStackTrace();\r
+                PlatformIdentification fid = smb.getFid();\r
+                if (fid != null) {\r
+                    try {\r
+                        wt.addPlatformToDatabase(fid);\r
+                    } catch (Exception e) {\r
+                        Log.err("addPlatformToDatabase", e.getMessage());\r
+                    }\r
+\r
+                    //\r
+                    // Update global data\r
+                    //\r
+                    GlobalData.openingPlatformList.insertToOpeningPlatformList(fid, smb.getFpd());\r
+                    GlobalData.vPlatformList.addElement(fid);\r
+                    //\r
+                    // Add new SpdHeader node to the tree\r
+                    //\r
+                    IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(fid.getName(),\r
+                                                                               IDefaultMutableTreeNode.PLATFORM, true,\r
+                                                                               fid, this.dmtnPlatformDescription);\r
+                    iTree.addNode(dmtnPlatformDescription, node);\r
+                    this.openPlatform(fid.getPath());\r
                 }\r
-                vPlatformList.addElement(smb.getFid());\r
-                //\r
-                // Add new SpdHeader node to the tree\r
-                //\r
-                IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vPlatformList.lastElement().getName(),\r
-                                                                           IDefaultMutableTreeNode.FPD_PLATFORMHEADER,\r
-                                                                           true, vPlatformList.lastElement());\r
-                iTree.addNode(dmtnPlatformDescription, node);\r
-                this.openPlatform(smb.getFid().getPath());\r
             }\r
         }\r
     }\r
@@ -2955,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
@@ -2969,13 +3081,14 @@ 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
         //\r
         case 0:\r
             if (this.currentOpeningModuleIndex > -1) {\r
-                if (!openingModuleList.getModuleSaved(currentOpeningModuleIndex)) {\r
+                if (!GlobalData.openingModuleList.getModuleSaved(currentOpeningModuleIndex)) {\r
                     int result = showSaveDialog();\r
                     if (result == JOptionPane.YES_OPTION) {\r
                         this.saveAll();\r
@@ -2987,18 +3100,30 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree.removeNodeChildrenByPath(openingModuleList.getTreePathByIndex(currentOpeningModuleIndex));\r
-                this.openingModuleList.removeFromOpeningModuleListByIndex(this.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
             }\r
             break;\r
         //\r
         // Current is package\r
-        //    \r
+        //\r
         case 1:\r
             if (this.currentOpeningPackageIndex > -1) {\r
-                if (!openingPackageList.getPackageSaved(currentOpeningPackageIndex)) {\r
+                if (!GlobalData.openingPackageList.getPackageSaved(currentOpeningPackageIndex)) {\r
                     int result = showSaveDialog();\r
                     if (result == JOptionPane.YES_OPTION) {\r
                         this.saveAll();\r
@@ -3010,8 +3135,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree.removeNodeChildrenByPath(openingPackageList.getTreePathByIndex(currentOpeningPackageIndex));\r
-                this.openingPackageList.removeFromOpeningPackageListByIndex(this.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
             }\r
@@ -3021,7 +3158,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         case 2:\r
             if (this.currentOpeningPlatformIndex > -1) {\r
-                if (!openingPlatformList.getPlatformSaved(currentOpeningPlatformIndex)) {\r
+                if (!GlobalData.openingPlatformList.getPlatformSaved(currentOpeningPlatformIndex)) {\r
                     int result = showSaveDialog();\r
                     if (result == JOptionPane.YES_OPTION) {\r
                         this.saveAll();\r
@@ -3033,8 +3170,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                         return;\r
                     }\r
                 }\r
-                iTree.removeNodeChildrenByPath(openingPlatformList.getTreePathByIndex(currentOpeningPlatformIndex));\r
-                this.openingPlatformList.removeFromOpeningPlatformListByIndex(this.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
             }\r
@@ -3048,24 +3197,33 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private void closeAll() {\r
         int result = -1;\r
-        if (!openingModuleList.isSaved() || !openingPackageList.isSaved() || !openingPlatformList.isSaved()) {\r
+        if (!GlobalData.openingModuleList.isSaved() || !GlobalData.openingPackageList.isSaved()\r
+            || !GlobalData.openingPlatformList.isSaved()) {\r
             result = showSaveDialog();\r
         }\r
         if (result == JOptionPane.YES_OPTION) {\r
             this.saveAll();\r
         }\r
         if (result == JOptionPane.NO_OPTION) {\r
+            //\r
             // Do nothing\r
+            //\r
         }\r
         if (result == JOptionPane.CANCEL_OPTION) {\r
             return;\r
         }\r
         this.cleanDesktopPane();\r
-        this.getCompontentsFromFrameworkDatabase();\r
-        openingModuleList.removeAllFromOpeningModuleList();\r
-        openingPackageList.removeAllFromOpeningPackageList();\r
-        openingPlatformList.removeAllFromOpeningPlatformList();\r
-        this.makeEmptyTree();\r
+        GlobalData.openingModuleList.closeAll();\r
+        GlobalData.openingPackageList.closeAll();\r
+        GlobalData.openingPlatformList.closeAll();\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
@@ -3100,8 +3258,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Save all modules\r
         //\r
-        for (int index = 0; index < openingModuleList.size(); index++) {\r
-            if (!openingModuleList.getModuleSaved(index)) {\r
+        for (int index = 0; index < GlobalData.openingModuleList.size(); index++) {\r
+            if (!GlobalData.openingModuleList.getModuleSaved(index)) {\r
                 saveModule(index);\r
             }\r
         }\r
@@ -3109,8 +3267,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Save all packages\r
         //\r
-        for (int index = 0; index < openingPackageList.size(); index++) {\r
-            if (!openingPackageList.getPackageSaved(index)) {\r
+        for (int index = 0; index < GlobalData.openingPackageList.size(); index++) {\r
+            if (!GlobalData.openingPackageList.getPackageSaved(index)) {\r
                 savePackage(index);\r
             }\r
         }\r
@@ -3118,8 +3276,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         //\r
         // Save all platforms\r
         //\r
-        for (int index = 0; index < openingPlatformList.size(); index++) {\r
-            if (!openingPlatformList.getPlatformSaved(index)) {\r
+        for (int index = 0; index < GlobalData.openingPlatformList.size(); index++) {\r
+            if (!GlobalData.openingPlatformList.getPlatformSaved(index)) {\r
                 savePlatform(index);\r
             }\r
         }\r
@@ -3131,7 +3289,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      **/\r
     private void exit() {\r
         int result = -1;\r
-        if (!openingModuleList.isSaved() || !openingPackageList.isSaved() || !openingPlatformList.isSaved()) {\r
+        if (!GlobalData.openingModuleList.isSaved() || !GlobalData.openingPackageList.isSaved()\r
+            || !GlobalData.openingPlatformList.isSaved()) {\r
             result = showSaveDialog();\r
         }\r
         if (result == JOptionPane.YES_OPTION) {\r
@@ -3147,6 +3306,60 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         System.exit(0);\r
     }\r
 \r
+    /**\r
+     To find all defined PPIs in workspace\r
+     \r
+     **/\r
+    private void findPpi() {\r
+        FindResult fr = FindResult.getInstance("PPI");\r
+        fr.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     To find all defined PROTOCOLs in workspace\r
+     \r
+     **/\r
+    private void findProtocol() {\r
+        FindResult fr = FindResult.getInstance("PROTOCOL");\r
+        fr.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     To find all defined PROTOCOLs in workspace\r
+     \r
+     **/\r
+    private void findGuid() {\r
+        FindResult fr = FindResult.getInstance("GUID");\r
+        fr.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     To find all defined PROTOCOLs in workspace\r
+     \r
+     **/\r
+    private void findPcd() {\r
+        FindResult fr = FindResult.getInstance("PCD");\r
+        fr.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     To find all defined Library Classes in workspace\r
+     \r
+     **/\r
+    private void findLibraryClass() {\r
+        FindResult fr = FindResult.getInstance("LIBRARY_CLASS");\r
+        fr.setVisible(true);\r
+    }\r
+\r
+    /**\r
+     To find all defined Library Instances in workspace\r
+     \r
+     **/\r
+    private void findLibraryInstance() {\r
+        FindResult fr = FindResult.getInstance("LIBRARY_INSTANCE");\r
+        fr.setVisible(true);\r
+    }\r
+\r
     /**\r
      Switch current workspace to others\r
      \r
@@ -3160,13 +3373,86 @@ 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
+            // Refrash the tree\r
+            //\r
+            this.refresh();\r
         }\r
         sw.dispose();\r
     }\r
 \r
+    /**\r
+     To create a Far file from current workspace\r
+     \r
+     **/\r
+    private void createFar() {\r
+        CreateStepOne cso = new CreateStepOne(this, true);\r
+        int result = cso.showDialog();\r
+        if (result == DataType.RETURN_TYPE_OK) {\r
+            String strReturn = "Far Creation Completed!";\r
+            JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION,\r
+                                          JOptionPane.INFORMATION_MESSAGE);\r
+        }\r
+        cso.dispose();\r
+    }\r
+\r
+    /**\r
+     To install a Far file to current workspace\r
+     \r
+     **/\r
+    private void installFar() {\r
+        InstallStepOne iso = new InstallStepOne(this, true);\r
+        int result = iso.showDialog();\r
+        if (result == DataType.RETURN_TYPE_OK) {\r
+            String strReturn = "<html>Far Installalation completed!<br>Refreshing the WORKSPACE!</html>";\r
+            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
+\r
+    /**\r
+     To remove a Far's items from current workspace\r
+     \r
+     **/\r
+    private void removeFar() {\r
+        DeleteStepOne dso = new DeleteStepOne(this, true);\r
+        int result = dso.showDialog();\r
+        if (result == DataType.RETURN_TYPE_OK) {\r
+            String strReturn = "<html>Far Deletion completed!<br>Refreshing the WORKSPACE!</html>";\r
+            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
+\r
+    /**\r
+     To update an existing Far file\r
+     \r
+     **/\r
+    private void updateFar() {\r
+        UpdateStepOne uso = new UpdateStepOne(this, true);\r
+        int result = uso.showDialog();\r
+        if (result == DataType.RETURN_TYPE_OK) {\r
+            String strReturn = "<html>Far Update completed!<br>Refreshing the WORKSPACE!</html>";\r
+            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
+\r
     /**\r
      Show Tool Chain Configuration Dialog to setup Tool Chain\r
      \r
@@ -3176,6 +3462,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         tcc.showDialog();\r
     }\r
 \r
+    private void configBuildPreferences() {\r
+        Preferences bt = Preferences.getInstance();\r
+        bt.showDialog();\r
+    }\r
+\r
     /**\r
      Clone selected item\r
      \r
@@ -3187,28 +3478,25 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         // Check if there is any item can be cloned\r
         //\r
         if (iTree.getSelectionPath() == null) {\r
-            Log.err("Please select a target to clone!");\r
+            Log.wrn("Clone", "Please select a target to clone!");\r
             return;\r
         }\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.err("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
@@ -3219,41 +3507,34 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             c.dispose();\r
         }\r
         if (result == DataType.RETURN_TYPE_WORKSPACE) {\r
-            Tools.showInformationMessage("Workspace Clone Finished");\r
+            Tools.showInformationMessage("Workspace Clone Completed!");\r
         }\r
         if (result == DataType.RETURN_TYPE_MODULE_SURFACE_AREA) {\r
-            Tools.showInformationMessage("Module Surface Area Clone Finished");\r
-            vModuleList.addElement(c.getMid());\r
-            //\r
-            // Add new MsaHeader node to the tree\r
-            //\r
-            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vModuleList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.MSA_HEADER, true,\r
-                                                                       vModuleList.lastElement());\r
-            iTree.addNode(dmtnModuleDescription, node);\r
+            Tools.showInformationMessage("Module Clone Completed!");\r
+            addModuleToTree(c.getMid());\r
         }\r
         if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
-            Tools.showInformationMessage("Package Surface Area Clone Finished");\r
-            vPackageList.addElement(c.getPid());\r
+            Tools.showInformationMessage("Package Clone Completed!");\r
             //\r
             // Add new SpdHeader node to the tree\r
             //\r
-            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vPackageList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.SPD_HEADER, true,\r
-                                                                       vPackageList.lastElement());\r
-            iTree.addNode(dmtnPackageDescription, node);\r
+            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(GlobalData.vPackageList.lastElement().getName(),\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
-            vPlatformList.addElement(c.getFid());\r
             //\r
             // Add new SpdHeader node to the tree\r
             //\r
-            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vPlatformList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.FPD_PLATFORMHEADER,\r
-                                                                       true, vPlatformList.lastElement());\r
-            iTree.addNode(dmtnPlatformDescription, node);\r
-            //this.openPlatform(c.getFid().getPath());\r
+            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(\r
+                                                                       GlobalData.vPlatformList.lastElement().getName(),\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
@@ -3280,18 +3561,22 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //\r
             // Enable close/close all if some files are opened\r
             //\r
-            jMenuItemFileClose.setEnabled(openingModuleList.isOpend() || openingPackageList.isOpend()\r
-                                          || openingPlatformList.isOpend());\r
-            jMenuItemFileCloseAll.setEnabled(openingModuleList.isOpend() || openingPackageList.isOpend()\r
-                                             || openingPlatformList.isOpend());\r
+            jMenuItemFileClose.setEnabled(GlobalData.openingModuleList.isOpen()\r
+                                          || GlobalData.openingPackageList.isOpen()\r
+                                          || GlobalData.openingPlatformList.isOpen());\r
+            jMenuItemFileCloseAll.setEnabled(GlobalData.openingModuleList.isOpen()\r
+                                             || GlobalData.openingPackageList.isOpen()\r
+                                             || GlobalData.openingPlatformList.isOpen());\r
 \r
             //\r
             // Enable save/save all if some files are changed\r
             //\r
-            jMenuItemFileSave.setEnabled(!openingModuleList.isSaved() || !openingPackageList.isSaved()\r
-                                         || !openingPlatformList.isSaved());\r
-            jMenuItemFileSaveAll.setEnabled(!openingModuleList.isSaved() || !openingPackageList.isSaved()\r
-                                            || !openingPlatformList.isSaved());\r
+            jMenuItemFileSave.setEnabled(!GlobalData.openingModuleList.isSaved()\r
+                                         || !GlobalData.openingPackageList.isSaved()\r
+                                         || !GlobalData.openingPlatformList.isSaved());\r
+            jMenuItemFileSaveAll.setEnabled(!GlobalData.openingModuleList.isSaved()\r
+                                            || !GlobalData.openingPackageList.isSaved()\r
+                                            || !GlobalData.openingPlatformList.isSaved());\r
         }\r
 \r
         if (arg0.getSource() == jMenuTools) {\r
@@ -3302,8 +3587,12 @@ 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
                     jMenuItemToolsClone.setEnabled(false);\r
                 } else {\r
                     jMenuItemToolsClone.setEnabled(true);\r
@@ -3311,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