]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/Clone.java
1. Show source files' attributes when editing SourceFiles in msa
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / Clone.java
index baf03795ee463b5de41dbbb95f28c32e144a4037..016bada67873fd70cfc26aa65e39c6d58613ea7d 100644 (file)
@@ -17,6 +17,7 @@ package org.tianocore.frameworkwizard;
 import java.awt.event.ActionEvent;\r
 import java.io.File;\r
 import java.io.IOException;\r
+import java.math.BigInteger;\r
 import java.util.Vector;\r
 \r
 import javax.swing.JFileChooser;\r
@@ -36,14 +37,14 @@ import org.tianocore.frameworkwizard.common.DataType;
 import org.tianocore.frameworkwizard.common.DataValidation;\r
 import org.tianocore.frameworkwizard.common.FileOperation;\r
 import org.tianocore.frameworkwizard.common.IFileFilter;\r
-import org.tianocore.frameworkwizard.common.Identification;\r
 import org.tianocore.frameworkwizard.common.Log;\r
 import org.tianocore.frameworkwizard.common.OpenFile;\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.ui.IDialog;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
-import org.tianocore.frameworkwizard.module.Identification.ModuleIdentification;\r
+import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
 import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
 import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
 import org.tianocore.frameworkwizard.workspace.Workspace;\r
@@ -120,7 +121,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldType() {\r
         if (jTextFieldType == null) {\r
             jTextFieldType = new JTextField();\r
-            jTextFieldType.setBounds(new java.awt.Rectangle(160, 10, 320, 20));\r
+            jTextFieldType.setBounds(new java.awt.Rectangle(210, 10, 320, 20));\r
             jTextFieldType.setEditable(false);\r
         }\r
         return jTextFieldType;\r
@@ -134,7 +135,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldSource() {\r
         if (jTextFieldSource == null) {\r
             jTextFieldSource = new JTextField();\r
-            jTextFieldSource.setBounds(new java.awt.Rectangle(160, 35, 320, 20));\r
+            jTextFieldSource.setBounds(new java.awt.Rectangle(210, 35, 320, 20));\r
             jTextFieldSource.setEditable(false);\r
         }\r
         return jTextFieldSource;\r
@@ -148,7 +149,7 @@ public class Clone extends IDialog {
     private JButton getJButtonBrowse() {\r
         if (jButtonBrowse == null) {\r
             jButtonBrowse = new JButton();\r
-            jButtonBrowse.setBounds(new java.awt.Rectangle(395, 60, 85, 20));\r
+            jButtonBrowse.setBounds(new java.awt.Rectangle(445, 85, 85, 20));\r
             jButtonBrowse.setText("Browse");\r
             jButtonBrowse.addActionListener(this);\r
         }\r
@@ -163,7 +164,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldFilePath() {\r
         if (jTextFieldFilePath == null) {\r
             jTextFieldFilePath = new JTextField();\r
-            jTextFieldFilePath.setBounds(new java.awt.Rectangle(160, 60, 230, 20));\r
+            jTextFieldFilePath.setBounds(new java.awt.Rectangle(210, 85, 230, 20));\r
         }\r
         return jTextFieldFilePath;\r
     }\r
@@ -176,7 +177,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldBaseName() {\r
         if (jTextFieldBaseName == null) {\r
             jTextFieldBaseName = new JTextField();\r
-            jTextFieldBaseName.setBounds(new java.awt.Rectangle(160, 110, 320, 20));\r
+            jTextFieldBaseName.setBounds(new java.awt.Rectangle(210, 110, 320, 20));\r
         }\r
         return jTextFieldBaseName;\r
     }\r
@@ -189,7 +190,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldGuid() {\r
         if (jTextFieldGuid == null) {\r
             jTextFieldGuid = new JTextField();\r
-            jTextFieldGuid.setBounds(new java.awt.Rectangle(160, 135, 230, 20));\r
+            jTextFieldGuid.setBounds(new java.awt.Rectangle(210, 135, 230, 20));\r
         }\r
         return jTextFieldGuid;\r
     }\r
@@ -202,7 +203,7 @@ public class Clone extends IDialog {
     private JTextField getJTextFieldVersion() {\r
         if (jTextFieldVersion == null) {\r
             jTextFieldVersion = new JTextField();\r
-            jTextFieldVersion.setBounds(new java.awt.Rectangle(160, 160, 320, 20));\r
+            jTextFieldVersion.setBounds(new java.awt.Rectangle(210, 160, 320, 20));\r
         }\r
         return jTextFieldVersion;\r
     }\r
@@ -215,7 +216,7 @@ public class Clone extends IDialog {
     private JButton getJButtonOk() {\r
         if (jButtonOk == null) {\r
             jButtonOk = new JButton();\r
-            jButtonOk.setBounds(new java.awt.Rectangle(235, 200, 90, 20));\r
+            jButtonOk.setBounds(new java.awt.Rectangle(285, 200, 90, 20));\r
             jButtonOk.setText("Ok");\r
             jButtonOk.addActionListener(this);\r
         }\r
@@ -230,7 +231,7 @@ public class Clone extends IDialog {
     private JButton getJButtonCancel() {\r
         if (jButtonCancel == null) {\r
             jButtonCancel = new JButton();\r
-            jButtonCancel.setBounds(new java.awt.Rectangle(355, 200, 90, 20));\r
+            jButtonCancel.setBounds(new java.awt.Rectangle(405, 200, 90, 20));\r
             jButtonCancel.setText("Cancel");\r
             jButtonCancel.addActionListener(this);\r
         }\r
@@ -245,7 +246,7 @@ public class Clone extends IDialog {
     private JButton getJButtonGenerateGuid() {\r
         if (jButtonGenerateGuid == null) {\r
             jButtonGenerateGuid = new JButton();\r
-            jButtonGenerateGuid.setBounds(new java.awt.Rectangle(395, 135, 85, 20));\r
+            jButtonGenerateGuid.setBounds(new java.awt.Rectangle(445, 135, 85, 20));\r
             jButtonGenerateGuid.setText("Gen");\r
             jButtonGenerateGuid.addActionListener(this);\r
         }\r
@@ -260,7 +261,7 @@ public class Clone extends IDialog {
     private JComboBox getJComboBoxExistingPackage() {\r
         if (jComboBoxExistingPackage == null) {\r
             jComboBoxExistingPackage = new JComboBox();\r
-            jComboBoxExistingPackage.setBounds(new java.awt.Rectangle(160, 85, 320, 20));\r
+            jComboBoxExistingPackage.setBounds(new java.awt.Rectangle(210, 60, 320, 20));\r
         }\r
         return jComboBoxExistingPackage;\r
     }\r
@@ -315,7 +316,7 @@ public class Clone extends IDialog {
      * @return void\r
      */\r
     private void init() {\r
-        this.setSize(493, 260);\r
+        this.setSize(550, 260);\r
         this.setContentPane(getJContentPane());\r
         this.setTitle("Clone");\r
         this.centerWindow();\r
@@ -330,20 +331,26 @@ public class Clone extends IDialog {
         init();\r
         if (mode == DataType.RETURN_TYPE_MODULE_SURFACE_AREA) {\r
             this.jTextFieldType.setText(DataType.MODULE_SURFACE_AREA);\r
-            this.jTextFieldSource.setText(oldId.getPath());\r
+            String s = oldId.getPath();\r
+            s = Tools.getRelativePath(s, Tools.getFilePathOnly(wt.getPackageIdByModuleId(oldId).getPath()));\r
+            this.jTextFieldSource.setText(Tools.convertPathToCurrentOsType(s));\r
             initExistingPackage();\r
-            this.jButtonBrowse.setEnabled(false);\r
+            this.jButtonBrowse.setVisible(false);\r
             this.jTextFieldFilePath.setToolTipText("Input module name here. For example, Application\\HelloWorld\\HelloWorld.msa");\r
-            this.jLabelDestinationFile.setText("Module Path\\Name");\r
+            this.jTextFieldFilePath.setSize(320, this.jTextFieldFilePath.getSize().height);\r
+            this.jLabelDestinationFile.setText("New Module Path and Filename");\r
         }\r
         if (mode == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
             this.jTextFieldType.setText(DataType.PACKAGE_SURFACE_AREA);\r
-            this.jTextFieldSource.setText(oldId.getPath());\r
+            String s = oldId.getPath();\r
+            s = Tools.getRelativePath(oldId.getPath(), Workspace.getCurrentWorkspace());\r
+            this.jTextFieldSource.setText(Tools.convertPathToCurrentOsType(s));\r
             this.jLabelBelong.setEnabled(false);\r
             this.jComboBoxExistingPackage.setEnabled(false);\r
-            this.jButtonBrowse.setEnabled(false);\r
+            this.jButtonBrowse.setVisible(false);\r
             this.jTextFieldFilePath.setToolTipText("Input package name here. For example, MdePkg\\MdePkg.fpd");\r
-            this.jLabelDestinationFile.setText("Package Path\\Name");\r
+            this.jTextFieldFilePath.setSize(320, this.jTextFieldFilePath.getSize().height);\r
+            this.jLabelDestinationFile.setText("New Package Path and Filename");\r
         }\r
         if (mode == DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA) {\r
             this.jTextFieldType.setText(DataType.PLATFORM_SURFACE_AREA);\r
@@ -351,7 +358,7 @@ public class Clone extends IDialog {
             this.jLabelBelong.setEnabled(false);\r
             this.jComboBoxExistingPackage.setEnabled(false);\r
             this.jTextFieldFilePath.setToolTipText("Select platform path here. For example, C:\\MyWorkspace\\EdkNt32Pkg\\Nt32.fpd");\r
-            this.jLabelDestinationFile.setText("New Platform path");\r
+            this.jLabelDestinationFile.setText("New Platform Path and Filename");\r
         }\r
         if (mode == DataType.RETURN_TYPE_WORKSPACE) {\r
             this.jTextFieldType.setText(DataType.WORKSPACE);\r
@@ -366,7 +373,7 @@ public class Clone extends IDialog {
             this.jLabelVersion.setEnabled(false);\r
             this.jTextFieldVersion.setEnabled(false);\r
             this.jTextFieldFilePath.setToolTipText("Input workspace path here. For example, C:\\MyWorkspace");\r
-            this.jLabelDestinationFile.setText("New Workspace path");\r
+            this.jLabelDestinationFile.setText("New Workspace Path");\r
         }\r
     }\r
 \r
@@ -378,29 +385,29 @@ public class Clone extends IDialog {
     private JPanel getJContentPane() {\r
         if (jContentPane == null) {\r
             jLabelBelong = new JLabel();\r
-            jLabelBelong.setBounds(new java.awt.Rectangle(15, 85, 140, 20));\r
+            jLabelBelong.setBounds(new java.awt.Rectangle(15, 60, 190, 20));\r
             jLabelBelong.setText("Clone to Package");\r
             jLabelVersion = new JLabel();\r
-            jLabelVersion.setBounds(new java.awt.Rectangle(15, 160, 140, 20));\r
+            jLabelVersion.setBounds(new java.awt.Rectangle(15, 160, 190, 20));\r
             jLabelVersion.setText("Version");\r
             jLabelGuid = new JLabel();\r
-            jLabelGuid.setBounds(new java.awt.Rectangle(15, 135, 140, 20));\r
+            jLabelGuid.setBounds(new java.awt.Rectangle(15, 135, 190, 20));\r
             jLabelGuid.setText("Guid");\r
             jLabelBaseName = new JLabel();\r
-            jLabelBaseName.setBounds(new java.awt.Rectangle(15, 110, 140, 20));\r
+            jLabelBaseName.setBounds(new java.awt.Rectangle(15, 110, 190, 20));\r
             jLabelBaseName.setText("Base Name");\r
             jLabelDestinationFile = new JLabel();\r
-            jLabelDestinationFile.setBounds(new java.awt.Rectangle(15, 60, 140, 20));\r
+            jLabelDestinationFile.setBounds(new java.awt.Rectangle(15, 85, 190, 20));\r
             jLabelDestinationFile.setText("Destination File Name");\r
             jLabelSource = new JLabel();\r
-            jLabelSource.setBounds(new java.awt.Rectangle(15, 35, 140, 20));\r
+            jLabelSource.setBounds(new java.awt.Rectangle(15, 35, 190, 20));\r
             jLabelSource.setText("Source");\r
             jLabelType = new JLabel();\r
-            jLabelType.setBounds(new java.awt.Rectangle(15, 10, 140, 20));\r
+            jLabelType.setBounds(new java.awt.Rectangle(15, 10, 190, 20));\r
             jLabelType.setText("Type");\r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(null);\r
-            jContentPane.setSize(new java.awt.Dimension(490, 227));\r
+            jContentPane.setSize(new java.awt.Dimension(540, 227));\r
             jContentPane.add(jLabelType, null);\r
             jContentPane.add(getJTextFieldType(), null);\r
             jContentPane.add(jLabelSource, null);\r
@@ -550,7 +557,7 @@ public class Clone extends IDialog {
      \r
      **/\r
     private boolean check() {\r
-        String src = this.jTextFieldSource.getText();\r
+        String src = this.oldId.getPath();\r
         String trg = this.jTextFieldFilePath.getText();\r
         File srcFile = new File(src);\r
         File trgFile = new File(trg);\r
@@ -589,6 +596,20 @@ public class Clone extends IDialog {
         // Check for Module\r
         //\r
         if (mode == DataType.RETURN_TYPE_MODULE_SURFACE_AREA) {\r
+//            if (trg.indexOf(DataType.DOS_FILE_SEPARATOR) == -1 && trg.indexOf(DataType.UNIX_FILE_SEPARATOR) == -1) {\r
+//                Log.err("The module name must include a path");\r
+//                return false;\r
+//            }\r
+            trg = this.getModulePath();\r
+            if (src.equals(trg)) {\r
+                Log.err("The source and destination couldn't be same");\r
+                return false;\r
+            }\r
+            trgFile = new File(trg);\r
+            if (trgFile.exists()) {\r
+                Log.err("The target module already exists");\r
+                return false;\r
+            }\r
             return checkId();\r
         }\r
 \r
@@ -633,8 +654,9 @@ public class Clone extends IDialog {
     }\r
 \r
     private void save() throws IOException, XmlException, Exception {\r
-        String src = this.jTextFieldSource.getText();\r
+        String src = this.oldId.getPath();\r
         String trg = this.jTextFieldFilePath.getText();\r
+        Vector<String> vFiles = new Vector<String>();\r
         \r
         //\r
         // Clone Workspace\r
@@ -659,16 +681,17 @@ public class Clone extends IDialog {
             //\r
             trg = getModulePath();\r
             newId.setPath(trg);\r
+            vFiles = wt.getAllModuleFilesPath(src);\r
             \r
             //\r
             // First copy all files to new directory\r
             //\r
-            FileOperation.copyFolder(Tools.getFilePathOnly(src), Tools.getFilePathOnly(trg));\r
-\r
-            //\r
-            // Delete old spd file\r
-            //\r
-            FileOperation.delFile(Tools.getFilePathOnly(trg) + DataType.FILE_SEPARATOR + Tools.getFileNameOnly(src));\r
+            FileOperation.copyFile(src, trg);\r
+            for (int index = 1; index < vFiles.size(); index++) {\r
+                String oldFile = vFiles.get(index);\r
+                String newFile = vFiles.get(index).replace(Tools.getFilePathOnly(src), Tools.getFilePathOnly(trg));\r
+                FileOperation.copyFile(oldFile, newFile);\r
+            }\r
 \r
             //\r
             // Create new msa file\r
@@ -721,16 +744,24 @@ public class Clone extends IDialog {
             //\r
             trg = this.getPackagePath();\r
             newId.setPath(trg);\r
+            vFiles = wt.getAllPakcageFilesPath(src);\r
+            \r
+            FileOperation.copyFile(src, trg);\r
+            for (int index = 1; index < vFiles.size(); index++) {\r
+                String oldFile = vFiles.get(index);\r
+                String newFile = vFiles.get(index).replace(Tools.getFilePathOnly(src), Tools.getFilePathOnly(trg));\r
+                FileOperation.copyFile(oldFile, newFile);\r
+            }\r
             \r
             //\r
             // First copy all files to new directory\r
             //\r
-            FileOperation.copyFolder(Tools.getFilePathOnly(src), Tools.getFilePathOnly(trg));\r
+            //FileOperation.copyFolder(Tools.getFilePathOnly(src), Tools.getFilePathOnly(trg));\r
 \r
             //\r
             // Delete old spd file\r
             //\r
-            FileOperation.delFile(Tools.getFilePathOnly(trg) + DataType.FILE_SEPARATOR + Tools.getFileNameOnly(src));\r
+            //FileOperation.delFile(Tools.getFilePathOnly(trg) + DataType.FILE_SEPARATOR + Tools.getFileNameOnly(src));\r
 \r
             //\r
             // Create new spd file\r
@@ -804,6 +835,7 @@ public class Clone extends IDialog {
 \r
             this.returnType = DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA;\r
         }\r
+        vFiles = null;\r
     }\r
     \r
     private String getSelectPackagePath() {\r
@@ -813,7 +845,7 @@ public class Clone extends IDialog {
     private String getModulePath() {\r
         String trg = this.jTextFieldFilePath.getText();\r
         trg = Tools.addPathExt(trg, mode);\r
-        trg = getSelectPackagePath() + DataType.FILE_SEPARATOR + trg;\r
+        trg = Tools.addFileSeparator(getSelectPackagePath()) + trg;\r
         Tools.convertPathToCurrentOsType(trg);\r
         return trg;\r
     }\r
@@ -821,7 +853,7 @@ public class Clone extends IDialog {
     private String getPackagePath() {\r
         String trg = this.jTextFieldFilePath.getText();\r
         trg = Tools.addPathExt(trg, mode);\r
-        trg = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR + trg;\r
+        trg = Tools.addFileSeparator(Workspace.getCurrentWorkspace()) + trg;\r
         trg = Tools.convertPathToCurrentOsType(trg);\r
         return trg;\r
     }\r
@@ -849,10 +881,18 @@ public class Clone extends IDialog {
         // Get ClonedFrom then\r
         //\r
         ModuleDefinitions.ClonedFrom cf = null;\r
+        BigInteger count = new BigInteger("-1");\r
         if (pd.getClonedFrom() == null) {\r
             cf = ModuleDefinitions.ClonedFrom.Factory.newInstance();\r
         } else {\r
             cf = pd.getClonedFrom();\r
+            if (cf != null) {\r
+                for (int index = 0; index < cf.getClonedList().size(); index++) {\r
+                    if (cf.getClonedList().get(index).getId() != null) {\r
+                        count = count.max(cf.getClonedList().get(index).getId());\r
+                    }\r
+                }\r
+            }\r
         }\r
 \r
         //\r
@@ -861,6 +901,13 @@ public class Clone extends IDialog {
         ModuleDefinitions.ClonedFrom.Cloned c = ModuleDefinitions.ClonedFrom.Cloned.Factory.newInstance();\r
         c.setModuleGuid(id.getGuid());\r
         c.setModuleVersion(id.getVersion());\r
+        c.setPackageGuid(wt.getPackageIdByModuleId(oldId).getGuid());\r
+        c.setPackageVersion(wt.getPackageIdByModuleId(oldId).getVersion());\r
+        c.setId(count.add(new BigInteger("1")));\r
+        String guid = wt.getModuleFarGuid(oldId);\r
+        if (guid != null && !guid.equals("")) {\r
+            c.setFarGuid(guid);    \r
+        }\r
 \r
         cf.addNewCloned();\r
         cf.setClonedArray(cf.getClonedList().size() - 1, c);\r
@@ -892,10 +939,18 @@ public class Clone extends IDialog {
         // Get ClonedFrom then\r
         //\r
         PackageDefinitions.ClonedFrom cf = null;\r
+        BigInteger count = new BigInteger("-1");\r
         if (pd.getClonedFrom() == null) {\r
             cf = PackageDefinitions.ClonedFrom.Factory.newInstance();\r
         } else {\r
             cf = pd.getClonedFrom();\r
+            if (cf != null) {\r
+                for (int index = 0; index < cf.getClonedList().size(); index++) {\r
+                    if (cf.getClonedList().get(index).getId() != null) {\r
+                        count = count.max(cf.getClonedList().get(index).getId());\r
+                    }\r
+                }\r
+            }\r
         }\r
 \r
         //\r
@@ -904,6 +959,11 @@ public class Clone extends IDialog {
         PackageDefinitions.ClonedFrom.Cloned c = PackageDefinitions.ClonedFrom.Cloned.Factory.newInstance();\r
         c.setPackageGuid(id.getGuid());\r
         c.setPackageVersion(id.getVersion());\r
+        c.setId(count.add(new BigInteger("1")));\r
+        String guid = wt.getModuleFarGuid(oldId);\r
+        if (guid != null && !guid.equals("")) {\r
+            c.setFarGuid(guid);    \r
+        }\r
 \r
         cf.addNewCloned();\r
         cf.setClonedArray(cf.getClonedList().size() - 1, c);\r
@@ -935,10 +995,18 @@ public class Clone extends IDialog {
         // Get ClonedFrom then\r
         //\r
         PlatformDefinitions.ClonedFrom cf = null;\r
+        BigInteger count = new BigInteger("-1");\r
         if (pd.getClonedFrom() == null) {\r
             cf = PlatformDefinitions.ClonedFrom.Factory.newInstance();\r
         } else {\r
             cf = pd.getClonedFrom();\r
+            if (cf != null) {\r
+                for (int index = 0; index < cf.getClonedList().size(); index++) {\r
+                    if (cf.getClonedList().get(index).getId() != null) {\r
+                        count = count.max(cf.getClonedList().get(index).getId());\r
+                    }\r
+                }\r
+            }\r
         }\r
 \r
         //\r
@@ -947,7 +1015,12 @@ public class Clone extends IDialog {
         PlatformDefinitions.ClonedFrom.Cloned c = PlatformDefinitions.ClonedFrom.Cloned.Factory.newInstance();\r
         c.setPlatformGuid(id.getGuid());\r
         c.setPlatformVersion(id.getVersion());\r
-\r
+        c.setId(count.add(new BigInteger("1")));\r
+        String guid = wt.getModuleFarGuid(oldId);\r
+        if (guid != null && !guid.equals("")) {\r
+            c.setFarGuid(guid);    \r
+        }\r
+        \r
         cf.addNewCloned();\r
         cf.setClonedArray(cf.getClonedList().size() - 1, c);\r
         pd.addNewClonedFrom();\r