]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/GenGuidDialog.java
Make opening dialogs re-gain focus when user switch back to main UI from other window...
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / GenGuidDialog.java
1 /** @file
2 Java class GenGuidDialog.
3
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 package org.tianocore.frameworkwizard.packaging.ui;
14
15 import java.awt.BorderLayout;
16 import java.awt.Dimension;
17 import java.awt.Toolkit;
18
19 import javax.swing.JPanel;
20 import javax.swing.JDialog;
21 import java.awt.GridLayout;
22
23 import javax.swing.JComponent;
24 import javax.swing.JFrame;
25 import javax.swing.JOptionPane;
26 import javax.swing.JTextField;
27 import javax.swing.JLabel;
28 import javax.swing.JRadioButton;
29 import javax.swing.ButtonGroup;
30 import javax.swing.JButton;
31 import javax.swing.KeyStroke;
32
33 import org.tianocore.frameworkwizard.common.Tools;
34
35 import java.awt.FlowLayout;
36 import java.awt.event.ActionEvent;
37 import java.awt.event.ActionListener;
38 import java.awt.event.KeyEvent;
39 import java.awt.event.WindowAdapter;
40 import java.awt.event.WindowEvent;
41
42 /**
43 Dialog for GUID generation.
44 @since PackageEditor 1.0
45 **/
46 public class GenGuidDialog extends JDialog implements ActionListener{
47
48 /**
49 *
50 */
51 private static final long serialVersionUID = 1L;
52
53 public static final String guidArrayPat = "0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},( )*0x[a-fA-F0-9]{1,4}(,( )*\\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\\})?";
54
55 public static final String guidRegistryPat = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}";
56
57 static private JFrame frame;
58 private JPanel jContentPane = null;
59 private JPanel jPanelEast = null;
60 private JPanel jPanelCenter = null;
61 private JTextField jTextField = null;
62 private JLabel jLabel = null;
63 private JRadioButton jRadioButton = null;
64 private JRadioButton jRadioButtonReg = null;
65 private JButton jButtonCancel = null;
66 private JButton jButtonNew = null;
67 private JButton jButtonOk = null;
68 private ActionListener outerListener = null;
69
70 // private String guid = null;
71
72 public void actionPerformed(ActionEvent arg0) {
73 // TODO Auto-generated method stub
74 if (arg0.getSource() == jButtonNew){
75 String uuid = Tools.generateUuidString();
76 if (jRadioButtonReg.isSelected()) {
77 jTextField.setText(uuid);
78 }
79 else {
80 //ToDo: transform to comma-sep guid
81 String s = GenGuidDialog.formatGuidString(uuid);
82 if (s.equals("0")) {
83 JOptionPane.showMessageDialog(frame, "Check GUID Value, it don't conform to the schema.");
84 return;
85 }
86 jTextField.setText(s);
87 }
88 }
89
90 if (arg0.getSource() == jRadioButtonReg){
91
92 //ToDo: check text field value against RegExp and transform if needed
93 if (jTextField.getText().matches(GenGuidDialog.guidRegistryPat)){
94 return;
95 }
96 if (jTextField.getText().matches(GenGuidDialog.guidArrayPat)) {
97 jTextField.setText(GenGuidDialog.formatGuidString(jTextField.getText()));
98 return;
99 }
100 if (jTextField.getText().length()>0)
101 JOptionPane.showMessageDialog(frame, "Check GUID Value, it don't conform to the schema.");
102
103 }
104
105 if (arg0.getSource() == jRadioButton){
106
107 //ToDo: check text field value against RegExp and transform if needed
108 if (jTextField.getText().matches(GenGuidDialog.guidArrayPat)){
109 return;
110 }
111 if (jTextField.getText().matches(GenGuidDialog.guidRegistryPat)) {
112 jTextField.setText(GenGuidDialog.formatGuidString(jTextField.getText()));
113 return;
114 }
115 if (jTextField.getText().length()>0)
116 JOptionPane.showMessageDialog(frame, "Check GUID Value, it don't conform to the schema.");
117
118 }
119
120 if (arg0.getSource() == jButtonOk){
121 // if (jTextField.getText().matches(Tools.guidArrayPat)
122 // || jTextField.getText().matches(Tools.guidRegistryPat)){
123 // this.setVisible(false);
124 // }
125 // else {
126 // JOptionPane.showMessageDialog(frame, "Incorrect GUID Value Format.");
127 // }
128 // this.dispose();
129 }
130
131 if (arg0.getSource() == jButtonCancel){
132 this.dispose();
133 }
134 }
135
136 /**
137 * This method initializes jPanel
138 *
139 * @return javax.swing.JPanel
140 */
141 private JPanel getJPanelEast() {
142 if (jPanelEast == null) {
143 FlowLayout flowLayout = new FlowLayout();
144 flowLayout.setVgap(10);
145 jPanelEast = new JPanel();
146 jPanelEast.setLayout(flowLayout);
147 jPanelEast.setPreferredSize(new java.awt.Dimension(100,30));
148 jPanelEast.add(getJButtonNew(), null);
149 jPanelEast.add(getJButtonOk(), null);
150 jPanelEast.add(getJButtonCancel(), null);
151 }
152 return jPanelEast;
153 }
154
155 /**
156 * This method initializes jPanel4
157 *
158 * @return javax.swing.JPanel
159 */
160 private JPanel getJPanelCenter() {
161 if (jPanelCenter == null) {
162 jLabel = new JLabel();
163 jLabel.setText("GUID Value");
164 GridLayout gridLayout = new GridLayout();
165 gridLayout.setRows(4);
166 jPanelCenter = new JPanel();
167 jPanelCenter.setLayout(gridLayout);
168 jPanelCenter.add(getJRadioButtonReg(), null);
169 jPanelCenter.add(getJRadioButton(), null);
170 jPanelCenter.add(jLabel, null);
171 jPanelCenter.add(getJTextField(), null);
172 ButtonGroup bg = new ButtonGroup();
173 bg.add(jRadioButtonReg);
174 bg.add(jRadioButton);
175 }
176 return jPanelCenter;
177 }
178
179 /**
180 * This method initializes jTextField
181 *
182 * @return javax.swing.JTextField
183 */
184 private JTextField getJTextField() {
185 if (jTextField == null) {
186 jTextField = new JTextField();
187 jTextField.setHorizontalAlignment(JTextField.LEADING);
188 jTextField.setPreferredSize(new java.awt.Dimension(100,20));
189 }
190 return jTextField;
191 }
192
193 /**
194 * This method initializes jRadioButton
195 *
196 * @return javax.swing.JRadioButton
197 */
198 private JRadioButton getJRadioButton() {
199 if (jRadioButton == null) {
200 jRadioButton = new JRadioButton();
201 jRadioButton.setText("Comma-Seperated Format");
202 jRadioButton.setEnabled(false);
203 jRadioButton.addActionListener(this);
204 }
205 return jRadioButton;
206 }
207
208 /**
209 * This method initializes jRadioButton1
210 *
211 * @return javax.swing.JRadioButton
212 */
213 private JRadioButton getJRadioButtonReg() {
214 if (jRadioButtonReg == null) {
215 jRadioButtonReg = new JRadioButton();
216 jRadioButtonReg.setText("Registry Format");
217 jRadioButtonReg.setSelected(true);
218 jRadioButtonReg.addActionListener(this);
219 }
220 return jRadioButtonReg;
221 }
222
223 /**
224 * This method initializes jButton
225 *
226 * @return javax.swing.JButton
227 */
228 private JButton getJButtonCancel() {
229 if (jButtonCancel == null) {
230 jButtonCancel = new JButton();
231 jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));
232 jButtonCancel.setText("Cancel");
233 jButtonCancel.addActionListener(this);
234 jButtonCancel.registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), JComponent.WHEN_FOCUSED);
235 }
236 return jButtonCancel;
237 }
238
239 /**
240 * This method initializes jButton1
241 *
242 * @return javax.swing.JButton
243 */
244 private JButton getJButtonNew() {
245 if (jButtonNew == null) {
246 jButtonNew = new JButton();
247 jButtonNew.setPreferredSize(new java.awt.Dimension(80,20));
248 jButtonNew.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
249 jButtonNew.setText("New");
250 jButtonNew.addActionListener(this);
251 jButtonNew.registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), JComponent.WHEN_FOCUSED);
252 }
253 return jButtonNew;
254 }
255
256 /**
257 * This method initializes jButton2
258 *
259 * @return javax.swing.JButton
260 */
261 private JButton getJButtonOk() {
262 if (jButtonOk == null) {
263 jButtonOk = new JButton();
264 jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));
265 jButtonOk.setText("Ok");
266 jButtonOk.setActionCommand("GenGuidValue");
267 // jButtonOk.addActionListener(this);
268 jButtonOk.registerKeyboardAction(outerListener, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), JComponent.WHEN_FOCUSED);
269
270 }
271 return jButtonOk;
272 }
273
274 public String getGuid(){
275 return jTextField.getText();
276 }
277
278 public void setGuid(String s){
279 jTextField.setText(s);
280 }
281 /**
282 * This is the default constructor
283 */
284 public GenGuidDialog() {
285 super();
286 initialize();
287 }
288
289 public GenGuidDialog(ActionListener i, JFrame frame){
290 super(frame);
291 outerListener = i;
292 initialize();
293 jButtonOk.addActionListener(i);
294 this.addWindowListener(new WindowAdapter(){
295
296 @Override
297 public void windowActivated(WindowEvent arg0) {
298 // TODO Auto-generated method stub
299 super.windowActivated(arg0);
300 if ((jRadioButtonReg.isSelected() && jTextField.getText().matches(GenGuidDialog.guidArrayPat))
301 || (jRadioButton.isSelected() && jTextField.getText().matches(GenGuidDialog.guidRegistryPat))) {
302 jTextField.setText(GenGuidDialog.formatGuidString(jTextField.getText()));
303 }
304
305 // if (!jTextField.getText().matches(Tools.guidArrayPat) || !jTextField.getText().matches(Tools.guidRegistryPat)) {
306 // JOptionPane.showMessageDialog(frame, "InitVal: Incorrect GUID Value Format.");
307 // return;
308 // }
309 }
310
311 });
312 }
313
314 /**
315 * This method initializes this
316 *
317 * @return void
318 */
319 private void initialize() {
320 this.setSize(466, 157);
321 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
322 this.setModal(true);
323 this.setTitle("Editing GUID Value");
324 this.setContentPane(getJContentPane());
325 this.centerWindow();
326 }
327
328 /**
329 * This method initializes jContentPane
330 *
331 * @return javax.swing.JPanel
332 */
333 private JPanel getJContentPane() {
334 if (jContentPane == null) {
335 jContentPane = new JPanel();
336 jContentPane.setLayout(new BorderLayout());
337 jContentPane.add(getJPanelEast(), java.awt.BorderLayout.EAST);
338 jContentPane.add(getJPanelCenter(), java.awt.BorderLayout.CENTER);
339 }
340 return jContentPane;
341 }
342
343 /**
344 Start the window at the center of screen
345
346 **/
347 protected void centerWindow(int intWidth, int intHeight) {
348 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
349 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);
350 }
351
352 /**
353 Start the window at the center of screen
354
355 **/
356 protected void centerWindow() {
357 centerWindow(this.getSize().width, this.getSize().height);
358 }
359
360 public static String formatGuidString (String guidNameConv) {
361 String[] strList;
362 String guid = "";
363 int index = 0;
364 if (guidNameConv
365 .matches(GenGuidDialog.guidRegistryPat)) {
366 strList = guidNameConv.split("-");
367 guid = "0x" + strList[0] + ", ";
368 guid = guid + "0x" + strList[1] + ", ";
369 guid = guid + "0x" + strList[2] + ", ";
370
371 guid = guid + "0x" + strList[3].substring(0, 2) + ", ";
372 guid = guid + "0x" + strList[3].substring(2, 4);
373
374 while (index < strList[4].length()) {
375 guid = guid + ", ";
376 guid = guid + "0x" + strList[4].substring(index, index + 2);
377 index = index + 2;
378 }
379
380 return guid;
381 }
382 else if (guidNameConv
383 .matches(GenGuidDialog.guidArrayPat)) {
384 strList = guidNameConv.split(",");
385
386 //
387 // chang ANSI c form to registry form
388 //
389 for (int i = 0; i < strList.length; i++){
390 strList[i] = strList[i].substring(strList[i].lastIndexOf("x") + 1);
391 }
392 if (strList[strList.length - 1].endsWith("}")) {
393 strList[strList.length -1] = strList[strList.length-1].substring(0, strList[strList.length-1].length()-1);
394 }
395 //
396 //inserting necessary leading zeros
397 //
398
399 int segLen = strList[0].length();
400 if (segLen < 8){
401 for (int i = 0; i < 8 - segLen; ++i){
402 strList[0] = "0" + strList[0];
403 }
404 }
405
406 segLen = strList[1].length();
407 if (segLen < 4){
408 for (int i = 0; i < 4 - segLen; ++i){
409 strList[1] = "0" + strList[1];
410 }
411 }
412 segLen = strList[2].length();
413 if (segLen < 4){
414 for (int i = 0; i < 4 - segLen; ++i){
415 strList[2] = "0" + strList[2];
416 }
417 }
418 for (int i = 3; i < 11; ++i) {
419 segLen = strList[i].length();
420 if (segLen < 2){
421 strList[i] = "0" + strList[i];
422 }
423 }
424
425 for (int i = 0; i < 3; i++){
426 guid += strList[i] + "-";
427 }
428
429 guid += strList[3];
430 guid += strList[4] + "-";
431
432 for (int i = 5; i < strList.length; ++i){
433 guid += strList[i];
434 }
435
436
437 return guid;
438 } else {
439
440 return "0";
441
442 }
443 }
444
445 } // @jve:decl-index=0:visual-constraint="10,10"