]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdMsaFiles.java
Add check before adding msa file to spd file.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdMsaFiles.java
... / ...
CommitLineData
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
15import java.awt.Dimension;\r
16import java.awt.event.ActionEvent;\r
17import java.awt.event.ComponentEvent;\r
18import java.io.File;\r
19\r
20import javax.swing.AbstractAction;\r
21import javax.swing.JFileChooser;\r
22import javax.swing.JOptionPane;\r
23import javax.swing.JPanel;\r
24import javax.swing.JTable;\r
25import javax.swing.JTextField;\r
26import javax.swing.JLabel;\r
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
41import org.tianocore.frameworkwizard.common.Tools;\r
42import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
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
52 /**\r
53 * \r
54 */\r
55 private static final long serialVersionUID = 1L;\r
56\r
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 jScrollPaneMsa = 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
88 \r
89 private OpeningPackageType docConsole = null;\r
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 getJScrollPaneMsa() {\r
109 if (jScrollPaneMsa == null) {\r
110 jScrollPaneMsa = new JScrollPane();\r
111 jScrollPaneMsa.setBounds(new java.awt.Rectangle(13,177,461,421));\r
112 jScrollPaneMsa.setViewportView(getJTable());\r
113 }\r
114 return jScrollPaneMsa;\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
244 \r
245 public SpdMsaFiles(OpeningPackageType opt){\r
246 this(opt.getXmlSpd());\r
247 docConsole = opt;\r
248 }\r
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(getJScrollPaneMsa(), 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
335 \r
336 if (arg0.getSource() == jButtonOk) {\r
337 this.save();\r
338 this.dispose();\r
339\r
340 }\r
341 if (arg0.getSource() == jButtonCancel) {\r
342 this.dispose();\r
343 }\r
344\r
345 if (arg0.getSource() == jButtonAdd) {\r
346 //ToDo: check before add\r
347 String[] row = {jTextField.getText().replace('\\', '/')};\r
348 if (jTextField.getText().length() == 0) {\r
349 JOptionPane.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");\r
350 return;\r
351 }\r
352 \r
353 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
354 if (!new File(dirPrefix + File.separator + jTextField.getText()).exists()) {\r
355 JOptionPane.showMessageDialog(this, "File NOT Exists in Current Package.");\r
356 return;\r
357 }\r
358 model.addRow(row);\r
359 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
360 sfc.genSpdMsaFiles(row[0], null, null, null);\r
361 docConsole.setSaved(false);\r
362 }\r
363 //\r
364 // remove selected line\r
365 //\r
366 if (arg0.getSource() == jButtonRemove) {\r
367 if (jTable.isEditing()){\r
368 jTable.getCellEditor().stopCellEditing();\r
369 }\r
370 int rowSelected = selectedRow;\r
371 if (rowSelected >= 0) {\r
372 model.removeRow(rowSelected);\r
373 sfc.removeSpdMsaFile(rowSelected);\r
374 docConsole.setSaved(false);\r
375 }\r
376 }\r
377\r
378 if (arg0.getSource() == jButtonClearAll) {\r
379 if (model.getRowCount() == 0) {\r
380 return;\r
381 }\r
382 model.setRowCount(0);\r
383 sfc.removeSpdMsaFile();\r
384 docConsole.setSaved(false);\r
385 }\r
386\r
387 }\r
388 \r
389 public void tableChanged(TableModelEvent arg0) {\r
390 // TODO Auto-generated method stub\r
391 int row = arg0.getFirstRow();\r
392 int column = arg0.getColumn();\r
393 TableModel m = (TableModel)arg0.getSource();\r
394 if (arg0.getType() == TableModelEvent.UPDATE){\r
395 String[] sa = new String[1];\r
396 sfc.getSpdMsaFile(sa, row);\r
397 Object cellData = m.getValueAt(row, column);\r
398 if (cellData == null) {\r
399 cellData = "";\r
400 }\r
401 if (cellData.equals(sa[column])) {\r
402 return;\r
403 }\r
404 if (cellData.toString().length() == 0 && sa[column] == null) {\r
405 return;\r
406 }\r
407 String file = m.getValueAt(row, 0) + "";\r
408 if (file.length() == 0) {\r
409 JOptionPane.showMessageDialog(this, "Msa File is NOT PathAndFilename type.");\r
410 return;\r
411 }\r
412 docConsole.setSaved(false);\r
413 sfc.updateSpdMsaFile(row, file, null, null, null);\r
414 }\r
415 }\r
416\r
417 /**\r
418 Add contents in list to sfc\r
419 **/\r
420 protected void save() {\r
421 \r
422 }\r
423\r
424 /**\r
425 This method initializes jTextField \r
426 \r
427 @return javax.swing.JTextField \r
428 **/\r
429 private JTextField getJTextField() {\r
430 if (jTextField == null) {\r
431 jTextField = new JTextField();\r
432 jTextField.setBounds(new java.awt.Rectangle(14,51,346,21));\r
433 jTextField.setPreferredSize(new java.awt.Dimension(345,20));\r
434 }\r
435 return jTextField;\r
436 }\r
437\r
438 /**\r
439 This method initializes jButtonBrowse \r
440 \r
441 @return javax.swing.JButton \r
442 **/\r
443 private JButton getJButtonBrowse() {\r
444 if (jButtonBrowse == null) {\r
445 jButtonBrowse = new JButton();\r
446 jButtonBrowse.setBounds(new java.awt.Rectangle(376,50,92,21));\r
447 jButtonBrowse.setText("Browse");\r
448 jButtonBrowse.setPreferredSize(new java.awt.Dimension(90,20));\r
449 jButtonBrowse.addActionListener(new AbstractAction() {\r
450 /**\r
451 * \r
452 */\r
453 private static final long serialVersionUID = 1L;\r
454\r
455 public void actionPerformed(ActionEvent e) {\r
456 //\r
457 // Select files from current workspace\r
458 //\r
459 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
460 JFileChooser chooser = new JFileChooser(dirPrefix);\r
461 File theFile = null;\r
462 String headerDest = null;\r
463 \r
464 chooser.setMultiSelectionEnabled(false);\r
465 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
466 int retval = chooser.showOpenDialog(frame);\r
467 if (retval == JFileChooser.APPROVE_OPTION) {\r
468\r
469 theFile = chooser.getSelectedFile();\r
470 String file = theFile.getPath();\r
471 if (!file.startsWith(dirPrefix)) {\r
472 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
473 return;\r
474 }\r
475 \r
476 \r
477 }\r
478 else {\r
479 return;\r
480 }\r
481 \r
482 headerDest = theFile.getPath();\r
483 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
484 \r
485 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
486 \r
487 }\r
488 });\r
489 }\r
490 return jButtonBrowse;\r
491 }\r
492 \r
493 public void componentResized(ComponentEvent arg0) {\r
494 int intPreferredWidth = 500;\r
495 \r
496 Tools.resizeComponentWidth(this.jScrollPaneMsa, this.getWidth(), intPreferredWidth);\r
497 Tools.resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
498 Tools.relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 25);\r
499 }\r
500 \r
501 public static void main(String[] args){\r
502 new SpdMsaFiles().setVisible(true);\r
503 }\r
504}\r
505\r
506\r