]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/ModulePackageDependencies.java
1. Finish Enhancement EDKT345: Support deleting multiple rows together when remove...
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / ModulePackageDependencies.java
CommitLineData
a13899c5 1/** @file\r
2 \r
3 The file is used to create, update Include 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
15package org.tianocore.frameworkwizard.module.ui;\r
16\r
06a19cee 17import java.awt.Dimension;\r
a13899c5 18import java.awt.event.ActionEvent;\r
19import java.awt.event.ComponentEvent;\r
06a19cee 20import java.awt.event.MouseEvent;\r
a13899c5 21import java.util.Vector;\r
22\r
23import javax.swing.JButton;\r
a13899c5 24import javax.swing.JPanel;\r
25import javax.swing.JScrollPane;\r
06a19cee 26import javax.swing.JTable;\r
27import javax.swing.ListSelectionModel;\r
28import javax.swing.event.ListSelectionEvent;\r
a13899c5 29\r
a13899c5 30import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
31import org.tianocore.PackageDependenciesDocument.PackageDependencies;\r
32import org.tianocore.PackageDependenciesDocument.PackageDependencies.Package;\r
33import org.tianocore.frameworkwizard.common.DataType;\r
06a19cee 34import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
a13899c5 35import org.tianocore.frameworkwizard.common.Log;\r
a13899c5 36import org.tianocore.frameworkwizard.common.Tools;\r
79cb6fdb 37import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
06a19cee 38import org.tianocore.frameworkwizard.common.ui.IFrame;\r
a13899c5 39import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
79cb6fdb 40import org.tianocore.frameworkwizard.module.Identifications.PackageDependencies.PackageDependenciesIdentification;\r
41import org.tianocore.frameworkwizard.module.Identifications.PackageDependencies.PackageDependenciesVector;\r
06a19cee 42import org.tianocore.frameworkwizard.module.ui.dialog.PackageDepDlg;\r
a13899c5 43import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
44import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
45\r
46/**\r
47 The class is used to create, update Include of MSA/MBD file\r
48 It extends IInternalFrame\r
49 \r
50\r
51\r
52 **/\r
06a19cee 53public class ModulePackageDependencies extends IInternalFrame {\r
a13899c5 54\r
55 ///\r
56 /// Define class Serial Version UID\r
57 ///\r
58 private static final long serialVersionUID = 3465193035145152131L;\r
59\r
60 //\r
61 //Define class members\r
62 //\r
63 private JPanel jContentPane = null;\r
64\r
a13899c5 65 private JButton jButtonAdd = null;\r
66\r
67 private JButton jButtonRemove = null;\r
68\r
69 private JButton jButtonUpdate = null;\r
70\r
71 private JScrollPane jScrollPane = null;\r
72\r
06a19cee 73 private JScrollPane jScrollPaneTable = null;\r
a13899c5 74\r
06a19cee 75 private JTable jTable = null;\r
a13899c5 76\r
77 //\r
78 // Not used by UI\r
79 //\r
a13899c5 80 private OpeningModuleType omt = null;\r
81\r
82 private ModuleSurfaceArea msa = null;\r
83\r
06a19cee 84 private PackageDependencies pd = null;\r
a13899c5 85\r
06a19cee 86 private PackageDependenciesIdentification pdid = null;\r
a13899c5 87\r
06a19cee 88 private PackageDependenciesVector vid = new PackageDependenciesVector();\r
a13899c5 89\r
90 private WorkspaceTools wt = new WorkspaceTools();\r
91\r
92 private Vector<PackageIdentification> vPackage = wt.getAllPackages();\r
93\r
06a19cee 94 private IDefaultTableModel model = null;\r
a13899c5 95\r
06a19cee 96 private int selectedRow = -1;\r
a9e882c9 97 \r
98 private IFrame parentFrame = null;\r
a13899c5 99\r
100 /**\r
101 This method initializes jButtonAdd \r
102 \r
103 @return javax.swing.JButton jButtonAdd\r
104 \r
105 **/\r
106 private JButton getJButtonAdd() {\r
107 if (jButtonAdd == null) {\r
108 jButtonAdd = new JButton();\r
3767c118 109 jButtonAdd.setBounds(new java.awt.Rectangle(230, 445, 90, 20));\r
a13899c5 110 jButtonAdd.setText("Add");\r
111 jButtonAdd.addActionListener(this);\r
3767c118 112 jButtonAdd.setPreferredSize(new java.awt.Dimension(90, 20));\r
a13899c5 113 }\r
114 return jButtonAdd;\r
115 }\r
116\r
117 /**\r
118 This method initializes jButtonRemove \r
119 \r
120 @return javax.swing.JButton jButtonRemove\r
121 \r
122 **/\r
123 private JButton getJButtonRemove() {\r
124 if (jButtonRemove == null) {\r
125 jButtonRemove = new JButton();\r
3767c118 126 jButtonRemove.setBounds(new java.awt.Rectangle(400, 445, 90, 20));\r
a13899c5 127 jButtonRemove.setText("Remove");\r
128 jButtonRemove.addActionListener(this);\r
3767c118 129 jButtonRemove.setPreferredSize(new java.awt.Dimension(90, 20));\r
a13899c5 130 }\r
131 return jButtonRemove;\r
132 }\r
133\r
134 /**\r
135 This method initializes jButtonUpdate \r
136 \r
137 @return javax.swing.JButton jButtonUpdate\r
138 \r
139 **/\r
140 private JButton getJButtonUpdate() {\r
141 if (jButtonUpdate == null) {\r
142 jButtonUpdate = new JButton();\r
3767c118 143 jButtonUpdate.setBounds(new java.awt.Rectangle(315, 445, 90, 20));\r
144 jButtonUpdate.setPreferredSize(new java.awt.Dimension(90, 20));\r
06a19cee 145 jButtonUpdate.setText("Edit");\r
a13899c5 146 jButtonUpdate.addActionListener(this);\r
147 }\r
148 return jButtonUpdate;\r
149 }\r
150\r
a13899c5 151 /**\r
152 This method initializes jScrollPane \r
153 \r
154 @return javax.swing.JScrollPane \r
155 */\r
156 private JScrollPane getJScrollPane() {\r
157 if (jScrollPane == null) {\r
158 jScrollPane = new JScrollPane();\r
159 jScrollPane.setViewportView(getJContentPane());\r
160 }\r
161 return jScrollPane;\r
162 }\r
163\r
164 /**\r
06a19cee 165 This method initializes jScrollPaneTable \r
166 \r
167 @return javax.swing.JScrollPane \r
168 **/\r
169 private JScrollPane getJScrollPaneTable() {\r
170 if (jScrollPaneTable == null) {\r
171 jScrollPaneTable = new JScrollPane();\r
172 jScrollPaneTable.setBounds(new java.awt.Rectangle(15, 10, 470, 420));\r
173 jScrollPaneTable.setPreferredSize(new Dimension(470, 420));\r
174 jScrollPaneTable.setViewportView(getJTable());\r
a13899c5 175 }\r
06a19cee 176 return jScrollPaneTable;\r
a13899c5 177 }\r
178\r
179 /**\r
06a19cee 180 This method initializes jTable \r
a13899c5 181 \r
06a19cee 182 @return javax.swing.JTable \r
a13899c5 183 **/\r
06a19cee 184 private JTable getJTable() {\r
185 if (jTable == null) {\r
186 jTable = new JTable();\r
187 model = new IDefaultTableModel();\r
188 jTable = new JTable(model);\r
189 jTable.setRowHeight(20);\r
190\r
30500d38 191 model.addColumn("Package Name");\r
06a19cee 192 model.addColumn("Package Version");\r
193\r
ff7bc6c4 194 jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);\r
06a19cee 195 jTable.getSelectionModel().addListSelectionListener(this);\r
196 jTable.getModel().addTableModelListener(this);\r
197 jTable.addMouseListener(this);\r
a13899c5 198 }\r
06a19cee 199 return jTable;\r
200 }\r
201\r
202 public static void main(String[] args) {\r
203\r
a13899c5 204 }\r
205\r
206 /**\r
06a19cee 207 This is the default constructor\r
a13899c5 208 \r
209 **/\r
06a19cee 210 public ModulePackageDependencies() {\r
211 super();\r
212 init();\r
213 this.setVisible(true);\r
a13899c5 214 }\r
215\r
06a19cee 216 /**\r
217 This is the override edit constructor\r
218 \r
219 @param \r
220 \r
221 **/\r
a9e882c9 222 public ModulePackageDependencies(OpeningModuleType inOmt, IFrame iFrame) {\r
06a19cee 223 super();\r
224 this.omt = inOmt;\r
225 this.msa = omt.getXmlMsa();\r
a9e882c9 226 this.parentFrame = iFrame;\r
06a19cee 227 init(msa.getPackageDependencies());\r
228 this.setVisible(true);\r
a13899c5 229 }\r
230\r
231 /**\r
232 This method initializes this\r
233 \r
234 **/\r
235 private void init() {\r
236 this.setSize(500, 515);\r
237 this.setContentPane(getJScrollPane());\r
06a19cee 238 this.setTitle("Package Dependencies");\r
a13899c5 239 }\r
240\r
241 /**\r
242 This method initializes this\r
243 Fill values to all fields if these values are not empty\r
244 \r
245 @param inPackageDependencies\r
246\r
247 **/\r
248 private void init(PackageDependencies inPackageDependencies) {\r
249 init();\r
06a19cee 250 this.pd = inPackageDependencies;\r
a13899c5 251\r
06a19cee 252 if (this.pd != null) {\r
253 if (this.pd.getPackageList().size() > 0) {\r
254 for (int index = 0; index < this.pd.getPackageList().size(); index++) {\r
a13899c5 255 String arg0 = "";\r
06a19cee 256 String arg1 = pd.getPackageList().get(index).getPackageVersion();\r
257 String arg2 = pd.getPackageList().get(index).getPackageGuid();\r
a13899c5 258 //\r
259 // If no guid, skip current item\r
260 //\r
261 if (arg2 == null) {\r
262 continue;\r
263 }\r
264 for (int indexJ = 0; indexJ < this.vPackage.size(); indexJ++) {\r
265 if (vPackage.get(indexJ).getGuid().equals(arg2)) {\r
266 arg0 = vPackage.get(indexJ).getName();\r
267 }\r
268 }\r
06a19cee 269 String arg3 = pd.getPackageList().get(index).getFeatureFlag();\r
270 Vector<String> arg4 = Tools.convertListToVector(pd.getPackageList().get(index).getSupArchList());\r
271 pdid = new PackageDependenciesIdentification(arg0, arg1, arg2, arg3, arg4);\r
272 vid.addPackageDependencies(pdid);\r
a13899c5 273 }\r
274 }\r
275 }\r
06a19cee 276 showTable();\r
a13899c5 277 }\r
278\r
279 /**\r
280 This method initializes jContentPane\r
281 \r
282 @return javax.swing.JPanel jContentPane\r
283 \r
284 **/\r
285 private JPanel getJContentPane() {\r
286 if (jContentPane == null) {\r
a13899c5 287 jContentPane = new JPanel();\r
288 jContentPane.setLayout(null);\r
06a19cee 289 jContentPane.setPreferredSize(new java.awt.Dimension(490, 490));\r
290\r
a13899c5 291 jContentPane.add(getJButtonAdd(), null);\r
292 jContentPane.add(getJButtonRemove(), null);\r
293 jContentPane.add(getJButtonUpdate(), null);\r
06a19cee 294 jContentPane.add(getJScrollPaneTable(), null);\r
a13899c5 295 }\r
296 return jContentPane;\r
297 }\r
298\r
06a19cee 299 private void showEdit(int index) {\r
a9e882c9 300 PackageDepDlg pdd = new PackageDepDlg(vid.getPackageDependencies(index), this.parentFrame, omt.getId());\r
06a19cee 301 int result = pdd.showDialog();\r
302 if (result == DataType.RETURN_TYPE_OK) {\r
303 if (index == -1) {\r
304 this.vid.addPackageDependencies(pdd.getPdid());\r
305 } else {\r
306 this.vid.setPackageDependencies(pdd.getPdid(), index);\r
a13899c5 307 }\r
06a19cee 308 this.showTable();\r
309 this.save();\r
310 pdd.dispose();\r
a13899c5 311 }\r
06a19cee 312 if (result == DataType.RETURN_TYPE_CANCEL) {\r
313 pdd.dispose();\r
a13899c5 314 }\r
315 }\r
316\r
317 /**\r
06a19cee 318 Clear all table rows\r
a13899c5 319 \r
320 **/\r
06a19cee 321 private void clearAll() {\r
322 if (model != null) {\r
323 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
324 model.removeRow(index);\r
325 }\r
a13899c5 326 }\r
a13899c5 327 }\r
328\r
329 /**\r
06a19cee 330 Read content of vector and put then into table\r
a13899c5 331 \r
332 **/\r
06a19cee 333 private void showTable() {\r
334 clearAll();\r
a13899c5 335\r
06a19cee 336 if (vid.size() > 0) {\r
337 for (int index = 0; index < vid.size(); index++) {\r
338 model.addRow(vid.toStringVector(index));\r
a13899c5 339 }\r
340 }\r
06a19cee 341 this.jTable.repaint();\r
342 this.jTable.updateUI();\r
343 //this.jScrollPane.setViewportView(this.jTable);\r
344 }\r
345\r
346 /* (non-Javadoc)\r
347 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
348 *\r
349 * Override actionPerformed to listen all actions\r
350 * \r
351 */\r
352 public void actionPerformed(ActionEvent arg0) {\r
353 if (arg0.getSource() == jButtonAdd) {\r
354 showEdit(-1);\r
355 }\r
356 if (arg0.getSource() == jButtonUpdate) {\r
357 if (this.selectedRow < 0) {\r
ed1665f2 358 Log.wrn("Update Package Dependencies", "Please select one record first.");\r
06a19cee 359 return;\r
a13899c5 360 }\r
06a19cee 361 showEdit(selectedRow);\r
a13899c5 362 }\r
06a19cee 363\r
364 if (arg0.getSource() == jButtonRemove) {\r
365 if (jTable.isEditing()) {\r
366 jTable.getCellEditor().stopCellEditing();\r
367 }\r
ff7bc6c4 368\r
369 int selectedRows[] = this.jTable.getSelectedRows();\r
370 \r
371 if (selectedRows != null) {\r
372 for (int index = selectedRows.length - 1; index > -1; index--) {\r
373 this.model.removeRow(selectedRows[index]);\r
374 this.vid.removePackageDependencies(selectedRows[index]);\r
375 }\r
06a19cee 376 selectedRow = -1;\r
377 this.save();\r
a13899c5 378 }\r
379 }\r
a13899c5 380 }\r
06a19cee 381\r
a13899c5 382 /**\r
383 Save all components of Includes\r
384 if exists includes, set the value directly\r
385 if not exists includes, new an instance first\r
386 \r
387 **/\r
388 public void save() {\r
389 try {\r
390 //\r
391 //Save as file name\r
392 //\r
393 int count = this.vid.size();\r
394\r
06a19cee 395 this.pd = PackageDependencies.Factory.newInstance();\r
a13899c5 396 if (count > 0) {\r
397 for (int index = 0; index < count; index++) {\r
398 Package p = Package.Factory.newInstance();\r
399\r
400 if (!isEmpty(vid.getPackageDependencies(index).getVersion())) {\r
401 p.setPackageVersion(vid.getPackageDependencies(index).getVersion());\r
402 }\r
403 if (!isEmpty(vid.getPackageDependencies(index).getGuid())) {\r
404 p.setPackageGuid(vid.getPackageDependencies(index).getGuid());\r
405 }\r
406 if (!isEmpty(vid.getPackageDependencies(index).getFeatureFlag())) {\r
407 p.setFeatureFlag(vid.getPackageDependencies(index).getFeatureFlag());\r
408 }\r
409 if (vid.getPackageDependencies(index).getSupArchList() != null\r
410 && vid.getPackageDependencies(index).getSupArchList().size() > 0) {\r
411 p.setSupArchList(vid.getPackageDependencies(index).getSupArchList());\r
412 }\r
413\r
06a19cee 414 this.pd.addNewPackage();\r
415 this.pd.setPackageArray(index, p);\r
a13899c5 416 }\r
417 }\r
06a19cee 418 this.msa.setPackageDependencies(pd);\r
a13899c5 419 this.omt.setSaved(false);\r
420 } catch (Exception e) {\r
ed1665f2 421 Log.wrn("Update Package Dependencies", e.getMessage());\r
a13899c5 422 Log.err("Update Package Dependencies", e.getMessage());\r
423 }\r
424 }\r
425\r
426 /* (non-Javadoc)\r
06a19cee 427 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
428 *\r
a13899c5 429 */\r
06a19cee 430 public void valueChanged(ListSelectionEvent arg0) {\r
431 if (arg0.getValueIsAdjusting()) {\r
a13899c5 432 return;\r
433 }\r
06a19cee 434 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
435 if (lsm.isSelectionEmpty()) {\r
a13899c5 436 return;\r
a13899c5 437 } else {\r
06a19cee 438 selectedRow = lsm.getMinSelectionIndex();\r
a13899c5 439 }\r
a13899c5 440 }\r
441\r
442 /* (non-Javadoc)\r
06a19cee 443 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)\r
a13899c5 444 *\r
a13899c5 445 */\r
06a19cee 446 public void mouseClicked(MouseEvent arg0) {\r
447 if (arg0.getClickCount() == 2) {\r
448 if (this.selectedRow < 0) {\r
449 return;\r
450 } else {\r
451 showEdit(selectedRow);\r
a13899c5 452 }\r
453 }\r
454 }\r
455\r
06a19cee 456 /* (non-Javadoc)\r
457 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)\r
458 * \r
459 * Override componentResized to resize all components when frame's size is changed\r
460 */\r
461 public void componentResized(ComponentEvent arg0) {\r
462 int intCurrentWidth = this.getJContentPane().getWidth();\r
463 int intCurrentHeight = this.getJContentPane().getHeight();\r
464 int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
465 int intPreferredHeight = this.getJContentPane().getPreferredSize().height;\r
466\r
8792f60f 467 Tools.resizeComponent(this.jScrollPaneTable, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
468 intPreferredHeight);\r
469 Tools.relocateComponent(this.jButtonAdd, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
470 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_ADD_BUTTON,\r
471 DataType.SPACE_TO_BOTTOM_FOR_ADD_BUTTON);\r
472 Tools.relocateComponent(this.jButtonRemove, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
473 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON,\r
474 DataType.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON);\r
475 Tools.relocateComponent(this.jButtonUpdate, intCurrentWidth, intCurrentHeight, intPreferredWidth,\r
476 intPreferredHeight, DataType.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON,\r
477 DataType.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON);\r
06a19cee 478 }\r
a13899c5 479}\r