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