]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdMsaFiles.java
Added code to fail the SAVerify command when validation failed
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdMsaFiles.java
CommitLineData
a13899c5 1/** @file\r
2 Java class SpdMsaFiles 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.AbstractAction;\r
a13899c5 21import javax.swing.JFileChooser;\r
22import javax.swing.JOptionPane;\r
23import javax.swing.JPanel;\r
a13899c5 24import javax.swing.JTable;\r
25import javax.swing.JTextField;\r
a13899c5 26import javax.swing.JLabel;\r
a13899c5 27import javax.swing.JScrollPane;\r
28import javax.swing.JButton;\r
29import javax.swing.JFrame;\r
30import javax.swing.ListSelectionModel;\r
31import javax.swing.event.InternalFrameAdapter;\r
32import javax.swing.event.InternalFrameEvent;\r
33import javax.swing.event.ListSelectionEvent;\r
34import javax.swing.event.ListSelectionListener;\r
35import javax.swing.event.TableModelEvent;\r
36import javax.swing.event.TableModelListener;\r
37import javax.swing.table.DefaultTableModel;\r
38import javax.swing.table.TableModel;\r
39\r
40import org.tianocore.PackageSurfaceAreaDocument;\r
a13899c5 41import org.tianocore.frameworkwizard.common.Tools;\r
d6d24759 42import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
a13899c5 43import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
44import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
45\r
46/**\r
47 GUI for create library definition elements of spd file.\r
48 \r
49 @since PackageEditor 1.0\r
50**/\r
51public class SpdMsaFiles extends IInternalFrame implements TableModelListener{\r
ce73a791 52 /**\r
53 * \r
54 */\r
55 private static final long serialVersionUID = 1L;\r
56\r
a13899c5 57 static JFrame frame;\r
58 \r
59 private JScrollPane jScrollPane = null; // @jve:decl-index=0:visual-constraint="10,95"\r
60\r
61 private JTable jTable = null;\r
62\r
63 private DefaultTableModel model = null;\r
64\r
65 private JPanel jContentPane = null;\r
66\r
67 private JScrollPane jScrollPane1 = null;\r
68\r
69 private JButton jButtonAdd = null;\r
70\r
71 private JButton jButtonRemove = null;\r
72\r
73 private JButton jButtonClearAll = null;\r
74\r
75 private JButton jButtonCancel = null;\r
76\r
77 private JButton jButtonOk = null;\r
78\r
79 private JLabel jLabel = null;\r
80\r
81 private JTextField jTextField = null;\r
82\r
83 private JButton jButtonBrowse = null;\r
84 \r
85 private StarLabel jStarLabel2 = null;\r
86 \r
87 private SpdFileContents sfc = null;\r
d6d24759 88 \r
89 private OpeningPackageType docConsole = null;\r
a13899c5 90\r
91 private int selectedRow = -1; \r
92\r
93 /**\r
94 This method initializes this\r
95 \r
96 **/\r
97 private void initialize() {\r
98 \r
99 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
100\r
101 }\r
102\r
103 /**\r
104 This method initializes jScrollPane \r
105 \r
106 @return javax.swing.JScrollPane \r
107 **/\r
108 private JScrollPane getJScrollPane1() {\r
109 if (jScrollPane1 == null) {\r
110 jScrollPane1 = new JScrollPane();\r
af25df16 111 jScrollPane1.setBounds(new java.awt.Rectangle(13,177,461,421));\r
a13899c5 112 jScrollPane1.setViewportView(getJTable());\r
113 }\r
114 return jScrollPane1;\r
115 }\r
116\r
117 /**\r
118 This method initializes jTable \r
119 \r
120 @return javax.swing.JTable \r
121 **/\r
122 private JTable getJTable() {\r
123 if (jTable == null) {\r
124 model = new DefaultTableModel();\r
125 jTable = new JTable(model);\r
126 jTable.setRowHeight(20);\r
127 model.addColumn("MsaFile");\r
128 \r
129 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
130 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
131 public void valueChanged(ListSelectionEvent e) {\r
132 if (e.getValueIsAdjusting()){\r
133 return;\r
134 }\r
135 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
136 if (lsm.isSelectionEmpty()) {\r
137 return;\r
138 }\r
139 else{\r
140 selectedRow = lsm.getMinSelectionIndex();\r
141 }\r
142 }\r
143 });\r
144 \r
145 jTable.getModel().addTableModelListener(this);\r
146 }\r
147 return jTable;\r
148 }\r
149 /**\r
150 This method initializes jButtonAdd \r
151 \r
152 @return javax.swing.JButton \r
153 **/\r
154 private JButton getJButtonAdd() {\r
155 if (jButtonAdd == null) {\r
156 jButtonAdd = new JButton();\r
157 jButtonAdd.setBounds(new java.awt.Rectangle(163,148,90,20));\r
158 jButtonAdd.setText("Add");\r
159 jButtonAdd.addActionListener(this);\r
160 }\r
161 return jButtonAdd;\r
162 }\r
163\r
164 /**\r
165 This method initializes jButtonRemove \r
166 \r
167 @return javax.swing.JButton \r
168 **/\r
169 private JButton getJButtonRemove() {\r
170 if (jButtonRemove == null) {\r
171 jButtonRemove = new JButton();\r
172 jButtonRemove.setBounds(new java.awt.Rectangle(266,148,90,20));\r
173 jButtonRemove.setText("Remove");\r
174 jButtonRemove.addActionListener(this);\r
175 }\r
176 return jButtonRemove;\r
177 }\r
178\r
179 /**\r
180 This method initializes jButtonRemoveAll \r
181 \r
182 @return javax.swing.JButton \r
183 **/\r
184 private JButton getJButtonClearAll() {\r
185 if (jButtonClearAll == null) {\r
186 jButtonClearAll = new JButton();\r
187 jButtonClearAll.setBounds(new java.awt.Rectangle(374,148,90,20));\r
188 jButtonClearAll.setText("Clear All");\r
189 jButtonClearAll.addActionListener(this);\r
190 }\r
191 return jButtonClearAll;\r
192 }\r
193\r
194 /**\r
195 This method initializes jButtonCancel \r
196 \r
197 @return javax.swing.JButton \r
198 **/\r
199 private JButton getJButtonCancel() {\r
200 if (jButtonCancel == null) {\r
201 jButtonCancel = new JButton();\r
202 jButtonCancel.setPreferredSize(new java.awt.Dimension(90, 20));\r
203 jButtonCancel.setLocation(new java.awt.Point(390, 305));\r
204 jButtonCancel.setText("Cancel");\r
205 jButtonCancel.setSize(new java.awt.Dimension(90, 20));\r
206 jButtonCancel.setVisible(false);\r
207 jButtonCancel.addActionListener(this);\r
208 }\r
209 return jButtonCancel;\r
210 }\r
211\r
212 /**\r
213 This method initializes jButton \r
214 \r
215 @return javax.swing.JButton \r
216 **/\r
217 private JButton getJButtonOk() {\r
218 if (jButtonOk == null) {\r
219 jButtonOk = new JButton();\r
220 jButtonOk.setSize(new java.awt.Dimension(90, 20));\r
221 jButtonOk.setText("OK");\r
222 jButtonOk.setLocation(new java.awt.Point(290, 305));\r
223 jButtonOk.setVisible(false);\r
224 jButtonOk.addActionListener(this);\r
225 }\r
226 return jButtonOk;\r
227 }\r
228\r
229 /**\r
230 This is the default constructor\r
231 **/\r
232 public SpdMsaFiles() {\r
233 super();\r
234 initialize();\r
235 init();\r
236 \r
237 }\r
238\r
239 public SpdMsaFiles(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){\r
240 this();\r
241 sfc = new SpdFileContents(inPsa);\r
242 init(sfc);\r
243 }\r
d6d24759 244 \r
245 public SpdMsaFiles(OpeningPackageType opt){\r
246 this(opt.getXmlSpd());\r
247 docConsole = opt;\r
248 }\r
a13899c5 249 /**\r
250 This method initializes this\r
251 \r
252 @return void\r
253 **/\r
254 private void init() {\r
255 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
256 this.setPreferredSize(new Dimension(490, 400));\r
257 this.setContentPane(getJScrollPane());\r
258 this.setTitle("Msa Files");\r
259 this.addInternalFrameListener(new InternalFrameAdapter(){\r
260 public void internalFrameDeactivated(InternalFrameEvent e){\r
261 if (jTable.isEditing()) {\r
262 jTable.getCellEditor().stopCellEditing();\r
263 }\r
264 }\r
265 });\r
266 this.setVisible(true);\r
267 initFrame();\r
268 }\r
269\r
270 private void init(SpdFileContents sfc){\r
271 if (sfc.getSpdMsaFileCount() == 0) {\r
272 return ;\r
273 }\r
274 //\r
275 // initialize table using SpdFileContents object\r
276 //\r
277 String[][] saa = new String[sfc.getSpdMsaFileCount()][4];\r
278 sfc.getSpdMsaFiles(saa); \r
279 int i = 0;\r
280 while (i < saa.length) {\r
281 model.addRow(saa[i]);\r
282 i++;\r
283 }\r
284 }\r
285 \r
286 private JScrollPane getJScrollPane(){\r
287 if (jScrollPane == null){\r
288 jScrollPane = new JScrollPane();\r
289 jScrollPane.setViewportView(getJContentPane());\r
290 }\r
291 return jScrollPane;\r
292 }\r
293 /**\r
294 This method initializes jContentPane\r
295 \r
296 @return javax.swing.JPanel\r
297 **/\r
298 private JPanel getJContentPane() {\r
299 if (jContentPane == null) {\r
300 jStarLabel2 = new StarLabel();\r
301 jStarLabel2.setLocation(new java.awt.Point(2,24));\r
302 jLabel = new JLabel();\r
303 jLabel.setBounds(new java.awt.Rectangle(17,24,111,22));\r
304 jLabel.setText("Msa File ");\r
305 \r
306 jContentPane = new JPanel();\r
307 jContentPane.setPreferredSize(new Dimension(480, 325));\r
308 jContentPane.setLayout(null);\r
309 jContentPane.add(jLabel, null);\r
310 jContentPane.add(jStarLabel2, null);\r
311 jContentPane.add(getJScrollPane1(), null);\r
312 jContentPane.add(getJButtonAdd(), null);\r
313 jContentPane.add(getJButtonRemove(), null);\r
314 jContentPane.add(getJButtonClearAll(), null);\r
315 jContentPane.add(getJButtonCancel(), null);\r
316 jContentPane.add(getJButtonOk(), null);\r
317 \r
318 jContentPane.add(getJTextField(), null);\r
319 jContentPane.add(getJButtonBrowse(), null);\r
320 }\r
321 return jContentPane;\r
322 }\r
323\r
324 /**\r
325 fill ComboBoxes with pre-defined contents\r
326 **/\r
327 private void initFrame() {\r
328\r
329 }\r
330\r
331 /* (non-Javadoc)\r
332 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
333 */\r
334 public void actionPerformed(ActionEvent arg0) {\r
d6d24759 335 \r
336 docConsole.setSaved(false);\r
a13899c5 337 if (arg0.getSource() == jButtonOk) {\r
338 this.save();\r
339 this.dispose();\r
340\r
341 }\r
342 if (arg0.getSource() == jButtonCancel) {\r
343 this.dispose();\r
344 }\r
345\r
346 if (arg0.getSource() == jButtonAdd) {\r
347 //ToDo: check before add\r
348 String[] row = {jTextField.getText().replace('\\', '/')};\r
ce73a791 349 if (jTextField.getText().length() == 0) {\r
350 JOptionPane.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");\r
351 return;\r
352 }\r
a13899c5 353 model.addRow(row);\r
af25df16 354 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
a13899c5 355 sfc.genSpdMsaFiles(row[0], null, null, null);\r
356 }\r
357 //\r
358 // remove selected line\r
359 //\r
360 if (arg0.getSource() == jButtonRemove) {\r
361 if (jTable.isEditing()){\r
362 jTable.getCellEditor().stopCellEditing();\r
363 }\r
364 int rowSelected = selectedRow;\r
365 if (rowSelected >= 0) {\r
366 model.removeRow(rowSelected);\r
367 sfc.removeSpdMsaFile(rowSelected);\r
368 }\r
369 }\r
370\r
371 if (arg0.getSource() == jButtonClearAll) {\r
372 if (model.getRowCount() == 0) {\r
373 return;\r
374 }\r
375 model.setRowCount(0);\r
376 sfc.removeSpdMsaFile();\r
377 }\r
378\r
379 }\r
380 \r
381 public void tableChanged(TableModelEvent arg0) {\r
382 // TODO Auto-generated method stub\r
383 int row = arg0.getFirstRow();\r
384 TableModel m = (TableModel)arg0.getSource();\r
385 if (arg0.getType() == TableModelEvent.UPDATE){\r
386 String file = m.getValueAt(row, 0) + "";\r
ce73a791 387 if (file.length() == 0) {\r
388 JOptionPane.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");\r
389 return;\r
390 }\r
d6d24759 391 docConsole.setSaved(false);\r
a13899c5 392 sfc.updateSpdMsaFile(row, file, null, null, null);\r
393 }\r
394 }\r
395\r
396 /**\r
397 Add contents in list to sfc\r
398 **/\r
399 protected void save() {\r
400 \r
401 }\r
402\r
403 /**\r
404 This method initializes jTextField \r
405 \r
406 @return javax.swing.JTextField \r
407 **/\r
408 private JTextField getJTextField() {\r
409 if (jTextField == null) {\r
410 jTextField = new JTextField();\r
411 jTextField.setBounds(new java.awt.Rectangle(14,51,346,21));\r
412 jTextField.setPreferredSize(new java.awt.Dimension(345,20));\r
413 }\r
414 return jTextField;\r
415 }\r
416\r
417 /**\r
418 This method initializes jButtonBrowse \r
419 \r
420 @return javax.swing.JButton \r
421 **/\r
422 private JButton getJButtonBrowse() {\r
423 if (jButtonBrowse == null) {\r
424 jButtonBrowse = new JButton();\r
425 jButtonBrowse.setBounds(new java.awt.Rectangle(376,50,92,21));\r
426 jButtonBrowse.setText("Browse");\r
427 jButtonBrowse.setPreferredSize(new java.awt.Dimension(90,20));\r
428 jButtonBrowse.addActionListener(new AbstractAction() {\r
ce73a791 429 /**\r
430 * \r
431 */\r
432 private static final long serialVersionUID = 1L;\r
433\r
a13899c5 434 public void actionPerformed(ActionEvent e) {\r
435 //\r
436 // Select files from current workspace\r
437 //\r
438 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
439 JFileChooser chooser = new JFileChooser(dirPrefix);\r
440 File theFile = null;\r
441 String headerDest = null;\r
442 \r
443 chooser.setMultiSelectionEnabled(false);\r
444 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
445 int retval = chooser.showOpenDialog(frame);\r
446 if (retval == JFileChooser.APPROVE_OPTION) {\r
447\r
448 theFile = chooser.getSelectedFile();\r
449 String file = theFile.getPath();\r
450 if (!file.startsWith(dirPrefix)) {\r
451 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
452 return;\r
453 }\r
454 \r
455 \r
456 }\r
457 else {\r
458 return;\r
459 }\r
460 \r
461 headerDest = theFile.getPath();\r
462 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
463 \r
464 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
465 \r
466 }\r
467 });\r
468 }\r
469 return jButtonBrowse;\r
470 }\r
471 \r
472 public void componentResized(ComponentEvent arg0) {\r
473 int intPreferredWidth = 500;\r
474 \r
475 resizeComponentWidth(this.jScrollPane1, this.getWidth(), intPreferredWidth);\r
476 resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
477 relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 25);\r
478 }\r
479 \r
480 public static void main(String[] args){\r
481 new SpdMsaFiles().setVisible(true);\r
482 }\r
483}\r
484\r
485\r