]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/ModulePCDs.java
remove unnecessary check for NULL pointer.
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / ModulePCDs.java
CommitLineData
a13899c5 1/** @file\r
2 \r
3 The file is used to create, update PCD of MSA/MBD file\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard.module.ui;\r
16\r
06a19cee 17import java.awt.Dimension;\r
a13899c5 18import java.awt.event.ActionEvent;\r
19import java.awt.event.ComponentEvent;\r
06a19cee 20import java.awt.event.MouseEvent;\r
a13899c5 21import java.util.Vector;\r
22\r
23import javax.swing.JButton;\r
a13899c5 24import javax.swing.JPanel;\r
25import javax.swing.JScrollPane;\r
06a19cee 26import javax.swing.JTable;\r
27import javax.swing.ListSelectionModel;\r
28import javax.swing.event.ListSelectionEvent;\r
a13899c5 29\r
30import org.tianocore.PcdCodedDocument;\r
31import org.tianocore.PcdItemTypes;\r
fd16c6d5 32import org.tianocore.PcdUsage;\r
a13899c5 33import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
34import org.tianocore.PcdCodedDocument.PcdCoded;\r
35import org.tianocore.PcdCodedDocument.PcdCoded.PcdEntry;\r
36import org.tianocore.frameworkwizard.common.DataType;\r
06a19cee 37import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
a13899c5 38import org.tianocore.frameworkwizard.common.Log;\r
a13899c5 39import org.tianocore.frameworkwizard.common.Tools;\r
79cb6fdb 40import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
06a19cee 41import org.tianocore.frameworkwizard.common.ui.IFrame;\r
a13899c5 42import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
79cb6fdb 43import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdCodedIdentification;\r
44import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdCodedVector;\r
06a19cee 45import org.tianocore.frameworkwizard.module.ui.dialog.PCDsDlg;\r
a13899c5 46\r
47/**\r
48 The class is used to create, update PCD of MSA/MBD file\r
49 It extends IInternalFrame\r
50 \r
51\r
52\r
53 **/\r
54public class ModulePCDs extends IInternalFrame {\r
55\r
56 ///\r
57 /// Define class Serial Version UID\r
58 ///\r
59 private static final long serialVersionUID = 2227717658188438696L;\r
60\r
61 //\r
62 //Define class members\r
63 //\r
64 private JPanel jContentPane = null;\r
65\r
a13899c5 66 private JButton jButtonAdd = null;\r
67\r
68 private JButton jButtonRemove = null;\r
69\r
70 private JButton jButtonUpdate = null;\r
71\r
72 private JScrollPane jScrollPane = null;\r
73\r
06a19cee 74 private JScrollPane jScrollPaneTable = null;\r
a13899c5 75\r
06a19cee 76 private JTable jTable = null;\r
a13899c5 77\r
78 //\r
79 // Not used by UI\r
80 //\r
a13899c5 81 private OpeningModuleType omt = null;\r
82\r
83 private ModuleSurfaceArea msa = null;\r
84\r
85 private PcdCodedDocument.PcdCoded pcds = null;\r
86\r
87 private PcdCodedIdentification id = null;\r
88\r
89 private PcdCodedVector vid = new PcdCodedVector();\r
90\r
06a19cee 91 private IDefaultTableModel model = null;\r
a13899c5 92\r
06a19cee 93 private int selectedRow = -1;\r
a9e882c9 94 \r
95 private IFrame parentFrame = null;\r
a13899c5 96\r
97 /**\r
98 This method initializes jButtonAdd \r
99 \r
100 @return javax.swing.JButton jButtonAdd\r
101 \r
102 **/\r
103 private JButton getJButtonAdd() {\r
104 if (jButtonAdd == null) {\r
105 jButtonAdd = new JButton();\r
3767c118 106 jButtonAdd.setBounds(new java.awt.Rectangle(230, 245, 90, 20));\r
a13899c5 107 jButtonAdd.setText("Add");\r
108 jButtonAdd.addActionListener(this);\r
3767c118 109 jButtonAdd.setPreferredSize(new java.awt.Dimension(90, 20));\r
a13899c5 110 }\r
111 return jButtonAdd;\r
112 }\r
113\r
114 /**\r
115 This method initializes jButtonRemove \r
116 \r
117 @return javax.swing.JButton jButtonRemove\r
118 \r
119 **/\r
120 private JButton getJButtonRemove() {\r
121 if (jButtonRemove == null) {\r
122 jButtonRemove = new JButton();\r
3767c118 123 jButtonRemove.setBounds(new java.awt.Rectangle(400, 245, 90, 20));\r
a13899c5 124 jButtonRemove.setText("Remove");\r
125 jButtonRemove.addActionListener(this);\r
3767c118 126 jButtonRemove.setPreferredSize(new java.awt.Dimension(90, 20));\r
a13899c5 127 }\r
128 return jButtonRemove;\r
129 }\r
130\r
131 /**\r
132 This method initializes jButtonUpdate \r
133 \r
134 @return javax.swing.JButton jButtonUpdate\r
135 \r
136 **/\r
137 private JButton getJButtonUpdate() {\r
138 if (jButtonUpdate == null) {\r
139 jButtonUpdate = new JButton();\r
3767c118 140 jButtonUpdate.setBounds(new java.awt.Rectangle(315, 245, 90, 20));\r
141 jButtonUpdate.setPreferredSize(new java.awt.Dimension(90, 20));\r
06a19cee 142 jButtonUpdate.setText("Edit");\r
a13899c5 143 jButtonUpdate.addActionListener(this);\r
144 }\r
145 return jButtonUpdate;\r
146 }\r
147\r
a13899c5 148 /**\r
149 This method initializes jScrollPane \r
150 \r
151 @return javax.swing.JScrollPane \r
152 */\r
153 private JScrollPane getJScrollPane() {\r
154 if (jScrollPane == null) {\r
155 jScrollPane = new JScrollPane();\r
156 jScrollPane.setViewportView(getJContentPane());\r
157 }\r
158 return jScrollPane;\r
159 }\r
160\r
161 /**\r
06a19cee 162 This method initializes jScrollPaneTable \r
163 \r
164 @return javax.swing.JScrollPane \r
165 **/\r
166 private JScrollPane getJScrollPaneTable() {\r
167 if (jScrollPaneTable == null) {\r
168 jScrollPaneTable = new JScrollPane();\r
169 jScrollPaneTable.setBounds(new java.awt.Rectangle(15, 10, 470, 420));\r
170 jScrollPaneTable.setPreferredSize(new Dimension(470, 420));\r
171 jScrollPaneTable.setViewportView(getJTable());\r
a13899c5 172 }\r
06a19cee 173 return jScrollPaneTable;\r
a13899c5 174 }\r
175\r
176 /**\r
06a19cee 177 This method initializes jTable \r
178 \r
179 @return javax.swing.JTable \r
180 **/\r
181 private JTable getJTable() {\r
182 if (jTable == null) {\r
183 jTable = new JTable();\r
184 model = new IDefaultTableModel();\r
185 jTable = new JTable(model);\r
186 jTable.setRowHeight(20);\r
187\r
188 model.addColumn("Name");\r
189 model.addColumn("Type");\r
190 model.addColumn("Value");\r
fd16c6d5 191 model.addColumn("Usage");\r
06a19cee 192\r
ff7bc6c4 193 jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);\r
06a19cee 194 jTable.getSelectionModel().addListSelectionListener(this);\r
195 jTable.getModel().addTableModelListener(this);\r
196 jTable.addMouseListener(this);\r
a13899c5 197 }\r
06a19cee 198 return jTable;\r
a13899c5 199 }\r
200\r
06a19cee 201 public static void main(String[] args) {\r
202\r
a13899c5 203 }\r
204\r
205 /**\r
06a19cee 206 This method initializes this\r
207 \r
a13899c5 208 **/\r
06a19cee 209 private void init() {\r
210 this.setSize(500, 515);\r
211 this.setContentPane(getJScrollPane());\r
212 this.setTitle("Pcd Coded");\r
a13899c5 213 }\r
214\r
215 /**\r
06a19cee 216 This method initializes this\r
217 Fill values to all fields if these values are not empty\r
218 \r
219 @param inPackageDependencies\r
a13899c5 220\r
221 **/\r
06a19cee 222 private void init(PcdCoded inPcdCodeds) {\r
223 init();\r
224 this.pcds = inPcdCodeds;\r
225\r
226 if (this.pcds != null) {\r
227 if (this.pcds.getPcdEntryList().size() > 0) {\r
228 for (int index = 0; index < this.pcds.getPcdEntryList().size(); index++) {\r
229 String arg0 = pcds.getPcdEntryList().get(index).getCName();\r
230 String arg1 = pcds.getPcdEntryList().get(index).getTokenSpaceGuidCName();\r
231\r
232 String arg2 = pcds.getPcdEntryList().get(index).getFeatureFlag();\r
233 Vector<String> arg3 = Tools.convertListToVector(pcds.getPcdEntryList().get(index).getSupArchList());\r
234\r
235 String arg4 = pcds.getPcdEntryList().get(index).getDefaultValue();\r
236 String arg5 = pcds.getPcdEntryList().get(index).getHelpText();\r
237 String arg6 = null;\r
238 if (pcds.getPcdEntryList().get(index).getPcdItemType() != null) {\r
239 arg6 = pcds.getPcdEntryList().get(index).getPcdItemType().toString();\r
240 }\r
fd16c6d5 241 String arg7 = null;\r
242 if (pcds.getPcdEntryList().get(index).getUsage() != null) {\r
243 arg7 = pcds.getPcdEntryList().get(index).getUsage().toString();\r
244 }\r
245 id = new PcdCodedIdentification(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);\r
06a19cee 246 vid.addPcdCoded(id);\r
247 }\r
248 }\r
249 }\r
250 showTable();\r
a13899c5 251 }\r
252\r
a13899c5 253 /**\r
254 This is the default constructor\r
255 \r
256 **/\r
257 public ModulePCDs() {\r
258 super();\r
259 init();\r
260 this.setVisible(true);\r
261 }\r
262\r
263 /**\r
264 This is the override edit constructor\r
265 \r
266 @param inPcds The input data of PCDsDocument.PCDs\r
267 \r
268 **/\r
a9e882c9 269 public ModulePCDs(OpeningModuleType inOmt, IFrame iFrame) {\r
a13899c5 270 super();\r
271 this.omt = inOmt;\r
272 this.msa = omt.getXmlMsa();\r
a9e882c9 273 this.parentFrame = iFrame;\r
a13899c5 274 init(msa.getPcdCoded());\r
275 this.setVisible(true);\r
276 }\r
277\r
a13899c5 278 /**\r
279 This method initializes jContentPane\r
280 \r
281 @return javax.swing.JPanel jContentPane\r
282 \r
283 **/\r
284 private JPanel getJContentPane() {\r
285 if (jContentPane == null) {\r
a13899c5 286 jContentPane = new JPanel();\r
287 jContentPane.setLayout(null);\r
06a19cee 288 jContentPane.setPreferredSize(new java.awt.Dimension(490, 490));\r
289\r
a13899c5 290 jContentPane.add(getJButtonAdd(), null);\r
291 jContentPane.add(getJButtonRemove(), null);\r
292 jContentPane.add(getJButtonUpdate(), null);\r
06a19cee 293 jContentPane.add(getJScrollPaneTable(), null);\r
a13899c5 294 }\r
295 return jContentPane;\r
296 }\r
297\r
06a19cee 298 private void showEdit(int index) {\r
a9e882c9 299 PCDsDlg dlg = new PCDsDlg(vid.getPcdCoded(index), this.parentFrame, omt.getId());\r
06a19cee 300 int result = dlg.showDialog();\r
301 if (result == DataType.RETURN_TYPE_OK) {\r
302 if (index == -1) {\r
303 this.vid.addPcdCoded(dlg.getId());\r
304 } else {\r
305 this.vid.setPcdCoded(dlg.getId(), index);\r
306 }\r
307 this.showTable();\r
308 this.save();\r
309 dlg.dispose();\r
310 }\r
311 if (result == DataType.RETURN_TYPE_CANCEL) {\r
312 dlg.dispose();\r
313 }\r
314 }\r
315\r
a13899c5 316 /**\r
06a19cee 317 Clear all table rows\r
a13899c5 318 \r
319 **/\r
06a19cee 320 private void clearAll() {\r
321 if (model != null) {\r
322 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
323 model.removeRow(index);\r
324 }\r
325 }\r
326 }\r
327\r
328 /**\r
329 Read content of vector and put then into table\r
330 \r
331 **/\r
332 private void showTable() {\r
333 clearAll();\r
334\r
335 if (vid.size() > 0) {\r
336 for (int index = 0; index < vid.size(); index++) {\r
337 model.addRow(vid.toStringVector(index));\r
338 }\r
339 }\r
340 this.jTable.repaint();\r
341 this.jTable.updateUI();\r
a13899c5 342 }\r
343\r
344 /* (non-Javadoc)\r
345 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
346 *\r
347 * Override actionPerformed to listen all actions\r
348 * \r
349 */\r
350 public void actionPerformed(ActionEvent arg0) {\r
351 if (arg0.getSource() == jButtonAdd) {\r
06a19cee 352 showEdit(-1);\r
a13899c5 353 }\r
354 if (arg0.getSource() == jButtonUpdate) {\r
06a19cee 355 if (this.selectedRow < 0) {\r
ed1665f2 356 Log.wrn("Update PcdCoded", "Please select one record first.");\r
a13899c5 357 return;\r
358 }\r
06a19cee 359 showEdit(selectedRow);\r
a13899c5 360 }\r
a13899c5 361\r
06a19cee 362 if (arg0.getSource() == jButtonRemove) {\r
363 if (jTable.isEditing()) {\r
364 jTable.getCellEditor().stopCellEditing();\r
a13899c5 365 }\r
ff7bc6c4 366\r
367 int selectedRows[] = this.jTable.getSelectedRows();\r
368 \r
369 if (selectedRows != null) {\r
370 for (int index = selectedRows.length - 1; index > -1; index--) {\r
371 this.model.removeRow(selectedRows[index]);\r
372 this.vid.removePcdCoded(selectedRows[index]);\r
373 }\r
06a19cee 374 selectedRow = -1;\r
375 this.save();\r
a13899c5 376 }\r
377 }\r
a13899c5 378 }\r
379\r
380 /**\r
381 Save all components of PCDs\r
382 if exists pcds, set the value directly\r
383 if not exists pcds, new an instance first\r
384 \r
385 **/\r
386 public void save() {\r
387 try {\r
388 int count = this.vid.size();\r
389\r
390 this.pcds = PcdCoded.Factory.newInstance();\r
391 if (count > 0) {\r
392 for (int index = 0; index < count; index++) {\r
393 PcdEntry p = PcdEntry.Factory.newInstance();\r
394 if (!isEmpty(vid.getPcdCoded(index).getName())) {\r
395 p.setCName(vid.getPcdCoded(index).getName());\r
396 }\r
397 if (!isEmpty(vid.getPcdCoded(index).getGuid())) {\r
398 p.setTokenSpaceGuidCName(vid.getPcdCoded(index).getGuid());\r
399 }\r
400 if (!isEmpty(vid.getPcdCoded(index).getFeatureFlag())) {\r
401 p.setFeatureFlag(vid.getPcdCoded(index).getFeatureFlag());\r
402 }\r
06a19cee 403 if (vid.getPcdCoded(index).getSupArchList() != null\r
404 && vid.getPcdCoded(index).getSupArchList().size() > 0) {\r
a13899c5 405 p.setSupArchList(vid.getPcdCoded(index).getSupArchList());\r
406 }\r
407 if (!isEmpty(vid.getPcdCoded(index).getValue())) {\r
408 p.setDefaultValue(vid.getPcdCoded(index).getValue());\r
409 }\r
410 if (!isEmpty(vid.getPcdCoded(index).getHelp())) {\r
411 p.setHelpText(vid.getPcdCoded(index).getHelp());\r
412 }\r
413 if (!isEmpty(vid.getPcdCoded(index).getType())) {\r
414 p.setPcdItemType(PcdItemTypes.Enum.forString(vid.getPcdCoded(index).getType()));\r
415 }\r
fd16c6d5 416 if (!isEmpty(vid.getPcdCoded(index).getUsage())) {\r
417 p.setUsage(PcdUsage.Enum.forString(vid.getPcdCoded(index).getUsage()));\r
418 }\r
a13899c5 419 this.pcds.addNewPcdEntry();\r
420 this.pcds.setPcdEntryArray(pcds.getPcdEntryList().size() - 1, p);\r
421 }\r
422 }\r
423\r
424 this.msa.setPcdCoded(pcds);\r
425 this.omt.setSaved(false);\r
426 } catch (Exception e) {\r
ed1665f2 427 Log.wrn("Update PcdCoded", e.getMessage());\r
428 Log.err("Update PcdCoded", e.getMessage());\r
a13899c5 429 }\r
430 }\r
431\r
06a19cee 432 /* (non-Javadoc)\r
433 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
434 *\r
435 */\r
436 public void valueChanged(ListSelectionEvent arg0) {\r
437 if (arg0.getValueIsAdjusting()) {\r
438 return;\r
439 }\r
440 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
441 if (lsm.isSelectionEmpty()) {\r
442 return;\r
443 } else {\r
444 selectedRow = lsm.getMinSelectionIndex();\r
445 }\r
446 }\r
447\r
448 /* (non-Javadoc)\r
449 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)\r
450 *\r
451 */\r
452 public void mouseClicked(MouseEvent arg0) {\r
453 if (arg0.getClickCount() == 2) {\r
454 if (this.selectedRow < 0) {\r
455 return;\r
456 } else {\r
457 showEdit(selectedRow);\r
458 }\r
459 }\r
460 }\r
461\r
a13899c5 462 /* (non-Javadoc)\r
463 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)\r
464 * \r
465 * Override componentResized to resize all components when frame's size is changed\r
466 */\r
467 public void componentResized(ComponentEvent arg0) {\r
468 int intCurrentWidth = this.getJContentPane().getWidth();\r
469 int intCurrentHeight = this.getJContentPane().getHeight();\r
470 int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
471 int intPreferredHeight = this.getJContentPane().getPreferredSize().height;\r
472\r
8792f60f 473 Tools.resizeComponent(this.jScrollPaneTable, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
474 intPreferredHeight);\r
475 Tools.relocateComponent(this.jButtonAdd, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
476 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_ADD_BUTTON,\r
477 DataType.SPACE_TO_BOTTOM_FOR_ADD_BUTTON);\r
478 Tools.relocateComponent(this.jButtonRemove, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
479 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON,\r
480 DataType.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON);\r
481 Tools.relocateComponent(this.jButtonUpdate, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
482 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON,\r
483 DataType.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON);\r
a13899c5 484 }\r
a13899c5 485}\r