]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepTwo.java
Fixed grammar in text messages.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / far / updateui / UpdateStepTwo.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.updateui;\r
15\r
16import java.awt.Dimension;\r
17import java.awt.Toolkit;\r
18import java.awt.event.MouseEvent;\r
19import java.awt.event.MouseListener;\r
1898a0c3 20import java.io.File;\r
21import java.util.ArrayList;\r
5a24e806 22import java.util.Iterator;\r
1898a0c3 23import java.util.LinkedHashSet;\r
5a24e806 24import java.util.List;\r
1898a0c3 25import java.util.Set;\r
26import java.util.Vector;\r
5a24e806 27\r
28import javax.swing.JPanel;\r
29import javax.swing.JTextArea;\r
30import javax.swing.JButton;\r
31import javax.swing.JScrollPane;\r
32import javax.swing.JLabel;\r
33import javax.swing.JTable;\r
34import javax.swing.ListSelectionModel;\r
35import javax.swing.table.DefaultTableModel;\r
36\r
ef6e2efe 37import org.tianocore.frameworkwizard.common.DataType;\r
1898a0c3 38import org.tianocore.frameworkwizard.common.Log;\r
5a24e806 39import org.tianocore.frameworkwizard.common.Tools;\r
40import org.tianocore.frameworkwizard.common.ui.IDialog;\r
41import org.tianocore.frameworkwizard.far.AggregationOperation;\r
1898a0c3 42import org.tianocore.frameworkwizard.far.DistributeRule;\r
5a24e806 43import org.tianocore.frameworkwizard.far.Far;\r
2e39c718 44import org.tianocore.frameworkwizard.far.FarStringDefinition;\r
5a24e806 45import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
1898a0c3 46import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
5a24e806 47import org.tianocore.frameworkwizard.workspace.Workspace;\r
48import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
49\r
50public class UpdateStepTwo extends IDialog implements MouseListener {\r
51\r
52 /**\r
53 * \r
54 */\r
55 private static final long serialVersionUID = -4400145363721213110L;\r
56\r
57 private JPanel jContentPane = null;\r
58\r
59 private JTextArea jTextArea = null;\r
60\r
61 private UpdateStepOne stepOne = null;\r
62\r
63 private JButton jButtonCancel = null;\r
64\r
65 private JButton jButtonFinish = null;\r
66\r
67 private JButton jButtonPrevious = null;\r
68\r
69 private JScrollPane jScrollPane = null;\r
70\r
71 private JLabel jLabel = null;\r
72\r
73 private JTable jTablePackage = null;\r
74\r
75 private PartialTableModel model = null;\r
ef6e2efe 76\r
77 List<PackageIdentification> updatPkgList = new ArrayList<PackageIdentification>();\r
5a24e806 78\r
79 public UpdateStepTwo(IDialog iDialog, boolean modal, UpdateStepOne stepOne) {\r
80 this(iDialog, modal);\r
81 this.stepOne = stepOne;\r
82 }\r
83\r
84 /**\r
85 * This method initializes jTextArea \r
86 * \r
87 * @return javax.swing.JTextArea \r
88 */\r
89 private JTextArea getJTextArea() {\r
90 if (jTextArea == null) {\r
91 jTextArea = new JTextArea();\r
92 jTextArea.setBounds(new java.awt.Rectangle(30, 7, 642, 50));\r
93 jTextArea.setText("Step 2: Summary. \n");\r
94 jTextArea.setEditable(false);\r
95 }\r
96 return jTextArea;\r
97 }\r
98\r
99 /**\r
100 * This method initializes jButtonCancel \r
101 * \r
102 * @return javax.swing.JButton \r
103 */\r
104 private JButton getJButtonCancel() {\r
105 if (jButtonCancel == null) {\r
106 jButtonCancel = new JButton();\r
107 jButtonCancel.setBounds(new java.awt.Rectangle(570, 330, 90, 20));\r
108 jButtonCancel.setText("Cancel");\r
109 jButtonCancel.addMouseListener(this);\r
110 }\r
111 return jButtonCancel;\r
112 }\r
113\r
114 /**\r
115 * This method initializes jButtonFinish \r
116 * \r
117 * @return javax.swing.JButton \r
118 */\r
119 private JButton getJButtonFinish() {\r
120 if (jButtonFinish == null) {\r
121 jButtonFinish = new JButton();\r
122 jButtonFinish.setBounds(new java.awt.Rectangle(470, 330, 90, 20));\r
123 jButtonFinish.setText("Finish");\r
124 jButtonFinish.addMouseListener(this);\r
125 }\r
126 return jButtonFinish;\r
127 }\r
128\r
129 /**\r
130 * This method initializes jButtonPrevious \r
131 * \r
132 * @return javax.swing.JButton \r
133 */\r
134 private JButton getJButtonPrevious() {\r
135 if (jButtonPrevious == null) {\r
136 jButtonPrevious = new JButton();\r
137 jButtonPrevious.setBounds(new java.awt.Rectangle(370, 330, 90, 20));\r
138 jButtonPrevious.setText("Previous");\r
139 jButtonPrevious.addMouseListener(this);\r
140 }\r
141 return jButtonPrevious;\r
142 }\r
143\r
144 /**\r
145 * This method initializes jScrollPane \r
146 * \r
147 * @return javax.swing.JScrollPane \r
148 */\r
149 private JScrollPane getJScrollPane() {\r
150 if (jScrollPane == null) {\r
151 jScrollPane = new JScrollPane();\r
a45e9a40 152 jScrollPane.setBounds(new java.awt.Rectangle(30, 100, 642, 170));\r
5a24e806 153 jScrollPane.setViewportView(getJTablePackage());\r
154 }\r
155 return jScrollPane;\r
156 }\r
157\r
158 /**\r
159 * This method initializes jTablePackage \r
160 * \r
161 * @return javax.swing.JTable \r
162 */\r
163 private JTable getJTablePackage() {\r
164 if (jTablePackage == null) {\r
165 jTablePackage = new JTable();\r
166 model = new PartialTableModel();\r
167 jTablePackage = new JTable(model);\r
168 jTablePackage.setRowHeight(20);\r
169 jTablePackage.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
170 model.addColumn("Name");\r
171 model.addColumn("Version");\r
172 model.addColumn("Guid");\r
173 model.addColumn("Path");\r
174\r
175 jTablePackage.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
176 }\r
177 return jTablePackage;\r
178 }\r
179\r
180 public void prepareTable() {\r
181 model.setRowCount(0);\r
182 try {\r
183 Far far = stepOne.getFar();\r
184 List<PackageIdentification> packagesInFar = far.mainfest.getPackageList();\r
185\r
186 WorkspaceTools wt = new WorkspaceTools();\r
187 List<PackageIdentification> packagesInDb = wt.getAllPackages();\r
188\r
ef6e2efe 189 updatPkgList = AggregationOperation.intersection(packagesInDb, packagesInFar);\r
5a24e806 190 //\r
191 // Change here to get packages and platforms from FAR\r
192 //\r
ef6e2efe 193 Iterator<PackageIdentification> iter = updatPkgList.iterator();//packageList.iterator();\r
194 while (iter.hasNext()) {\r
195 String[] str = new String[4];\r
196 PackageIdentification item = iter.next();\r
197 str[0] = item.getName();\r
198 str[1] = item.getVersion();\r
199 str[2] = item.getGuid();\r
200 str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));\r
201 model.addRow(str);\r
202 }\r
203 } catch (Exception ex) {\r
204 ex.printStackTrace();\r
205 }\r
5a24e806 206 }\r
207\r
208 /**\r
209 * This is the default constructor\r
210 */\r
211 public UpdateStepTwo(IDialog iDialog, boolean modal) {\r
212 super(iDialog, modal);\r
213 initialize();\r
214 }\r
215\r
216 /**\r
217 * This method initializes this\r
218 * \r
219 * @return void\r
220 */\r
221 private void initialize() {\r
222 this.setSize(700, 400);\r
223 this.setContentPane(getJContentPane());\r
2e39c718 224 this.setTitle(FarStringDefinition.UPDATE_STEP_TWO_TITLE);\r
5a24e806 225 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
226 this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);\r
227 }\r
228\r
ef6e2efe 229 /**\r
230 * This method initializes jContentPane\r
231 * \r
232 * @return javax.swing.JPanel\r
233 */\r
234 private JPanel getJContentPane() {\r
235 if (jContentPane == null) {\r
236 jLabel = new JLabel();\r
237 jLabel.setBounds(new java.awt.Rectangle(30, 70, 281, 20));\r
238 jLabel.setText("Following packages will be updated: ");\r
239 jContentPane = new JPanel();\r
240 jContentPane.setLayout(null);\r
241 jContentPane.add(getJTextArea(), null);\r
242 jContentPane.add(getJButtonCancel(), null);\r
243 jContentPane.add(getJButtonFinish(), null);\r
244 jContentPane.add(getJButtonPrevious(), null);\r
245 jContentPane.add(getJScrollPane(), null);\r
246 jContentPane.add(jLabel, null);\r
1898a0c3 247 }\r
ef6e2efe 248 return jContentPane;\r
249 }\r
250\r
251 public void mouseClicked(MouseEvent e) {\r
252 if (e.getSource() == jButtonCancel) {\r
253 this.setVisible(false);\r
254 } else if (e.getSource() == jButtonFinish) {\r
255 //\r
256 // Check depedency ?\r
257 //\r
258 WorkspaceTools wsTools = new WorkspaceTools();\r
259\r
260 Iterator<PackageIdentification> iter = updatPkgList.iterator();\r
261 List<PackageIdentification> depResultList = new ArrayList<PackageIdentification>();\r
262 while (iter.hasNext()) {\r
263 List<PackageIdentification> depPkgList = stepOne.getFar().getPackageDependencies(iter.next());\r
264 depResultList = AggregationOperation.union(depResultList, depPkgList);\r
265 }\r
266\r
267 List<PackageIdentification> dbPkgList = DistributeRule.vectorToList(wsTools.getAllPackages());\r
268 List<PackageIdentification> resultList = AggregationOperation\r
269 .minus(\r
270 depResultList,\r
271 AggregationOperation\r
272 .union(\r
273 this.updatPkgList,\r
274 dbPkgList));\r
275 Iterator resultIter = resultList.iterator();\r
276 while (resultIter.hasNext()) {\r
ed1665f2 277 Log.wrn("Update far", "Missing dependency package " + ((PackageIdentification) resultIter.next()).toString()\r
156ed4d0 278 + " in workspace!");\r
ef6e2efe 279 return;\r
280 }\r
281\r
282 //\r
283 // Remove all update packages\r
284 //\r
285 //\r
286 // For all packages, remove all files. \r
287 // Exception FPD file still in DB\r
288 //\r
289 Vector<PlatformIdentification> allPlatforms = wsTools.getAllPlatforms();\r
290 Set<File> allPlatformFiles = new LinkedHashSet<File>();\r
291\r
292 Iterator<PlatformIdentification> allPlfIter = allPlatforms.iterator();\r
293 while (iter.hasNext()) {\r
294 allPlatformFiles.add(allPlfIter.next().getFpdFile());\r
295 }\r
296\r
297 Iterator<PackageIdentification> packageIter = this.updatPkgList.iterator();\r
298 while (packageIter.hasNext()) {\r
299 PackageIdentification item = packageIter.next();\r
300 Set<File> deleteFiles = new LinkedHashSet<File>();\r
301 recursiveDir(deleteFiles, item.getSpdFile().getParentFile(), allPlatformFiles);\r
302 Iterator<File> iterDeleteFile = deleteFiles.iterator();\r
303 while (iterDeleteFile.hasNext()) {\r
304 deleteFiles(iterDeleteFile.next());\r
305 }\r
306 //\r
307 // Remove all empty parent dir\r
308 //\r
309 File parentDir = item.getSpdFile().getParentFile();\r
310 while (parentDir.listFiles().length == 0) {\r
311 File tempFile = parentDir;\r
312 parentDir = parentDir.getParentFile();\r
313 tempFile.delete();\r
314 }\r
315 }\r
316\r
317 //\r
318 // Install all update packages\r
319 //\r
320 Iterator<PackageIdentification> updataIter = this.updatPkgList.iterator();\r
321 while (updataIter.hasNext()) {\r
322 PackageIdentification pkgId = updataIter.next();\r
323 try {\r
324 stepOne.getFar().installPackage(pkgId, new File(pkgId.getSpdFile().getParent()));\r
325 } catch (Exception ex) {\r
ed1665f2 326 Log.wrn("Install " + pkgId.toString(), ex.getMessage());\r
327 Log.err("Install " + pkgId.toString(), ex.getMessage());\r
ef6e2efe 328 }\r
329\r
330 }\r
331 this.stepOne.returnType = DataType.RETURN_TYPE_OK;\r
332\r
333 this.setVisible(false);\r
334 this.dispose();\r
335 } else if (e.getSource() == jButtonPrevious) {\r
336 this.setVisible(false);\r
337 stepOne.setVisible(true);\r
5a24e806 338 }\r
339 }\r
ef6e2efe 340\r
341 public void mousePressed(MouseEvent e) {\r
342 // TODO Auto-generated method stub\r
343\r
344 }\r
345\r
346 public void mouseReleased(MouseEvent e) {\r
347 // TODO Auto-generated method stub\r
348\r
5a24e806 349 }\r
ef6e2efe 350\r
351 public void mouseEntered(MouseEvent e) {\r
352 // TODO Auto-generated method stub\r
353\r
354 }\r
355\r
356 public void mouseExited(MouseEvent e) {\r
357 // TODO Auto-generated method stub\r
358\r
359 }\r
360\r
361 private void recursiveDir(Set<File> files, File dir, Set<File> platformFiles) {\r
362 File[] fileList = dir.listFiles();\r
363 for (int i = 0; i < fileList.length; i++) {\r
364 if (fileList[i].isFile()) {\r
365 if (!platformFiles.contains(fileList[i])) {\r
366 files.add(fileList[i]);\r
367 }\r
368 } else {\r
369 if (isContain(fileList[i], platformFiles)) {\r
370 recursiveDir(files, fileList[i], platformFiles);\r
371 } else {\r
372 files.add(fileList[i]);\r
373 }\r
374 }\r
1898a0c3 375 }\r
5a24e806 376 }\r
ef6e2efe 377\r
1898a0c3 378 private void deleteFiles(File file) {\r
ef6e2efe 379 if (file.isDirectory()) {\r
380 File[] files = file.listFiles();\r
381 for (int i = 0; i < files.length; i++) {\r
382 deleteFiles(files[i]);\r
383 }\r
1898a0c3 384 }\r
ef6e2efe 385 file.delete();\r
5a24e806 386 }\r
ef6e2efe 387\r
1898a0c3 388 private boolean isContain(File dir, Set<File> platformFiles) {\r
ef6e2efe 389 Iterator<File> iter = platformFiles.iterator();\r
390 while (iter.hasNext()) {\r
391 File file = iter.next();\r
392 if (file.getPath().startsWith(dir.getPath())) {\r
393 //\r
394 // continue this FPD file\r
395 //\r
396 return true;\r
397 }\r
1898a0c3 398 }\r
ef6e2efe 399 return false;\r
5a24e806 400 }\r
ef6e2efe 401}\r
5a24e806 402\r
403class PartialTableModel extends DefaultTableModel {\r
ef6e2efe 404 /**\r
405 * \r
406 */\r
407 private static final long serialVersionUID = 1L;\r
408\r
409 public boolean isCellEditable(int row, int col) {\r
410 switch (col) {\r
411 case 3:\r
412 return false;\r
413 default:\r
414 return false;\r
415 }\r
416 }\r
5a24e806 417}\r