]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/deleteui/DeleteStepTwo.java
1. Support to Create/Update/Delete/Install far file
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / far / deleteui / DeleteStepTwo.java
diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/deleteui/DeleteStepTwo.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/deleteui/DeleteStepTwo.java
new file mode 100644 (file)
index 0000000..17a565d
--- /dev/null
@@ -0,0 +1,350 @@
+/** @file\r
+\r
+ Copyright (c) 2006, Intel Corporation\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution.  The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
+ **/\r
+\r
+package org.tianocore.frameworkwizard.far.deleteui;\r
+\r
+import java.awt.Dimension;\r
+import java.awt.Toolkit;\r
+import java.awt.event.MouseEvent;\r
+import java.awt.event.MouseListener;\r
+import java.io.File;\r
+import java.util.Iterator;\r
+import java.util.LinkedHashSet;\r
+import java.util.Set;\r
+import java.util.Vector;\r
+\r
+import javax.swing.ButtonGroup;\r
+import javax.swing.JPanel;\r
+import javax.swing.JButton;\r
+import javax.swing.JTextArea;\r
+import javax.swing.JLabel;\r
+import javax.swing.JRadioButton;\r
+\r
+import org.tianocore.frameworkwizard.common.DataType;\r
+import org.tianocore.frameworkwizard.common.ui.IDialog;\r
+import org.tianocore.frameworkwizard.far.FarIdentification;\r
+import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
+import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
+import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
+\r
+public class DeleteStepTwo extends IDialog implements MouseListener {\r
+\r
+    /**\r
+     * \r
+     */\r
+    private static final long serialVersionUID = -1333748185798962746L;\r
+\r
+    private JPanel jContentPane = null;\r
+\r
+    private JButton jButtonCancel = null;\r
+\r
+    private JButton jButtonFinish = null;\r
+\r
+    private JButton jButtonPrevious = null;\r
+\r
+    private JTextArea jTextArea = null;\r
+\r
+    private JLabel jLabel = null;\r
+\r
+    private JRadioButton jRadioButton = null;\r
+\r
+    private JRadioButton jRadioButton1 = null;\r
+\r
+    private DeleteStepOne stepOne = null;\r
+\r
+    public DeleteStepTwo(IDialog iDialog, boolean modal, DeleteStepOne stepOne) {\r
+        this(iDialog, modal);\r
+        this.stepOne = stepOne;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButtonCancel   \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonCancel() {\r
+        if (jButtonCancel == null) {\r
+            jButtonCancel = new JButton();\r
+            jButtonCancel.setBounds(new java.awt.Rectangle(570, 330, 90, 20));\r
+            jButtonCancel.setText("Cancel");\r
+            jButtonCancel.addMouseListener(this);\r
+        }\r
+        return jButtonCancel;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButtonFinish   \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonFinish() {\r
+        if (jButtonFinish == null) {\r
+            jButtonFinish = new JButton();\r
+            jButtonFinish.setBounds(new java.awt.Rectangle(470, 330, 90, 20));\r
+            jButtonFinish.setText("Finish");\r
+            jButtonFinish.addMouseListener(this);\r
+        }\r
+        return jButtonFinish;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButtonPrevious \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonPrevious() {\r
+        if (jButtonPrevious == null) {\r
+            jButtonPrevious = new JButton();\r
+            jButtonPrevious.setBounds(new java.awt.Rectangle(370, 330, 90, 20));\r
+            jButtonPrevious.setText("Previous");\r
+            jButtonPrevious.addMouseListener(this);\r
+        }\r
+        return jButtonPrevious;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextArea       \r
+     *         \r
+     * @return javax.swing.JTextArea   \r
+     */\r
+    private JTextArea getJTextArea() {\r
+        if (jTextArea == null) {\r
+            jTextArea = new JTextArea();\r
+            jTextArea.setBounds(new java.awt.Rectangle(30, 7, 642, 50));\r
+            jTextArea.setText("Step 2: Choose Delete Mode. \n");\r
+            jTextArea.append("Mode 1 only remove register information from framework database. \n");\r
+            jTextArea.append("Mode 2 also delete all files from file system. ");\r
+            jTextArea.setEditable(false);\r
+        }\r
+        return jTextArea;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jRadioButton    \r
+     *         \r
+     * @return javax.swing.JRadioButton        \r
+     */\r
+    private JRadioButton getJRadioButton() {\r
+        if (jRadioButton == null) {\r
+            jRadioButton = new JRadioButton();\r
+            jRadioButton.setBounds(new java.awt.Rectangle(100, 100, 340, 20));\r
+            jRadioButton.setSelected(true);\r
+            jRadioButton.setText("Mode 1: Only remove from framework database");\r
+        }\r
+        return jRadioButton;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jRadioButton1   \r
+     *         \r
+     * @return javax.swing.JRadioButton        \r
+     */\r
+    private JRadioButton getJRadioButton1() {\r
+        if (jRadioButton1 == null) {\r
+            jRadioButton1 = new JRadioButton();\r
+            jRadioButton1.setBounds(new java.awt.Rectangle(100, 140, 358, 20));\r
+            jRadioButton1.setText("Mode 2: Delete all related files from workspace");\r
+        }\r
+        return jRadioButton1;\r
+    }\r
+\r
+    /**\r
+     * This is the default constructor\r
+     */\r
+    public DeleteStepTwo(IDialog iDialog, boolean modal) {\r
+        super(iDialog, modal);\r
+        initialize();\r
+    }\r
+\r
+    /**\r
+     * This method initializes this\r
+     * \r
+     * @return void\r
+     */\r
+    private void initialize() {\r
+        this.setSize(700, 400);\r
+        this.setContentPane(getJContentPane());\r
+        this.setTitle("Delete Framework Archive(FAR) - Step 2: Choose Delete Mode");\r
+        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
+        this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);\r
+    }\r
+\r
+    /**\r
+     * This method initializes jContentPane\r
+     * \r
+     * @return javax.swing.JPanel\r
+     */\r
+    private JPanel getJContentPane() {\r
+        if (jContentPane == null) {\r
+            jLabel = new JLabel();\r
+            jLabel.setBounds(new java.awt.Rectangle(30, 70, 200, 20));\r
+            jLabel.setText("Select delete mode: ");\r
+            jContentPane = new JPanel();\r
+            jContentPane.setLayout(null);\r
+            jContentPane.add(getJButtonCancel(), null);\r
+            jContentPane.add(getJButtonFinish(), null);\r
+            jContentPane.add(getJButtonPrevious(), null);\r
+            jContentPane.add(getJTextArea(), null);\r
+            jContentPane.add(jLabel, null);\r
+            ButtonGroup group = new ButtonGroup();\r
+            group.add(getJRadioButton());\r
+            group.add(getJRadioButton1());\r
+            jContentPane.add(getJRadioButton(), null);\r
+            jContentPane.add(getJRadioButton1(), null);\r
+        }\r
+        return jContentPane;\r
+    }\r
+\r
+    public void mouseClicked(MouseEvent e) {\r
+        if (e.getSource() == jButtonCancel) {\r
+            this.setVisible(false);\r
+            this.dispose();\r
+        } else if (e.getSource() == jButtonFinish) {\r
+            FarIdentification far = stepOne.getSelecedFar();\r
+            WorkspaceTools wt = new WorkspaceTools();\r
+            //\r
+            // If remove all source files\r
+            //\r
+            if (jRadioButton1.isSelected()) {\r
+\r
+                Vector<PackageIdentification> removePackages = wt.getPackagesByFar(far);\r
+                Vector<PlatformIdentification> removePlatforms = wt.getPlatformsByFar(far);\r
+\r
+                Vector<PlatformIdentification> allPlatforms = wt.getAllPlatforms();\r
+                Set<File> allPlatformFiles = new LinkedHashSet<File>();\r
+\r
+                Iterator<PlatformIdentification> iter = allPlatforms.iterator();\r
+                while (iter.hasNext()) {\r
+                    allPlatformFiles.add(iter.next().getFpdFile());\r
+                }\r
+\r
+                //\r
+                // For all platforms, only remove its FPD file\r
+                //\r
+                Iterator<PlatformIdentification> platfomrIter = removePlatforms.iterator();\r
+                while (platfomrIter.hasNext()) {\r
+                    PlatformIdentification item = platfomrIter.next();\r
+                    allPlatformFiles.remove(item.getFpdFile());\r
+                    File parentDir = item.getFpdFile().getParentFile();\r
+                    item.getFpdFile().delete();\r
+                    //\r
+                    // Remove all empty parent dir\r
+                    //\r
+                    while (parentDir.listFiles().length == 0) {\r
+                        File tempFile = parentDir;\r
+                        parentDir = parentDir.getParentFile();\r
+                        tempFile.delete();\r
+                    }\r
+                }\r
+\r
+                //\r
+                // For all packages, remove all files. \r
+                // Exception FPD file still in DB\r
+                //\r
+\r
+                Iterator<PackageIdentification> packageIter = removePackages.iterator();\r
+                while (packageIter.hasNext()) {\r
+                    PackageIdentification item = packageIter.next();\r
+                    Set<File> deleteFiles = new LinkedHashSet<File>();\r
+                    recursiveDir(deleteFiles, item.getSpdFile().getParentFile(), allPlatformFiles);\r
+                    Iterator<File> iterDeleteFile = deleteFiles.iterator();\r
+                    while (iterDeleteFile.hasNext()) {\r
+                        deleteFiles(iterDeleteFile.next());\r
+                    }\r
+                    //\r
+                    // Remove all empty parent dir\r
+                    //\r
+                    File parentDir = item.getSpdFile().getParentFile();\r
+                    while (parentDir.listFiles().length == 0) {\r
+                        File tempFile = parentDir;\r
+                        parentDir = parentDir.getParentFile();\r
+                        tempFile.delete();\r
+                    }\r
+                }\r
+            }\r
+\r
+            //\r
+            // Update DB file\r
+            //\r
+            wt.removeFarFromDb(far);\r
+\r
+            this.setVisible(false);\r
+            this.stepOne.returnType = DataType.RETURN_TYPE_OK;\r
+            this.dispose();\r
+        } else if (e.getSource() == jButtonPrevious) {\r
+            this.setVisible(false);\r
+            stepOne.setVisible(true);\r
+        }\r
+    }\r
+\r
+    public void mousePressed(MouseEvent e) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    public void mouseReleased(MouseEvent e) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    public void mouseEntered(MouseEvent e) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    public void mouseExited(MouseEvent e) {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+    private void recursiveDir(Set<File> files, File dir, Set<File> platformFiles) {\r
+        File[] fileList = dir.listFiles();\r
+        for (int i = 0; i < fileList.length; i++) {\r
+            if (fileList[i].isFile()) {\r
+                if (!platformFiles.contains(fileList[i])) {\r
+                    files.add(fileList[i]);\r
+                }\r
+            } else {\r
+                if (isContain(fileList[i], platformFiles)) {\r
+                    recursiveDir(files, fileList[i], platformFiles);\r
+                } else {\r
+                    files.add(fileList[i]);\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    private void deleteFiles(File file) {\r
+        if (file.isDirectory()) {\r
+            File[] files = file.listFiles();\r
+            for (int i = 0; i < files.length; i++) {\r
+                deleteFiles(files[i]);\r
+            }\r
+        }\r
+        file.delete();\r
+    }\r
+\r
+    private boolean isContain(File dir, Set<File> platformFiles) {\r
+        Iterator<File> iter = platformFiles.iterator();\r
+        while (iter.hasNext()) {\r
+            File file = iter.next();\r
+            if (file.getPath().startsWith(dir.getPath())) {\r
+                //\r
+                // continue this FPD file\r
+                //\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+}\r