]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Bug fixing for FPD ModuleSA editor.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
CommitLineData
a13899c5 1package org.tianocore.frameworkwizard.platform.ui;\r
2\r
3import java.awt.BorderLayout;\r
f3b0ed9a 4import java.awt.Dimension;\r
5import java.awt.Toolkit;\r
a13899c5 6\r
a13899c5 7import javax.swing.JFrame;\r
8import javax.swing.JOptionPane;\r
9import javax.swing.JPanel;\r
10import javax.swing.JDialog;\r
11import javax.swing.JTabbedPane;\r
12import javax.swing.JLabel;\r
13import javax.swing.JScrollPane;\r
14import javax.swing.JTable;\r
a13899c5 15import javax.swing.JTextArea;\r
16import javax.swing.JSplitPane;\r
17import javax.swing.JButton;\r
18import javax.swing.ListSelectionModel;\r
19import javax.swing.event.ListSelectionEvent;\r
20import javax.swing.event.ListSelectionListener;\r
21import javax.swing.event.TableModelEvent;\r
22import javax.swing.event.TableModelListener;\r
23import javax.swing.table.DefaultTableModel;\r
a13899c5 24import javax.swing.table.TableModel;\r
25\r
26import org.apache.xmlbeans.XmlObject;\r
27import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
28import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
29import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
30import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
31\r
32import java.awt.FlowLayout;\r
33import java.awt.event.ActionEvent;\r
34import java.awt.event.ActionListener;\r
35import java.util.ArrayList;\r
36import java.util.HashMap;\r
37import java.util.Iterator;\r
38import java.util.ListIterator;\r
39import java.util.Map;\r
40import java.util.Set;\r
1800d80f 41import java.util.Vector;\r
42\r
6a09eb19 43import javax.swing.JTextField;\r
a13899c5 44\r
45public class FpdModuleSA extends JDialog implements ActionListener {\r
46\r
44053733 47 /**\r
48 * \r
49 */\r
50 private static final long serialVersionUID = 1L;\r
a13899c5 51 static JFrame frame;\r
52 private JPanel jContentPane = null;\r
53 private JTabbedPane jTabbedPane = null;\r
54 private JPanel jPanel = null;\r
55 private JPanel jPanel1 = null;\r
56 private JLabel jLabel = null;\r
57 private JScrollPane jScrollPane = null;\r
58 private JTable jTable = null;\r
59 private JPanel jPanel2 = null;\r
60 private JScrollPane jScrollPane1 = null;\r
61 private JTextArea jTextArea = null;\r
62 private JPanel jPanel3 = null;\r
63 private JSplitPane jSplitPane = null;\r
64 private JPanel jPanel4 = null;\r
65 private JPanel jPanel5 = null;\r
66 private JLabel jLabel1 = null;\r
67 private JLabel jLabel2 = null;\r
68 private JScrollPane jScrollPane2 = null;\r
69 private JTable jTable1 = null;\r
70 private JScrollPane jScrollPane3 = null;\r
71 private JTable jTable2 = null;\r
72 private JScrollPane jScrollPane4 = null;\r
73 private JTable jTable3 = null;\r
74 private JPanel jPanel6 = null;\r
75 private JPanel jPanel7 = null;\r
76 private JScrollPane jScrollPane5 = null;\r
77 private JTextArea jTextArea1 = null;\r
78 private JLabel jLabel3 = null;\r
79 private JLabel jLabel4 = null;\r
80 private JButton jButton = null;\r
81 private JButton jButton1 = null;\r
82 private JLabel jLabel5 = null;\r
83 private JButton jButton2 = null;\r
84 private JButton jButton3 = null;\r
85 private PartialEditableTableModel model = null;\r
86 private LibraryTableModel model1 = null;\r
87 private LibraryTableModel model2 = null;\r
88 private LibraryTableModel model3 = null;\r
1800d80f 89 private DefaultTableModel optionsTableModel = null;\r
a13899c5 90 private FpdFileContents ffc = null;\r
91 private String moduleKey = null;\r
a13899c5 92 private HashMap<String, ArrayList<String>> classInstanceMap = null;\r
93 private ArrayList<String> classProduced = null;\r
a13899c5 94 private HashMap<String, ArrayList<String>> classConsumed = null;\r
6a09eb19 95 private JPanel jPanel8 = null;\r
96 private JLabel jLabel6 = null;\r
97 private JTextField jTextField = null;\r
98 private JLabel jLabel7 = null;\r
99 private JTextField jTextField1 = null;\r
100 private JLabel jLabel8 = null;\r
101 private JTextField jTextField2 = null;\r
102 private JScrollPane jScrollPane6 = null;\r
103 private JTable jTable4 = null;\r
1800d80f 104 private JButton jButton4 = null;\r
105 private JButton jButton5 = null;\r
a13899c5 106 /**\r
107 * This is the default constructor\r
108 */\r
109 public FpdModuleSA() {\r
110 super();\r
111 initialize();\r
112 }\r
113 public FpdModuleSA(FpdFileContents ffc) {\r
114 this();\r
115 this.ffc = ffc;\r
116 }\r
117 \r
118 public void setKey(String k){\r
119 this.moduleKey = k;\r
120 }\r
121\r
122 /**\r
123 init will be called each time FpdModuleSA object is to be shown.\r
124 @param key Module information.\r
125 **/\r
126 public void init(String key) {\r
127 //\r
128 // display pcd for key.\r
129 //\r
130 model.setRowCount(0);\r
131 int pcdCount = ffc.getPcdDataCount(key);\r
132 if (pcdCount != 0) {\r
133 String[][] saa = new String[pcdCount][6];\r
134 ffc.getPcdData(key, saa);\r
135 for (int i = 0; i < saa.length; ++i) {\r
136 model.addRow(saa[i]);\r
137 }\r
138 }\r
71baa24b 139 //\r
140 // display library classes that need to be resolved. also potential instances for them.\r
141 //\r
142 resolveLibraryInstances(key);\r
a13899c5 143 //\r
144 // display lib instances already selected for key\r
145 //\r
146 model1.setRowCount(0);\r
147 int instanceCount = ffc.getLibraryInstancesCount(key);\r
148 if (instanceCount != 0) {\r
149 String[][] saa = new String[instanceCount][5];\r
150 ffc.getLibraryInstances(key, saa);\r
151 for (int i = 0; i < saa.length; ++i) {\r
71baa24b 152 ModuleIdentification mi = getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
153 if (mi != null) {\r
154 saa[i][0] = mi.getName();\r
155 saa[i][2] = mi.getVersion();\r
156 saa[i][4] = mi.getPackage().getVersion();\r
157 //\r
158 // re-evaluate lib instance usage when adding a already-selected lib instance.\r
159 //\r
160 resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
161 model1.addRow(saa[i]);\r
a13899c5 162 }\r
163 \r
71baa24b 164 \r
a13899c5 165 }\r
166 }\r
71baa24b 167 \r
1800d80f 168 //\r
169 // display module SA options\r
170 //\r
171 String fvBinding = ffc.getFvBinding(key);\r
172 if (fvBinding != null) {\r
173 jTextField.setText(fvBinding);\r
174 }\r
175 String fileGuid = ffc.getFfsFileNameGuid(key);\r
176 if (fileGuid != null) {\r
177 jTextField1.setText(fileGuid);\r
178 }\r
179 String ffsKey = ffc.getFfsFormatKey(key);\r
180 if (ffsKey != null) {\r
181 jTextField2.setText(ffsKey);\r
182 }\r
a13899c5 183 }\r
184 \r
185 private void resolveLibraryInstances(String key) {\r
186 ModuleIdentification mi = getModuleId(key);\r
187 PackageIdentification[] depPkgList = null;\r
188 try{\r
189 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
190 SurfaceAreaQuery.setDoc(m);\r
191 //\r
192 // Get dependency pkg list into which we will search lib instances.\r
193 //\r
194 depPkgList = SurfaceAreaQuery.getDependencePkg(null);\r
195 //\r
196 // Get the lib class consumed, produced by this module itself.\r
197 //\r
198 String[] classConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
199 \r
200 if (this.classConsumed == null) {\r
201 this.classConsumed = new HashMap<String, ArrayList<String>>();\r
202 }\r
203 \r
204 for(int i = 0; i < classConsumed.length; ++i){\r
205 ArrayList<String> consumedBy = this.classConsumed.get(classConsumed[i]);\r
206 if (consumedBy == null) {\r
207 consumedBy = new ArrayList<String>();\r
208 }\r
209 consumedBy.add(key);\r
210 this.classConsumed.put(classConsumed[i], consumedBy);\r
211 }\r
212 \r
213 String[] classProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
214 if (this.classProduced == null) {\r
215 this.classProduced = new ArrayList<String>();\r
216 }\r
217 for(int i = 0; i < classProduced.length; ++i){\r
218 if (!this.classProduced.contains(classProduced[i])){\r
219 this.classProduced.add(classProduced[i]);\r
220 }\r
221 }\r
222 //\r
223 // Get classes unresolved\r
224 //\r
225// Iterator<String> lip = this.classProduced.listIterator();\r
226// while(lip.hasNext()){\r
227// String clsProduced = lip.next();\r
228// this.classConsumed.remove(clsProduced);\r
229//\r
230// }\r
231 //\r
232 // find potential instances in all dependency pkgs for classes still in classConsumed.\r
233 //\r
234 if (classInstanceMap == null){\r
235 classInstanceMap = new HashMap<String, ArrayList<String>>();\r
236 }\r
237 Iterator<String> lic = this.classConsumed.keySet().iterator();\r
238 while(lic.hasNext()){\r
239 String cls = lic.next();\r
240 if (this.classProduced.contains(cls) || classInstanceMap.containsKey(cls)) {\r
241 continue;\r
242 }\r
243 ArrayList<String> instances = getInstancesForClass(cls, depPkgList);\r
244 if (instances.size() == 0){\r
245 JOptionPane.showMessageDialog(frame, "No Applicable Instance for Library Class " + \r
246 cls + ", Platform Build will Fail.");\r
247 }\r
248 classInstanceMap.put(cls, instances);\r
249 \r
250 }\r
251 \r
252 showClassToResolved();\r
253 }\r
254 catch(Exception e) {\r
255 e.printStackTrace();\r
256 }\r
257 }\r
258 \r
259 private ArrayList<String> getInstancesForClass(String cls, PackageIdentification[] depPkgList) throws Exception{\r
260 ArrayList<String> al = new ArrayList<String>();\r
261 \r
262 for (int i = 0; i < depPkgList.length; ++i) {\r
263 Set<ModuleIdentification> smi = GlobalData.getModules(depPkgList[i]);\r
264 Iterator ismi = smi.iterator();\r
265 while(ismi.hasNext()) {\r
266 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
267 \r
268 String[] clsProduced = getClassProduced(mi);\r
269 \r
270 boolean isPotential = false;\r
271 for (int j = 0; j < clsProduced.length; ++j) {\r
272 if (clsProduced[j] == null) {\r
273 continue;\r
274 }\r
275 if (clsProduced[j].equals(cls)){\r
276 isPotential = true;\r
277 }\r
278 if (classProduced.contains(clsProduced[j])) {\r
279 isPotential = false;\r
280 break;\r
281 }\r
282 }\r
283 if (isPotential) {\r
284 al.add(mi.getGuid() + " " + mi.getVersion() + " " + \r
285 depPkgList[i].getGuid() + " " + depPkgList[i].getVersion());\r
286 }\r
287 }\r
288 }\r
289 \r
290 return al;\r
291 }\r
292 \r
293 private void removeInstance(String key) {\r
294 ModuleIdentification mi = getModuleId(key); \r
295 //\r
296 // remove pcd information of instance from current ModuleSA\r
297 //\r
298 ffc.removePcdDataFromLibraryInstance(moduleKey, key);\r
299 //\r
300 // remove class produced by this instance and add back these produced class to be bound.\r
301 //\r
302 String[] clsProduced = getClassProduced(mi);\r
303 for (int i = 0; i < clsProduced.length; ++i) {\r
304 \r
305 classProduced.remove(clsProduced[i]);\r
306 }\r
307 //\r
308 // remove class consumed by this instance. we do not need to bound it now.\r
309 //\r
310 String[] clsConsumed = getClassConsumed(mi);\r
311 for (int i = 0; i < clsConsumed.length; ++i) {\r
312 ArrayList<String> al = classConsumed.get(clsConsumed[i]);\r
313 \r
314 if (al == null ) {\r
315 classConsumed.remove(clsConsumed[i]);\r
316 continue;\r
317 }\r
318 al.remove(key);\r
319 if (al.size() == 0) {\r
320 classConsumed.remove(clsConsumed[i]);\r
321 }\r
322 \r
323 }\r
324\r
325 showClassToResolved();\r
326 \r
327 }\r
328 \r
329 private ModuleIdentification getModuleId(String key){\r
330 //\r
331 // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.\r
332 //\r
333 String[] keyPart = key.split(" ");\r
334 Set<PackageIdentification> spi = GlobalData.getPackageList();\r
335 Iterator ispi = spi.iterator();\r
336 \r
337 while(ispi.hasNext()) {\r
338 PackageIdentification pi = (PackageIdentification)ispi.next();\r
71baa24b 339 if ( !pi.getGuid().equals(keyPart[2])){\r
340// || !pi.getVersion().equals(keyPart[3])){\r
a13899c5 341 continue;\r
342 }\r
343 Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
344 Iterator ismi = smi.iterator();\r
345 while(ismi.hasNext()) {\r
346 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
71baa24b 347 if (mi.getGuid().equals(keyPart[0])){\r
348// && mi.getVersion().equals(keyPart[1])){\r
a13899c5 349 return mi;\r
350 }\r
351 }\r
352 }\r
353 return null;\r
354 }\r
355 \r
356 private String[] getClassProduced(ModuleIdentification mi){\r
357 \r
358 try{\r
359 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
360 SurfaceAreaQuery.setDoc(m);\r
361 String[] clsProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
362 return clsProduced;\r
363 \r
364 }catch (Exception e) {\r
365 e.printStackTrace();\r
366 }\r
367 return new String[0];\r
368 \r
369 }\r
370 \r
371 private String[] getClassConsumed(ModuleIdentification mi){\r
372 \r
373 String[] clsConsumed = null;\r
374 try{\r
375 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
376 SurfaceAreaQuery.setDoc(m);\r
377 clsConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
378 \r
379 }catch (Exception e) {\r
380 e.printStackTrace();\r
381 }\r
382 return clsConsumed;\r
383 }\r
384 \r
385 private void showClassToResolved(){\r
386 model2.setRowCount(0);\r
387 if (classConsumed.size() == 0) {\r
388 return;\r
389 }\r
390 Iterator<String> li = classConsumed.keySet().iterator();\r
391 while(li.hasNext()){\r
392 \r
393 String[] s = {li.next()};\r
394 if (classConsumed.get(s[0]) == null) {\r
395 continue;\r
396 }\r
397 if (classConsumed.get(s[0]).size() == 0) {\r
398 continue;\r
399 }\r
400 if (!classProduced.contains(s[0])){\r
401 model2.addRow(s);\r
402 }\r
403 }\r
404 model3.setRowCount(0);\r
405 }\r
406 /**\r
407 * This method initializes this\r
408 * \r
409 * @return void\r
410 */\r
411 private void initialize() {\r
412 this.setSize(664, 515);\r
f3b0ed9a 413 this.centerWindow();\r
a13899c5 414 this.setModal(true);\r
415 this.setTitle("Module Settings");\r
416 this.setContentPane(getJContentPane());\r
417 }\r
418\r
419 /**\r
420 * This method initializes jContentPane\r
421 * \r
422 * @return javax.swing.JPanel\r
423 */\r
424 private JPanel getJContentPane() {\r
425 if (jContentPane == null) {\r
426 jContentPane = new JPanel();\r
427 jContentPane.setLayout(new BorderLayout());\r
428 jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
429 jContentPane.add(getJPanel3(), java.awt.BorderLayout.SOUTH);\r
430 }\r
431 return jContentPane;\r
432 }\r
433\r
434 /**\r
435 * This method initializes jTabbedPane \r
436 * \r
437 * @return javax.swing.JTabbedPane \r
438 */\r
439 private JTabbedPane getJTabbedPane() {\r
440 if (jTabbedPane == null) {\r
441 jTabbedPane = new JTabbedPane();\r
442 jTabbedPane.addTab("PCD Build Definition", null, getJPanel(), null);\r
6a09eb19 443 jTabbedPane.addTab("Module SA Options", null, getJPanel8(), null);\r
a13899c5 444 jTabbedPane.addTab("Libraries", null, getJPanel1(), null);\r
445 }\r
446 return jTabbedPane;\r
447 }\r
448\r
449 /**\r
450 * This method initializes jPanel \r
451 * \r
452 * @return javax.swing.JPanel \r
453 */\r
454 private JPanel getJPanel() {\r
455 if (jPanel == null) {\r
456 jLabel = new JLabel();\r
457 jLabel.setText("PcdData");\r
458 jPanel = new JPanel();\r
459 jPanel.setLayout(new BorderLayout());\r
460 jPanel.add(jLabel, java.awt.BorderLayout.NORTH);\r
461 jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER);\r
462 jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);\r
463 jPanel.addComponentListener(new java.awt.event.ComponentAdapter() {\r
464 public void componentShown(java.awt.event.ComponentEvent e) {\r
465 init(moduleKey);\r
466 }\r
467 });\r
468 \r
469 }\r
470 return jPanel;\r
471 }\r
472\r
473 /**\r
474 * This method initializes jPanel1 \r
475 * \r
476 * @return javax.swing.JPanel \r
477 */\r
478 private JPanel getJPanel1() {\r
479 if (jPanel1 == null) {\r
480 jPanel1 = new JPanel();\r
481 jPanel1.setLayout(new BorderLayout());\r
482 jPanel1.add(getJSplitPane(), java.awt.BorderLayout.NORTH);\r
483 jPanel1.add(getJPanel6(), java.awt.BorderLayout.SOUTH);\r
484 jPanel1.add(getJPanel7(), java.awt.BorderLayout.CENTER);\r
485 jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() {\r
486 public void componentShown(java.awt.event.ComponentEvent e) {\r
71baa24b 487 init(moduleKey);\r
a13899c5 488 }\r
489 });\r
490 }\r
491 return jPanel1;\r
492 }\r
493\r
494 /**\r
495 * This method initializes jScrollPane \r
496 * \r
497 * @return javax.swing.JScrollPane \r
498 */\r
499 private JScrollPane getJScrollPane() {\r
500 if (jScrollPane == null) {\r
501 jScrollPane = new JScrollPane();\r
502 jScrollPane.setViewportView(getJTable());\r
503 }\r
504 return jScrollPane;\r
505 }\r
506\r
507 /**\r
508 * This method initializes jTable \r
509 * \r
510 * @return javax.swing.JTable \r
511 */\r
512 private JTable getJTable() {\r
513 if (jTable == null) {\r
514 model = new PartialEditableTableModel();\r
515 jTable = new JTable(model);\r
f3b0ed9a 516 jTable.setRowHeight(20);\r
71baa24b 517 jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
a13899c5 518 model.addColumn("CName");\r
519 model.addColumn("TokenSpaceGUID");\r
520 model.addColumn("ItemType");\r
521 model.addColumn("Token");\r
522 model.addColumn("DataType");\r
523 model.addColumn("DefaultValue");\r
524 \r
525 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
526 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
527 public void valueChanged(ListSelectionEvent e) {\r
44053733 528 \r
a13899c5 529 if (e.getValueIsAdjusting()){\r
530 return;\r
531 }\r
532 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
533 if (lsm.isSelectionEmpty()) {\r
534 return;\r
535 }\r
536 else{\r
44053733 537// int selectedRow = lsm.getMinSelectionIndex();\r
a13899c5 538 \r
539 \r
540 }\r
541 }\r
542 });\r
543 \r
544 jTable.getModel().addTableModelListener(new TableModelListener() {\r
545 public void tableChanged(TableModelEvent arg0) {\r
546 // TODO Auto-generated method stub\r
547 int row = arg0.getFirstRow();\r
548 TableModel m = (TableModel)arg0.getSource();\r
549 if (arg0.getType() == TableModelEvent.INSERT) {\r
550 //\r
551 // Set combo box values for item type according to pcd values added.\r
552 //\r
553 \r
554 }\r
555 if (arg0.getType() == TableModelEvent.UPDATE){\r
556 //ToDo Data Validition check.\r
557 \r
558 }\r
559 }\r
560 });\r
561 }\r
562 return jTable;\r
563 }\r
564\r
565 /**\r
566 * This method initializes jPanel2 \r
567 * \r
568 * @return javax.swing.JPanel \r
569 */\r
570 private JPanel getJPanel2() {\r
571 if (jPanel2 == null) {\r
572 jLabel5 = new JLabel();\r
573 jLabel5.setText("PCD Description");\r
574 jPanel2 = new JPanel();\r
575 jPanel2.add(jLabel5, null);\r
576 jPanel2.add(getJScrollPane1(), null);\r
577 }\r
578 return jPanel2;\r
579 }\r
580\r
581 /**\r
582 * This method initializes jScrollPane1 \r
583 * \r
584 * @return javax.swing.JScrollPane \r
585 */\r
586 private JScrollPane getJScrollPane1() {\r
587 if (jScrollPane1 == null) {\r
588 jScrollPane1 = new JScrollPane();\r
589 jScrollPane1.setPreferredSize(new java.awt.Dimension(500,100));\r
590 jScrollPane1.setViewportView(getJTextArea());\r
591 }\r
592 return jScrollPane1;\r
593 }\r
594\r
595 /**\r
596 * This method initializes jTextArea \r
597 * \r
598 * @return javax.swing.JTextArea \r
599 */\r
600 private JTextArea getJTextArea() {\r
601 if (jTextArea == null) {\r
602 jTextArea = new JTextArea();\r
603 jTextArea.setEditable(false);\r
604 }\r
605 return jTextArea;\r
606 }\r
607\r
608 /**\r
609 * This method initializes jPanel3 \r
610 * \r
611 * @return javax.swing.JPanel \r
612 */\r
613 private JPanel getJPanel3() {\r
614 if (jPanel3 == null) {\r
615 FlowLayout flowLayout = new FlowLayout();\r
616 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
617 jPanel3 = new JPanel();\r
618 jPanel3.setLayout(flowLayout);\r
619 jPanel3.add(getJButton2(), null);\r
620 jPanel3.add(getJButton3(), null);\r
621 }\r
622 return jPanel3;\r
623 }\r
624\r
625 /**\r
626 * This method initializes jSplitPane \r
627 * \r
628 * @return javax.swing.JSplitPane \r
629 */\r
630 private JSplitPane getJSplitPane() {\r
631 if (jSplitPane == null) {\r
632 jSplitPane = new JSplitPane();\r
633 jSplitPane.setDividerLocation(200);\r
634 jSplitPane.setLeftComponent(getJPanel4());\r
635 jSplitPane.setRightComponent(getJPanel5());\r
636 jSplitPane.setPreferredSize(new java.awt.Dimension(202,200));\r
637 }\r
638 return jSplitPane;\r
639 }\r
640\r
641 /**\r
642 * This method initializes jPanel4 \r
643 * \r
644 * @return javax.swing.JPanel \r
645 */\r
646 private JPanel getJPanel4() {\r
647 if (jPanel4 == null) {\r
648 jLabel1 = new JLabel();\r
649 jLabel1.setText("Library Classes Consumed");\r
650 jPanel4 = new JPanel();\r
651 jPanel4.add(jLabel1, null);\r
652 jPanel4.add(getJScrollPane3(), null);\r
653 }\r
654 return jPanel4;\r
655 }\r
656\r
657 /**\r
658 * This method initializes jPanel5 \r
659 * \r
660 * @return javax.swing.JPanel \r
661 */\r
662 private JPanel getJPanel5() {\r
663 if (jPanel5 == null) {\r
664 jLabel2 = new JLabel();\r
665 jLabel2.setText("Instances Available");\r
666 jPanel5 = new JPanel();\r
667 jPanel5.add(jLabel2, null);\r
668 jPanel5.add(getJScrollPane4(), null);\r
669 }\r
670 return jPanel5;\r
671 }\r
672\r
673 /**\r
674 * This method initializes jScrollPane2 \r
675 * \r
676 * @return javax.swing.JScrollPane \r
677 */\r
678 private JScrollPane getJScrollPane2() {\r
679 if (jScrollPane2 == null) {\r
680 jScrollPane2 = new JScrollPane();\r
681 jScrollPane2.setPreferredSize(new java.awt.Dimension(453,150));\r
682 jScrollPane2.setViewportView(getJTable1());\r
683 }\r
684 return jScrollPane2;\r
685 }\r
686\r
687 /**\r
688 * This method initializes jTable1 \r
689 * \r
690 * @return javax.swing.JTable \r
691 */\r
692 private JTable getJTable1() {\r
693 if (jTable1 == null) {\r
694 model1 = new LibraryTableModel();\r
695 model1.addColumn("Name");\r
696 model1.addColumn("ModuleGUID");\r
697 model1.addColumn("ModuleVersion");\r
698 model1.addColumn("PackageGUID");\r
699 model1.addColumn("PackageVersion");\r
700 jTable1 = new JTable(model1);\r
f3b0ed9a 701 jTable1.setRowHeight(20);\r
71baa24b 702 jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
a13899c5 703 jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
704 jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
705 public void valueChanged(ListSelectionEvent e) {\r
706 int selectedRow1 = -1;\r
707 if (e.getValueIsAdjusting()){\r
708 return;\r
709 }\r
710 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
711 if (lsm.isSelectionEmpty()) {\r
712 return;\r
713 }\r
714 else{\r
715 selectedRow1 = lsm.getMinSelectionIndex();\r
716 \r
717 \r
718 }\r
719 }\r
720 });\r
721 \r
722 \r
723 }\r
724 return jTable1;\r
725 }\r
726\r
727 /**\r
728 * This method initializes jScrollPane3 \r
729 * \r
730 * @return javax.swing.JScrollPane \r
731 */\r
732 private JScrollPane getJScrollPane3() {\r
733 if (jScrollPane3 == null) {\r
734 jScrollPane3 = new JScrollPane();\r
735 jScrollPane3.setPreferredSize(new java.awt.Dimension(200,170));\r
736 jScrollPane3.setViewportView(getJTable2());\r
737 }\r
738 return jScrollPane3;\r
739 }\r
740\r
741 /**\r
742 * This method initializes jTable2 \r
743 * \r
744 * @return javax.swing.JTable \r
745 */\r
746 private JTable getJTable2() {\r
747 if (jTable2 == null) {\r
748 model2 = new LibraryTableModel();\r
749 model2.addColumn("LibraryClass");\r
750 jTable2 = new JTable(model2);\r
f3b0ed9a 751 jTable2.setRowHeight(20);\r
752 jTable2.setShowGrid(false);\r
a13899c5 753 jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
754 jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
755 public void valueChanged(ListSelectionEvent e) {\r
756 if (e.getValueIsAdjusting()){\r
757 return;\r
758 }\r
759 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
760 if (lsm.isSelectionEmpty()) {\r
761 return;\r
762 }\r
763 else{\r
764 int selectedRow2 = lsm.getMinSelectionIndex();\r
765 if (selectedRow2 < 0) {\r
766 return;\r
767 }\r
768 //\r
769 // display potential lib instances according to class selection\r
770 //\r
771 model3.setRowCount(0);\r
772 String cls = model2.getValueAt(selectedRow2, 0).toString();\r
773 ArrayList<String> al = classInstanceMap.get(cls);\r
774 ListIterator<String> li = al.listIterator();\r
775 while(li.hasNext()) {\r
776 String instance = li.next();\r
777 String[] s = {"", "", "", "", ""};\r
778 if (getModuleId(instance) != null) {\r
779 s[0] = getModuleId(instance).getName();\r
780 }\r
781 \r
782 String[] instancePart = instance.split(" ");\r
783 for (int i = 0; i < instancePart.length; ++i){\r
784 s[i+1] = instancePart[i];\r
785 }\r
786 model3.addRow(s);\r
787 }\r
788 \r
789 }\r
790 }\r
791 });\r
792 }\r
793 return jTable2;\r
794 }\r
795\r
796 /**\r
797 * This method initializes jScrollPane4 \r
798 * \r
799 * @return javax.swing.JScrollPane \r
800 */\r
801 private JScrollPane getJScrollPane4() {\r
802 if (jScrollPane4 == null) {\r
803 jScrollPane4 = new JScrollPane();\r
804 jScrollPane4.setPreferredSize(new java.awt.Dimension(450,170));\r
805 jScrollPane4.setViewportView(getJTable3());\r
806 }\r
807 return jScrollPane4;\r
808 }\r
809\r
810 /**\r
811 * This method initializes jTable3 \r
812 * \r
813 * @return javax.swing.JTable \r
814 */\r
815 private JTable getJTable3() {\r
816 if (jTable3 == null) {\r
817 model3 = new LibraryTableModel();\r
818 model3.addColumn("Name");\r
819 model3.addColumn("ModuleGUID");\r
820 model3.addColumn("ModuleVersion");\r
821 model3.addColumn("PackageGUID");\r
822 model3.addColumn("PackageVersion");\r
823 jTable3 = new JTable(model3);\r
f3b0ed9a 824 jTable3.setRowHeight(20);\r
71baa24b 825 jTable3.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
a13899c5 826 jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
827 jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
828 public void valueChanged(ListSelectionEvent e) {\r
829 int selectedRow3 = -1;\r
830 if (e.getValueIsAdjusting()){\r
831 return;\r
832 }\r
833 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
834 if (lsm.isSelectionEmpty()) {\r
835 return;\r
836 }\r
837 else{\r
838 selectedRow3 = lsm.getMinSelectionIndex();\r
839 \r
840 \r
841 }\r
842 }\r
843 });\r
844 }\r
845 return jTable3;\r
846 }\r
847\r
848 /**\r
849 * This method initializes jPanel6 \r
850 * \r
851 * @return javax.swing.JPanel \r
852 */\r
853 private JPanel getJPanel6() {\r
854 if (jPanel6 == null) {\r
855 jPanel6 = new JPanel();\r
856 }\r
857 return jPanel6;\r
858 }\r
859\r
860 /**\r
861 * This method initializes jPanel7 \r
862 * \r
863 * @return javax.swing.JPanel \r
864 */\r
865 private JPanel getJPanel7() {\r
866 if (jPanel7 == null) {\r
867 jLabel4 = new JLabel();\r
868 jLabel4.setText("Instance Description");\r
869 jLabel3 = new JLabel();\r
870 jLabel3.setText("Selected Instances");\r
871 jPanel7 = new JPanel();\r
872 jPanel7.add(jLabel4, null);\r
873 jPanel7.add(getJScrollPane5(), null);\r
874 jPanel7.add(getJButton(), null);\r
875 jPanel7.add(getJButton1(), null);\r
876 jPanel7.add(jLabel3, null);\r
877 jPanel7.add(getJScrollPane2(), null);\r
878 }\r
879 return jPanel7;\r
880 }\r
881\r
882 /**\r
883 * This method initializes jScrollPane5 \r
884 * \r
885 * @return javax.swing.JScrollPane \r
886 */\r
887 private JScrollPane getJScrollPane5() {\r
888 if (jScrollPane5 == null) {\r
889 jScrollPane5 = new JScrollPane();\r
890 jScrollPane5.setPreferredSize(new java.awt.Dimension(300,50));\r
891 jScrollPane5.setViewportView(getJTextArea1());\r
892 }\r
893 return jScrollPane5;\r
894 }\r
895\r
896 /**\r
897 * This method initializes jTextArea1 \r
898 * \r
899 * @return javax.swing.JTextArea \r
900 */\r
901 private JTextArea getJTextArea1() {\r
902 if (jTextArea1 == null) {\r
903 jTextArea1 = new JTextArea();\r
904 jTextArea1.setEditable(false);\r
905 }\r
906 return jTextArea1;\r
907 }\r
908\r
909 /**\r
910 * This method initializes jButton \r
911 * \r
912 * @return javax.swing.JButton \r
913 */\r
914 private JButton getJButton() {\r
915 if (jButton == null) {\r
916 jButton = new JButton();\r
917 jButton.setPreferredSize(new java.awt.Dimension(80,20));\r
918 jButton.setText("Add");\r
919 jButton.addActionListener(new java.awt.event.ActionListener() {\r
920 public void actionPerformed(java.awt.event.ActionEvent e) {\r
921 int row = jTable3.getSelectedRow();\r
922 if (row < 0) {\r
923 return;\r
924 }\r
925 Object[] s = {model3.getValueAt(row, 0), model3.getValueAt(row, 1),\r
926 model3.getValueAt(row, 2), model3.getValueAt(row, 3),\r
927 model3.getValueAt(row, 4)};\r
928 model1.addRow(s);\r
929 String instanceValue = model3.getValueAt(row, 1) + " " + \r
930 model3.getValueAt(row, 2) + " " +\r
931 model3.getValueAt(row, 3) + " " +\r
932 model3.getValueAt(row, 4);\r
933 //\r
934 // Add pcd information of selected instance to current moduleSA\r
935 //\r
936 ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey));\r
937 \r
938 resolveLibraryInstances(instanceValue);\r
939 }\r
940 });\r
941 }\r
942 return jButton;\r
943 }\r
944\r
945 /**\r
946 * This method initializes jButton1 \r
947 * \r
948 * @return javax.swing.JButton \r
949 */\r
950 private JButton getJButton1() {\r
951 if (jButton1 == null) {\r
952 jButton1 = new JButton();\r
953 jButton1.setPreferredSize(new java.awt.Dimension(80,20));\r
954 jButton1.setText("Delete");\r
955 jButton1.addActionListener(new java.awt.event.ActionListener() {\r
956 public void actionPerformed(java.awt.event.ActionEvent e) {\r
957 int row = jTable1.getSelectedRow();\r
958 if (row < 0) {\r
959 return;\r
960 }\r
961 removeInstance(model1.getValueAt(row, 1) + " " + \r
962 model1.getValueAt(row, 2) + " " +\r
963 model1.getValueAt(row, 3) + " " +\r
964 model1.getValueAt(row, 4));\r
965 model1.removeRow(row);\r
966 \r
967 }\r
968 });\r
969 }\r
970 return jButton1;\r
971 }\r
972\r
973 /**\r
974 * This method initializes jButton2 \r
975 * \r
976 * @return javax.swing.JButton \r
977 */\r
978 private JButton getJButton2() {\r
979 if (jButton2 == null) {\r
980 jButton2 = new JButton();\r
981 jButton2.setPreferredSize(new java.awt.Dimension(80,20));\r
982 jButton2.setText("Ok");\r
983 jButton2.addActionListener(this);\r
984 }\r
985 return jButton2;\r
986 }\r
987\r
988 /**\r
989 * This method initializes jButton3 \r
990 * \r
991 * @return javax.swing.JButton \r
992 */\r
993 private JButton getJButton3() {\r
994 if (jButton3 == null) {\r
995 jButton3 = new JButton();\r
996 jButton3.setPreferredSize(new java.awt.Dimension(80,20));\r
997 jButton3.setText("Cancel");\r
998 jButton3.setVisible(false);\r
999 }\r
1000 return jButton3;\r
1001 }\r
1002 public void actionPerformed(ActionEvent arg0) {\r
1003\r
1004 if (arg0.getSource() == jButton2) {\r
1005 ffc.removeLibraryInstances(moduleKey);\r
1006 for (int i = 0; i < model1.getRowCount(); ++i) {\r
1007 String mg = model1.getValueAt(i, 1)+"";\r
1008 String mv = model1.getValueAt(i, 2)+"";\r
1009 String pg = model1.getValueAt(i, 3)+"";\r
1010 String pv = model1.getValueAt(i, 4)+"";\r
1011 ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey);\r
1012 }\r
1013 this.setVisible(false);\r
1014 }\r
1015 }\r
6a09eb19 1016 /**\r
1017 * This method initializes jPanel8 \r
1018 * \r
1019 * @return javax.swing.JPanel \r
1020 */\r
1021 private JPanel getJPanel8() {\r
1022 if (jPanel8 == null) {\r
1023 jLabel8 = new JLabel();\r
1024 jLabel8.setText("FFS Format Key");\r
1025 jLabel7 = new JLabel();\r
1026 jLabel7.setText("FFS File GUID");\r
1027 jLabel6 = new JLabel();\r
1028 jLabel6.setText("FV Binding");\r
1029 jPanel8 = new JPanel();\r
1030 jPanel8.add(jLabel6, null);\r
1031 jPanel8.add(getJTextField(), null);\r
1032 jPanel8.add(jLabel7, null);\r
1033 jPanel8.add(getJTextField1(), null);\r
1034 jPanel8.add(jLabel8, null);\r
1035 jPanel8.add(getJTextField2(), null);\r
1036 jPanel8.add(getJScrollPane6(), null);\r
1800d80f 1037 jPanel8.add(getJButton4(), null);\r
1038 jPanel8.add(getJButton5(), null);\r
71baa24b 1039 jPanel8.addComponentListener(new java.awt.event.ComponentAdapter() {\r
1040 public void componentShown(java.awt.event.ComponentEvent e) {\r
1041 init(moduleKey);\r
1042 }\r
1043 });\r
6a09eb19 1044 }\r
1045 return jPanel8;\r
1046 }\r
1047 /**\r
1048 * This method initializes jTextField \r
1049 * \r
1050 * @return javax.swing.JTextField \r
1051 */\r
1052 private JTextField getJTextField() {\r
1053 if (jTextField == null) {\r
1054 jTextField = new JTextField();\r
1055 jTextField.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1056 jTextField.addFocusListener(new java.awt.event.FocusAdapter() {\r
1057 public void focusLost(java.awt.event.FocusEvent e) {\r
1058 ffc.setFvBinding(moduleKey, jTextField.getText());\r
1059 }\r
1060 });\r
6a09eb19 1061 }\r
1062 return jTextField;\r
1063 }\r
1064 /**\r
1065 * This method initializes jTextField1 \r
1066 * \r
1067 * @return javax.swing.JTextField \r
1068 */\r
1069 private JTextField getJTextField1() {\r
1070 if (jTextField1 == null) {\r
1071 jTextField1 = new JTextField();\r
1072 jTextField1.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1073 jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {\r
1074 public void focusLost(java.awt.event.FocusEvent e) {\r
1075 ffc.setFfsFileNameGuid(moduleKey, jTextField1.getText());\r
1076 }\r
1077 });\r
6a09eb19 1078 }\r
1079 return jTextField1;\r
1080 }\r
1081 /**\r
1082 * This method initializes jTextField2 \r
1083 * \r
1084 * @return javax.swing.JTextField \r
1085 */\r
1086 private JTextField getJTextField2() {\r
1087 if (jTextField2 == null) {\r
1088 jTextField2 = new JTextField();\r
1089 jTextField2.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1090 jTextField2.addFocusListener(new java.awt.event.FocusAdapter() {\r
1091 public void focusLost(java.awt.event.FocusEvent e) {\r
1092 ffc.setFfsFormatKey(moduleKey, jTextField2.getText());\r
1093 }\r
1094 });\r
6a09eb19 1095 }\r
1096 return jTextField2;\r
1097 }\r
1098 /**\r
1099 * This method initializes jScrollPane6 \r
1100 * \r
1101 * @return javax.swing.JScrollPane \r
1102 */\r
1103 private JScrollPane getJScrollPane6() {\r
1104 if (jScrollPane6 == null) {\r
1105 jScrollPane6 = new JScrollPane();\r
1106 jScrollPane6.setPreferredSize(new java.awt.Dimension(600,200));\r
1107 jScrollPane6.setViewportView(getJTable4());\r
1108 }\r
1109 return jScrollPane6;\r
1110 }\r
1111 /**\r
1112 * This method initializes jTable4 \r
1113 * \r
1114 * @return javax.swing.JTable \r
1115 */\r
1116 private JTable getJTable4() {\r
1117 if (jTable4 == null) {\r
1800d80f 1118 optionsTableModel = new DefaultTableModel();\r
1119 optionsTableModel.addColumn("BuildTargets");\r
1120 optionsTableModel.addColumn("ToolChainFamily");\r
1121 optionsTableModel.addColumn("TagName");\r
1122 optionsTableModel.addColumn("ToolCode");\r
1123 optionsTableModel.addColumn("SupportedArchs");\r
1124 optionsTableModel.addColumn("Contents");\r
1125 jTable4 = new JTable(optionsTableModel);\r
f3b0ed9a 1126 jTable4.setRowHeight(20);\r
1127 Vector<String> vArch = new Vector<String>();\r
1128 vArch.add("IA32");\r
1129 vArch.add("X64");\r
1130 vArch.add("IPF");\r
1131 vArch.add("EBC");\r
1132 vArch.add("ARM");\r
1133 vArch.add("PPC");\r
1134 jTable4.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));\r
1800d80f 1135 jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
71baa24b 1136 jTable4.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
1800d80f 1137 jTable4.getModel().addTableModelListener(new TableModelListener() {\r
1138 public void tableChanged(TableModelEvent arg0) {\r
1139 // TODO Auto-generated method stub\r
1140 int row = arg0.getFirstRow();\r
1141 TableModel m = (TableModel)arg0.getSource();\r
1142 \r
1143 if (arg0.getType() == TableModelEvent.UPDATE){\r
1144 //ToDo Data Validition check.\r
1145 String targets = m.getValueAt(row, 0) + "";\r
f3b0ed9a 1146 Vector<Object> targetName = null;\r
1147 if (targets.length() > 0) {\r
1148 targetName = new Vector<Object>();\r
1149 String[] sArray = targets.split(" ");\r
1150 for (int i = 0; i < sArray.length; ++i) {\r
1151 targetName.add(sArray[i]);\r
1152 }\r
1800d80f 1153 }\r
f3b0ed9a 1154 \r
1800d80f 1155 String toolChain = m.getValueAt(row, 1) + "";\r
1156 String tagName = m.getValueAt(row, 2) + "";\r
1157 String toolCode = m.getValueAt(row, 3) + "";\r
1158 String archs = m.getValueAt(row, 4) + "";\r
f3b0ed9a 1159 Vector<Object> supArch = null;\r
1160 if (archs.length() > 0) {\r
1161 supArch = new Vector<Object>();\r
1162 String[] sArray1 = archs.split(" ");\r
1163 for (int i = 0; i < sArray1.length; ++i) {\r
1164 supArch.add(sArray1[i]);\r
1165 }\r
1800d80f 1166 }\r
f3b0ed9a 1167 \r
1800d80f 1168 String contents = m.getValueAt(row, 5) + "";\r
1169 \r
1170 ffc.updateModuleSAOptionsOpt(moduleKey, row, targetName, toolChain, tagName, toolCode, supArch, contents);\r
1171 }\r
1172 }\r
1173 });\r
6a09eb19 1174 }\r
1175 return jTable4;\r
1176 }\r
1800d80f 1177 /**\r
1178 * This method initializes jButton4 \r
1179 * \r
1180 * @return javax.swing.JButton \r
1181 */\r
1182 private JButton getJButton4() {\r
1183 if (jButton4 == null) {\r
1184 jButton4 = new JButton();\r
1185 jButton4.setPreferredSize(new java.awt.Dimension(80,20));\r
1186 jButton4.setText("New");\r
1187 jButton4.addActionListener(new java.awt.event.ActionListener() {\r
1188 public void actionPerformed(java.awt.event.ActionEvent e) {\r
1189 String[] row = {"", "", "", "", "IA32", ""};\r
1190 optionsTableModel.addRow(row);\r
1191 Vector<Object> v = new Vector<Object>();\r
1192 Vector<Object> v1 = new Vector<Object>();\r
1193 v1.add("IA32");\r
1194 ffc.genModuleSAOptionsOpt(moduleKey, v, "", "", "", v1, "");\r
1195 }\r
1196 });\r
1197 }\r
1198 return jButton4;\r
1199 }\r
1200 /**\r
1201 * This method initializes jButton5 \r
1202 * \r
1203 * @return javax.swing.JButton \r
1204 */\r
1205 private JButton getJButton5() {\r
1206 if (jButton5 == null) {\r
1207 jButton5 = new JButton();\r
1208 jButton5.setPreferredSize(new java.awt.Dimension(80,20));\r
1209 jButton5.setText("Delete");\r
1210 jButton5.addActionListener(new java.awt.event.ActionListener() {\r
1211 public void actionPerformed(java.awt.event.ActionEvent e) {\r
1212 if (jTable4.getSelectedRow() < 0) {\r
1213 return;\r
1214 }\r
1215 \r
1216 ffc.removeModuleSAOptionsOpt(moduleKey, jTable4.getSelectedRow());\r
1217 optionsTableModel.removeRow(jTable4.getSelectedRow());\r
1218 }\r
1219 });\r
1220 }\r
1221 return jButton5;\r
1222 }\r
f3b0ed9a 1223 \r
1224 /**\r
1225 Start the window at the center of screen\r
1226 \r
1227 **/\r
1228 protected void centerWindow(int intWidth, int intHeight) {\r
1229 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
1230 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
1231 }\r
1232\r
1233 /**\r
1234 Start the window at the center of screen\r
1235 \r
1236 **/\r
1237 protected void centerWindow() {\r
1238 centerWindow(this.getSize().width, this.getSize().height);\r
1239 }\r
1240\r
a13899c5 1241\r
1242} // @jve:decl-index=0:visual-constraint="10,10"\r
1243\r
1244class PartialEditableTableModel extends DefaultTableModel {\r
44053733 1245 /**\r
1246 * \r
1247 */\r
1248 private static final long serialVersionUID = 1L;\r
1249\r
a13899c5 1250 public boolean isCellEditable(int row, int col) {\r
1251 switch (col){\r
1252 case 2:\r
1253 return true;\r
1254 default:\r
1255 return false; \r
1256 }\r
1257 \r
1258 }\r
1259}\r
1260\r
1261class LibraryTableModel extends DefaultTableModel {\r
44053733 1262 /**\r
1263 * \r
1264 */\r
1265 private static final long serialVersionUID = 1L;\r
1266\r
a13899c5 1267 public boolean isCellEditable(int row, int col) {\r
1268 return false;\r
1269 }\r
1270}\r