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