]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPackageHeaders.java
Add Data Validations for SPD editor.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPackageHeaders.java
CommitLineData
a13899c5 1/** @file\r
2 Java class SpdPackageHeaders is GUI for create library 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
a13899c5 15import java.awt.Dimension;\r
a13899c5 16import java.awt.event.ActionEvent;\r
a13899c5 17import java.awt.event.ComponentEvent;\r
18import java.io.File;\r
a13899c5 19\r
20import javax.swing.DefaultCellEditor;\r
a13899c5 21import javax.swing.JFileChooser;\r
22import javax.swing.JOptionPane;\r
23import javax.swing.JPanel;\r
24import javax.swing.JRadioButton;\r
25import javax.swing.JTable;\r
26import javax.swing.JTextField;\r
27import javax.swing.JComboBox;\r
28import javax.swing.JLabel;\r
a13899c5 29import javax.swing.JScrollPane;\r
30import javax.swing.JButton;\r
31import javax.swing.JFrame;\r
32import javax.swing.ListSelectionModel;\r
33import javax.swing.event.InternalFrameAdapter;\r
34import javax.swing.event.InternalFrameEvent;\r
35import javax.swing.event.ListSelectionEvent;\r
36import javax.swing.event.ListSelectionListener;\r
37import javax.swing.event.TableModelEvent;\r
38import javax.swing.event.TableModelListener;\r
39import javax.swing.table.DefaultTableModel;\r
40import javax.swing.table.TableColumn;\r
41import javax.swing.table.TableModel;\r
42\r
43import org.tianocore.PackageSurfaceAreaDocument;\r
ce73a791 44import org.tianocore.frameworkwizard.common.DataValidation;\r
a13899c5 45import org.tianocore.frameworkwizard.common.Tools;\r
46import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
47import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
48\r
49/**\r
50 GUI for create library definition elements of spd file.\r
51 \r
52 @since PackageEditor 1.0\r
53**/\r
54public class SpdPackageHeaders extends IInternalFrame implements TableModelListener{\r
ce73a791 55 /**\r
56 * \r
57 */\r
58 private static final long serialVersionUID = 1L;\r
59\r
a13899c5 60 static JFrame frame;\r
61 \r
62 private SpdFileContents sfc = null;\r
63\r
64 private DefaultTableModel model = null;\r
65\r
66 private JPanel jContentPane = null;\r
67\r
a13899c5 68 private JRadioButton jRadioButtonSelect = null;\r
69\r
a13899c5 70 private JComboBox jComboBoxSelect = null;\r
71\r
72 private JButton jButtonAdd = null;\r
73\r
74 private JButton jButtonRemove = null;\r
75\r
76 private JButton jButtonClearAll = null;\r
77\r
78 private JButton jButtonCancel = null;\r
79\r
80 private JButton jButtonOk = null;\r
81\r
82 private JLabel jLabel = null;\r
83\r
84 private JTextField jTextField = null;\r
85\r
86 private JButton jButtonBrowse = null;\r
87 \r
88 private StarLabel jStarLabel1 = null;\r
89 \r
90 private StarLabel jStarLabel2 = null;\r
91\r
92 private JScrollPane jScrollPane = null;\r
93\r
94 private JScrollPane jScrollPane1 = null;\r
95\r
96 private int selectedRow = -1;\r
97\r
98 private JTable jTable = null;\r
99\r
100\r
101\r
102 /**\r
103 This method initializes this\r
104 \r
105 **/\r
106 private void initialize() {\r
107 \r
108 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
109\r
110 }\r
111\r
a13899c5 112 /**\r
113 This method initializes jRadioButtonSelect \r
114 \r
115 @return javax.swing.JRadioButton \r
116 **/\r
117 private JRadioButton getJRadioButtonSelect() {\r
118 if (jRadioButtonSelect == null) {\r
119 jRadioButtonSelect = new JRadioButton();\r
120 jRadioButtonSelect.setBounds(new java.awt.Rectangle(9,10,198,20));\r
121 jRadioButtonSelect.setText("Select Existing ModuleType");\r
122 jRadioButtonSelect.addActionListener(this);\r
123 jRadioButtonSelect.setSelected(true);\r
124 }\r
125 return jRadioButtonSelect;\r
126 }\r
127\r
a13899c5 128 /**\r
129 This method initializes jComboBoxSelect \r
130 \r
131 @return javax.swing.JComboBox \r
132 **/\r
133 private JComboBox getJComboBoxSelect() {\r
134 if (jComboBoxSelect == null) {\r
135 jComboBoxSelect = new JComboBox();\r
136 jComboBoxSelect.setBounds(new java.awt.Rectangle(220, 10, 260, 20));\r
137 jComboBoxSelect.setPreferredSize(new java.awt.Dimension(260,20));\r
138 \r
139 jComboBoxSelect.setEnabled(true);\r
140 }\r
141 return jComboBoxSelect;\r
142 }\r
143\r
144 /**\r
145 This method initializes jTable \r
146 \r
147 @return javax.swing.JTable \r
148 *\r
149 private JTable getJTable() {\r
150 if (jTable == null) {\r
151 model = new PackageHeaderTableModel();\r
152 model.addColumn("ModuleType");\r
153 model.addColumn("IncludeHeader");\r
154 \r
155\r
156 }\r
157 return jTable;\r
158 }*/\r
159 /**\r
160 This method initializes jButtonAdd \r
161 \r
162 @return javax.swing.JButton \r
163 **/\r
164 private JButton getJButtonAdd() {\r
165 if (jButtonAdd == null) {\r
166 jButtonAdd = new JButton();\r
167 jButtonAdd.setBounds(new java.awt.Rectangle(189,119,73,20));\r
168 jButtonAdd.setText("Add");\r
169 jButtonAdd.addActionListener(this);\r
170 }\r
171 return jButtonAdd;\r
172 }\r
173\r
174 /**\r
175 This method initializes jButtonRemove \r
176 \r
177 @return javax.swing.JButton \r
178 **/\r
179 private JButton getJButtonRemove() {\r
180 if (jButtonRemove == null) {\r
181 jButtonRemove = new JButton();\r
182 jButtonRemove.setBounds(new java.awt.Rectangle(271,119,87,20));\r
183 jButtonRemove.setText("Remove");\r
184 jButtonRemove.addActionListener(this);\r
185 }\r
186 return jButtonRemove;\r
187 }\r
188\r
189 /**\r
190 This method initializes jButtonRemoveAll \r
191 \r
192 @return javax.swing.JButton \r
193 **/\r
194 private JButton getJButtonClearAll() {\r
195 if (jButtonClearAll == null) {\r
196 jButtonClearAll = new JButton();\r
197 jButtonClearAll.setBounds(new java.awt.Rectangle(374,119,90,20));\r
198 jButtonClearAll.setText("Clear All");\r
199 jButtonClearAll.addActionListener(this);\r
200 }\r
201 return jButtonClearAll;\r
202 }\r
203\r
204 /**\r
205 This method initializes jButtonCancel \r
206 \r
207 @return javax.swing.JButton \r
208 **/\r
209 private JButton getJButtonCancel() {\r
210 if (jButtonCancel == null) {\r
211 jButtonCancel = new JButton();\r
212 jButtonCancel.setPreferredSize(new java.awt.Dimension(90, 20));\r
213 jButtonCancel.setLocation(new java.awt.Point(390, 305));\r
214 jButtonCancel.setText("Cancel");\r
215 jButtonCancel.setSize(new java.awt.Dimension(90, 20));\r
216 jButtonCancel.setVisible(false);\r
217 jButtonCancel.addActionListener(this);\r
218 }\r
219 return jButtonCancel;\r
220 }\r
221\r
222 /**\r
223 This method initializes jButton \r
224 \r
225 @return javax.swing.JButton \r
226 **/\r
227 private JButton getJButtonOk() {\r
228 if (jButtonOk == null) {\r
229 jButtonOk = new JButton();\r
230 jButtonOk.setSize(new java.awt.Dimension(90, 20));\r
231 jButtonOk.setText("OK");\r
232 jButtonOk.setLocation(new java.awt.Point(290, 305));\r
233 jButtonOk.setVisible(false);\r
234 jButtonOk.addActionListener(this);\r
235 }\r
236 return jButtonOk;\r
237 }\r
238\r
239 /**\r
240 This is the default constructor\r
241 **/\r
242 public SpdPackageHeaders() {\r
243 super();\r
244 initialize();\r
245 init();\r
246 \r
247 }\r
248\r
249 public SpdPackageHeaders(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){\r
250 this();\r
251 sfc = new SpdFileContents(inPsa);\r
252 init(sfc);\r
253 }\r
254 /**\r
255 This method initializes this\r
256 \r
257 @return void\r
258 **/\r
259 private void init() {\r
260 \r
261 this.setContentPane(getJScrollPane());\r
262 this.setTitle("Library Class Declarations");\r
263 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
264 this.setVisible(true);\r
265 this.addInternalFrameListener(new InternalFrameAdapter(){\r
266 public void internalFrameDeactivated(InternalFrameEvent e){\r
267 if (jTable.isEditing()) {\r
268 jTable.getCellEditor().stopCellEditing();\r
269 }\r
270 }\r
271 });\r
272 initFrame();\r
273 }\r
274\r
275 private void init(SpdFileContents sfc){\r
276 if (sfc.getSpdPackageHeaderCount() == 0) {\r
277 return ;\r
278 }\r
279 String[][] saa = new String[sfc.getSpdPackageHeaderCount()][2];\r
280 sfc.getSpdPackageHeaders(saa);\r
281 int i = 0;\r
282 while (i < saa.length) {\r
283 model.addRow(saa[i]);\r
284 i++;\r
285 }\r
286 }\r
287 \r
288 private JScrollPane getJScrollPane(){\r
289 if (jScrollPane == null){\r
290 jScrollPane = new JScrollPane();\r
291 jScrollPane.setViewportView(getJContentPane());\r
292 }\r
293 return jScrollPane;\r
294 }\r
295 /**\r
296 This method initializes jContentPane\r
297 \r
298 @return javax.swing.JPanel\r
299 **/\r
300 private JPanel getJContentPane() {\r
301 if (jContentPane == null) {\r
302 jStarLabel1 = new StarLabel();\r
303 jStarLabel1.setLocation(new java.awt.Point(0, 10));\r
304 jStarLabel2 = new StarLabel();\r
305 jStarLabel2.setLocation(new java.awt.Point(0,62));\r
306 jLabel = new JLabel();\r
307 jLabel.setBounds(new java.awt.Rectangle(14,62,199,22));\r
308 jLabel.setText("Include Header for Module Type");\r
309 \r
310 jContentPane = new JPanel();\r
311 jContentPane.setPreferredSize(new Dimension(480, 325));\r
312 jContentPane.setLayout(null);\r
313 jContentPane.add(jLabel, null);\r
314 jContentPane.add(jStarLabel1, null);\r
315 jContentPane.add(jStarLabel2, null);\r
a13899c5 316 jContentPane.add(getJRadioButtonSelect(), null);\r
a13899c5 317 jContentPane.add(getJComboBoxSelect(), null);\r
318 jContentPane.add(getJButtonAdd(), null);\r
319 jContentPane.add(getJButtonRemove(), null);\r
320 jContentPane.add(getJButtonClearAll(), null);\r
321 jContentPane.add(getJButtonCancel(), null);\r
322 jContentPane.add(getJButtonOk(), null);\r
323 \r
324 jContentPane.add(getJTextField(), null);\r
325 jContentPane.add(getJButtonBrowse(), null);\r
326 jContentPane.add(getJScrollPane1(), null);\r
327 }\r
328 return jContentPane;\r
329 }\r
330\r
331 /**\r
332 fill ComboBoxes with pre-defined contents\r
333 **/\r
334 private void initFrame() {\r
335 jComboBoxSelect.addItem("BASE");\r
336 jComboBoxSelect.addItem("SEC");\r
337 jComboBoxSelect.addItem("PEI_CORE");\r
338 jComboBoxSelect.addItem("PEIM");\r
339 jComboBoxSelect.addItem("DXE_CORE");\r
340 jComboBoxSelect.addItem("DXE_DRIVER");\r
341 jComboBoxSelect.addItem("DXE_RUNTIME_DRIVER");\r
342 jComboBoxSelect.addItem("DXE_SAL_DRIVER");\r
343 jComboBoxSelect.addItem("DXE_SMM_DRIVER");\r
344 jComboBoxSelect.addItem("TOOLS");\r
345 jComboBoxSelect.addItem("UEFI_DRIVER");\r
346 jComboBoxSelect.addItem("UEFI_APPLICATION");\r
347 jComboBoxSelect.addItem("USER_DEFINED");\r
348 jComboBoxSelect.setSelectedIndex(0);\r
349 }\r
350\r
351 /* (non-Javadoc)\r
352 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
353 */\r
354 public void actionPerformed(ActionEvent arg0) {\r
355 if (arg0.getSource() == jButtonOk) {\r
356 this.save();\r
357 this.dispose();\r
358\r
359 }\r
360 if (arg0.getSource() == jButtonCancel) {\r
361 this.dispose();\r
362 }\r
363\r
364 if (arg0.getSource() == jButtonAdd) {\r
365 String strLibClass = "";\r
ce73a791 366 \r
a13899c5 367 if (jRadioButtonSelect.isSelected()) {\r
368 strLibClass = jComboBoxSelect.getSelectedItem().toString();\r
369 }\r
370 //ToDo: check before add\r
371 String[] row = {"", ""};\r
372 row[0] = strLibClass;\r
373 row[1] = jTextField.getText().replace('\\', '/');\r
ce73a791 374 if (!dataValidation(row)) {\r
375 return;\r
376 }\r
a13899c5 377 model.addRow(row);\r
378 sfc.genSpdModuleHeaders(row[0], row[1], null, null, null, null, null, null);\r
379 }\r
380 //\r
381 // remove selected line\r
382 //\r
383 if (arg0.getSource() == jButtonRemove) {\r
384 if (jTable.isEditing()){\r
385 jTable.getCellEditor().stopCellEditing();\r
386 }\r
387 int rowSelected = selectedRow;\r
388 if (rowSelected >= 0) {\r
389 model.removeRow(rowSelected);\r
390 sfc.removeSpdPkgHeader(rowSelected);\r
391 }\r
392 }\r
393\r
394 if (arg0.getSource() == jButtonClearAll) {\r
395 if (model.getRowCount() == 0) {\r
396 return;\r
397 }\r
398 model.setRowCount(0);\r
399 sfc.removeSpdPkgHeader();\r
400 }\r
401\r
ce73a791 402 }\r
403 \r
404 private boolean dataValidation(String[] row) {\r
405 if (!DataValidation.isPathAndFilename(row[1])) {\r
406 JOptionPane.showMessageDialog(this, "Include header path is NOT PathAndFilename type.");\r
407 return false;\r
a13899c5 408 }\r
ce73a791 409 \r
410 return true;\r
a13899c5 411 }\r
412\r
413 /**\r
414 Add contents in list to sfc\r
415 **/\r
416 protected void save() {\r
417 \r
418 }\r
419\r
420 /**\r
421 This method initializes jTextField \r
422 \r
423 @return javax.swing.JTextField \r
424 **/\r
425 private JTextField getJTextField() {\r
426 if (jTextField == null) {\r
427 jTextField = new JTextField();\r
428 jTextField.setBounds(new java.awt.Rectangle(13,90,346,21));\r
429 jTextField.setPreferredSize(new java.awt.Dimension(345,20));\r
430 }\r
431 return jTextField;\r
432 }\r
433\r
434 /**\r
435 This method initializes jButtonBrowse \r
436 \r
437 @return javax.swing.JButton \r
438 **/\r
439 private JButton getJButtonBrowse() {\r
440 if (jButtonBrowse == null) {\r
441 jButtonBrowse = new JButton();\r
442 jButtonBrowse.setBounds(new java.awt.Rectangle(374,89,92,21));\r
443 jButtonBrowse.setText("Browse");\r
444 jButtonBrowse.setPreferredSize(new java.awt.Dimension(92,20));\r
445 jButtonBrowse.addActionListener(new javax.swing.AbstractAction() {\r
ce73a791 446 /**\r
447 * \r
448 */\r
449 private static final long serialVersionUID = 1L;\r
450\r
a13899c5 451 public void actionPerformed(ActionEvent e) {\r
452 //\r
453 // Select files from current workspace\r
454 //\r
455 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
456 JFileChooser chooser = new JFileChooser(dirPrefix);\r
457 File theFile = null;\r
458 String headerDest = null;\r
459 \r
460 chooser.setMultiSelectionEnabled(false);\r
461 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
462 int retval = chooser.showOpenDialog(frame);\r
463 if (retval == JFileChooser.APPROVE_OPTION) {\r
464\r
465 theFile = chooser.getSelectedFile();\r
466 String file = theFile.getPath();\r
467 if (!file.startsWith(dirPrefix)) {\r
468 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
469 return;\r
470 }\r
471 \r
472 \r
473 }\r
474 else {\r
475 return;\r
476 }\r
477 \r
478 headerDest = theFile.getPath();\r
479 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
480 \r
481 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
482 \r
483 }\r
484 });\r
485 }\r
486 return jButtonBrowse;\r
487 }\r
488 \r
489 /**\r
490 * This method initializes jScrollPane \r
491 * \r
492 * @return javax.swing.JScrollPane \r
493 */\r
494 private JScrollPane getJScrollPane1() {\r
495 if (jScrollPane1 == null) {\r
496 jScrollPane1 = new JScrollPane();\r
497 jScrollPane1.setBounds(new java.awt.Rectangle(13,149,453,165));\r
498 jScrollPane1.setViewportView(getJTable());\r
499 }\r
500 return jScrollPane1;\r
501 }\r
502\r
503 /**\r
504 * This method initializes jTable \r
505 * \r
506 * @return javax.swing.JTable \r
507 */\r
508 private JTable getJTable() {\r
509 if (jTable == null) {\r
510 model = new DefaultTableModel();\r
511 jTable = new JTable(model);\r
ce73a791 512 jTable.setRowHeight(20);\r
a13899c5 513 model.addColumn("ModuleType");\r
514 model.addColumn("IncludeHeader");\r
515 TableColumn typeColumn = jTable.getColumnModel().getColumn(0);\r
516 JComboBox jComboBoxSelect = new JComboBox();\r
517 jComboBoxSelect.addItem("BASE");\r
518 jComboBoxSelect.addItem("SEC");\r
519 jComboBoxSelect.addItem("PEI_CORE");\r
520 jComboBoxSelect.addItem("PEIM");\r
521 jComboBoxSelect.addItem("DXE_CORE");\r
522 jComboBoxSelect.addItem("DXE_DRIVER");\r
523 jComboBoxSelect.addItem("DXE_RUNTIME_DRIVER");\r
524 jComboBoxSelect.addItem("DXE_SAL_DRIVER");\r
525 jComboBoxSelect.addItem("DXE_SMM_DRIVER");\r
526 jComboBoxSelect.addItem("TOOLS");\r
527 jComboBoxSelect.addItem("UEFI_DRIVER");\r
528 jComboBoxSelect.addItem("UEFI_APPLICATION");\r
529 jComboBoxSelect.addItem("USER_DEFINED");\r
530 typeColumn.setCellEditor(new DefaultCellEditor(jComboBoxSelect));\r
531 \r
532 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
533 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
534 public void valueChanged(ListSelectionEvent e) {\r
535 if (e.getValueIsAdjusting()){\r
536 return;\r
537 }\r
538 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
539 if (lsm.isSelectionEmpty()) {\r
540 return;\r
541 }\r
542 else{\r
543 selectedRow = lsm.getMinSelectionIndex();\r
544 }\r
545 }\r
546 });\r
547 \r
548 jTable.getModel().addTableModelListener(this);\r
549 }\r
550 return jTable;\r
551 }\r
552 \r
553 public void tableChanged(TableModelEvent arg0) {\r
554 // TODO Auto-generated method stub\r
555 int row = arg0.getFirstRow();\r
556 TableModel m = (TableModel)arg0.getSource();\r
557 if (arg0.getType() == TableModelEvent.UPDATE){\r
558 String pkg = m.getValueAt(row, 0) + "";\r
559 String hdr = m.getValueAt(row, 1) + "";\r
ce73a791 560 String[] rowData = {pkg, hdr};\r
561 if (!dataValidation(rowData)) {\r
562 return;\r
563 }\r
a13899c5 564 sfc.updateSpdPkgHdr(row, pkg, hdr);\r
565 }\r
566 }\r
567\r
568 public void componentResized(ComponentEvent arg0) {\r
569 int intPreferredWidth = 500;\r
570 \r
571 resizeComponentWidth(this.jComboBoxSelect, this.getWidth(), intPreferredWidth);\r
a13899c5 572 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
573 resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
574 relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 30);\r
575 }\r
576 \r
577 public static void main(String[] args){\r
578 new SpdPackageHeaders().setVisible(true);\r
579 }\r
580}\r
581\r
582\r