]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
UI rearrangement for build options and moduleSa settings.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
CommitLineData
a13899c5 1/** @file\r
2 Java class SpdPcdDefs is GUI for create PCD definition elements of spd file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.packaging.ui;\r
14\r
15import java.awt.Dimension;\r
a13899c5 16import java.awt.event.ActionEvent;\r
a13899c5 17import java.awt.event.ComponentEvent;\r
18\r
a13899c5 19import javax.swing.DefaultCellEditor;\r
20import javax.swing.JFrame;\r
21import javax.swing.JOptionPane;\r
22import javax.swing.JPanel;\r
a13899c5 23import javax.swing.JLabel;\r
24import javax.swing.JTextField;\r
25import javax.swing.JComboBox;\r
26import javax.swing.JButton;\r
27import javax.swing.ListSelectionModel;\r
28\r
29import javax.swing.event.InternalFrameAdapter;\r
30import javax.swing.event.InternalFrameEvent;\r
31import javax.swing.event.ListSelectionEvent;\r
32import javax.swing.event.ListSelectionListener;\r
33import javax.swing.event.TableModelEvent;\r
34import javax.swing.event.TableModelListener;\r
35import javax.swing.table.DefaultTableModel;\r
36import javax.swing.table.TableColumn;\r
37import javax.swing.table.TableModel;\r
38\r
39import org.tianocore.PackageSurfaceAreaDocument;\r
a13899c5 40\r
ce73a791 41import org.tianocore.frameworkwizard.common.DataValidation;\r
8792f60f 42import org.tianocore.frameworkwizard.common.Tools;\r
d6d24759 43import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
a13899c5 44import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
45import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
46import javax.swing.JScrollPane;\r
47import javax.swing.JTable;\r
48import javax.swing.JCheckBox;\r
49import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
ce73a791 50import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
51\r
a13899c5 52import java.awt.Rectangle;\r
53import java.util.Vector;\r
54\r
55/**\r
56 GUI for create PCD definition elements of spd file\r
57 \r
58 @since PackageEditor 1.0\r
59**/\r
60public class SpdPcdDefs extends IInternalFrame implements TableModelListener{\r
61\r
0b5e1cc3 62 /**\r
63 * \r
64 */\r
65 private static final long serialVersionUID = 1L;\r
66\r
a13899c5 67 static JFrame frame;\r
68 \r
69 private JPanel jContentPane = null; \r
70\r
71 private JLabel jLabelItemType = null;\r
72\r
73 private JLabel jLabelC_Name = null;\r
74\r
75 private JTextField jTextFieldC_Name = null;\r
76\r
77 private JLabel jLabelToken = null;\r
78\r
79 private JTextField jTextFieldToken = null;\r
80\r
81 private JLabel jLabelDataType = null;\r
82\r
83 private JButton jButtonOk = null;\r
84\r
85 private JButton jButtonCancel = null;\r
86\r
87 private JComboBox jComboBoxDataType = null;\r
88\r
89 private SpdFileContents sfc = null;\r
d6d24759 90 \r
91 private OpeningPackageType docConsole = null;\r
a13899c5 92\r
93 private StarLabel jStarLabel2 = null;\r
94\r
95 private StarLabel jStarLabel3 = null;\r
96\r
97 private StarLabel jStarLabel4 = null;\r
98\r
99 private StarLabel jStarLabel = null;\r
100\r
101 private StarLabel jStarLabel1 = null;\r
102\r
103 private JLabel jLabelTokenSpace = null;\r
104\r
5f97c029 105 private JComboBox jComboBoxTsGuid = null;\r
a13899c5 106\r
107 private JLabel jLabelVarVal = null;\r
108\r
4da2e625 109 private JTextField jTextFieldHelp = null;\r
a13899c5 110\r
111 private JLabel jLabelDefVal = null;\r
112\r
113 private JTextField jTextFieldDefaultValue = null;\r
114\r
115 private JButton jButtonAdd = null;\r
116 \r
117 private CheckboxTableModel model = null;\r
118\r
119 private JButton jButtonRemove = null;\r
120\r
121 private JButton jButtonClearAll = null;\r
122\r
a13899c5 123 private JScrollPane jScrollPane = null;\r
124\r
125 private JTable jTable = null;\r
126 \r
127 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="390,10"\r
128 \r
129 private int selectedRow = -1;\r
130\r
131 private StarLabel starLabel = null;\r
132\r
4da2e625 133 private JCheckBox jCheckBoxFeatureFlag = null;\r
a13899c5 134\r
4da2e625 135 private JCheckBox jCheckBoxFixedAtBuild = null;\r
a13899c5 136\r
4da2e625 137 private JCheckBox jCheckBoxPatchInMod = null;\r
a13899c5 138\r
4da2e625 139 private JCheckBox jCheckBoxDyn = null;\r
a13899c5 140\r
4da2e625 141 private JCheckBox jCheckBoxDynEx = null;\r
a13899c5 142\r
4da2e625 143 private JScrollPane jScrollPaneArch = null;\r
a13899c5 144\r
4da2e625 145 private ICheckBoxList iCheckBoxListArch = null;\r
a13899c5 146\r
4da2e625 147 private JScrollPane jScrollPaneMod = null;\r
a13899c5 148\r
4da2e625 149 private ICheckBoxList iCheckBoxListMod = null;\r
a13899c5 150\r
4da2e625 151 private JLabel jLabelSupMod = null;\r
a13899c5 152\r
4da2e625 153 private JLabel jLabelSupArch = null;\r
a13899c5 154\r
155 /**\r
156 This method initializes this\r
157 \r
158 **/\r
159 private void initialize() {\r
209abc92 160 this.setTitle("PCD Declarations");\r
a13899c5 161 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
162\r
163 }\r
164\r
165 /**\r
166 This method initializes jTextFieldC_Name \r
167 \r
168 @return javax.swing.JTextField \r
169 **/\r
170 private JTextField getJTextFieldC_Name() {\r
171 if (jTextFieldC_Name == null) {\r
172 jTextFieldC_Name = new JTextField();\r
173 jTextFieldC_Name.setBounds(new java.awt.Rectangle(156,9,317,20));\r
174 jTextFieldC_Name.setPreferredSize(new java.awt.Dimension(315,20));\r
175 }\r
176 return jTextFieldC_Name;\r
177 }\r
178\r
179 /**\r
180 This method initializes jTextFieldToken \r
181 \r
182 @return javax.swing.JTextField \r
183 **/\r
184 private JTextField getJTextFieldToken() {\r
185 if (jTextFieldToken == null) {\r
186 jTextFieldToken = new JTextField();\r
187 jTextFieldToken.setBounds(new java.awt.Rectangle(156,33,317,20));\r
188 jTextFieldToken.setPreferredSize(new java.awt.Dimension(315,20));\r
189 }\r
190 return jTextFieldToken;\r
191 }\r
192\r
193 /**\r
194 This method initializes jButtonOk \r
195 \r
196 @return javax.swing.JButton \r
197 **/\r
198 private JButton getJButtonOk() {\r
199 if (jButtonOk == null) {\r
200 jButtonOk = new JButton();\r
201 jButtonOk.setText("OK");\r
202 jButtonOk.setBounds(new java.awt.Rectangle(279,276,90,20));\r
203 jButtonOk.setVisible(false);\r
204 jButtonOk.addActionListener(this);\r
205 }\r
206 return jButtonOk;\r
207 }\r
208\r
209 /**\r
210 This method initializes jButtonCancel \r
211 \r
212 @return javax.swing.JButton \r
213 **/\r
214 private JButton getJButtonCancel() {\r
215 if (jButtonCancel == null) {\r
216 jButtonCancel = new JButton();\r
217 jButtonCancel.setText("Cancel");\r
218 jButtonCancel.setBounds(new java.awt.Rectangle(389,276,82,20));\r
219 jButtonCancel.setVisible(false);\r
220 jButtonCancel.addActionListener(this);\r
221 }\r
222 return jButtonCancel;\r
223 }\r
224\r
225 /**\r
226 This method initializes jComboBoxDataType \r
227 \r
228 @return javax.swing.JComboBox \r
229 **/\r
230 private JComboBox getJComboBoxDataType() {\r
231 if (jComboBoxDataType == null) {\r
232 jComboBoxDataType = new JComboBox();\r
233 jComboBoxDataType.setBounds(new java.awt.Rectangle(156,84,110,20));\r
234 }\r
235 return jComboBoxDataType;\r
236 }\r
237\r
238 /**\r
239 This is the default constructor\r
240 **/\r
241 public SpdPcdDefs() {\r
242 super();\r
243 init();\r
244 initialize();\r
245 \r
246 }\r
247\r
248 public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {\r
249 this();\r
250 sfc = new SpdFileContents(inPsa);\r
251 init(sfc);\r
252 }\r
d6d24759 253 \r
254 public SpdPcdDefs(OpeningPackageType opt) {\r
255 this(opt.getXmlSpd());\r
256 docConsole = opt;\r
257 }\r
a13899c5 258 /**\r
259 This method initializes this\r
260 \r
261 @return void\r
262 **/\r
263 private void init() {\r
264 this.setSize(500, 650);\r
265 this.setContentPane(getJContentPane());\r
266 this.addInternalFrameListener(new InternalFrameAdapter(){\r
267 public void internalFrameDeactivated(InternalFrameEvent e){\r
268 if (jTable.isEditing()) {\r
269 jTable.getCellEditor().stopCellEditing();\r
270 }\r
271 }\r
272 });\r
5f97c029 273 \r
a13899c5 274 this.setVisible(true);\r
275 }\r
276\r
277 private void init(SpdFileContents sfc){\r
5f97c029 278 initFrame(sfc);\r
a13899c5 279 if (sfc.getSpdPcdDefinitionCount() == 0) {\r
280 return ;\r
281 }\r
282 String[][] saa = new String[sfc.getSpdPcdDefinitionCount()][8];\r
283 String[][] usage = new String[sfc.getSpdPcdDefinitionCount()][5];\r
284 Object[] rowData = new Object[13];\r
285 sfc.getSpdPcdDefinitions(saa, usage);\r
286 int i = 0;\r
287 while (i < saa.length) {\r
288 \r
289 for (int k = 0; k < 6; ++k) {\r
290 rowData[k] = saa[i][k];\r
291 }\r
af25df16 292 for (int m = 6; m < 11; ++m) {\r
a13899c5 293 rowData[m] = new Boolean("false");\r
294 }\r
295 int j = 0;\r
296 while (j < 5) {\r
297 if (usage[i][j] == null || usage[i][j].length()==0){\r
298 ++j;\r
299 continue;\r
300 }\r
301 if (usage[i][j].equals("FEATURE_FLAG")){\r
302 rowData[6] = new Boolean("true");\r
303 }\r
304 if (usage[i][j].equals("FIXED_AT_BUILD")){\r
305 rowData[7] = new Boolean("true");\r
306 }\r
307 if (usage[i][j].equals("PATCHABLE_IN_MODULE")){\r
308 rowData[8] = new Boolean("true");\r
309 }\r
310 if (usage[i][j].equals("DYNAMIC")){\r
311 rowData[9] = new Boolean("true");\r
312 }\r
313 if (usage[i][j].equals("DYNAMIC_EX")){\r
314 rowData[10] = new Boolean("true");\r
315 }\r
316 \r
317 ++j;\r
318 }\r
319 \r
320 rowData[11] = saa[i][6];\r
321 rowData[12] = saa[i][7];\r
322 \r
323 model.addRow(rowData);\r
324 \r
325 i++;\r
326 }\r
327 \r
328 \r
329 \r
330 }\r
331 \r
332 private JScrollPane getJContentPane(){\r
333 if (topScrollPane == null){\r
334 topScrollPane = new JScrollPane();\r
335 topScrollPane.setSize(new java.awt.Dimension(482,451));\r
336 topScrollPane.setViewportView(getJContentPane1());\r
337 }\r
338 return topScrollPane;\r
339 }\r
340 private JPanel getJContentPane1() {\r
341 if (jContentPane == null) { \r
342 \r
4da2e625 343 jLabelSupArch = new JLabel();\r
344 jLabelSupArch.setBounds(new java.awt.Rectangle(241,192,89,16));\r
816ea437 345 jLabelSupArch.setText("Supported Architectures");\r
4da2e625 346 jLabelSupArch.setEnabled(true);\r
347 jLabelSupMod = new JLabel();\r
348 jLabelSupMod.setBounds(new java.awt.Rectangle(15,193,103,16));\r
816ea437 349 jLabelSupMod.setText("Supported Module type");\r
4da2e625 350 jLabelSupMod.setEnabled(true);\r
a13899c5 351 starLabel = new StarLabel();\r
352 starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));\r
353 jLabelDefVal = new JLabel();\r
354 jLabelDefVal.setBounds(new java.awt.Rectangle(277,84,80,20));\r
355 jLabelDefVal.setText("Default Value");\r
356 jLabelVarVal = new JLabel();\r
357 jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));\r
358 jLabelVarVal.setText("Valid Usage");\r
359 jLabelC_Name = new JLabel();\r
816ea437 360 jLabelC_Name.setText("C Name");\r
a13899c5 361 jLabelC_Name.setBounds(new java.awt.Rectangle(11,9,140,20));\r
362 jLabelTokenSpace = new JLabel();\r
363 jLabelTokenSpace.setBounds(new java.awt.Rectangle(11,58,140,20));\r
364 jLabelTokenSpace.setText("Token Space");\r
365 jLabelDataType = new JLabel();\r
366 jLabelDataType.setText("Data Type");\r
367 jLabelDataType.setBounds(new java.awt.Rectangle(11,83,140,20));\r
368 jLabelToken = new JLabel();\r
c1dbe93d 369 jLabelToken.setText("Token Number");\r
a13899c5 370 jLabelToken.setBounds(new java.awt.Rectangle(11,33,140,20));\r
371 jLabelItemType = new JLabel();\r
372 jLabelItemType.setText("Help Text");\r
373 jLabelItemType.setBounds(new java.awt.Rectangle(11,108,140,20));\r
374 \r
375 \r
376 jContentPane = new JPanel();\r
377 jContentPane.setLayout(null);\r
378 jContentPane.setPreferredSize(new java.awt.Dimension(479,375));\r
379 \r
380 jContentPane.add(jLabelItemType, null);\r
381 jContentPane.add(jLabelC_Name, null);\r
382 jContentPane.add(jLabelTokenSpace, null);\r
5f97c029 383 jContentPane.add(getJComboBoxTsGuid(), null);\r
a13899c5 384 jContentPane.add(jLabelVarVal, null);\r
385 jContentPane.add(getJTextFieldC_Name(), null);\r
386 jContentPane.add(jLabelToken, null);\r
387 jContentPane.add(getJTextFieldToken(), null);\r
388 jContentPane.add(jLabelDataType, null);\r
389 jContentPane.add(getJButtonOk(), null);\r
390 jContentPane.add(getJButtonCancel(), null);\r
391 jContentPane.add(getJComboBoxDataType(), null);\r
392 \r
393 jStarLabel = new StarLabel();\r
394 jStarLabel1 = new StarLabel();\r
395 jStarLabel1.setBounds(new java.awt.Rectangle(2,8,10,20));\r
396 jStarLabel2 = new StarLabel();\r
397 jStarLabel3 = new StarLabel();\r
398 jStarLabel4 = new StarLabel();\r
399 jStarLabel.setLocation(new java.awt.Point(2,84));\r
400 jStarLabel4.setLocation(new java.awt.Point(2, 109));\r
401 jStarLabel2.setLocation(new java.awt.Point(2,33));\r
402 jStarLabel3.setLocation(new java.awt.Point(2, 58));\r
403 jStarLabel3.setSize(new java.awt.Dimension(8,20));\r
404 jContentPane.add(jStarLabel2, null);\r
405 jContentPane.add(jStarLabel3, null);\r
406 jContentPane.add(jStarLabel, null);\r
407 jContentPane.add(jStarLabel1, null);\r
408 jContentPane.add(jStarLabel4, null);\r
4da2e625 409 jContentPane.add(getJTextFieldHelp(), null);\r
a13899c5 410 jContentPane.add(jLabelDefVal, null);\r
411 jContentPane.add(getJTextFieldDefaultValue(), null);\r
412 jContentPane.add(getJButtonAdd(), null);\r
413 jContentPane.add(getJButtonRemove(), null);\r
414 jContentPane.add(getJButtonClearAll(), null);\r
a13899c5 415 jContentPane.add(getJScrollPane(), null);\r
416 jContentPane.add(starLabel, null);\r
4da2e625 417 jContentPane.add(getJCheckBoxFeatureFlag(), null);\r
418 jContentPane.add(getJCheckBoxFixedAtBuild(), null);\r
419 jContentPane.add(getJCheckBoxPatchInMod(), null);\r
420 jContentPane.add(getJCheckBoxDyn(), null);\r
421 jContentPane.add(getJCheckBoxDynEx(), null);\r
422 jContentPane.add(getJScrollPaneArch(), null);\r
423 jContentPane.add(getJScrollPaneMod(), null);\r
424 jContentPane.add(jLabelSupMod, null);\r
425 jContentPane.add(jLabelSupArch, null);\r
a13899c5 426 }\r
427 return jContentPane;\r
428 }\r
429\r
430 /**\r
431 This method initializes comboboxes \r
432 jContentPane.add(jLabelTokenSpace, null);\r
433 \r
434 **/\r
5f97c029 435 private void initFrame(SpdFileContents sfc) {\r
a13899c5 436\r
437 jComboBoxDataType.addItem("UINT8");\r
438 jComboBoxDataType.addItem("UINT16");\r
439 jComboBoxDataType.addItem("UINT32");\r
440 jComboBoxDataType.addItem("UINT64");\r
441 jComboBoxDataType.addItem("VOID*");\r
442 jComboBoxDataType.addItem("BOOLEAN");\r
443 jComboBoxDataType.setSelectedIndex(0);\r
5f97c029 444 \r
445 Vector<String> vGuidCName = new Vector<String>();\r
446 sfc.getSpdGuidDeclWithType(vGuidCName, "TOKEN_SPACE_GUID");\r
447 for (int i = 0; i < vGuidCName.size(); ++i) {\r
448 jComboBoxTsGuid.addItem(vGuidCName.get(i));\r
449 }\r
a13899c5 450 }\r
451\r
452 public void actionPerformed(ActionEvent arg0) {\r
453 \r
5f97c029 454 \r
a13899c5 455 if (arg0.getSource() == jButtonOk) {\r
456 this.save();\r
457 this.dispose();\r
a13899c5 458 }\r
459 if (arg0.getSource() == jButtonCancel) {\r
460 this.dispose();\r
461 }\r
462\r
463 if (arg0.getSource() == jButtonAdd) {\r
464 //ToDo: check before add\r
5f97c029 465 \r
4da2e625 466 boolean[] b = {jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected()};\r
ce73a791 467 if (!checkValidUsage(b)) {\r
a13899c5 468 return;\r
469 }\r
4da2e625 470 String archList = vectorToString(iCheckBoxListArch.getAllCheckedItemsString());\r
a13899c5 471 if (archList.length() == 0) {\r
472 archList = null;\r
473 }\r
4da2e625 474 String modTypeList = vectorToString(iCheckBoxListMod.getAllCheckedItemsString());\r
a13899c5 475 if (modTypeList.length() == 0) {\r
476 modTypeList = null;\r
477 }\r
478 Object[] row = {jTextFieldC_Name.getText(), jTextFieldToken.getText(),\r
5f97c029 479 jComboBoxTsGuid.getSelectedItem(), jComboBoxDataType.getSelectedItem(), \r
4da2e625 480 jTextFieldDefaultValue.getText(), jTextFieldHelp.getText(),\r
481 jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),\r
482 jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),\r
a13899c5 483 archList, modTypeList};\r
ce73a791 484 if (!dataValidation(row)) {\r
485 return;\r
486 }\r
5f97c029 487 \r
488 if (tokenCNameExisted(jTextFieldToken.getText(), jTextFieldC_Name.getText())) {\r
489 return;\r
490 }\r
491 \r
a13899c5 492 model.addRow(row);\r
af25df16 493 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
4da2e625 494 String usage = getValidUsage(jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected());\r
a13899c5 495 if (usage.length() == 0) {\r
496 usage = null;\r
497 }\r
498 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);\r
5f97c029 499 docConsole.setSaved(false);\r
a13899c5 500 }\r
501 //\r
502 // remove selected line\r
503 //\r
504 if (arg0.getSource() == jButtonRemove) {\r
505 if (jTable.isEditing()){\r
506 jTable.getCellEditor().stopCellEditing();\r
507 }\r
508 int rowSelected = selectedRow;\r
509 if (rowSelected >= 0) {\r
510 model.removeRow(rowSelected);\r
511 sfc.removeSpdPcdDefinition(rowSelected);\r
5f97c029 512 docConsole.setSaved(false);\r
a13899c5 513 }\r
514 }\r
515\r
516 if (arg0.getSource() == jButtonClearAll) {\r
517 if (model.getRowCount() == 0) {\r
518 return;\r
519 }\r
520 model.setRowCount(0);\r
521 sfc.removeSpdPcdDefinition();\r
5f97c029 522 docConsole.setSaved(false);\r
a13899c5 523 }\r
524 \r
a13899c5 525 }\r
526\r
527 protected void save() {\r
528 \r
529 }\r
530\r
531 /**\r
5f97c029 532 * This method initializes jComboBoxTsGuid \r
a13899c5 533 * \r
5f97c029 534 * @return javax.swing.JComboBox \r
a13899c5 535 */\r
5f97c029 536 private JComboBox getJComboBoxTsGuid() {\r
537 if (jComboBoxTsGuid == null) {\r
538 jComboBoxTsGuid = new JComboBox();\r
539 jComboBoxTsGuid.setBounds(new java.awt.Rectangle(156,58,315,20));\r
540 \r
a13899c5 541 }\r
5f97c029 542 return jComboBoxTsGuid;\r
a13899c5 543 }\r
544\r
545 /**\r
546 * This method initializes jTextField \r
547 * \r
548 * @return javax.swing.JTextField \r
549 */\r
4da2e625 550 private JTextField getJTextFieldHelp() {\r
551 if (jTextFieldHelp == null) {\r
552 jTextFieldHelp = new JTextField();\r
553 jTextFieldHelp.setBounds(new java.awt.Rectangle(156,108,317,20));\r
554 jTextFieldHelp.setPreferredSize(new java.awt.Dimension(315,20));\r
a13899c5 555 }\r
4da2e625 556 return jTextFieldHelp;\r
a13899c5 557 }\r
558\r
559 /**\r
560 * This method initializes jTextFieldDefaultValue \r
561 * \r
562 * @return javax.swing.JTextField \r
563 */\r
564 private JTextField getJTextFieldDefaultValue() {\r
565 if (jTextFieldDefaultValue == null) {\r
566 jTextFieldDefaultValue = new JTextField();\r
567 jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(368,84,105,20));\r
568 jTextFieldDefaultValue.setPreferredSize(new java.awt.Dimension(104,20));\r
569 }\r
570 return jTextFieldDefaultValue;\r
571 }\r
572\r
573 /**\r
574 * This method initializes jButtonAdd \r
575 * \r
576 * @return javax.swing.JButton \r
577 */\r
578 private JButton getJButtonAdd() {\r
579 if (jButtonAdd == null) {\r
580 jButtonAdd = new JButton();\r
581 jButtonAdd.setBounds(new java.awt.Rectangle(195,277,71,20));\r
582 jButtonAdd.setPreferredSize(new java.awt.Dimension(70,20));\r
583 jButtonAdd.setText("Add");\r
584 jButtonAdd.addActionListener(this);\r
585 }\r
586 return jButtonAdd; \r
587 \r
588 } \r
589 \r
590 /**\r
591 * This method initializes jButtonRemove \r
592 * \r
593 * @return javax.swing.JButton \r
594 */\r
595 private JButton getJButtonRemove() {\r
596 if (jButtonRemove == null) {\r
597 jButtonRemove = new JButton();\r
598 jButtonRemove.setBounds(new java.awt.Rectangle(278,277,81,20));\r
599 jButtonRemove.setPreferredSize(new java.awt.Dimension(70,20));\r
600 jButtonRemove.setText("Delete");\r
601 jButtonRemove.addActionListener(this);\r
602 }\r
603 return jButtonRemove;\r
604 }\r
605\r
606 /**\r
607 * This method initializes jButtonClearAll \r
608 * \r
609 * @return javax.swing.JButton \r
610 */\r
611 private JButton getJButtonClearAll() {\r
612 if (jButtonClearAll == null) {\r
613 jButtonClearAll = new JButton();\r
614 jButtonClearAll.setBounds(new java.awt.Rectangle(382,277,90,20));\r
615 jButtonClearAll.setPreferredSize(new java.awt.Dimension(81,20));\r
616 jButtonClearAll.setText("Clear All");\r
617 jButtonClearAll.addActionListener(this);\r
618 }\r
619 return jButtonClearAll;\r
620 }\r
621\r
a13899c5 622 public void componentResized(ComponentEvent arg0) {\r
623 int intPreferredWidth = 500;\r
624 \r
8792f60f 625 Tools.resizeComponentWidth(this.jTextFieldC_Name, this.getWidth(), intPreferredWidth);\r
626 Tools.resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);\r
5f97c029 627 Tools.resizeComponentWidth(this.jComboBoxTsGuid, this.getWidth(), intPreferredWidth);\r
8792f60f 628 Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
629 Tools.resizeComponentWidth(this.jTextFieldHelp, this.getWidth(), intPreferredWidth);\r
630 Tools.resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
a13899c5 631 \r
8792f60f 632 Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
a13899c5 633// relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
634// relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
635// relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
a13899c5 636 }\r
637\r
638 /**\r
639 * This method initializes jScrollPane \r
640 * \r
641 * @return javax.swing.JScrollPane \r
642 */\r
643 private JScrollPane getJScrollPane() {\r
644 if (jScrollPane == null) {\r
645 jScrollPane = new JScrollPane();\r
af25df16 646 jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,259));\r
a13899c5 647 jScrollPane.setViewportView(getJTable());\r
648 }\r
649 return jScrollPane;\r
650 }\r
651\r
652 /**\r
653 * This method initializes jTable \r
654 * \r
655 * @return javax.swing.JTable \r
656 */\r
657 private JTable getJTable() {\r
658 if (jTable == null) {\r
659 model = new CheckboxTableModel();\r
660 jTable = new JTable(model);\r
ce73a791 661 jTable.setRowHeight(20);\r
a13899c5 662 jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
663 jTable.setSize(new Dimension(1000, 300));\r
664 \r
665 model.addColumn("C_Name");\r
666 model.addColumn("Token");\r
667 model.addColumn("TokenSpace");\r
668 model.addColumn("DatumType");\r
669 model.addColumn("DefaultValue");\r
670 model.addColumn("HelpText");\r
671 \r
672 model.addColumn("FeatureFlag");\r
673 model.addColumn("FixedAtBuild");\r
674 model.addColumn("PatchableInModule");\r
675 model.addColumn("Dynamic");\r
676 model.addColumn("DynamicEx");\r
677 model.addColumn("SupportedArch");\r
678 model.addColumn("SupportedModule");\r
a13899c5 679 \r
680 //ToDo: add a valid usage editor\r
681 \r
682 JComboBox jComboBoxDataType = new JComboBox();\r
683 jComboBoxDataType.addItem("UINT8");\r
684 jComboBoxDataType.addItem("UINT16");\r
685 jComboBoxDataType.addItem("UINT32");\r
686 jComboBoxDataType.addItem("UINT64");\r
687 jComboBoxDataType.addItem("VOID*");\r
688 jComboBoxDataType.addItem("BOOLEAN");\r
689 TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);\r
690 dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));\r
691\r
ce73a791 692 Vector<String> vArch = new Vector<String>();\r
693 vArch.add("IA32");\r
694 vArch.add("X64");\r
695 vArch.add("IPF");\r
696 vArch.add("EBC");\r
697 vArch.add("ARM");\r
698 vArch.add("PPC");\r
699 jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));\r
700 \r
701 Vector<String> vModule = new Vector<String>();\r
702 vModule.add("BASE");\r
703 vModule.add("SEC");\r
704 vModule.add("PEI_CORE");\r
705 vModule.add("PEIM");\r
706 vModule.add("DXE_CORE");\r
707 vModule.add("DXE_DRIVER");\r
708 vModule.add("DXE_RUNTIME_DRIVER");\r
709 vModule.add("DXE_SAL_DRIVER");\r
710 vModule.add("DXE_SMM_DRIVER");\r
711 vModule.add("UEFI_DRIVER");\r
712 vModule.add("UEFI_APPLICATION");\r
713 vModule.add("USER_DEFINED");\r
714 jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));\r
715 \r
a13899c5 716 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
717 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
718 public void valueChanged(ListSelectionEvent e) {\r
719 if (e.getValueIsAdjusting()){\r
720 return;\r
721 }\r
722 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
723 if (lsm.isSelectionEmpty()) {\r
724 return;\r
725 }\r
726 else{\r
727 selectedRow = lsm.getMinSelectionIndex();\r
728 }\r
729 }\r
730 });\r
731 \r
732 jTable.getModel().addTableModelListener(this);\r
733 }\r
734 return jTable;\r
735 }\r
736 \r
737 public void tableChanged(TableModelEvent arg0) {\r
738 // TODO Auto-generated method stub\r
739 int row = arg0.getFirstRow();\r
a490bca8 740 int column = arg0.getColumn();\r
a13899c5 741 TableModel m = (TableModel)arg0.getSource();\r
742 if (arg0.getType() == TableModelEvent.UPDATE){\r
a490bca8 743 String[] sa = new String[9];\r
744 sfc.getSpdPcdDeclaration(sa, row);\r
745 Object cellData = m.getValueAt(row, column);\r
746 if (column < 6) {\r
747 \r
748 if (cellData == null) {\r
749 cellData = "";\r
750 }\r
751 if (cellData.equals(sa[column])) {\r
752 return;\r
753 }\r
754 if (cellData.toString().length() == 0 && sa[column] == null) {\r
755 return;\r
756 }\r
757 }\r
758 \r
759 String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));\r
760 if (usage.length() == 0) {\r
761 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");\r
762 return;\r
763 }\r
764 if (column <= 10 && column >= 6) {\r
765 if (compareTwoVectors(stringToVector(usage), stringToVector(sa[6]))) {\r
766 return;\r
767 }\r
768 }\r
769 \r
770 if (column == 11) {\r
771 if (cellData == null) {\r
772 cellData = "";\r
773 }\r
774 if (cellData.equals(sa[7])) {\r
775 return;\r
776 }\r
777 if (cellData.toString().length() == 0 && sa[7] == null) {\r
778 return;\r
779 }\r
780 }\r
a13899c5 781 \r
a490bca8 782 if (column == 12) {\r
783 if (cellData == null) {\r
784 cellData = "";\r
785 }\r
786 if (cellData.equals(sa[8])) {\r
787 return;\r
788 }\r
789 if (cellData.toString().length() == 0 && sa[8] == null) {\r
790 return;\r
791 }\r
792 }\r
a13899c5 793 String cName = m.getValueAt(row, 0) + "";\r
794 String token = m.getValueAt(row, 1) + "";\r
795 String ts = m.getValueAt(row, 2) + "";\r
796 String dataType = m.getValueAt(row, 3) + "";\r
797 String defaultVal = m.getValueAt(row, 4) + "";\r
798 String help = m.getValueAt(row, 5) + "";\r
a490bca8 799 \r
209abc92 800 \r
801 String archList = null;\r
802 if (m.getValueAt(row, 11) != null){\r
803 archList = m.getValueAt(row, 11).toString();\r
804 }\r
805 String modTypeList = null;\r
806 if (m.getValueAt(row, 12) != null) {\r
807 modTypeList = m.getValueAt(row, 12).toString(); \r
808 }\r
a490bca8 809 \r
ce73a791 810 Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
811 if (!dataValidation(o)){\r
812 return;\r
813 }\r
d6d24759 814 docConsole.setSaved(false);\r
a13899c5 815 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);\r
816 }\r
817 }\r
818\r
819 /**\r
820 * This method initializes jCheckBox \r
821 * \r
822 * @return javax.swing.JCheckBox \r
823 */\r
4da2e625 824 private JCheckBox getJCheckBoxFeatureFlag() {\r
825 if (jCheckBoxFeatureFlag == null) {\r
826 jCheckBoxFeatureFlag = new JCheckBox();\r
827 jCheckBoxFeatureFlag.setBounds(new java.awt.Rectangle(156,161,100,21));\r
828 jCheckBoxFeatureFlag.setText("Feature Flag");\r
829 jCheckBoxFeatureFlag.setPreferredSize(new java.awt.Dimension(21,20));\r
5f97c029 830 jCheckBoxFeatureFlag.addItemListener(new java.awt.event.ItemListener() {\r
831 public void itemStateChanged(java.awt.event.ItemEvent e) {\r
832 if (jCheckBoxFeatureFlag.isSelected()) {\r
833 jCheckBoxPatchInMod.setSelected(false);\r
834 jCheckBoxFixedAtBuild.setSelected(false);\r
835 jCheckBoxDyn.setSelected(false);\r
836 jCheckBoxDynEx.setSelected(false);\r
837 }\r
838 }\r
839 });\r
a13899c5 840 }\r
4da2e625 841 return jCheckBoxFeatureFlag;\r
a13899c5 842 }\r
843\r
844 /**\r
845 * This method initializes jCheckBox1 \r
846 * \r
847 * @return javax.swing.JCheckBox \r
848 */\r
4da2e625 849 private JCheckBox getJCheckBoxFixedAtBuild() {\r
850 if (jCheckBoxFixedAtBuild == null) {\r
851 jCheckBoxFixedAtBuild = new JCheckBox();\r
852 jCheckBoxFixedAtBuild.setBounds(new java.awt.Rectangle(312,133,108,20));\r
853 jCheckBoxFixedAtBuild.setText("Fixed at Build");\r
854 jCheckBoxFixedAtBuild.setPreferredSize(new java.awt.Dimension(21,20));\r
5f97c029 855 jCheckBoxFixedAtBuild.addItemListener(new java.awt.event.ItemListener() {\r
856 public void itemStateChanged(java.awt.event.ItemEvent e) {\r
857 if (jCheckBoxFixedAtBuild.isSelected()) {\r
858 jCheckBoxFeatureFlag.setSelected(false);\r
859 }\r
860 }\r
861 });\r
a13899c5 862 }\r
4da2e625 863 return jCheckBoxFixedAtBuild;\r
a13899c5 864 }\r
865\r
866 /**\r
867 * This method initializes jCheckBox2 \r
868 * \r
869 * @return javax.swing.JCheckBox \r
870 */\r
4da2e625 871 private JCheckBox getJCheckBoxPatchInMod() {\r
872 if (jCheckBoxPatchInMod == null) {\r
873 jCheckBoxPatchInMod = new JCheckBox();\r
874 jCheckBoxPatchInMod.setBounds(new java.awt.Rectangle(156,133,154,20));\r
875 jCheckBoxPatchInMod.setText("Patchable in Module");\r
876 jCheckBoxPatchInMod.setPreferredSize(new java.awt.Dimension(21,20));\r
5f97c029 877 jCheckBoxPatchInMod.addItemListener(new java.awt.event.ItemListener() {\r
878 public void itemStateChanged(java.awt.event.ItemEvent e) {\r
879 if (jCheckBoxPatchInMod.isSelected()) {\r
880 jCheckBoxFeatureFlag.setSelected(false);\r
881 }\r
882 }\r
883 });\r
a13899c5 884 }\r
4da2e625 885 return jCheckBoxPatchInMod;\r
a13899c5 886 }\r
887\r
888 /**\r
889 * This method initializes jCheckBox3 \r
890 * \r
891 * @return javax.swing.JCheckBox \r
892 */\r
4da2e625 893 private JCheckBox getJCheckBoxDyn() {\r
894 if (jCheckBoxDyn == null) {\r
895 jCheckBoxDyn = new JCheckBox();\r
896 jCheckBoxDyn.setBounds(new java.awt.Rectangle(278,161,80,20));\r
897 jCheckBoxDyn.setText("Dynamic");\r
898 jCheckBoxDyn.setPreferredSize(new java.awt.Dimension(21,20));\r
5f97c029 899 jCheckBoxDyn.addItemListener(new java.awt.event.ItemListener() {\r
900 public void itemStateChanged(java.awt.event.ItemEvent e) {\r
901 if (jCheckBoxDyn.isSelected()) {\r
902 jCheckBoxFeatureFlag.setSelected(false);\r
903 }\r
904 }\r
905 });\r
a13899c5 906 }\r
4da2e625 907 return jCheckBoxDyn;\r
a13899c5 908 }\r
909\r
910 /**\r
911 * This method initializes jCheckBox4 \r
912 * \r
913 * @return javax.swing.JCheckBox \r
914 */\r
4da2e625 915 private JCheckBox getJCheckBoxDynEx() {\r
916 if (jCheckBoxDynEx == null) {\r
917 jCheckBoxDynEx = new JCheckBox();\r
918 jCheckBoxDynEx.setBounds(new java.awt.Rectangle(371,161,99,20));\r
919 jCheckBoxDynEx.setText("DynamicEx");\r
920 jCheckBoxDynEx.setPreferredSize(new java.awt.Dimension(21,20));\r
5f97c029 921 jCheckBoxDynEx.addItemListener(new java.awt.event.ItemListener() {\r
922 public void itemStateChanged(java.awt.event.ItemEvent e) {\r
923 if (jCheckBoxDynEx.isSelected()) {\r
924 jCheckBoxFeatureFlag.setSelected(false);\r
925 }\r
926 }\r
927 });\r
a13899c5 928 }\r
4da2e625 929 return jCheckBoxDynEx;\r
a13899c5 930 }\r
931 \r
932 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {\r
933 String usage = "";\r
934 if (ff){\r
935 usage += "FEATURE_FLAG ";\r
936 }\r
937 if (fab){\r
938 usage += "FIXED_AT_BUILD ";\r
939 }\r
940 if (pim){\r
941 usage += "PATCHABLE_IN_MODULE ";\r
942 }\r
943 if (d){\r
944 usage += "DYNAMIC ";\r
945 }\r
946 if (de){\r
947 usage += "DYNAMIC_EX ";\r
948 }\r
949 \r
950 return usage.trim();\r
951 }\r
952 \r
5f97c029 953 private boolean tokenCNameExisted(String token, String cName) {\r
954 Integer inputToken = Integer.decode(token);\r
955 \r
956 for (int i = 0; i < jTable.getRowCount(); ++i) {\r
957 if (jTable.getValueAt(i, 0).equals(cName)) {\r
958 JOptionPane.showMessageDialog(frame, "C_Name already existed in table.");\r
959 return true;\r
960 }\r
961 if (jTable.getValueAt(i, 1).equals(token)) {\r
962 JOptionPane.showMessageDialog(frame, "Token already existed in table.");\r
963 return true;\r
964 }\r
965 Integer tokenValue = Integer.decode(jTable.getValueAt(i, 1)+"");\r
966 if (tokenValue.equals(inputToken)) {\r
967 JOptionPane.showMessageDialog(frame, "Same token value already existed in table.");\r
968 return true;\r
969 }\r
970 \r
971 }\r
972 return false;\r
973 }\r
974 \r
ce73a791 975 private boolean checkValidUsage(boolean[] b) {\r
976 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){\r
a13899c5 977 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");\r
978 return false;\r
979 }\r
980 return true;\r
981 }\r
ce73a791 982 private boolean dataValidation(Object[] row) {\r
983 \r
984 if (!DataValidation.isC_NameType(row[0].toString())) {\r
985 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");\r
986 return false;\r
987 }\r
b876680a 988 if (!DataValidation.isHexDoubleWordDataType(row[1].toString()) && \r
989 !DataValidation.isInt(row[1].toString(), Integer.MIN_VALUE, Integer.MAX_VALUE)) {\r
ce73a791 990 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");\r
991 return false;\r
992 }\r
993 if (!DataValidation.isC_NameType(row[2].toString())) {\r
994 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");\r
995 return false;\r
996 }\r
997 if (row[5].toString().length() == 0) {\r
998 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");\r
999 return false;\r
1000 }\r
1001 return true;\r
1002 }\r
a13899c5 1003\r
1004 /**\r
1005 * This method initializes jScrollPane1 \r
1006 * \r
1007 * @return javax.swing.JScrollPane \r
1008 */\r
4da2e625 1009 private JScrollPane getJScrollPaneArch() {\r
1010 if (jScrollPaneArch == null) {\r
1011 jScrollPaneArch = new JScrollPane();\r
1012 jScrollPaneArch.setBounds(new java.awt.Rectangle(242,213,188,54));\r
1013 jScrollPaneArch.setViewportView(getICheckBoxListArch());\r
1014 jScrollPaneArch.setPreferredSize(new Dimension(188, 74));\r
a13899c5 1015 }\r
4da2e625 1016 return jScrollPaneArch;\r
a13899c5 1017 }\r
1018\r
1019 /**\r
1020 * This method initializes iCheckBoxList \r
1021 * \r
1022 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList \r
1023 */\r
4da2e625 1024 private ICheckBoxList getICheckBoxListArch() {\r
1025 if (iCheckBoxListArch == null) {\r
1026 iCheckBoxListArch = new ICheckBoxList();\r
1027 iCheckBoxListArch.setBounds(new Rectangle(197, 142, 188, 74));\r
a13899c5 1028 Vector<String> v = new Vector<String>();\r
1029 v.add("IA32");\r
1030 v.add("X64");\r
1031 v.add("IPF");\r
1032 v.add("EBC");\r
ce73a791 1033 v.add("ARM");\r
1034 v.add("PPC");\r
4da2e625 1035 iCheckBoxListArch.setAllItems(v);\r
a13899c5 1036 }\r
4da2e625 1037 return iCheckBoxListArch;\r
a13899c5 1038 }\r
1039\r
1040 /**\r
1041 * This method initializes jScrollPane2 \r
1042 * \r
1043 * @return javax.swing.JScrollPane \r
1044 */\r
4da2e625 1045 private JScrollPane getJScrollPaneMod() {\r
1046 if (jScrollPaneMod == null) {\r
1047 jScrollPaneMod = new JScrollPane();\r
1048 jScrollPaneMod.setBounds(new java.awt.Rectangle(15,213,199,55));\r
1049 jScrollPaneMod.setViewportView(getICheckBoxListMod());\r
1050 jScrollPaneMod.setPreferredSize(new Dimension(170, 74));\r
a13899c5 1051 }\r
4da2e625 1052 return jScrollPaneMod;\r
a13899c5 1053 }\r
1054\r
1055 /**\r
1056 * This method initializes iCheckBoxList1 \r
1057 * \r
1058 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList \r
1059 */\r
4da2e625 1060 private ICheckBoxList getICheckBoxListMod() {\r
1061 if (iCheckBoxListMod == null) {\r
1062 iCheckBoxListMod = new ICheckBoxList();\r
1063 iCheckBoxListMod.setBounds(new Rectangle(14, 142, 170, 74));\r
a13899c5 1064 Vector<String> v = new Vector<String>();\r
1065 v.add("BASE");\r
1066 v.add("SEC");\r
1067 v.add("PEI_CORE");\r
1068 v.add("PEIM");\r
1069 v.add("DXE_CORE");\r
1070 v.add("DXE_DRIVER");\r
1071 v.add("DXE_RUNTIME_DRIVER");\r
1072 v.add("DXE_SAL_DRIVER");\r
1073 v.add("DXE_SMM_DRIVER");\r
1074 v.add("UEFI_DRIVER");\r
1075 v.add("UEFI_APPLICATION");\r
1076 v.add("USER_DEFINED");\r
4da2e625 1077 iCheckBoxListMod.setAllItems(v);\r
a13899c5 1078 }\r
4da2e625 1079 return iCheckBoxListMod;\r
a13899c5 1080 }\r
1081 \r
1082 protected String vectorToString(Vector<String> v) {\r
1083 if (v == null) {\r
1084 return null;\r
1085 }\r
1086 String s = " ";\r
1087 for (int i = 0; i < v.size(); ++i) {\r
1088 s += v.get(i);\r
1089 s += " ";\r
1090 }\r
1091 return s.trim();\r
1092 }\r
a490bca8 1093 \r
1094 protected Vector<String> stringToVector(String s){\r
1095 if (s == null) {\r
1096 return null;\r
1097 }\r
1098 String[] sArray = s.split(" ");\r
1099 Vector<String> v = new Vector<String>();\r
1100 for (int i = 0; i < sArray.length; ++i) {\r
1101 v.add(sArray[i]);\r
1102 }\r
1103 return v;\r
1104 }\r
1105 \r
1106 private boolean compareTwoVectors(Vector v1, Vector v2) {\r
1107 if (v1.size() != v2.size()) {\r
1108 return false;\r
1109 }\r
1110 for (int i = 0; i < v1.size(); ++i) {\r
1111 if (!v2.contains(v1.get(i))) {\r
1112 return false;\r
1113 }\r
1114 }\r
1115 return true;\r
1116 }\r
a13899c5 1117} // @jve:decl-index=0:visual-constraint="22,11"\r
1118\r
1119class CheckboxTableModel extends DefaultTableModel {\r
0b5e1cc3 1120 /**\r
1121 * \r
1122 */\r
1123 private static final long serialVersionUID = 1L;\r
1124\r
1125 public Class<?> getColumnClass (int c) {\r
a13899c5 1126 if (getValueAt(0, c) != null){\r
1127 return getValueAt(0, c).getClass();\r
1128 }\r
1129 return String.class;\r
1130 }\r
1131}\r