]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/ModuleEditor/src/org/tianocore/packaging/module/ui/ModuleVariables.java
Initial import.
[mirror_edk2.git] / Tools / Source / ModuleEditor / src / org / tianocore / packaging / module / ui / ModuleVariables.java
1 /** @file
2
3 The file is used to create, update Variable of MSA/MBD file
4
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
10
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.
13
14 **/
15
16 package org.tianocore.packaging.module.ui;
17
18 import java.awt.event.ActionEvent;
19
20 import javax.swing.JButton;
21 import javax.swing.JComboBox;
22 import javax.swing.JLabel;
23 import javax.swing.JPanel;
24 import javax.swing.JTextField;
25
26 import org.tianocore.GuidDocument;
27 import org.tianocore.VariableUsage;
28 import org.tianocore.VariablesDocument;
29 import org.tianocore.common.DataValidation;
30 import org.tianocore.common.Log;
31 import org.tianocore.common.Tools;
32 import org.tianocore.packaging.common.ui.IInternalFrame;
33 import org.tianocore.packaging.common.ui.StarLabel;
34
35 /**
36 The class is used to create, update Variable of MSA/MBD file
37 It extends IInternalFrame
38
39 @since ModuleEditor 1.0
40
41 **/
42 public class ModuleVariables extends IInternalFrame {
43
44 ///
45 /// Define class Serial Version UID
46 ///
47 private static final long serialVersionUID = -6998982978030439446L;
48
49 //
50 //Define class members
51 //
52 private VariablesDocument.Variables variables = null;
53
54 private int location = -1;
55
56 private JPanel jContentPane = null;
57
58 private JLabel jLabelGuid = null;
59
60 private JTextField jTextFieldGuid = null;
61
62 private JLabel jLabelString = null;
63
64 private JTextField jTextFieldString = null;
65
66 private JLabel jLabelBitOffset = null;
67
68 private JTextField jTextFieldBitOffset = null;
69
70 private JLabel jLabelByteOffset = null;
71
72 private JTextField jTextFieldByteOffset = null;
73
74 private JLabel jLabelOffsetBitSize = null;
75
76 private JTextField jTextFieldOffsetBitSize = null;
77
78 private JLabel jLabelUsage = null;
79
80 private JComboBox jComboBoxUsage = null;
81
82 private JButton jButtonOk = null;
83
84 private JButton jButtonCancel = null;
85
86 private JButton jButtonGenerateGuid = null;
87
88 private JLabel jLabelOverrideID = null;
89
90 private JTextField jTextFieldOverrideID = null;
91
92 private StarLabel jStarLabel1 = null;
93
94 private StarLabel jStarLabel2 = null;
95
96 private JLabel jLabelByteOffsetHint = null;
97
98 private JLabel jLabelBitOffsetHint = null;
99
100 private JLabel jLabelOffsetBitSizeHint = null;
101
102 /**
103 This method initializes jTextFieldGuid
104
105 @return javax.swing.JTextField jTextFieldGuid
106
107 **/
108 private JTextField getJTextFieldGuid() {
109 if (jTextFieldGuid == null) {
110 jTextFieldGuid = new JTextField();
111 jTextFieldGuid.setSize(new java.awt.Dimension(250, 20));
112 jTextFieldGuid.setLocation(new java.awt.Point(160, 35));
113 }
114 return jTextFieldGuid;
115 }
116
117 /**
118 This method initializes jTextFieldString
119
120 @return javax.swing.JTextField jTextFieldString
121
122 **/
123 private JTextField getJTextFieldString() {
124 if (jTextFieldString == null) {
125 jTextFieldString = new JTextField();
126 jTextFieldString.setSize(new java.awt.Dimension(320, 20));
127 jTextFieldString.setLocation(new java.awt.Point(160, 10));
128 }
129 return jTextFieldString;
130 }
131
132 /**
133 This method initializes jTextFieldBitOffset
134
135 @return javax.swing.JTextField jTextFieldBitOffset
136
137 **/
138 private JTextField getJTextFieldBitOffset() {
139 if (jTextFieldBitOffset == null) {
140 jTextFieldBitOffset = new JTextField();
141 jTextFieldBitOffset.setSize(new java.awt.Dimension(80, 20));
142 jTextFieldBitOffset.setLocation(new java.awt.Point(160, 85));
143 }
144 return jTextFieldBitOffset;
145 }
146
147 /**
148 This method initializes jTextFieldByteOffset
149
150 @return javax.swing.JTextField jTextFieldByteOffset
151
152 **/
153 private JTextField getJTextFieldByteOffset() {
154 if (jTextFieldByteOffset == null) {
155 jTextFieldByteOffset = new JTextField();
156 jTextFieldByteOffset.setLocation(new java.awt.Point(160, 60));
157 jTextFieldByteOffset.setSize(new java.awt.Dimension(80, 20));
158 }
159 return jTextFieldByteOffset;
160 }
161
162 /**
163 This method initializes jTextFieldBitSize
164
165 @return javax.swing.JTextField jTextFieldOffsetBitSize
166
167 **/
168 private JTextField getJTextFieldOffsetBitSize() {
169 if (jTextFieldOffsetBitSize == null) {
170 jTextFieldOffsetBitSize = new JTextField();
171 jTextFieldOffsetBitSize.setSize(new java.awt.Dimension(80, 20));
172 jTextFieldOffsetBitSize.setLocation(new java.awt.Point(160, 110));
173 }
174 return jTextFieldOffsetBitSize;
175 }
176
177 /**
178 This method initializes jComboBoxUsage
179
180 @return javax.swing.JComboBox jComboBoxUsage
181
182 **/
183 private JComboBox getJComboBoxUsage() {
184 if (jComboBoxUsage == null) {
185 jComboBoxUsage = new JComboBox();
186 jComboBoxUsage.setBounds(new java.awt.Rectangle(160, 135, 320, 20));
187 }
188 return jComboBoxUsage;
189 }
190
191 /**
192 This method initializes jButtonOk
193
194 @return javax.swing.JButton jButtonOk
195
196 **/
197 private JButton getJButtonOk() {
198 if (jButtonOk == null) {
199 jButtonOk = new JButton();
200 jButtonOk.setText("Ok");
201 jButtonOk.setBounds(new java.awt.Rectangle(290, 190, 90, 20));
202 jButtonOk.addActionListener(this);
203 }
204 return jButtonOk;
205 }
206
207 /**
208 This method initializes jButtonCancel
209
210 @return javax.swing.JButton jButtonCancel
211
212 **/
213 private JButton getJButtonCancel() {
214 if (jButtonCancel == null) {
215 jButtonCancel = new JButton();
216 jButtonCancel.setText("Cancel");
217 jButtonCancel.setBounds(new java.awt.Rectangle(390, 190, 90, 20));
218 jButtonCancel.addActionListener(this);
219 }
220 return jButtonCancel;
221 }
222
223 /**
224 This method initializes jButtonGenerateGuid
225
226 @return javax.swing.JButton jButtonGenerateGuid
227
228 **/
229 private JButton getJButtonGenerateGuid() {
230 if (jButtonGenerateGuid == null) {
231 jButtonGenerateGuid = new JButton();
232 jButtonGenerateGuid.setText("GEN");
233 jButtonGenerateGuid.addActionListener(this);
234 jButtonGenerateGuid.setBounds(new java.awt.Rectangle(415, 35, 65, 20));
235 }
236 return jButtonGenerateGuid;
237 }
238
239 /**
240 This method initializes jTextFieldOverrideID
241
242 @return javax.swing.JTextField jTextFieldOverrideID
243
244 **/
245 private JTextField getJTextFieldOverrideID() {
246 if (jTextFieldOverrideID == null) {
247 jTextFieldOverrideID = new JTextField();
248 jTextFieldOverrideID.setBounds(new java.awt.Rectangle(160, 160, 50, 20));
249 }
250 return jTextFieldOverrideID;
251 }
252
253 public static void main(String[] args) {
254
255 }
256
257 /**
258 This is the default constructor
259
260 **/
261 public ModuleVariables() {
262 super();
263 init();
264 this.setVisible(true);
265 }
266
267 /**
268 This is the override edit constructor
269
270 @param inVariables The input data of VariablesDocument.Variables
271
272 **/
273 public ModuleVariables(VariablesDocument.Variables inVariables) {
274 super();
275 init(inVariables);
276 this.setVisible(true);
277 }
278
279 /**
280 This is the override edit constructor
281
282 @param inVariables The input data of VariablesDocument.Variables
283 @param type The input data of node type
284 @param index The input data of node index
285
286 **/
287 public ModuleVariables(VariablesDocument.Variables inVariables, int type, int index) {
288 super();
289 init(inVariables, type, index);
290 this.setVisible(true);
291 }
292
293 /**
294 This method initializes this
295
296 @param inVariables The input data of VariablesDocument.Variables
297
298 **/
299 private void init(VariablesDocument.Variables inVariables) {
300 init();
301 this.setVariables(inVariables);
302 }
303
304 /**
305 This method initializes this
306 Fill values to all fields if these values are not empty
307
308 @param inVariables The input data of VariablesDocument.Variables
309 @param type The input data of node type
310 @param index The input data of node index
311
312 **/
313 private void init(VariablesDocument.Variables inVariables, int type, int index) {
314 init(inVariables);
315 this.location = index;
316 if (this.variables.getVariableList().size() > 0) {
317 if (this.variables.getVariableArray(index).getString() != null) {
318 this.jTextFieldString.setText(this.variables.getVariableArray(index).getString());
319 }
320 if (this.variables.getVariableArray(index).getGuid() != null) {
321 this.jTextFieldGuid.setText(this.variables.getVariableArray(index).getGuid().getStringValue());
322 }
323 if (this.variables.getVariableArray(index).getByteOffset() != null) {
324 this.jTextFieldByteOffset
325 .setText(String
326 .valueOf(this.variables.getVariableArray(index).getByteOffset()));
327 }
328 if (String.valueOf(this.variables.getVariableArray(index).getBitOffset()) != null) {
329 this.jTextFieldBitOffset.setText(String.valueOf(this.variables.getVariableArray(index).getBitOffset()));
330 }
331 if (String.valueOf(this.variables.getVariableArray(index).getOffsetBitSize()) != null) {
332 this.jTextFieldOffsetBitSize.setText(String.valueOf(this.variables.getVariableArray(index)
333 .getOffsetBitSize()));
334 }
335 if (this.variables.getVariableArray(index).getUsage() != null) {
336 this.jComboBoxUsage.setSelectedItem(this.variables.getVariableArray(index).getUsage().toString());
337 }
338 this.jTextFieldOverrideID.setText(String.valueOf(this.variables.getVariableArray(index).getOverrideID()));
339 }
340 }
341
342 /**
343 This method initializes this
344
345 @return void
346 **/
347 private void init() {
348 this.setSize(500, 515);
349 this.setContentPane(getJContentPane());
350 this.setTitle("Add Variables");
351 this.setViewMode(false);
352 }
353
354 /**
355 Disable all components when the mode is view
356
357 @param isView true - The view mode; false - The non-view mode
358
359 **/
360 public void setViewMode(boolean isView) {
361 this.jButtonOk.setVisible(false);
362 this.jButtonCancel.setVisible(false);
363 if (isView) {
364 this.jTextFieldString.setEnabled(!isView);
365 this.jTextFieldGuid.setEnabled(!isView);
366 this.jTextFieldByteOffset.setEnabled(!isView);
367 this.jTextFieldBitOffset.setEnabled(!isView);
368 this.jTextFieldOffsetBitSize.setEnabled(!isView);
369 this.jComboBoxUsage.setEnabled(!isView);
370 this.jButtonGenerateGuid.setEnabled(!isView);
371 this.jTextFieldOverrideID.setEnabled(!isView);
372 }
373 }
374
375 /**
376 This method initializes jContentPane
377
378 @return javax.swing.JPanel jContentPane
379
380 **/
381 private JPanel getJContentPane() {
382 if (jContentPane == null) {
383 jLabelByteOffsetHint = new JLabel();
384 jLabelByteOffsetHint.setBounds(new java.awt.Rectangle(245,60,235,20));
385 jLabelByteOffsetHint.setText("0x00");
386 jLabelOffsetBitSizeHint = new JLabel();
387 jLabelOffsetBitSizeHint.setBounds(new java.awt.Rectangle(245,110,235,20));
388 jLabelOffsetBitSizeHint.setText("1~7");
389 jLabelBitOffsetHint = new JLabel();
390 jLabelBitOffsetHint.setBounds(new java.awt.Rectangle(245,85,235,20));
391 jLabelBitOffsetHint.setText("0~7");
392 jLabelOverrideID = new JLabel();
393 jLabelOverrideID.setText("Override ID");
394 jLabelOverrideID.setBounds(new java.awt.Rectangle(15, 160, 140, 20));
395 jLabelUsage = new JLabel();
396 jLabelUsage.setText("Usage");
397 jLabelUsage.setBounds(new java.awt.Rectangle(15, 135, 140, 20));
398 jLabelOffsetBitSize = new JLabel();
399 jLabelOffsetBitSize.setText("Offset Bit Size");
400 jLabelOffsetBitSize.setLocation(new java.awt.Point(15, 110));
401 jLabelOffsetBitSize.setSize(new java.awt.Dimension(140, 20));
402 jLabelByteOffset = new JLabel();
403 jLabelByteOffset.setText("Byte Offset");
404 jLabelByteOffset.setLocation(new java.awt.Point(15, 60));
405 jLabelByteOffset.setSize(new java.awt.Dimension(140, 20));
406 jLabelBitOffset = new JLabel();
407 jLabelBitOffset.setText("Bit Offset");
408 jLabelBitOffset.setLocation(new java.awt.Point(15, 85));
409 jLabelBitOffset.setSize(new java.awt.Dimension(140, 20));
410 jLabelString = new JLabel();
411 jLabelString.setText("String");
412 jLabelString.setLocation(new java.awt.Point(15, 10));
413 jLabelString.setSize(new java.awt.Dimension(140, 20));
414 jLabelGuid = new JLabel();
415 jLabelGuid.setText("Guid");
416 jLabelGuid.setLocation(new java.awt.Point(15, 35));
417 jLabelGuid.setSize(new java.awt.Dimension(140, 20));
418 jContentPane = new JPanel();
419 jContentPane.setLayout(null);
420 jContentPane.add(getJButtonGenerateGuid(), null);
421 jContentPane.add(jLabelString, null);
422 jContentPane.add(getJTextFieldString(), null);
423 jContentPane.add(jLabelGuid, null);
424 jContentPane.add(getJTextFieldGuid(), null);
425 jContentPane.add(jLabelByteOffset, null);
426 jContentPane.add(getJTextFieldByteOffset(), null);
427 jContentPane.add(jLabelBitOffset, null);
428 jContentPane.add(getJTextFieldBitOffset(), null);
429 jContentPane.add(jLabelOffsetBitSize, null);
430 jContentPane.add(getJTextFieldOffsetBitSize(), null);
431 jContentPane.add(jLabelUsage, null);
432 jContentPane.add(getJComboBoxUsage(), null);
433 jContentPane.add(jLabelOverrideID, null);
434 jContentPane.add(getJTextFieldOverrideID(), null);
435 jContentPane.add(getJButtonOk(), null);
436 jContentPane.add(getJButtonCancel(), null);
437
438 jStarLabel1 = new StarLabel();
439 jStarLabel1.setLocation(new java.awt.Point(0, 10));
440 jStarLabel2 = new StarLabel();
441 jStarLabel2.setLocation(new java.awt.Point(0, 35));
442
443 jContentPane.add(jStarLabel1, null);
444 jContentPane.add(jStarLabel2, null);
445
446 jContentPane.add(jLabelByteOffsetHint, null);
447 jContentPane.add(jLabelBitOffsetHint, null);
448 jContentPane.add(jLabelOffsetBitSizeHint, null);
449 initFrame();
450 }
451 return jContentPane;
452 }
453
454 /* (non-Javadoc)
455 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
456 *
457 * Override actionPerformed to listen all actions
458 *
459 */
460 public void actionPerformed(ActionEvent arg0) {
461 if (arg0.getSource() == jButtonOk) {
462 this.setEdited(true);
463 this.save();
464 this.dispose();
465 }
466 if (arg0.getSource() == jButtonCancel) {
467 this.dispose();
468 }
469
470 if (arg0.getSource() == jButtonGenerateGuid) {
471 jTextFieldGuid.setText(Tools.generateUuidString());
472 }
473 }
474
475 /**
476 This method initializes Usage type
477
478 **/
479 private void initFrame() {
480 jComboBoxUsage.addItem("ALWAYS_CONSUMED");
481 jComboBoxUsage.addItem("SOMETIMES_CONSUMED");
482 jComboBoxUsage.addItem("ALWAYS_PRODUCED");
483 jComboBoxUsage.addItem("SOMETIMES_PRODUCED");
484 jComboBoxUsage.addItem("PRIVATE");
485 }
486
487 /**
488 Get VariablesDocument.Variables
489
490 @return VariablesDocument.Variables
491
492 **/
493 public VariablesDocument.Variables getVariables() {
494 return variables;
495 }
496
497 /**
498 Set VariablesDocument.Variables
499
500 @param variables The input data of VariablesDocument.Variables
501
502 **/
503 public void setVariables(VariablesDocument.Variables variables) {
504 this.variables = variables;
505 }
506
507 /**
508 Data validation for all fields
509
510 @retval true - All datas are valid
511 @retval false - At least one data is invalid
512
513 **/
514 public boolean check() {
515 //
516 // Check if all required fields are not empty
517 //
518 if (isEmpty(this.jTextFieldString.getText())) {
519 Log.err("String couldn't be empty");
520 return false;
521 }
522 if (isEmpty(this.jTextFieldGuid.getText())) {
523 Log.err("Guid couldn't be empty");
524 return false;
525 }
526
527 //
528 // Check if all fields have correct data types
529 //
530 if (!isEmpty(this.jTextFieldGuid.getText()) && !DataValidation.isGuid(this.jTextFieldGuid.getText())) {
531 Log.err("Incorrect data type for Guid");
532 return false;
533 }
534 if (!isEmpty(this.jTextFieldByteOffset.getText())
535 && !DataValidation.isByteOffset(this.jTextFieldByteOffset.getText())) {
536 Log.err("Incorrect data type for Byte Offset");
537 return false;
538 }
539 if (!isEmpty(this.jTextFieldBitOffset.getText())
540 && !DataValidation.isBitOffset(this.jTextFieldBitOffset.getText())) {
541 Log.err("Incorrect data type for Bit Offset");
542 return false;
543 }
544 if (!isEmpty(this.jTextFieldOffsetBitSize.getText())
545 && !DataValidation.isOffsetBitSize(this.jTextFieldOffsetBitSize.getText())) {
546 Log.err("Incorrect data type for Bit Offset");
547 return false;
548 }
549 if (!isEmpty(this.jTextFieldOverrideID.getText())
550 && !DataValidation.isOverrideID(this.jTextFieldOverrideID.getText())) {
551 Log.err("Incorrect data type for Override ID");
552 return false;
553 }
554
555 return true;
556 }
557
558 /**
559 Save all components of Variables
560 if exists variables, set the value directly
561 if not exists variables, new an instance first
562
563 **/
564 public void save() {
565 try {
566 if (this.variables == null) {
567 variables = VariablesDocument.Variables.Factory.newInstance();
568 }
569 VariablesDocument.Variables.Variable variable = VariablesDocument.Variables.Variable.Factory.newInstance();
570 if (!isEmpty(this.jTextFieldString.getText())) {
571 variable.setString(this.jTextFieldString.getText());
572 }
573 if (!isEmpty(this.jTextFieldGuid.getText())) {
574 GuidDocument.Guid guid = GuidDocument.Guid.Factory.newInstance();
575 guid.setStringValue(this.jTextFieldGuid.getText());
576 variable.setGuid(guid);
577 }
578 if (!isEmpty(this.jTextFieldByteOffset.getText())) {
579 variable.setByteOffset(this.jTextFieldByteOffset.getText());
580 }
581 if (!isEmpty(this.jTextFieldBitOffset.getText())) {
582 variable.setBitOffset(Integer.parseInt(this.jTextFieldBitOffset.getText()));
583 }
584 if (!isEmpty(this.jTextFieldBitOffset.getText())) {
585 variable.setOffsetBitSize(Integer.parseInt(this.jTextFieldBitOffset.getText()));
586 }
587 variable.setUsage(VariableUsage.Enum.forString(jComboBoxUsage.getSelectedItem().toString()));
588 if (!isEmpty(this.jTextFieldOverrideID.getText())) {
589 variable.setOverrideID(Integer.parseInt(this.jTextFieldOverrideID.getText()));
590 }
591 if (location > -1) {
592 variables.setVariableArray(location, variable);
593 } else {
594 variables.addNewVariable();
595 variables.setVariableArray(variables.getVariableList().size() - 1, variable);
596 }
597 } catch (Exception e) {
598 Log.err("Update Variables", e.getMessage());
599 }
600 }
601 }