3 The file is used to create, update SourceFile of MSA/MBD file
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 package org
.tianocore
.frameworkwizard
.module
.ui
;
17 import java
.awt
.Dimension
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ComponentEvent
;
20 import java
.awt
.event
.MouseEvent
;
21 import java
.util
.Vector
;
23 import javax
.swing
.JButton
;
24 import javax
.swing
.JCheckBox
;
25 import javax
.swing
.JPanel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTable
;
28 import javax
.swing
.ListSelectionModel
;
29 import javax
.swing
.event
.ListSelectionEvent
;
31 import org
.tianocore
.SourceFilesDocument
;
32 import org
.tianocore
.FilenameDocument
.Filename
;
33 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
34 import org
.tianocore
.SourceFilesDocument
.SourceFiles
;
35 import org
.tianocore
.frameworkwizard
.common
.DataType
;
36 import org
.tianocore
.frameworkwizard
.common
.IDefaultTableModel
;
37 import org
.tianocore
.frameworkwizard
.common
.Log
;
38 import org
.tianocore
.frameworkwizard
.common
.Tools
;
39 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
40 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
41 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
42 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SourceFiles
.SourceFilesIdentification
;
43 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SourceFiles
.SourceFilesVector
;
44 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.SourceFilesDlg
;
47 The class is used to create, update SourceFile of MSA/MBD file
48 It extends IInternalFrame
51 public class ModuleSourceFiles
extends IInternalFrame
{
54 /// Define class Serial Version UID
56 private static final long serialVersionUID
= -6765742852142775378L;
59 // Define class members
61 private SourceFilesDocument
.SourceFiles sourceFiles
= null;
63 private JPanel jContentPane
= null;
65 private JButton jButtonAdd
= null;
67 private JButton jButtonRemove
= null;
69 private JButton jButtonUpdate
= null;
71 private JCheckBox jCheckBoxArch
= null;
73 private JScrollPane jScrollPane
= null;
75 private JScrollPane jScrollPaneTable
= null;
77 private JTable jTable
= null;
82 private OpeningModuleType omt
= null;
84 private ModuleSurfaceArea msa
= null;
86 private SourceFilesVector vSourceFiles
= new SourceFilesVector();
88 private IDefaultTableModel model
= null;
90 private int selectedRow
= -1;
93 This method initializes jButtonAdd
95 @return javax.swing.JButton jButtonAdd
98 private JButton
getJButtonAdd() {
99 if (jButtonAdd
== null) {
100 jButtonAdd
= new JButton();
101 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 220, 80, 20));
102 jButtonAdd
.setText("Add");
103 jButtonAdd
.addActionListener(this);
104 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
110 This method initializes jButtonRemove
112 @return javax.swing.JButton jButtonRemove
115 private JButton
getJButtonRemove() {
116 if (jButtonRemove
== null) {
117 jButtonRemove
= new JButton();
118 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 220, 80, 20));
119 jButtonRemove
.setText("Remove");
120 jButtonRemove
.addActionListener(this);
121 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
123 return jButtonRemove
;
127 This method initializes jButtonUpdate
129 @return javax.swing.JButton jButtonUpdate
132 private JButton
getJButtonUpdate() {
133 if (jButtonUpdate
== null) {
134 jButtonUpdate
= new JButton();
135 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 220, 80, 20));
136 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
137 jButtonUpdate
.setText("Edit");
138 jButtonUpdate
.addActionListener(this);
140 return jButtonUpdate
;
144 This method initializes jScrollPane
146 @return javax.swing.JScrollPane
148 private JScrollPane
getJScrollPane() {
149 if (jScrollPane
== null) {
150 jScrollPane
= new JScrollPane();
151 jScrollPane
.setViewportView(getJContentPane());
157 * This method initializes jScrollPaneTable
159 * @return javax.swing.JScrollPane
161 private JScrollPane
getJScrollPaneTable() {
162 if (jScrollPaneTable
== null) {
163 jScrollPaneTable
= new JScrollPane();
164 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
165 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
166 jScrollPaneTable
.setViewportView(getJTable());
168 return jScrollPaneTable
;
172 * This method initializes jTable
174 * @return javax.swing.JTable
176 private JTable
getJTable() {
177 if (jTable
== null) {
178 jTable
= new JTable();
179 model
= new IDefaultTableModel();
180 jTable
= new JTable(model
);
181 jTable
.setRowHeight(20);
183 model
.addColumn("File Name");
184 model
.addColumn("Tag Name");
185 model
.addColumn("Tool Code");
186 model
.addColumn("Tool Chain Family");
188 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
189 jTable
.getSelectionModel().addListSelectionListener(this);
190 jTable
.getModel().addTableModelListener(this);
191 jTable
.addMouseListener(this);
196 public static void main(String
[] args
) {
201 This is the default constructor
204 public ModuleSourceFiles() {
207 this.setVisible(true);
211 This is the override edit constructor
216 public ModuleSourceFiles(OpeningModuleType inOmt
) {
219 this.msa
= omt
.getXmlMsa();
220 init(msa
.getSourceFiles());
221 this.setVisible(true);
225 This method initializes this
226 Fill values to all fields if these values are not empty
229 @param inSourceFiles The input data of SourceFilesDocument.SourceFiles
232 private void init(SourceFilesDocument
.SourceFiles inSourceFiles
) {
234 this.sourceFiles
= inSourceFiles
;
236 if (this.sourceFiles
!= null) {
237 if (this.sourceFiles
.getFilenameList().size() > 0) {
238 for (int index
= 0; index
< this.sourceFiles
.getFilenameList().size(); index
++) {
239 String name
= sourceFiles
.getFilenameList().get(index
).getStringValue();
240 String tagName
= sourceFiles
.getFilenameList().get(index
).getTagName();
241 String toolCode
= sourceFiles
.getFilenameList().get(index
).getToolCode();
242 String tcf
= sourceFiles
.getFilenameList().get(index
).getToolChainFamily();
243 String featureFlag
= sourceFiles
.getFilenameList().get(index
).getFeatureFlag();
244 Vector
<String
> arch
= Tools
.convertListToVector(sourceFiles
.getFilenameList().get(index
)
246 SourceFilesIdentification sfid
= new SourceFilesIdentification(name
, tagName
, toolCode
, tcf
,
248 vSourceFiles
.addSourceFiles(sfid
);
256 This method initializes this
259 private void init() {
260 this.setSize(500, 515);
261 this.setContentPane(getJScrollPane());
262 this.setTitle("Source Files");
263 this.setViewMode(false);
267 Disable all components when the mode is view
269 @param isView true - The view mode; false - The non-view mode
272 public void setViewMode(boolean isView
) {
274 this.jButtonAdd
.setEnabled(!isView
);
275 this.jButtonRemove
.setEnabled(!isView
);
276 this.jButtonUpdate
.setEnabled(!isView
);
277 this.jCheckBoxArch
.setEnabled(!isView
);
282 This method initializes jContentPane
284 @return javax.swing.JPanel jContentPane
287 private JPanel
getJContentPane() {
288 if (jContentPane
== null) {
289 jContentPane
= new JPanel();
290 jContentPane
.setLayout(null);
291 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
293 jContentPane
.add(getJButtonAdd(), null);
294 jContentPane
.add(getJButtonRemove(), null);
295 jContentPane
.add(getJButtonUpdate(), null);
296 jContentPane
.add(getJScrollPaneTable(), null);
302 Save all components of SourceFiles
303 if exists sourceFiles, set the value directly
304 if not exists sourceFiles, new an instance first
312 int count
= this.vSourceFiles
.size();
314 this.sourceFiles
= SourceFiles
.Factory
.newInstance();
316 for (int index
= 0; index
< count
; index
++) {
317 Filename mFilename
= Filename
.Factory
.newInstance();
318 if (!isEmpty(vSourceFiles
.getSourceFiles(index
).getFilename())) {
319 mFilename
.setStringValue(vSourceFiles
.getSourceFiles(index
).getFilename());
321 if (!isEmpty(vSourceFiles
.getSourceFiles(index
).getTagName())) {
322 mFilename
.setTagName(vSourceFiles
.getSourceFiles(index
).getTagName());
324 if (!isEmpty(vSourceFiles
.getSourceFiles(index
).getToolCode())) {
325 mFilename
.setToolCode(vSourceFiles
.getSourceFiles(index
).getToolCode());
327 if (!isEmpty(vSourceFiles
.getSourceFiles(index
).getToolChainFamily())) {
328 mFilename
.setToolChainFamily(vSourceFiles
.getSourceFiles(index
).getToolChainFamily());
330 if (!isEmpty(vSourceFiles
.getSourceFiles(index
).getFeatureFlag())) {
331 mFilename
.setFeatureFlag(vSourceFiles
.getSourceFiles(index
).getFeatureFlag());
333 if (vSourceFiles
.getSourceFiles(index
).getSupArchList() != null
334 && vSourceFiles
.getSourceFiles(index
).getSupArchList().size() > 0) {
335 mFilename
.setSupArchList(vSourceFiles
.getSourceFiles(index
).getSupArchList());
338 this.sourceFiles
.addNewFilename();
339 this.sourceFiles
.setFilenameArray(index
, mFilename
);
342 this.msa
.setSourceFiles(sourceFiles
);
343 this.omt
.setSaved(false);
344 } catch (Exception e
) {
345 Log
.wrn("Update Source Files", e
.getMessage());
346 Log
.err("Update Source Files", e
.getMessage());
350 private void showEdit(int index
) {
351 SourceFilesDlg sfd
= new SourceFilesDlg(this.vSourceFiles
.getSourceFiles(index
), new IFrame(), omt
.getId());
352 int result
= sfd
.showDialog();
353 if (result
== DataType
.RETURN_TYPE_OK
) {
355 for (int indexI
= 0; indexI
< sfd
.getSfid().length
; indexI
++) {
356 this.vSourceFiles
.addSourceFiles(sfd
.getSfid()[indexI
]);
359 this.vSourceFiles
.setSourceFiles(sfd
.getSfid()[0], index
);
365 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
371 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
373 * Override actionPerformed to listen all actions
376 public void actionPerformed(ActionEvent arg0
) {
377 if (arg0
.getSource() == jButtonAdd
) {
380 if (arg0
.getSource() == jButtonUpdate
) {
381 if (this.selectedRow
< 0) {
382 Log
.wrn("Update Source Files", "Please select one record first.");
385 showEdit(selectedRow
);
388 if (arg0
.getSource() == jButtonRemove
) {
389 if (jTable
.isEditing()) {
390 jTable
.getCellEditor().stopCellEditing();
392 if (selectedRow
> -1) {
393 this.model
.removeRow(selectedRow
);
394 this.vSourceFiles
.removeSourceFiles(selectedRow
);
405 private void clearAll() {
407 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
408 model
.removeRow(index
);
414 Read content of vector and put then into table
417 private void showTable() {
420 if (vSourceFiles
.size() > 0) {
421 for (int index
= 0; index
< vSourceFiles
.size(); index
++) {
422 model
.addRow(vSourceFiles
.toStringVector(index
));
425 this.jTable
.repaint();
426 this.jTable
.updateUI();
427 //this.jScrollPane.setViewportView(this.jTable);
431 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
434 public void valueChanged(ListSelectionEvent arg0
) {
435 if (arg0
.getValueIsAdjusting()) {
438 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
439 if (lsm
.isSelectionEmpty()) {
442 selectedRow
= lsm
.getMinSelectionIndex();
447 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
450 public void mouseClicked(MouseEvent arg0
) {
451 if (arg0
.getClickCount() == 2) {
452 if (this.selectedRow
< 0) {
455 showEdit(selectedRow
);
461 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
463 * Override componentResized to resize all components when frame's size is changed
465 public void componentResized(ComponentEvent arg0
) {
466 int intCurrentWidth
= this.getJContentPane().getWidth();
467 int intCurrentHeight
= this.getJContentPane().getHeight();
468 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
469 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
471 Tools
.resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
473 Tools
.relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
474 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
,
475 DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
476 Tools
.relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
477 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
,
478 DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
479 Tools
.relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
480 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
,
481 DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);