From: jlin16 Date: Sun, 9 Jul 2006 13:44:41 +0000 (+0000) Subject: 1. Add feature of ModuleSA PcdBuildDefinition editor. X-Git-Tag: edk2-stable201903~25003 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=908b1c0595edeeb3b746c8326156c974abec5f0a 1. Add feature of ModuleSA PcdBuildDefinition editor. 2. bug fixing for SPD editor. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@847 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdGuidDecls.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdGuidDecls.java index 07ce0cef7f..5531919695 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdGuidDecls.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdGuidDecls.java @@ -252,7 +252,9 @@ public class SpdGuidDecls extends IInternalFrame implements TableModelListener{ int row = arg0.getFirstRow(); TableModel m = (TableModel)arg0.getSource(); if (arg0.getType() == TableModelEvent.UPDATE){ + if (docConsole != null) { docConsole.setSaved(false); + } updateRow(row, m); } } diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java index 61d69b1916..ce4922e362 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java @@ -86,8 +86,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen private JButton jButtonClearAll = null; - private JButton jButtonOk = null; - private JLabel jLabel = null; private JTextField jTextField = null; @@ -373,23 +371,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen return jButtonClearAll; } - /** - This method initializes jButton - - @return javax.swing.JButton - **/ - private JButton getJButtonOk() { - if (jButtonOk == null) { - jButtonOk = new JButton(); - jButtonOk.setSize(new java.awt.Dimension(90, 20)); - jButtonOk.setText("OK"); - jButtonOk.setLocation(new java.awt.Point(290, 305)); - jButtonOk.setVisible(false); - jButtonOk.addActionListener(this); - } - return jButtonOk; - } - /** This is the default constructor **/ @@ -507,7 +488,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen jContentPane.add(getJButtonAdd(), null); jContentPane.add(getJButtonRemove(), null); jContentPane.add(getJButtonClearAll(), null); - jContentPane.add(getJButtonOk(), null); jContentPane.add(getJTextField(), null); jContentPane.add(getJButtonBrowse(), null); @@ -584,13 +564,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen */ public void actionPerformed(ActionEvent arg0) { - docConsole.setSaved(false); - if (arg0.getSource() == jButtonOk) { - this.save(); - this.dispose(); - - } - if (arg0.getSource() == jButtonAdd) { //ToDo: check before add @@ -610,6 +583,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen return; } model.addRow(row); + docConsole.setSaved(false); sfc.genSpdLibClassDeclarations(row[0], row[3], row[1], row[2], row[5], null, null, row[4], null, row[6]); } diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java index 6d9235cdc8..0fc11f08b2 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java @@ -85,7 +85,7 @@ public class FpdFileContents { private DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs = null; - public static HashMap> dynPcdMap = null; + private HashMap> dynPcdMap = null; /** * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings. @@ -122,6 +122,10 @@ public class FpdFileContents { } } } + + public ArrayList getDynPcdMapValue(String key) { + return dynPcdMap.get(key); + } /** Constructor to create a new spd file **/ @@ -252,79 +256,39 @@ public class FpdFileContents { String moduleInfo = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() + " " + moduleSa.getPackageGuid()+ " " + moduleSa.getPackageVersion(); PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef = moduleSa.getPcdBuildDefinition(); - if (pcdBuildDef != null) { - maintainDynPcdMap(pcdBuildDef, moduleInfo); + if (pcdBuildDef != null && pcdBuildDef.getPcdDataList() != null) { + ListIterator li = pcdBuildDef.getPcdDataList().listIterator(); + while(li.hasNext()) { + PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = li.next(); + maintainDynPcdMap(pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(), moduleInfo); + } } cursor.removeXml(); } cursor.dispose(); } - private void maintainDynPcdMap(PcdBuildDefinitionDocument.PcdBuildDefinition o, String moduleInfo) { - XmlCursor cursor = o.newCursor(); - boolean fromLibInstance = false; - if (!cursor.toFirstChild()){ + private void maintainDynPcdMap(String pcdKey, String moduleInfo) { + + ArrayList al = dynPcdMap.get(pcdKey); + if (al == null) { return; } - // - // deal with first child, same process in the while loop below for siblings. - // - PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); - String pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(); - ArrayList al = dynPcdMap.get(pcdKey); + String[] s = moduleInfo.split(" "); for(int i = 0; i < al.size(); ++i){ - if (al.get(i).startsWith(moduleInfo)){ - fromLibInstance = true; + String consumer = al.get(i); + if (consumer.contains(s[0]) && consumer.contains(s[2])){ + al.remove(consumer); break; } } - al.remove(moduleInfo + " " + pcdData.getItemType().toString()); + if (al.size() == 0) { dynPcdMap.remove(pcdKey); + String[] s1 = pcdKey.split(" "); + removeDynamicPcdBuildData(s1[0], s1[1]); } - if (pcdData.getItemType().toString().equals("DYNAMIC")) { - if (dynPcdMap.get(pcdKey) == null) { - removeDynamicPcdBuildData(pcdData.getCName(), pcdData.getTokenSpaceGuidCName()); - } - } - if (fromLibInstance){ - cursor.removeXml(); - } - while(cursor.toNextSibling()) { - fromLibInstance = false; - pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); - // - // remove each pcd record from dynPcdMap - // - pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(); - al = dynPcdMap.get(pcdKey); - for(int i = 0; i < al.size(); ++i){ - if (al.get(i).startsWith(moduleInfo)){ - fromLibInstance = true; - break; - } - } - al.remove(moduleInfo + " " + pcdData.getItemType().toString()); - if (al.size() == 0) { - dynPcdMap.remove(pcdKey); - } - - if (pcdData.getItemType().toString().equals("DYNAMIC")) { - // - // First check whether this is the only consumer of this dyn pcd. - // - if (dynPcdMap.get(pcdKey) == null) { - // - // delete corresponding entry in DynamicPcdBuildData - // - removeDynamicPcdBuildData(pcdData.getCName(), pcdData.getTokenSpaceGuidCName()); - } - } - if (fromLibInstance){ - cursor.removeXml(); - } - } } // // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer" @@ -355,6 +319,128 @@ public class FpdFileContents { } } + + public void updatePcdData(String key, String cName, String tsGuid, String itemType, String maxSize, String value){ + ModuleSADocument.ModuleSA msa = getModuleSA(key); + if (msa == null || msa.getPcdBuildDefinition() == null){ + return; + } + + XmlCursor cursor = msa.getPcdBuildDefinition().newCursor(); + if (cursor.toFirstChild()){ + do { + PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); + if (pcdData.getCName().equals(cName) && pcdData.getTokenSpaceGuidCName().equals(tsGuid)) { + pcdData.setItemType(PcdItemTypes.Enum.forString(itemType)); + if(pcdData.getDatumType().equals("VOID*")) { + pcdData.setMaxDatumSize(new Integer(maxSize)); + } + pcdData.setValue(value); + break; + } + } + while(cursor.toNextSibling()); + } + cursor.dispose(); + } + + /**Get original Pcd info from MSA & SPD files. + * @param mi ModuleIdentification from which MSA & SPD come + * @param cName PCD cName + * @param sa Results: HelpText, Original item type. + * @return + */ + public boolean getPcdBuildDataInfo(ModuleIdentification mi, String cName, String[] sa) throws Exception{ + try { + + ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(mi); + if (msa.getPcdCoded() == null) { + return false; + } + + Map m = new HashMap(); + m.put("ModuleSurfaceArea", msa); + SurfaceAreaQuery.setDoc(m); + PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null); + // + // First look through MSA pcd entries. + // + List l = msa.getPcdCoded().getPcdEntryList(); + ListIterator li = l.listIterator(); + while(li.hasNext()) { + PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next(); + if (!msaPcd.getCName().equals(cName)) { + continue; + } + PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs); + if (spdPcd == null) { + // + // ToDo Error + // + throw new PcdDeclNotFound(mi.getName() + " " + msaPcd.getCName()); + } + // + // Get Pcd help text and original item type. + // + sa[0] = spdPcd.getHelpText() + msaPcd.getHelpText(); + sa[1] = msaPcd.getPcdItemType()+""; + return true; + } + + + } + catch (Exception e){ + e.printStackTrace(); + throw e; + } + + return false; + } + + /**Remove PCDBuildDefinition entries from ModuleSA + * @param moduleKey identifier of ModuleSA. + * @param consumer where these entries come from. + */ + public void removePcdData(String moduleKey, ModuleIdentification consumer) { + try { + ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(consumer); + if (msa.getPcdCoded() == null) { + return; + } + + List l = msa.getPcdCoded().getPcdEntryList(); + ListIterator li = l.listIterator(); + + while(li.hasNext()) { + PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next(); + ModuleSADocument.ModuleSA moduleSA = getModuleSA(moduleKey); + XmlCursor cursor = moduleSA.getPcdBuildDefinition().newCursor(); + if (cursor.toFirstChild()) { + PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); + if (msaPcd.getCName().equals(pcdData.getCName()) && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) { + + maintainDynPcdMap(pcdData.getCName()+" "+pcdData.getTokenSpaceGuidCName(), moduleKey); + cursor.removeXml(); + break; + } + while (cursor.toNextSibling()) { + pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); + if (msaPcd.getCName().equals(pcdData.getCName()) && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) { + maintainDynPcdMap(pcdData.getCName()+" "+pcdData.getTokenSpaceGuidCName(), moduleKey); + cursor.removeXml(); + break; + } + } + } + cursor.dispose(); + } + + } + catch (Exception e){ + e.printStackTrace(); + + } + } // // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer" // @@ -382,14 +468,20 @@ public class FpdFileContents { } } - public void removeLibraryInstances(String key) { + public void removeLibraryInstance(String key, int i) { ModuleSADocument.ModuleSA msa = getModuleSA(key); if (msa == null || msa.getLibraries() == null){ return ; } XmlCursor cursor = msa.getLibraries().newCursor(); - cursor.removeXml(); + if (cursor.toFirstChild()) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(); + } + cursor.removeXml(); + } + cursor.dispose(); } @@ -590,6 +682,7 @@ public class FpdFileContents { // AddItem to ModuleSA PcdBuildDefinitions // String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue(); + genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType().toString(), spdPcd.getDatumType()+"", defaultVal, moduleSa); } @@ -743,7 +836,7 @@ public class FpdFileContents { } } - private int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{ + public int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{ if (datum == null) { return 0; } @@ -849,7 +942,7 @@ public class FpdFileContents { } } - private void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) + public void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) throws PcdValueMalFormed{ DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcdData = getfpdDynPcdBuildDefs().addNewPcdBuildData(); dynPcdData.setItemType(PcdItemTypes.Enum.forString(itemType)); @@ -905,19 +998,27 @@ public class FpdFileContents { } } - private void removeDynamicPcdBuildData(String cName, String tsGuid) { + public void removeDynamicPcdBuildData(String cName, String tsGuid) { XmlObject o = getfpdDynPcdBuildDefs(); XmlCursor cursor = o.newCursor(); if (cursor.toFirstChild()) { DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject(); - while (!(pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid))) { - cursor.toNextSibling(); + if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) { + cursor.removeXml(); + cursor.dispose(); + return; + } + while (cursor.toNextSibling()) { + pcdBuildData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject(); + if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) { + cursor.removeXml(); + cursor.dispose(); + return; + } } - - cursor.removeXml(); } cursor.dispose(); } @@ -1118,15 +1219,6 @@ public class FpdFileContents { } } - public void removePcdDataFromLibraryInstance(String moduleKey, String libInstanceKey){ - ModuleSADocument.ModuleSA moduleSa = getModuleSA(moduleKey); - // - // should better maintain pcd from lib instance only, but maintain all is acceptable now. - // - maintainDynPcdMap(moduleSa.getPcdBuildDefinition(), libInstanceKey); - - } - public BuildOptionsDocument.BuildOptions getfpdBuildOpts() { if (fpdBuildOpts == null) { fpdBuildOpts = fpdRoot.addNewBuildOptions(); @@ -1794,8 +1886,6 @@ public class FpdFileContents { return fdf.getStringValue(); } - - public void genFvImagesNameValue(String name, String value) { FvImagesDocument.FvImages fi = getfpdFlash().getFvImages(); diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java index d20c0b8d56..19849d0277 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java @@ -19,6 +19,7 @@ import javax.swing.AbstractAction; import javax.swing.DefaultCellEditor; import javax.swing.JFileChooser; import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.JButton; import javax.swing.ListSelectionModel; @@ -1046,6 +1047,11 @@ public class FpdFlash extends IInternalFrame { jTextField3 = new JTextField(); jTextField3.setEnabled(false); jTextField3.setPreferredSize(new Dimension(300, 20)); + jTextField3.addFocusListener(new java.awt.event.FocusAdapter() { + public void focusLost(java.awt.event.FocusEvent e) { + ffc.genFlashDefinitionFile(jTextField3.getText()); + } + }); } return jTextField3; } @@ -1069,14 +1075,20 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub - JFileChooser chooser = new JFileChooser(); + String wsDir = System.getenv("WORKSPACE"); + JFileChooser chooser = new JFileChooser(wsDir); chooser.setMultiSelectionEnabled(false); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int retval = chooser.showOpenDialog(frame); if (retval == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); - jTextField3.setText(theFile.getPath()); + String filePath = theFile.getPath(); + if (!filePath.startsWith(wsDir)) { + JOptionPane.showMessageDialog(frame, "You can only select files in current WORKSPACE."); + return; + } + jTextField3.setText(filePath.substring(wsDir.length() + 1).replace('\\', '/')); } } @@ -1305,6 +1317,11 @@ public class FpdFlash extends IInternalFrame { fvImageParaTableModel.addRow(saa[i]); ++i; } + +// String fdfFile = ffc.getFlashDefinitionFile(); +// if (fdfFile != null) { +// jTextField3.setText(fdfFile); +// } } private void getOptionNameValue(Map m){ diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java index 2923a44153..a849f5ab46 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java @@ -41,6 +41,8 @@ import java.util.Set; import java.util.Vector; import javax.swing.JTextField; +import java.awt.GridLayout; +import javax.swing.JComboBox; public class FpdModuleSA extends JDialog implements ActionListener { @@ -103,6 +105,18 @@ public class FpdModuleSA extends JDialog implements ActionListener { private JTable jTable4 = null; private JButton jButton4 = null; private JButton jButton5 = null; + private JPanel jPanel9 = null; + private JPanel jPanel10 = null; + private JPanel jPanel11 = null; + private JPanel jPanel12 = null; + private JLabel jLabel9 = null; + private JComboBox jComboBox = null; + private JLabel jLabel10 = null; + private JTextField jTextField3 = null; + private JLabel jLabel11 = null; + private JTextField jTextField4 = null; + private JButton jButton6 = null; + private JComboBox jComboBox1 = null; /** * This is the default constructor */ @@ -117,13 +131,14 @@ public class FpdModuleSA extends JDialog implements ActionListener { public void setKey(String k){ this.moduleKey = k; + jTabbedPane.setSelectedIndex(0); } /** init will be called each time FpdModuleSA object is to be shown. @param key Module information. **/ - public void init(String key) { + public void initPcdBuildDefinition(String key) { // // display pcd for key. // @@ -136,6 +151,9 @@ public class FpdModuleSA extends JDialog implements ActionListener { model.addRow(saa[i]); } } + } + + public void initLibraries(String key) { // // display library classes that need to be resolved. also potential instances for them. // @@ -164,7 +182,9 @@ public class FpdModuleSA extends JDialog implements ActionListener { } } - + } + + public void initModuleSAOptions(String key) { // // display module SA options // @@ -295,7 +315,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { // // remove pcd information of instance from current ModuleSA // - ffc.removePcdDataFromLibraryInstance(moduleKey, key); + ffc.removePcdData(moduleKey, mi); // // remove class produced by this instance and add back these produced class to be bound. // @@ -462,7 +482,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH); jPanel.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentShown(java.awt.event.ComponentEvent e) { - init(moduleKey); + initPcdBuildDefinition(moduleKey); } }); @@ -484,7 +504,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { jPanel1.add(getJPanel7(), java.awt.BorderLayout.CENTER); jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentShown(java.awt.event.ComponentEvent e) { - init(moduleKey); + initLibraries(moduleKey); } }); } @@ -535,26 +555,69 @@ public class FpdModuleSA extends JDialog implements ActionListener { return; } else{ -// int selectedRow = lsm.getMinSelectionIndex(); - + int selectedRow = lsm.getMinSelectionIndex(); + String cName = jTable.getValueAt(selectedRow, 0)+""; + String[] pcdInfo = {"", ""}; + getPcdInfo(cName, pcdInfo); + jTextArea.setText(pcdInfo[0]); + initComboBox(pcdInfo[1]); + jComboBox.setSelectedItem(pcdInfo[1]); + jTextField3.setEnabled(true); + jTextField3.setVisible(true); + jTextField3.setText(jTable.getValueAt(selectedRow, 4)+""); + jTextField4.setEnabled(true); + jTextField4.setText(jTable.getValueAt(selectedRow, 6)+""); + if (jTable.getValueAt(selectedRow, 5).equals("VOID*")) { + if (pcdInfo[1].equals("FEATURE_FLAG")) { + jTextField3.setVisible(false); + } + else if (pcdInfo[1].equals("FIXED_AT_BUILD")) { + try{ + jTextField3.setEnabled(false); + jTextField3.setText(ffc.setMaxSizeForPointer(jTable.getValueAt(selectedRow, 6)+"")+""); + } + catch(Exception except){ + JOptionPane.showMessageDialog(frame, "Unacceptable PCD Value: " + except.getMessage()); + } + } + else{ + jTextField3.setText(jTable.getValueAt(selectedRow, 4)+""); + } + } + else { + jTextField3.setEnabled(false); + } + if (!jTable.getValueAt(selectedRow, 2).equals("DYNAMIC") && !jTable.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) { + jTextField4.setText(jTable.getValueAt(selectedRow, 6)+""); + if (jTable.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){ + jTextField4.setVisible(false); + jComboBox1.setVisible(true); + jComboBox1.setSelectedItem(jTable.getValueAt(selectedRow, 6)+""); + } + else{ + jTextField4.setVisible(true); + jTextField4.setEnabled(true); + jComboBox1.setVisible(false); + } + } + else{ + jTextField4.setEnabled(false); + } } + + } }); jTable.getModel().addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent arg0) { // TODO Auto-generated method stub - int row = arg0.getFirstRow(); - TableModel m = (TableModel)arg0.getSource(); - if (arg0.getType() == TableModelEvent.INSERT) { - // - // Set combo box values for item type according to pcd values added. - // - - } +// int row = arg0.getFirstRow(); +// TableModel m = (TableModel)arg0.getSource(); + if (arg0.getType() == TableModelEvent.UPDATE){ - //ToDo Data Validition check. + //update xml doc here. } } @@ -562,6 +625,38 @@ public class FpdModuleSA extends JDialog implements ActionListener { } return jTable; } + + private void initComboBox(String originalType) { + jComboBox.removeAllItems(); + jComboBox.addItem(originalType); + if (originalType.equals("PATCHABLE_IN_MODULE")) { + jComboBox.addItem("FIXED_AT_BUILD"); + } + if (originalType.equals("DYNAMIC")) { + jComboBox.addItem("FIXED_AT_BUILD"); + jComboBox.addItem("PATCHABLE_IN_MODULE"); + } + } + + private void getPcdInfo(String cName, String[] sa) { + String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5]; + ffc.getLibraryInstances(moduleKey, saa); + + try{ + if (ffc.getPcdBuildDataInfo(getModuleId(moduleKey), cName, sa)) { + return; + } + for (int j = 0; j < saa.length; ++j) { + if (ffc.getPcdBuildDataInfo(getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]), + cName, sa)) { + return; + } + } + } + catch(Exception e) { + JOptionPane.showMessageDialog(this, "Get PCD details fail: " + e.getMessage()); + } + } /** * This method initializes jPanel2 @@ -573,8 +668,10 @@ public class FpdModuleSA extends JDialog implements ActionListener { jLabel5 = new JLabel(); jLabel5.setText("PCD Description"); jPanel2 = new JPanel(); + jPanel2.setPreferredSize(new java.awt.Dimension(607,200)); jPanel2.add(jLabel5, null); jPanel2.add(getJScrollPane1(), null); + jPanel2.add(getJPanel9(), null); } return jPanel2; } @@ -702,24 +799,6 @@ public class FpdModuleSA extends JDialog implements ActionListener { jTable1.setRowHeight(20); jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ - public void valueChanged(ListSelectionEvent e) { - int selectedRow1 = -1; - if (e.getValueIsAdjusting()){ - return; - } - ListSelectionModel lsm = (ListSelectionModel)e.getSource(); - if (lsm.isSelectionEmpty()) { - return; - } - else{ - selectedRow1 = lsm.getMinSelectionIndex(); - - - } - } - }); - } return jTable1; @@ -825,23 +904,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { jTable3.setRowHeight(20); jTable3.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ - public void valueChanged(ListSelectionEvent e) { - int selectedRow3 = -1; - if (e.getValueIsAdjusting()){ - return; - } - ListSelectionModel lsm = (ListSelectionModel)e.getSource(); - if (lsm.isSelectionEmpty()) { - return; - } - else{ - selectedRow3 = lsm.getMinSelectionIndex(); - - - } - } - }); + } return jTable3; } @@ -931,11 +994,12 @@ public class FpdModuleSA extends JDialog implements ActionListener { model3.getValueAt(row, 2) + " " + model3.getValueAt(row, 3) + " " + model3.getValueAt(row, 4); + ffc.genLibraryInstance(model3.getValueAt(row, 1)+"", model3.getValueAt(row, 2)+"", model3.getValueAt(row, 3)+"", model3.getValueAt(row, 4)+"", moduleKey); // // Add pcd information of selected instance to current moduleSA // try{ - ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey)); + ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey)); } catch (Exception exception) { JOptionPane.showMessageDialog(frame, "PCD Insertion Fail. " + exception.getMessage()); @@ -967,6 +1031,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { model1.getValueAt(row, 2) + " " + model1.getValueAt(row, 3) + " " + model1.getValueAt(row, 4)); + ffc.removeLibraryInstance(moduleKey, row); model1.removeRow(row); } @@ -1007,14 +1072,14 @@ public class FpdModuleSA extends JDialog implements ActionListener { public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == jButton2) { - ffc.removeLibraryInstances(moduleKey); - for (int i = 0; i < model1.getRowCount(); ++i) { - String mg = model1.getValueAt(i, 1)+""; - String mv = model1.getValueAt(i, 2)+""; - String pg = model1.getValueAt(i, 3)+""; - String pv = model1.getValueAt(i, 4)+""; - ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey); - } +// ffc.removeLibraryInstances(moduleKey); +// for (int i = 0; i < model1.getRowCount(); ++i) { +// String mg = model1.getValueAt(i, 1)+""; +// String mv = model1.getValueAt(i, 2)+""; +// String pg = model1.getValueAt(i, 3)+""; +// String pv = model1.getValueAt(i, 4)+""; +// ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey); +// } this.setVisible(false); } } @@ -1043,7 +1108,7 @@ public class FpdModuleSA extends JDialog implements ActionListener { jPanel8.add(getJButton5(), null); jPanel8.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentShown(java.awt.event.ComponentEvent e) { - init(moduleKey); + initModuleSAOptions(moduleKey); } }); } @@ -1242,6 +1307,217 @@ public class FpdModuleSA extends JDialog implements ActionListener { protected void centerWindow() { centerWindow(this.getSize().width, this.getSize().height); } +/** + * This method initializes jPanel9 + * + * @return javax.swing.JPanel + */ +private JPanel getJPanel9() { + if (jPanel9 == null) { + GridLayout gridLayout = new GridLayout(); + gridLayout.setRows(3); + gridLayout.setColumns(2); + jPanel9 = new JPanel(); + jPanel9.setLayout(gridLayout); + jPanel9.setPreferredSize(new java.awt.Dimension(600,90)); + jPanel9.add(getJPanel12(), null); + jPanel9.add(getJPanel10(), null); + jPanel9.add(getJPanel11(), null); + } + return jPanel9; +} +/** + * This method initializes jPanel10 + * + * @return javax.swing.JPanel + */ +private JPanel getJPanel10() { + if (jPanel10 == null) { + FlowLayout flowLayout2 = new FlowLayout(); + flowLayout2.setAlignment(java.awt.FlowLayout.LEFT); + jLabel10 = new JLabel(); + jLabel10.setText("Max Datum Size"); + jPanel10 = new JPanel(); + jPanel10.setLayout(flowLayout2); + jPanel10.add(jLabel10, null); + jPanel10.add(getJTextField3(), null); + } + return jPanel10; +} +/** + * This method initializes jPanel11 + * + * @return javax.swing.JPanel + */ +private JPanel getJPanel11() { + if (jPanel11 == null) { + FlowLayout flowLayout3 = new FlowLayout(); + flowLayout3.setAlignment(java.awt.FlowLayout.LEFT); + jLabel11 = new JLabel(); + jLabel11.setText("Default Value"); + jLabel11.setPreferredSize(new java.awt.Dimension(91,16)); + jPanel11 = new JPanel(); + jPanel11.setLayout(flowLayout3); + jPanel11.add(jLabel11, null); + jPanel11.add(getJTextField4(), null); + jPanel11.add(getJComboBox1(), null); + } + return jPanel11; +} +/** + * This method initializes jPanel12 + * + * @return javax.swing.JPanel + */ +private JPanel getJPanel12() { + if (jPanel12 == null) { + FlowLayout flowLayout1 = new FlowLayout(); + flowLayout1.setAlignment(java.awt.FlowLayout.LEFT); + jLabel9 = new JLabel(); + jLabel9.setText("Item Type"); + jLabel9.setPreferredSize(new java.awt.Dimension(91,16)); + jPanel12 = new JPanel(); + jPanel12.setLayout(flowLayout1); + jPanel12.add(jLabel9, null); + jPanel12.add(getJComboBox(), null); + jPanel12.add(getJButton6(), null); + } + return jPanel12; +} +/** + * This method initializes jComboBox + * + * @return javax.swing.JComboBox + */ +private JComboBox getJComboBox() { + if (jComboBox == null) { + jComboBox = new JComboBox(); + jComboBox.setPreferredSize(new java.awt.Dimension(200,20)); + jComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent e) { + int row = jTable.getSelectedRow(); + if (row < 0 || jTable.getValueAt(row, 2).equals(jComboBox.getSelectedItem())) { + return; + } + if (jComboBox.getItemCount() == 3) { + if (!jComboBox.getSelectedItem().equals("DYNAMIC")) { + pcdDynamicToNonDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+""); + } + else{ + pcdNonDynamicToDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+""); + } + } + } + }); + } + return jComboBox; +} + +private void pcdDynamicToNonDynamic(String cName, String tsGuid) { + String[][] saa = new String[ffc.getDynamicPcdBuildDataCount()][5]; + ffc.getDynamicPcdBuildData(saa); + String maxSize = ""; + String value = ""; + for (int i = 0; i < saa.length; ++i) { + if (saa[i][0].equals(cName) && saa[i][2].equals(tsGuid)) { + maxSize = saa[i][3]; + value = ffc.getDynamicPcdBuildDataValue(i); + break; + } + } + + ArrayList al = ffc.getDynPcdMapValue(cName + " " + tsGuid); + for (int i = 0; i < al.size(); ++i) { + String[] s = al.get(i).split(" "); + String mKey = s[0] + s[1] + s[2] + s[3]; + ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", maxSize, value); + s[4] = jComboBox.getSelectedItem()+""; + al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]); + } + + ffc.removeDynamicPcdBuildData(cName, tsGuid); +} + +private void pcdNonDynamicToDynamic(String cName, String tsGuid) { + ArrayList al = ffc.getDynPcdMapValue(cName + " " + tsGuid); + for (int i = 0; i < al.size(); ++i) { + String[] s = al.get(i).split(" "); + String mKey = s[0] + s[1] + s[2] + s[3]; + ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", jTextField3.getText(), jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+""); + s[4] = jComboBox.getSelectedItem()+""; + al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]); + } + try{ + ffc.addDynamicPcdBuildData(cName, jTable.getValueAt(jTable.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTable.getValueAt(jTable.getSelectedRow(), 5)+"", jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+""); + } + catch(Exception e){ + JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage()); + } +} +/** + * This method initializes jTextField3 + * + * @return javax.swing.JTextField + */ +private JTextField getJTextField3() { + if (jTextField3 == null) { + jTextField3 = new JTextField(); + jTextField3.setPreferredSize(new java.awt.Dimension(200,20)); + } + return jTextField3; +} +/** + * This method initializes jTextField4 + * + * @return javax.swing.JTextField + */ +private JTextField getJTextField4() { + if (jTextField4 == null) { + jTextField4 = new JTextField(); + jTextField4.setPreferredSize(new java.awt.Dimension(200,20)); + } + return jTextField4; +} +/** + * This method initializes jButton6 + * + * @return javax.swing.JButton + */ +private JButton getJButton6() { + if (jButton6 == null) { + jButton6 = new JButton(); + jButton6.setPreferredSize(new java.awt.Dimension(150,20)); + jButton6.setText("Update PCD Data"); + jButton6.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + int row = jTable.getSelectedRow(); + if (row < 0) { + return; + } + model.setValueAt(jComboBox.getSelectedItem(), row, 2); + model.setValueAt(jTextField3.getText(), row, 4); + model.setValueAt(jTextField4.isVisible()? jTextField4.getText():jComboBox1.getSelectedItem(), row, 6); + ffc.updatePcdData(moduleKey, model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+""); + } + }); + } + return jButton6; +} +/** + * This method initializes jComboBox1 + * + * @return javax.swing.JComboBox + */ +private JComboBox getJComboBox1() { + if (jComboBox1 == null) { + jComboBox1 = new JComboBox(); + jComboBox1.setPreferredSize(new java.awt.Dimension(100,20)); + jComboBox1.setVisible(false); + jComboBox1.addItem("true"); + jComboBox1.addItem("false"); + } + return jComboBox1; +} } // @jve:decl-index=0:visual-constraint="10,10" diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdPlatformDefs.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdPlatformDefs.java index 2ee6371c3d..c9538b7fd2 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdPlatformDefs.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdPlatformDefs.java @@ -527,8 +527,9 @@ public class FpdPlatformDefs extends IInternalFrame { if (jComboBox == null) { jComboBox = new JComboBox(); jComboBox.setPreferredSize(new Dimension(100, 20)); - jComboBox.addItem("MODULE"); jComboBox.addItem("UNIFIED"); + jComboBox.addItem("MODULE"); + jComboBox.setSelectedIndex(0); jComboBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent e) {