]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/installui/InstallStepTwo.java
1. Adjust UI for far operations
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / far / installui / InstallStepTwo.java
CommitLineData
5a24e806 1/** @file\r
2\r
3 Copyright (c) 2006, Intel Corporation\r
4 All rights reserved. This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8 \r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11 \r
12 **/\r
13\r
14package org.tianocore.frameworkwizard.far.installui;\r
15\r
16import java.awt.Color;\r
17import java.awt.Dimension;\r
18import java.awt.Toolkit;\r
19import java.awt.event.MouseEvent;\r
20import java.awt.event.MouseListener;\r
21import java.io.File;\r
22import java.util.ArrayList;\r
23import java.util.Iterator;\r
24import java.util.LinkedHashMap;\r
25import java.util.LinkedHashSet;\r
26import java.util.List;\r
27import java.util.Map;\r
28import java.util.Set;\r
29\r
30import javax.swing.JPanel;\r
31import javax.swing.JTextArea;\r
32import javax.swing.JButton;\r
33import javax.swing.JLabel;\r
34import javax.swing.JScrollPane;\r
35import javax.swing.ListSelectionModel;\r
36import javax.swing.table.DefaultTableModel;\r
37import javax.swing.JTable;\r
38\r
39import org.tianocore.frameworkwizard.common.DataType;\r
40import org.tianocore.frameworkwizard.common.Log;\r
41import org.tianocore.frameworkwizard.common.Tools;\r
42import org.tianocore.frameworkwizard.common.ui.IDialog;\r
43import org.tianocore.frameworkwizard.far.Far;\r
44import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
45import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
46import org.tianocore.frameworkwizard.workspace.Workspace;\r
47import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
48\r
49public class InstallStepTwo extends IDialog implements MouseListener {\r
50\r
51 /**\r
52 * \r
53 */\r
54 private static final long serialVersionUID = 4583090421587036969L;\r
55\r
56 private JPanel jContentPane = null;\r
57\r
58 private JTextArea jTextArea = null;\r
59\r
60 private PartialEditableTableModel packageModel = null;\r
61\r
62 private PartialEditableTableModel platformModel = null;\r
63\r
64 private InstallStepOne stepOne = null;\r
65\r
66 private JButton jButtonCancel = null;\r
67\r
68 private JButton jButtonFinish = null;\r
69\r
70 private JButton jButtonPrevious = null;\r
71\r
72 private JLabel jLabel = null;\r
73\r
74 private JScrollPane jScrollPane = null;\r
75\r
76 private JTable jTablePackage = null;\r
77\r
78 private JLabel jLabel1 = null;\r
79\r
80 private JScrollPane jScrollPane1 = null;\r
81\r
82 private JTable jTablePlatform = null;\r
83\r
84 List<PlatformIdentification> platformVector = null;\r
85\r
86 List<PackageIdentification> packageVector = null;\r
87\r
88 public InstallStepTwo(IDialog iDialog, boolean modal, InstallStepOne stepOne) {\r
89 this(iDialog, modal);\r
90 this.stepOne = stepOne;\r
91 }\r
92\r
93 /**\r
94 * This method initializes jTextArea \r
95 * \r
96 * @return javax.swing.JTextArea \r
97 */\r
98 private JTextArea getJTextArea() {\r
99 if (jTextArea == null) {\r
100 jTextArea = new JTextArea();\r
101 jTextArea.setBounds(new java.awt.Rectangle(30, 7, 642, 50));\r
102 jTextArea.setText("Step 2: Set Path for Packages and Platforms. \n");\r
103 jTextArea.setCaretColor(Color.RED);\r
104 jTextArea.append("Note that path is relative to WORKSPACE. ");\r
105 jTextArea.setEditable(false);\r
106 }\r
107 return jTextArea;\r
108 }\r
109\r
110 /**\r
111 * This method initializes jButtonCancel \r
112 * \r
113 * @return javax.swing.JButton \r
114 */\r
115 private JButton getJButtonCancel() {\r
116 if (jButtonCancel == null) {\r
117 jButtonCancel = new JButton();\r
118 jButtonCancel.setBounds(new java.awt.Rectangle(570, 330, 90, 20));\r
119 jButtonCancel.setText("Cancel");\r
120 jButtonCancel.addMouseListener(this);\r
121 }\r
122 return jButtonCancel;\r
123 }\r
124\r
125 /**\r
126 * This method initializes jButtonFinish \r
127 * \r
128 * @return javax.swing.JButton \r
129 */\r
130 private JButton getJButtonFinish() {\r
131 if (jButtonFinish == null) {\r
132 jButtonFinish = new JButton();\r
133 jButtonFinish.setBounds(new java.awt.Rectangle(470, 330, 90, 20));\r
134 jButtonFinish.setText("Finish");\r
135 jButtonFinish.addMouseListener(this);\r
136 }\r
137 return jButtonFinish;\r
138 }\r
139\r
140 /**\r
141 * This method initializes jButtonPrevious \r
142 * \r
143 * @return javax.swing.JButton \r
144 */\r
145 private JButton getJButtonPrevious() {\r
146 if (jButtonPrevious == null) {\r
147 jButtonPrevious = new JButton();\r
148 jButtonPrevious.setBounds(new java.awt.Rectangle(370, 330, 90, 20));\r
149 jButtonPrevious.setText("Previous");\r
150 jButtonPrevious.addMouseListener(this);\r
151 }\r
152 return jButtonPrevious;\r
153 }\r
154\r
155 /**\r
156 * This method initializes jScrollPane \r
157 * \r
158 * @return javax.swing.JScrollPane \r
159 */\r
160 private JScrollPane getJScrollPane() {\r
161 if (jScrollPane == null) {\r
162 jScrollPane = new JScrollPane();\r
a45e9a40 163 jScrollPane.setBounds(new java.awt.Rectangle(30, 80, 642, 110));\r
5a24e806 164 jScrollPane.setViewportView(getJTablePackage());\r
165 }\r
166 return jScrollPane;\r
167 }\r
168\r
169 /**\r
170 * This method initializes jTable \r
171 * \r
172 * @return javax.swing.JTable \r
173 */\r
174 private JTable getJTablePackage() {\r
175 if (jTablePackage == null) {\r
176 jTablePackage = new JTable();\r
177 packageModel = new PartialEditableTableModel();\r
178 jTablePackage = new JTable(packageModel);\r
179 jTablePackage.setRowHeight(20);\r
180 jTablePackage.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
181 packageModel.addColumn("Name");\r
182 packageModel.addColumn("Version");\r
183 packageModel.addColumn("Default Path");\r
184 packageModel.addColumn("Install To");\r
185\r
186 jTablePackage.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
187 }\r
188 return jTablePackage;\r
189 }\r
190\r
191 public void preparePackageTable() {\r
192 packageModel.setRowCount(0);\r
193 //\r
194 // Change here to get packages and platforms from FAR\r
195 //\r
196 try {\r
197 Far far = stepOne.getFar();\r
198\r
199 packageVector = far.mainfest.getPackageList();\r
200 Iterator<PackageIdentification> iter = packageVector.iterator();\r
201 while (iter.hasNext()) {\r
202 String[] str = new String[4];\r
203 PackageIdentification item = iter.next();\r
204 str[0] = item.getName();\r
205 str[1] = item.getVersion();\r
206 str[2] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));\r
207 str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));\r
208 packageModel.addRow(str);\r
209 }\r
210 } catch (Exception e) {\r
211 }\r
212 }\r
213\r
214 /**\r
215 * This method initializes jScrollPane1 \r
216 * \r
217 * @return javax.swing.JScrollPane \r
218 */\r
219 private JScrollPane getJScrollPane1() {\r
220 if (jScrollPane1 == null) {\r
221 jScrollPane1 = new JScrollPane();\r
a45e9a40 222 jScrollPane1.setBounds(new java.awt.Rectangle(30, 215, 642, 110));\r
5a24e806 223 jScrollPane1.setViewportView(getJTablePlatform());\r
224 }\r
225 return jScrollPane1;\r
226 }\r
227\r
228 /**\r
229 * This method initializes jTablePlatform \r
230 * \r
231 * @return javax.swing.JTable \r
232 */\r
233 private JTable getJTablePlatform() {\r
234 if (jTablePlatform == null) {\r
235 jTablePlatform = new JTable();\r
236 platformModel = new PartialEditableTableModel();\r
237 jTablePlatform = new JTable(platformModel);\r
238 jTablePlatform.setRowHeight(20);\r
239 jTablePlatform.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
240 platformModel.addColumn("Name");\r
241 platformModel.addColumn("Version");\r
242 platformModel.addColumn("Default Path");\r
243 platformModel.addColumn("Install To");\r
244\r
245 jTablePlatform.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
246 preparePlatformTable();\r
247 }\r
248 return jTablePlatform;\r
249 }\r
250\r
251 public void preparePlatformTable() {\r
252 platformModel.setRowCount(0);\r
253 //\r
254 // Change here to get packages and platforms from FAR\r
255 //\r
256 try {\r
257 Far far = stepOne.getFar();\r
258\r
259 platformVector = far.mainfest.getPlatformList();\r
260 Iterator<PlatformIdentification> iter = platformVector.iterator();\r
261 while (iter.hasNext()) {\r
262 String[] str = new String[4];\r
263 PlatformIdentification item = iter.next();\r
264 str[0] = item.getName();\r
265 str[1] = item.getVersion();\r
266 str[2] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));\r
267 str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));\r
268 platformModel.addRow(str);\r
269 }\r
270 } catch (Exception e) {\r
271 }\r
272 }\r
273\r
274 /**\r
275 * This is the default constructor\r
276 */\r
277 public InstallStepTwo(IDialog iDialog, boolean modal) {\r
278 super(iDialog, modal);\r
279 initialize();\r
280 }\r
281\r
282 /**\r
283 * This method initializes this\r
284 * \r
285 * @return void\r
286 */\r
287 private void initialize() {\r
288 this.setSize(700, 400);\r
289 this.setContentPane(getJContentPane());\r
290 this.setTitle("Install Framework Archive(FAR) - Step 2: Set Path for Packages and Platforms");\r
291 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
292 this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);\r
293 }\r
294\r
295 /**\r
296 * This method initializes jContentPane\r
297 * \r
298 * @return javax.swing.JPanel\r
299 */\r
300 private JPanel getJContentPane() {\r
301 if (jContentPane == null) {\r
302 jLabel1 = new JLabel();\r
303 jLabel1.setBounds(new java.awt.Rectangle(30, 195, 348, 18));\r
304 jLabel1.setText("Edit pathes for platforms: ");\r
305 jLabel = new JLabel();\r
306 jLabel.setBounds(new java.awt.Rectangle(29, 60, 366, 20));\r
307 jLabel.setText("Edit pathes for packages");\r
308 jContentPane = new JPanel();\r
309 jContentPane.setLayout(null);\r
310 jContentPane.add(getJTextArea(), null);\r
311 jContentPane.add(getJButtonCancel(), null);\r
312 jContentPane.add(getJButtonFinish(), null);\r
313 jContentPane.add(getJButtonPrevious(), null);\r
314 jContentPane.add(jLabel, null);\r
315 jContentPane.add(getJScrollPane(), null);\r
316 jContentPane.add(jLabel1, null);\r
317 jContentPane.add(getJScrollPane1(), null);\r
318 }\r
319 return jContentPane;\r
320 }\r
321\r
322 public void mouseClicked(MouseEvent e) {\r
323 if (e.getSource() == jButtonCancel) {\r
324 this.setVisible(false);\r
325 this.dispose();\r
326 } else if (e.getSource() == jButtonFinish) {\r
327 List<String> packageList = new ArrayList<String>();\r
328 List<String> platformList = new ArrayList<String>();\r
329 //\r
330 // Add some logic process here\r
331 // Guid Check, File Check etc.\r
332 //\r
333 Set<File> allNewPath = new LinkedHashSet<File>();\r
334 Map<PackageIdentification, File> packageMap = new LinkedHashMap<PackageIdentification, File>();\r
335 for (int i = 0; i < packageModel.getRowCount(); i++) {\r
336 File toFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar\r
337 + packageModel.getValueAt(i, 3));\r
338 if (!isPackagePathValid(toFile)) {\r
339 Log.err(packageVector.get(i) + " path already has package now. ");\r
340 return;\r
341 }\r
342 if (allNewPath.contains(toFile)) {\r
343 Log.err("Path " + packageModel.getValueAt(i, 3) + " is specified by twice. ");\r
344 return;\r
345 }\r
346 allNewPath.add(toFile);\r
347 File spdFile = new File((String) packageModel.getValueAt(i, 3) + File.separatorChar\r
348 + packageVector.get(i).getSpdFile().getName());\r
349 packageList.add(spdFile.getPath());\r
350 packageMap.put(packageVector.get(i), toFile);\r
351 }\r
352\r
353 Map<PlatformIdentification, File> platformMap = new LinkedHashMap<PlatformIdentification, File>();\r
354 for (int i = 0; i < platformModel.getRowCount(); i++) {\r
355 File toFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar\r
356 + platformModel.getValueAt(i, 3));\r
357 if (!isPlatformPathValid(toFile)) {\r
358 Log.err(platformVector.get(i) + " path already has platform now. ");\r
359 return;\r
360 }\r
361 File fpdFile = new File((String) platformModel.getValueAt(i, 3) + File.separatorChar\r
362 + platformVector.get(i).getFpdFile().getName());\r
363 platformList.add(fpdFile.getPath());\r
364 platformMap.put(platformVector.get(i), toFile);\r
365 }\r
366\r
367 //\r
368 //\r
369 //\r
370 Far far = stepOne.getFar();\r
371 try {\r
372 far.InstallFar(platformMap, packageMap);\r
373 //\r
374 // Add to database\r
375 //\r
376 WorkspaceTools wt = new WorkspaceTools();\r
377 wt.addFarToDb(packageList, platformList, far.mainfest.getHeader());\r
378 } catch (Exception ex) {\r
379 ex.printStackTrace();\r
380 Log.err("Install error. ");\r
381 return;\r
382 }\r
383\r
384 this.setVisible(false);\r
385 this.stepOne.returnType = DataType.RETURN_TYPE_OK;\r
386 this.dispose();\r
387 } else if (e.getSource() == jButtonPrevious) {\r
388 this.setVisible(false);\r
389 stepOne.setVisible(true);\r
390 }\r
391 }\r
392\r
393 private boolean isPackagePathValid(File spdFile) {\r
394 WorkspaceTools wt = new WorkspaceTools();\r
395 List<PackageIdentification> allPackages = wt.getAllPackages();\r
396 Iterator<PackageIdentification> iter = allPackages.iterator();\r
397\r
398 while (iter.hasNext()) {\r
399 PackageIdentification item = iter.next();\r
400 if (isPathContainMutual(spdFile, item.getSpdFile())) {\r
401 return false;\r
402 }\r
403 }\r
404 return true;\r
405 }\r
406\r
407 private boolean isPlatformPathValid(File fpdFile) {\r
408 WorkspaceTools wt = new WorkspaceTools();\r
409 List<PlatformIdentification> allPlatforms = wt.getAllPlatforms();\r
410 Iterator<PlatformIdentification> iter = allPlatforms.iterator();\r
411\r
412 while (iter.hasNext()) {\r
413 PlatformIdentification item = iter.next();\r
414 if (isPathContainMutual(fpdFile, item.getFpdFile())) {\r
415 return false;\r
416 }\r
417 }\r
418 return true;\r
419 }\r
420\r
421 private boolean isPathContainMutual(File path1, File path2) {\r
422 if (path1.getPath().startsWith(path2.getParent())) {\r
423 return true;\r
424 }\r
425 if (path2.getPath().startsWith(path1.getPath())) {\r
426 return true;\r
427 }\r
428 return false;\r
429 }\r
430\r
431 public void mousePressed(MouseEvent e) {\r
432 // TODO Auto-generated method stub\r
433\r
434 }\r
435\r
436 public void mouseReleased(MouseEvent e) {\r
437 // TODO Auto-generated method stub\r
438\r
439 }\r
440\r
441 public void mouseEntered(MouseEvent e) {\r
442 // TODO Auto-generated method stub\r
443\r
444 }\r
445\r
446 public void mouseExited(MouseEvent e) {\r
447 // TODO Auto-generated method stub\r
448\r
449 }\r
450\r
451}\r
452\r
453class PartialEditableTableModel extends DefaultTableModel {\r
454 /**\r
455 * \r
456 */\r
457 private static final long serialVersionUID = 1L;\r
458\r
459 public boolean isCellEditable(int row, int col) {\r
460 switch (col) {\r
461 case 3:\r
462 return true;\r
463 default:\r
464 return false;\r
465 }\r
466 }\r
467}\r