]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Fixes:
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
1 package org.tianocore.frameworkwizard.platform.ui;
2
3 import java.awt.BorderLayout;
4
5 import javax.swing.JFrame;
6 import javax.swing.JOptionPane;
7 import javax.swing.JPanel;
8 import javax.swing.JSplitPane;
9 import javax.swing.JLabel;
10 import javax.swing.JScrollPane;
11 import javax.swing.JTable;
12 import javax.swing.JButton;
13 import javax.swing.ListSelectionModel;
14 import javax.swing.table.DefaultTableModel;
15
16 import org.tianocore.PlatformSurfaceAreaDocument;
17 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;
18 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;
19 import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;
20 import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;
21 import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;
22
23 import java.awt.FlowLayout;
24 import java.io.File;
25 import java.util.ArrayList;
26 import java.util.HashMap;
27 import java.util.Iterator;
28 import java.util.Map;
29 import java.util.Set;
30
31 public class FpdFrameworkModules extends IInternalFrame {
32
33 /**
34 *
35 */
36 private static final long serialVersionUID = 1L;
37 static JFrame frame;
38 private JSplitPane jSplitPane = null;
39 private JPanel jPanel = null;
40 private JPanel jPanel1 = null;
41 private JLabel jLabel = null;
42 private JScrollPane jScrollPane = null;
43 private JTable jTable = null;
44 private JPanel jPanel2 = null;
45 private JButton jButton = null;
46 private JLabel jLabel1 = null;
47 private JPanel jPanel3 = null;
48 private JScrollPane jScrollPane1 = null;
49 private JTable jTable1 = null;
50 private JButton jButton1 = null;
51 private JButton jButton2 = null;
52 private NonEditableTableModel model = null;
53 private NonEditableTableModel model1 = null;
54
55 private FpdModuleSA settingDlg = null;
56
57 private FpdFileContents ffc = null;
58 private OpeningPlatformType docConsole = null;
59 private Map<String, String> fpdMsa = null;
60
61 private ArrayList<ModuleIdentification> miList = null;
62
63 /**
64 * This method initializes jSplitPane
65 *
66 * @return javax.swing.JSplitPane
67 */
68 private JSplitPane getJSplitPane() {
69 if (jSplitPane == null) {
70 jSplitPane = new JSplitPane();
71 jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
72 jSplitPane.setDividerLocation(250);
73 jSplitPane.setBottomComponent(getJPanel1());
74 jSplitPane.setTopComponent(getJPanel());
75 }
76 return jSplitPane;
77 }
78
79 /**
80 * This method initializes jPanel
81 *
82 * @return javax.swing.JPanel
83 */
84 private JPanel getJPanel() {
85 if (jPanel == null) {
86 jLabel = new JLabel();
87 jLabel.setText("Modules in Workspace");
88 jPanel = new JPanel();
89 jPanel.setLayout(new BorderLayout());
90 jPanel.add(jLabel, java.awt.BorderLayout.NORTH);
91 jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
92 jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);
93 }
94 return jPanel;
95 }
96
97 /**
98 * This method initializes jPanel1
99 *
100 * @return javax.swing.JPanel
101 */
102 private JPanel getJPanel1() {
103 if (jPanel1 == null) {
104 jLabel1 = new JLabel();
105 jLabel1.setText("Modules Added");
106 jPanel1 = new JPanel();
107 jPanel1.setLayout(new BorderLayout());
108 jPanel1.add(jLabel1, java.awt.BorderLayout.NORTH);
109 jPanel1.add(getJPanel3(), java.awt.BorderLayout.SOUTH);
110 jPanel1.add(getJScrollPane1(), java.awt.BorderLayout.CENTER);
111 }
112 return jPanel1;
113 }
114
115 /**
116 * This method initializes jScrollPane
117 *
118 * @return javax.swing.JScrollPane
119 */
120 private JScrollPane getJScrollPane() {
121 if (jScrollPane == null) {
122 jScrollPane = new JScrollPane();
123 jScrollPane.setPreferredSize(new java.awt.Dimension(600,200));
124 jScrollPane.setViewportView(getJTable());
125 }
126 return jScrollPane;
127 }
128
129 /**
130 * This method initializes jTable
131 *
132 * @return javax.swing.JTable
133 */
134 private JTable getJTable() {
135 if (jTable == null) {
136 model = new NonEditableTableModel();
137 jTable = new JTable(model);
138 jTable.setRowHeight(20);
139 model.addColumn("ModuleName");
140 model.addColumn("ModuleGUID");
141 model.addColumn("ModuleVersion");
142 model.addColumn("PackageGUID");
143 model.addColumn("PackageVersion");
144
145 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
146 }
147 return jTable;
148 }
149
150 /**
151 * This method initializes jPanel2
152 *
153 * @return javax.swing.JPanel
154 */
155 private JPanel getJPanel2() {
156 if (jPanel2 == null) {
157 FlowLayout flowLayout = new FlowLayout();
158 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
159 jPanel2 = new JPanel();
160 jPanel2.setLayout(flowLayout);
161 jPanel2.add(getJButton(), null);
162 }
163 return jPanel2;
164 }
165
166 /**
167 * This method initializes jButton
168 *
169 * @return javax.swing.JButton
170 */
171 private JButton getJButton() {
172 if (jButton == null) {
173 jButton = new JButton();
174 jButton.setPreferredSize(new java.awt.Dimension(130,20));
175 jButton.setText("Add a Module");
176 jButton.addActionListener(new java.awt.event.ActionListener() {
177 public void actionPerformed(java.awt.event.ActionEvent e) {
178 int selectedRow = jTable.getSelectedRow();
179 if (selectedRow < 0){
180 return;
181 }
182
183 String mg = (String)model.getValueAt(selectedRow, 1);
184 String mv = (String)model.getValueAt(selectedRow, 2);
185 String pg = (String)model.getValueAt(selectedRow, 3);
186 String pv = (String)model.getValueAt(selectedRow, 4);
187 if (fpdMsa.containsKey(mg + mv + pg + pv)) {
188 JOptionPane.showMessageDialog(frame, "This Module Already Added.");
189 return;
190 }
191 //ToDo put Arch instead of null
192 fpdMsa.put(mg + mv + pg + pv, null);
193
194 String[] row = {" ", mg, mv, pg, pv};
195 ModuleIdentification mi = getModuleId(mg + " " + mv + " " + pg + " " + pv);
196 if (mi != null) {
197 row[0] = mi.getName();
198 row[2] = mi.getVersion();
199 row[4] = mi.getPackage().getVersion();
200 }
201 model1.addRow(row);
202
203 docConsole.setSaved(false);
204 try{
205 ffc.addFrameworkModulesPcdBuildDefs(miList.get(selectedRow), null);
206 }
207 catch (Exception exception) {
208 JOptionPane.showMessageDialog(frame, "PCD Insertion Fail. " + exception.getMessage());
209 }
210 JOptionPane.showMessageDialog(frame, "This Module Added Successfully.");
211 jTable1.changeSelection(model1.getRowCount()-1, 0, false, false);
212 }
213 });
214 }
215 return jButton;
216 }
217
218 /**
219 * This method initializes jPanel3
220 *
221 * @return javax.swing.JPanel
222 */
223 private JPanel getJPanel3() {
224 if (jPanel3 == null) {
225 FlowLayout flowLayout1 = new FlowLayout();
226 flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
227 jPanel3 = new JPanel();
228 jPanel3.setLayout(flowLayout1);
229 jPanel3.add(getJButton1(), null);
230 jPanel3.add(getJButton2(), null);
231 }
232 return jPanel3;
233 }
234
235 /**
236 * This method initializes jScrollPane1
237 *
238 * @return javax.swing.JScrollPane
239 */
240 private JScrollPane getJScrollPane1() {
241 if (jScrollPane1 == null) {
242 jScrollPane1 = new JScrollPane();
243 jScrollPane1.setPreferredSize(new java.awt.Dimension(453,200));
244 jScrollPane1.setViewportView(getJTable1());
245 }
246 return jScrollPane1;
247 }
248
249 /**
250 * This method initializes jTable1
251 *
252 * @return javax.swing.JTable
253 */
254 private JTable getJTable1() {
255 if (jTable1 == null) {
256 model1 = new NonEditableTableModel();
257 jTable1 = new JTable(model1);
258 jTable1.setRowHeight(20);
259 model1.addColumn("ModuleName");
260 model1.addColumn("ModuleGUID");
261 model1.addColumn("ModuleVersion");
262 model1.addColumn("PackageGUID");
263 model1.addColumn("PackageVersion");
264 // model1.addColumn("SupportedArch");
265
266 jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
267 }
268 return jTable1;
269 }
270
271 /**
272 * This method initializes jButton1
273 *
274 * @return javax.swing.JButton
275 */
276 private JButton getJButton1() {
277 if (jButton1 == null) {
278 jButton1 = new JButton();
279 jButton1.setPreferredSize(new java.awt.Dimension(130,20));
280 jButton1.setText("Settings");
281 jButton1.addActionListener(new java.awt.event.ActionListener() {
282 public void actionPerformed(java.awt.event.ActionEvent e) {
283 int selectedRow = jTable1.getSelectedRow();
284 if (selectedRow < 0){
285 return;
286 }
287 if (settingDlg == null) {
288 settingDlg = new FpdModuleSA(ffc);
289 }
290 docConsole.setSaved(false);
291 String mg = model1.getValueAt(selectedRow, 1)+"";
292 String mv = model1.getValueAt(selectedRow, 2)+"";
293 String pg = model1.getValueAt(selectedRow, 3)+"";
294 String pv = model1.getValueAt(selectedRow, 4)+"";
295 settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv);
296 settingDlg.setVisible(true);
297 }
298 });
299 }
300 return jButton1;
301 }
302
303 /**
304 * This method initializes jButton2
305 *
306 * @return javax.swing.JButton
307 */
308 private JButton getJButton2() {
309 if (jButton2 == null) {
310 jButton2 = new JButton();
311 jButton2.setPreferredSize(new java.awt.Dimension(130,20));
312 jButton2.setText("Remove Module");
313 jButton2.addActionListener(new java.awt.event.ActionListener() {
314 public void actionPerformed(java.awt.event.ActionEvent e) {
315 int selectedRow = jTable1.getSelectedRow();
316 if (selectedRow < 0){
317 return;
318 }
319 String mg = model1.getValueAt(selectedRow, 1).toString();
320 String mv = model1.getValueAt(selectedRow, 2).toString();
321 String pg = model1.getValueAt(selectedRow, 3).toString();
322 String pv = model1.getValueAt(selectedRow, 4).toString();
323 model1.removeRow(selectedRow);
324 fpdMsa.remove(mg+mv+pg+pv);
325 docConsole.setSaved(false);
326 ffc.removeModuleSA(selectedRow);
327 }
328 });
329 }
330 return jButton2;
331 }
332
333 /**
334 * @param args
335 */
336 public static void main(String[] args) {
337 // TODO Auto-generated method stub
338 new FpdFrameworkModules().setVisible(true);
339 }
340
341 /**
342 * This is the default constructor
343 */
344 public FpdFrameworkModules() {
345 super();
346 initialize();
347 }
348
349 public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd){
350 this();
351 init(fpd);
352
353 }
354
355 public FpdFrameworkModules(OpeningPlatformType opt) {
356 this(opt.getXmlFpd());
357 docConsole = opt;
358 }
359
360 private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {
361 try {
362 GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));
363 }
364 catch(Exception e){
365 JOptionPane.showMessageDialog(frame, "FrameworkDatabase Corrupted.");
366 }
367
368 if (ffc == null){
369 ffc = new FpdFileContents(fpd);
370 ffc.initDynPcdMap();
371 }
372
373 if (fpdMsa == null) {
374 fpdMsa = new HashMap<String, String>();
375 }
376
377 if (ffc.getFrameworkModulesCount() > 0) {
378 String[][] saa = new String[ffc.getFrameworkModulesCount()][5];
379 ffc.getFrameworkModulesInfo(saa);
380 for (int i = 0; i < saa.length; ++i) {
381 ModuleIdentification mi = getModuleId(saa[i][1]+ " "+saa[i][2]+" "+saa[i][3]+" "+saa[i][4]);
382 if (mi != null) {
383 saa[i][0] = mi.getName();
384 saa[i][2] = mi.getVersion();
385 saa[i][4] = mi.getPackage().getVersion();
386 }
387 model1.addRow(saa[i]);
388 fpdMsa.put(saa[i][1]+saa[i][2]+saa[i][3]+saa[i][4], saa[i][0]);
389 }
390 }
391
392 showAllModules();
393
394 }
395
396 private void showAllModules() {
397
398 if (miList == null) {
399 miList = new ArrayList<ModuleIdentification>();
400 }
401 Set<PackageIdentification> spi = GlobalData.getPackageList();
402 Iterator ispi = spi.iterator();
403
404 while(ispi.hasNext()) {
405 PackageIdentification pi = (PackageIdentification)ispi.next();
406 String[] s = {"", "", "", "", ""};
407 s[3] = pi.getGuid();
408 s[4] = pi.getVersion();
409 Set<ModuleIdentification> smi = GlobalData.getModules(pi);
410 Iterator ismi = smi.iterator();
411 while(ismi.hasNext()) {
412 ModuleIdentification mi = (ModuleIdentification)ismi.next();
413 s[0] = mi.getName();
414 s[1] = mi.getGuid();
415 s[2] = mi.getVersion();
416 model.addRow(s);
417 miList.add(mi);
418 }
419 }
420 }
421 /**
422 * This method initializes this
423 *
424 * @return void
425 */
426 private void initialize() {
427 this.setSize(633, 533);
428 this.setTitle("Framework Modules");
429 this.setContentPane(getJSplitPane());
430 this.setVisible(true);
431
432 }
433
434 private ModuleIdentification getModuleId(String key){
435 //
436 // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.
437 //
438 String[] keyPart = key.split(" ");
439 Set<PackageIdentification> spi = GlobalData.getPackageList();
440 Iterator ispi = spi.iterator();
441
442 while(ispi.hasNext()) {
443 PackageIdentification pi = (PackageIdentification)ispi.next();
444 if ( !pi.getGuid().equals(keyPart[2])){
445
446 continue;
447 }
448 if (keyPart[3] != null && keyPart[3].length() > 0 && !keyPart[3].equals("null")){
449 if(!pi.getVersion().equals(keyPart[3])){
450 continue;
451 }
452 }
453 Set<ModuleIdentification> smi = GlobalData.getModules(pi);
454 Iterator ismi = smi.iterator();
455 while(ismi.hasNext()) {
456 ModuleIdentification mi = (ModuleIdentification)ismi.next();
457 if (mi.getGuid().equals(keyPart[0])){
458 if (keyPart[1] != null && keyPart[1].length() > 0 && !keyPart[1].equals("null")){
459 if(!mi.getVersion().equals(keyPart[1])){
460 continue;
461 }
462 }
463
464 return mi;
465 }
466 }
467 }
468 return null;
469 }
470
471 } // @jve:decl-index=0:visual-constraint="10,10"
472
473 class NonEditableTableModel extends DefaultTableModel {
474 /**
475 *
476 */
477 private static final long serialVersionUID = 1L;
478
479 public boolean isCellEditable(int row, int col) {
480 return false;
481 }
482 }