import org.tianocore.frameworkwizard.common.FileOperation;\r
import org.tianocore.frameworkwizard.common.IFileFilter;\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.Identifications.OpenFile;\r
import org.tianocore.frameworkwizard.common.ui.IDialog;\r
import org.tianocore.frameworkwizard.common.ui.IFrame;\r
import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
import javax.swing.JComboBox;\r
\r
+/**\r
+ The class is used to provide functions to clone workspace, module, package and platform\r
+ It extends IDialog\r
+\r
+ **/\r
public class Clone extends IDialog {\r
\r
- /**\r
- Define class members\r
- \r
- **/\r
+ ///\r
+ /// Define Class Serial Version UID\r
+ ///\r
private static final long serialVersionUID = -5469299324965727137L;\r
\r
+ ///\r
+ /// Define Class Members\r
+ ///\r
private JPanel jContentPane = null;\r
\r
private JLabel jLabelType = null;\r
\r
private JButton jButtonGenerateGuid = null;\r
\r
+ private JLabel jLabelBelong = null;\r
+\r
+ private JComboBox jComboBoxExistingPackage = null;\r
+\r
+ ///\r
+ /// Define members not for UI\r
+ ///\r
+\r
private int mode = -1;\r
\r
private Vector<PackageIdentification> packages = null;\r
\r
private WorkspaceTools wt = new WorkspaceTools();\r
\r
- private JLabel jLabelBelong = null;\r
-\r
- private JComboBox jComboBoxExistingPackage = null;\r
-\r
private Identification oldId = null;\r
\r
private Identification newId = null;\r
private PlatformIdentification fid = null;\r
\r
/**\r
- * This method initializes jTextFieldType \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldType \r
+ \r
+ @return javax.swing.JTextField\r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jTextFieldSource \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldSource \r
+ \r
+ @return javax.swing.JTextField \r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jButtonBrowse \r
- * \r
- * @return javax.swing.JButton \r
- */\r
+ This method initializes jButtonBrowse \r
+ \r
+ @return javax.swing.JButton \r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jTextFieldDestinationFile \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldDestinationFile \r
+ \r
+ @return javax.swing.JTextField \r
+ \r
+ **/\r
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
\r
/**\r
- * This method initializes jTextFieldBaseName \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldBaseName \r
+ \r
+ @return javax.swing.JTextField \r
+ \r
+ **/\r
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
\r
/**\r
- * This method initializes jTextFieldGuid \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldGuid \r
+ \r
+ @return javax.swing.JTextField \r
+ \r
+ **/\r
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
\r
/**\r
- * This method initializes jTextFieldVersion \r
- * \r
- * @return javax.swing.JTextField \r
- */\r
+ This method initializes jTextFieldVersion \r
+ \r
+ @return javax.swing.JTextField \r
+ \r
+ **/\r
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
\r
/**\r
- * This method initializes jButtonOk \r
- * \r
- * @return javax.swing.JButton \r
- */\r
+ This method initializes jButtonOk \r
+ \r
+ @return javax.swing.JButton \r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jButtonCancel \r
- * \r
- * @return javax.swing.JButton \r
- */\r
+ This method initializes jButtonCancel \r
+ \r
+ @return javax.swing.JButton \r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jButtonGenerateGuid \r
- * \r
- * @return javax.swing.JButton \r
- */\r
+ This method initializes jButtonGenerateGuid \r
+ \r
+ @return javax.swing.JButton \r
+ \r
+ **/\r
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
}\r
\r
/**\r
- * This method initializes jComboBoxExistingPackage \r
- * \r
- * @return javax.swing.JComboBox \r
- */\r
+ This method initializes jComboBoxExistingPackage \r
+ \r
+ @return javax.swing.JComboBox \r
+ \r
+ **/\r
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
\r
/**\r
- \r
- @param args\r
+ This is the default constructor\r
\r
**/\r
- public static void main(String[] args) {\r
-\r
- }\r
-\r
- /**\r
- * This is the default constructor\r
- */\r
public Clone() {\r
super();\r
init();\r
}\r
\r
/**\r
- This is the default constructor\r
+ This is the override constructor\r
+ \r
+ @param parentFrame The parent frame which starts this frame\r
+ @param modal To identify the frame's modal\r
+ @param fileType To identify the clone target type\r
+ @param identification The clone target's identification\r
\r
**/\r
public Clone(IFrame parentFrame, boolean modal, int fileType, Identification identification) {\r
}\r
\r
/**\r
- * This method initializes this\r
- * \r
- * @return void\r
- */\r
+ This method initializes this\r
+ \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
}\r
\r
/**\r
- * This method initializes this\r
- * \r
- * @return void\r
- */\r
+ This method initializes this with given clone target type.\r
+ Customize the frame interface via different clone target type.\r
+ \r
+ @param mode To identify the clone target type\r
+ \r
+ **/\r
private void init(int mode) {\r
init();\r
+ //\r
+ // For MODULE_SURFACE_AREA\r
+ //\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.jTextFieldFilePath.setToolTipText("Input module name here. For example, Application\\HelloWorld\\HelloWorld.msa");\r
- this.jLabelDestinationFile.setText("Module Path\\Name");\r
+ this.jButtonBrowse.setVisible(false);\r
+ this.jTextFieldFilePath\r
+ .setToolTipText("<html>Input the module's relative path and filename, for example:<br>Application\\HelloWorld\\HelloWorld.msa</html>");\r
+ this.jTextFieldFilePath.setSize(320, this.jTextFieldFilePath.getSize().height);\r
+ this.jLabelDestinationFile.setText("New Module Path and Filename");\r
}\r
+ //\r
+ // For PACKAGE_SURFACE_AREA\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.jTextFieldFilePath.setToolTipText("Input package name here. For example, MdePkg\\MdePkg.fpd");\r
- this.jLabelDestinationFile.setText("Package Path\\Name");\r
+ this.jButtonBrowse.setVisible(false);\r
+ this.jTextFieldFilePath.setToolTipText("<html>Input the package's relative path and file name, for example:<br>MdePkg\\MdePkg.fpd</html>");\r
+ this.jTextFieldFilePath.setSize(320, this.jTextFieldFilePath.getSize().height);\r
+ this.jLabelDestinationFile.setText("New Package Path and Filename");\r
}\r
+ //\r
+ // For PLATFORM_SURFACE_AREA\r
+ //\r
if (mode == DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA) {\r
this.jTextFieldType.setText(DataType.PLATFORM_SURFACE_AREA);\r
this.jTextFieldSource.setText(oldId.getPath());\r
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.jTextFieldFilePath\r
+ .setToolTipText("<html>Select the platform's relative path and filename. For example:<br>C:\\MyWorkspace\\EdkNt32Pkg\\Nt32.fpd</html>");\r
+ this.jLabelDestinationFile.setText("New Platform Path and Filename");\r
}\r
+ //\r
+ // For WORKSPACE\r
+ //\r
if (mode == DataType.RETURN_TYPE_WORKSPACE) {\r
this.jTextFieldType.setText(DataType.WORKSPACE);\r
this.jTextFieldSource.setText(Workspace.getCurrentWorkspace());\r
this.jButtonGenerateGuid.setEnabled(false);\r
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.jTextFieldFilePath.setToolTipText("<html>Input the workspace path, for example:<br>C:\\MyWorkspace</html>");\r
+ this.jLabelDestinationFile.setText("New Workspace Path");\r
}\r
}\r
\r
/**\r
- * This method initializes jContentPane\r
- * \r
- * @return javax.swing.JPanel\r
- */\r
+ This method initializes jContentPane\r
+ \r
+ @return javax.swing.JPanel\r
+ \r
+ **/\r
private JPanel getJContentPane() {\r
if (jContentPane == null) {\r
jLabelBelong = new JLabel();\r
- jLabelBelong.setBounds(new java.awt.Rectangle(15, 85, 140, 20));\r
- jLabelBelong.setText("Clone to Package");\r
+ jLabelBelong.setBounds(new java.awt.Rectangle(15, 60, 190, 20));\r
+ jLabelBelong.setText("Clone 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
if (arg0.getSource() == jButtonOk) {\r
if (this.check()) {\r
try {\r
+ //\r
+ // Save to file\r
+ //\r
this.save();\r
} catch (IOException e) {\r
+ Log.wrn("Clone", e.getMessage());\r
Log.err("Clone", e.getMessage());\r
- e.printStackTrace();\r
return;\r
} catch (XmlException e) {\r
+ Log.wrn("Clone", e.getMessage());\r
Log.err("Clone", e.getMessage());\r
- e.printStackTrace();\r
return;\r
} catch (Exception e) {\r
+ Log.wrn("Clone", e.getMessage());\r
Log.err("Clone", e.getMessage());\r
- e.printStackTrace();\r
return;\r
}\r
} else {\r
}\r
\r
//\r
- // Use different file ext\r
+ // Use different file ext for different clone target type\r
//\r
if (arg0.getSource() == this.jButtonBrowse) {\r
JFileChooser fc = new JFileChooser();\r
}\r
}\r
\r
- //\r
- // Check name, guid and version\r
- //\r
+ /**\r
+ Check name, guid and version.\r
+ If all of them are valid, save information to new id\r
+ \r
+ @retval true All name, guid and version are valid\r
+ @retval false Any one of name, guid and version is invalid\r
+ \r
+ **/\r
private boolean checkId() {\r
//\r
// Check Basename\r
//\r
if (isEmpty(this.jTextFieldBaseName.getText())) {\r
- Log.err("Base Name couldn't be empty!");\r
+ Log.wrn("Clone", "The Name is required!");\r
return false;\r
}\r
if (!DataValidation.isBaseName(this.jTextFieldBaseName.getText())) {\r
- Log.err("Incorrect data type for Base Name");\r
+ Log.wrn("Clone", "<html>Incorrect data type for the Name, it must<br>be a single word, starting with an alpha character.</html>");\r
return false;\r
}\r
\r
// Check Guid\r
//\r
if (isEmpty(this.jTextFieldGuid.getText())) {\r
- Log.err("Guid couldn't be empty!");\r
+ Log.wrn("Clone", "A Guid is required!!");\r
return false;\r
}\r
if (!DataValidation.isGuid(this.jTextFieldGuid.getText())) {\r
- Log.err("Incorrect data type for Guid");\r
+ Log.wrn("Clone", "<html>Incorrect data type for Guid, which must<br>be in registry format (8-4-4-4-12) for example:<br>d3adb123-eef1-466d-39ac-02febcaf5997</html>");\r
return false;\r
}\r
\r
// Check Version\r
//\r
if (isEmpty(this.jTextFieldVersion.getText())) {\r
- Log.err("Version couldn't be empty!");\r
+ Log.wrn("Clone", "A Version must be entered!");\r
return false;\r
}\r
if (!DataValidation.isVersion(this.jTextFieldVersion.getText())) {\r
- Log.err("Incorrect data type for Version");\r
+ Log.wrn("Clone", "<html>Incorrect data type for Version, which must<br>be one or more digits, optionally followed by sequence<br>of one or more dot, one or more digits; examples:<br>1.0 1.0.1 12.25.256</html>");\r
return false;\r
}\r
\r
/**\r
Check before save\r
\r
- @return\r
+ @retval true All check points are passed\r
+ @retval false Any one of check points is failed\r
\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
// Common Check\r
//\r
if (!srcFile.exists()) {\r
- Log.err("The source doesn't exist");\r
+ Log.wrn("Clone", "The source file does not exist!");\r
return false;\r
}\r
if (isEmpty(trg)) {\r
- Log.err("The destination file path couldn't be empty");\r
+ Log.wrn("Clone", "The destination file path must be entered!");\r
return false;\r
}\r
if (src.equals(trg)) {\r
- Log.err("The source and destination couldn't be same");\r
+ Log.wrn("Clone", "The source and destination can not be same!");\r
return false;\r
}\r
if (trgFile.exists()) {\r
- Log.err("The destination already exists");\r
+ Log.wrn("Clone", "The destination already exists!");\r
return false;\r
}\r
\r
//\r
if (mode == DataType.RETURN_TYPE_WORKSPACE) {\r
if (trg.indexOf(src + DataType.FILE_SEPARATOR) == 0) {\r
- Log.err("The new workspace couldn't be in current workspace!");\r
+ Log.wrn("Clone", "The new workspace can not be located within the current workspace!");\r
return false;\r
}\r
}\r
// 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
+ Log.wrn("Clone", "The source and destination paths for cloning a module must be different!");\r
return false;\r
}\r
trgFile = new File(trg);\r
if (trgFile.exists()) {\r
- Log.err("The target module already exists");\r
+ Log.wrn("Clone", "The target module already exists!");\r
return false;\r
}\r
return checkId();\r
//\r
if (mode == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
if (trg.indexOf(DataType.DOS_FILE_SEPARATOR) == -1 && trg.indexOf(DataType.UNIX_FILE_SEPARATOR) == -1) {\r
- Log.err("The package name must include a path");\r
+ Log.wrn("Clone", "The package name must include a path!");\r
return false;\r
}\r
trg = this.getPackagePath();\r
if (Tools.getFilePathOnly(src).equals(Tools.getFilePathOnly(trg))) {\r
- Log.err("The source and destination couldn't be same");\r
+ Log.wrn("Clone", "The source and destination paths for cloning a package must be different!");\r
return false;\r
}\r
trgFile = new File(trg);\r
if (trgFile.exists()) {\r
- Log.err("The target package already exists");\r
+ Log.wrn("Clone", "The target package already exists!");\r
return false;\r
}\r
return checkId();\r
//\r
if (mode == DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA) {\r
if (trg.indexOf(Workspace.getCurrentWorkspace()) != 0) {\r
- Log.err("The target platform must be in current workspace");\r
+ Log.wrn("Clone", "The platform clone must be located in the current workspace!");\r
return false;\r
}\r
trgFile = new File(trg);\r
if (trgFile.exists()) {\r
- Log.err("The target platform already exists");\r
+ Log.wrn("Clone", "The target platform already exists.");\r
return false;\r
}\r
return checkId();\r
return true;\r
}\r
\r
+ /**\r
+ Save clone target to new location\r
+ \r
+ @throws IOException\r
+ @throws XmlException\r
+ @throws Exception\r
+ \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
//\r
// Clone Workspace\r
//\r
if (mode == DataType.RETURN_TYPE_WORKSPACE) {\r
- try {\r
- FileOperation.copyFolder(src, trg);\r
- } catch (Exception e) {\r
- this.returnType = DataType.RETURN_TYPE_CANCEL;\r
- Log.err("Clone Workspace", e.getMessage());\r
- e.printStackTrace();\r
- }\r
+ FileOperation.copyFolder(src, trg);\r
this.returnType = DataType.RETURN_TYPE_WORKSPACE;\r
}\r
\r
//\r
trg = getModulePath();\r
newId.setPath(trg);\r
- vFiles = wt.getAllModuleFiles(src);\r
- \r
+ vFiles = wt.getAllFilesPathOfModule(src);\r
+\r
//\r
// First copy all files to new directory\r
//\r
msa.getMsaHeader().setVersion(newId.getVersion());\r
\r
//\r
- // Update Cloned From element\r
+ // Update <Cloned> Section\r
//\r
updateModuleClonedId(msa, oldId);\r
- \r
+\r
//\r
// Save to file\r
//\r
//\r
// Update to platformId\r
//\r
- this.setMid(new ModuleIdentification(newId, packages.elementAt(this.jComboBoxExistingPackage.getSelectedIndex())));\r
+ this.setMid(new ModuleIdentification(newId,\r
+ packages.elementAt(this.jComboBoxExistingPackage.getSelectedIndex())));\r
\r
//\r
// Open belonging package\r
//\r
PackageSurfaceArea psa = PackageSurfaceArea.Factory.newInstance();\r
psa = OpenFile.openSpdFile(mid.getPackageId().getPath());\r
- \r
+\r
//\r
// Update the db file\r
//\r
//\r
trg = this.getPackagePath();\r
newId.setPath(trg);\r
- vFiles = wt.getAllPakcageFiles(src);\r
- \r
+ vFiles = wt.getAllFilesPathOfPakcage(src);\r
+\r
+ //\r
+ // First copy all files to new directory\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
-\r
- //\r
- // Delete old spd file\r
- //\r
- //FileOperation.delFile(Tools.getFilePathOnly(trg) + DataType.FILE_SEPARATOR + Tools.getFileNameOnly(src));\r
\r
//\r
// Create new spd file\r
spd.getSpdHeader().setVersion(newId.getVersion());\r
\r
//\r
- // Update Cloned From element\r
+ // Update <Cloned> Section\r
//\r
updatePackageClonedId(spd, oldId);\r
- \r
+\r
//\r
// Save to file\r
//\r
}\r
vFiles = null;\r
}\r
- \r
+\r
+ /**\r
+ Get the path of selected package\r
+ \r
+ @return String The path of selected package\r
+ \r
+ **/\r
private String getSelectPackagePath() {\r
return Tools.getFilePathOnly(packages.elementAt(this.jComboBoxExistingPackage.getSelectedIndex()).getPath());\r
}\r
\r
+ /**\r
+ Get the path of source module\r
+ Since the path of source module is relative, make it up to full path.\r
+ \r
+ @return String The full path of source module\r
+ \r
+ **/\r
private String getModulePath() {\r
String trg = this.jTextFieldFilePath.getText();\r
trg = Tools.addPathExt(trg, mode);\r
Tools.convertPathToCurrentOsType(trg);\r
return trg;\r
}\r
- \r
+\r
+ /**\r
+ Get the path of source package\r
+ Since the path of source package is relative, make it up to full path.\r
+ \r
+ @return String The full path of source package\r
+ \r
+ **/\r
private String getPackagePath() {\r
String trg = this.jTextFieldFilePath.getText();\r
trg = Tools.addPathExt(trg, mode);\r
trg = Tools.convertPathToCurrentOsType(trg);\r
return trg;\r
}\r
- \r
- /**\r
- Set target item's Cloned From element\r
-\r
- @param id\r
- @return\r
\r
+ /**\r
+ Set msa file's <Cloned> section via given identification\r
+ \r
+ @param msa ModuleSurfaceArea for clone target\r
+ @param id Identification of clone source\r
+ \r
**/\r
private void updateModuleClonedId(ModuleSurfaceArea msa, Identification id) {\r
//\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
}\r
\r
/**\r
- Set target item's Cloned From element\r
+ Set spd file's <Cloned> section via given identification\r
\r
- @param id\r
- @return\r
+ @param spd PackageSurfaceArea for clone target\r
+ @param id Identification of clone source\r
\r
**/\r
private void updatePackageClonedId(PackageSurfaceArea spd, Identification id) {\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
}\r
\r
/**\r
- Set target item's Cloned From element\r
+ Set fpd file's <Cloned> section via given identification\r
\r
- @param id\r
- @return\r
+ @param fpd PlatformSurfaceArea for clone target\r
+ @param id Identification of clone source\r
\r
**/\r
private void updatePlatformClonedId(PlatformSurfaceArea fpd, Identification id) {\r
c.setPlatformGuid(id.getGuid());\r
c.setPlatformVersion(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
fpd.setPlatformDefinitions(pd);\r
}\r
\r
+ /**\r
+ Get PlatformIdentification\r
+ \r
+ @return PlatformIdentification\r
+ \r
+ **/\r
public PlatformIdentification getFid() {\r
return fid;\r
}\r
\r
+ /**\r
+ Set PlatformIdentification\r
+ \r
+ @param fid PlatformIdentification\r
+ \r
+ **/\r
public void setFid(PlatformIdentification fid) {\r
this.fid = fid;\r
}\r
\r
+ /**\r
+ Get ModuleIdentification\r
+ \r
+ @return ModuleIdentification\r
+ \r
+ **/\r
public ModuleIdentification getMid() {\r
return mid;\r
}\r
\r
+ /**\r
+ Set ModuleIdentification\r
+ \r
+ @param mid ModuleIdentification\r
+ \r
+ **/\r
public void setMid(ModuleIdentification mid) {\r
this.mid = mid;\r
}\r
\r
+ /**\r
+ Get PackageIdentification\r
+ \r
+ @return PackageIdentification\r
+ \r
+ **/\r
public PackageIdentification getPid() {\r
return pid;\r
}\r
\r
+ /**\r
+ Set PackageIdentification\r
+ \r
+ @param pid PackageIdentification\r
+ \r
+ **/\r
public void setPid(PackageIdentification pid) {\r
this.pid = pid;\r
}\r