]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/installui/InstallStepOne.java
1. Adjust UI for far operations
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / far / installui / InstallStepOne.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.Dimension;\r
17import java.awt.Toolkit;\r
18import java.awt.event.MouseEvent;\r
19import java.awt.event.MouseListener;\r
20import java.io.File;\r
21import java.util.List;\r
22import java.util.jar.JarFile;\r
23import java.util.Iterator;\r
24\r
25import javax.swing.JFileChooser;\r
26import javax.swing.JPanel;\r
27import javax.swing.JButton;\r
28import javax.swing.JTextArea;\r
29import javax.swing.JLabel;\r
30import javax.swing.JTextField;\r
31import javax.swing.ListSelectionModel;\r
32\r
33import org.tianocore.frameworkwizard.common.DataType;\r
34import org.tianocore.frameworkwizard.common.IFileFilter;\r
35import org.tianocore.frameworkwizard.common.Log;\r
36import org.tianocore.frameworkwizard.common.Tools;\r
37import org.tianocore.frameworkwizard.common.ui.IDialog;\r
38import org.tianocore.frameworkwizard.common.ui.IFrame;\r
39import org.tianocore.frameworkwizard.far.DistributeRule;\r
40import org.tianocore.frameworkwizard.far.Far;\r
41import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
42import org.tianocore.frameworkwizard.workspace.Workspace;\r
43\r
44import javax.swing.JScrollPane;\r
45import javax.swing.JTable;\r
46import javax.swing.table.DefaultTableModel;\r
47\r
48public class InstallStepOne extends IDialog implements MouseListener {\r
49\r
50 /**\r
51 * \r
52 */\r
53 private static final long serialVersionUID = -8821906198791949544L;\r
54\r
55 private JPanel jContentPane = null;\r
56\r
57 private JButton jButtonCancel = null;\r
58\r
59 private JButton jButtonNext = null;\r
60\r
61 private JTextArea jTextArea = null;\r
62\r
63 private JLabel jLabel = null;\r
64\r
65 private JTextField jTextFieldFarFile = null;\r
66\r
67 private JButton jButtonBrowser = null;\r
68\r
69 private InstallStepTwo stepTwo = null;\r
70\r
71 Far far = null;\r
72\r
73 private JLabel jLabelWarning = null;\r
74\r
75 private JScrollPane jScrollPane = null;\r
76\r
77 private JTable jTable = null;\r
78\r
79 private PartialTableModel model = null;\r
80\r
81 /**\r
82 * This method initializes jButtonCancel \r
83 * \r
84 * @return javax.swing.JButton \r
85 */\r
86 private JButton getJButtonCancel() {\r
87 if (jButtonCancel == null) {\r
88 jButtonCancel = new JButton();\r
89 jButtonCancel.setBounds(new java.awt.Rectangle(570, 330, 90, 20));\r
90 jButtonCancel.setText("Cancel");\r
91 jButtonCancel.addMouseListener(this);\r
92 }\r
93 return jButtonCancel;\r
94 }\r
95\r
96 /**\r
97 * This method initializes jButtonNext \r
98 * \r
99 * @return javax.swing.JButton \r
100 */\r
101 private JButton getJButtonNext() {\r
102 if (jButtonNext == null) {\r
103 jButtonNext = new JButton();\r
104 jButtonNext.setBounds(new java.awt.Rectangle(470, 330, 90, 20));\r
105 jButtonNext.setText("Next");\r
106 jButtonNext.addMouseListener(this);\r
107 }\r
108 return jButtonNext;\r
109 }\r
110\r
111 /**\r
112 * This method initializes jTextArea \r
113 * \r
114 * @return javax.swing.JTextArea \r
115 */\r
116 private JTextArea getJTextArea() {\r
117 if (jTextArea == null) {\r
118 jTextArea = new JTextArea();\r
119 jTextArea.setBounds(new java.awt.Rectangle(30, 7, 642, 50));\r
120 jTextArea.setText("Step 1: Choose a framework archive(FAR) file. \n");\r
121 jTextArea.setEditable(false);\r
122 }\r
123 return jTextArea;\r
124 }\r
125\r
126 /**\r
127 * This method initializes jTextField \r
128 * \r
129 * @return javax.swing.JTextField \r
130 */\r
131 private JTextField getJTextFieldFarFile() {\r
132 if (jTextFieldFarFile == null) {\r
133 jTextFieldFarFile = new JTextField();\r
a45e9a40 134 jTextFieldFarFile.setBounds(new java.awt.Rectangle(140, 80, 423, 20));\r
5a24e806 135 }\r
136 return jTextFieldFarFile;\r
137 }\r
138\r
139 /**\r
140 * This method initializes jButtonBrowser \r
141 * \r
142 * @return javax.swing.JButton \r
143 */\r
144 private JButton getJButtonBrowser() {\r
145 if (jButtonBrowser == null) {\r
146 jButtonBrowser = new JButton();\r
a45e9a40 147 jButtonBrowser.setBounds(new java.awt.Rectangle(570, 80, 100, 20));\r
5a24e806 148 jButtonBrowser.setText("Browser...");\r
149 jButtonBrowser.addMouseListener(this);\r
150 }\r
151 return jButtonBrowser;\r
152 }\r
153\r
154 /**\r
155 * This method initializes jScrollPane \r
156 * \r
157 * @return javax.swing.JScrollPane \r
158 */\r
159 private JScrollPane getJScrollPane() {\r
160 if (jScrollPane == null) {\r
161 jScrollPane = new JScrollPane();\r
a45e9a40 162 jScrollPane.setBounds(new java.awt.Rectangle(30, 165, 642, 140));\r
5a24e806 163 jScrollPane.setViewportView(getJTable());\r
164 }\r
165 jScrollPane.setVisible(false);\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 getJTable() {\r
175 if (jTable == null) {\r
176 jTable = new JTable();\r
177 model = new PartialTableModel();\r
178 jTable = new JTable(model);\r
179 jTable.setRowHeight(20);\r
180 jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
181 model.addColumn("Name");\r
182 model.addColumn("Version");\r
183 model.addColumn("GUID");\r
184\r
185 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
186 }\r
187 jTable.setVisible(false);\r
188 return jTable;\r
189 }\r
190\r
191 public void prepareTable(List<PackageIdentification> packageList) {\r
192 model.setRowCount(0);\r
193 //\r
194 // Change here to get packages and platforms from FAR\r
195 //\r
196 Iterator<PackageIdentification> iter = packageList.iterator();\r
197 while (iter.hasNext()) {\r
198 String[] str = new String[3];\r
199 PackageIdentification item = iter.next();\r
200 str[0] = item.getName();\r
201 str[1] = item.getVersion();\r
202 str[2] = item.getGuid();\r
203 model.addRow(str);\r
204 }\r
205 }\r
206\r
207 /**\r
208 * This is the default constructor\r
209 */\r
210 public InstallStepOne(IFrame iFrame, boolean modal) {\r
211 super(iFrame, modal);\r
212 initialize();\r
213 }\r
214\r
215 /**\r
216 * This method initializes this\r
217 * \r
218 * @return void\r
219 */\r
220 private void initialize() {\r
221 this.setSize(700, 400);\r
222 this.setContentPane(getJContentPane());\r
223 this.setTitle("Install Framework Archive(FAR) - Step 1: Choose FAR file");\r
224 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
225 this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);\r
226 }\r
227\r
228 /**\r
229 * This method initializes jContentPane\r
230 * \r
231 * @return javax.swing.JPanel\r
232 */\r
233 private JPanel getJContentPane() {\r
234 if (jContentPane == null) {\r
235 jLabelWarning = new JLabel();\r
a45e9a40 236 jLabelWarning.setBounds(new java.awt.Rectangle(30, 125, 410, 20));\r
5a24e806 237 jLabelWarning.setText("Can't install this FAR, lack following packages in current workspace");\r
238 jLabelWarning.setVisible(false);\r
239 jLabel = new JLabel();\r
a45e9a40 240 jLabel.setBounds(new java.awt.Rectangle(30, 80, 97, 20));\r
5a24e806 241 jLabel.setText("Choose FAR file: ");\r
242 jContentPane = new JPanel();\r
243 jContentPane.setLayout(null);\r
244 jContentPane.add(getJButtonCancel(), null);\r
245 jContentPane.add(getJButtonNext(), null);\r
246 jContentPane.add(getJTextArea(), null);\r
247 jContentPane.add(jLabel, null);\r
248 jContentPane.add(getJTextFieldFarFile(), null);\r
249 jContentPane.add(getJButtonBrowser(), null);\r
250 jContentPane.add(jLabelWarning, null);\r
251 jContentPane.add(getJScrollPane(), null);\r
252 }\r
253 return jContentPane;\r
254 }\r
255\r
256 public void mouseClicked(MouseEvent e) {\r
257 if (e.getSource() == jButtonCancel) {\r
258 this.setVisible(false);\r
259 } else if (e.getSource() == jButtonNext) {\r
260 //\r
261 // Add some logic process here\r
262 //\r
263 File farFile = new File(jTextFieldFarFile.getText());\r
264 if (!farFile.exists() || !farFile.isFile()) {\r
265 Log.err("Please choose a FAR file already exists. ");\r
266 return;\r
267 }\r
268\r
269 //\r
270 // Verify Far\r
271 //\r
272 JarFile jarFar;\r
273 try {\r
274 jarFar = new JarFile(farFile);\r
275 far = new Far(jarFar);\r
276\r
277 //\r
278 // Far dependency check\r
279 //\r
280 List<PackageIdentification> pkgIdList = DistributeRule.installFarCheck(far);\r
281\r
282 if (pkgIdList.size() > 0) {\r
283 prepareTable(pkgIdList);\r
284 jLabelWarning.setVisible(true);\r
285 jTable.setVisible(true);\r
286 jScrollPane.setVisible(true);\r
287 return;\r
288 }\r
289\r
290 } catch (Exception exp) {\r
291 exp.printStackTrace();\r
292 Log.err("Far file invaild! The error message as follow:" + exp.getMessage());\r
293 }\r
294\r
295 if (stepTwo == null) {\r
296 stepTwo = new InstallStepTwo(this, true, this);\r
297 }\r
298 this.setVisible(false);\r
299\r
300 //\r
301 // Refresh table\r
302 //\r
303 stepTwo.preparePackageTable();\r
304 stepTwo.preparePlatformTable();\r
305 stepTwo.setVisible(true);\r
306 } else if (e.getSource() == jButtonBrowser) {\r
307 JFileChooser fc = new JFileChooser();\r
308 fc.setAcceptAllFileFilterUsed(false);\r
309 fc.addChoosableFileFilter(new IFileFilter(DataType.FAR_SURFACE_AREA_EXT));\r
310 fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace()));\r
311\r
312 int result = fc.showSaveDialog(new JPanel());\r
313 if (result == JFileChooser.APPROVE_OPTION) {\r
314 jLabelWarning.setVisible(false);\r
315 jTable.setVisible(false);\r
316 jScrollPane.setVisible(false);\r
317 this.jTextFieldFarFile.setText(Tools.addPathExt(fc.getSelectedFile().getPath(),\r
318 DataType.RETURN_TYPE_FAR_SURFACE_AREA));\r
319 }\r
320 }\r
321 }\r
322\r
323 public void mousePressed(MouseEvent e) {\r
324 // TODO Auto-generated method stub\r
325\r
326 }\r
327\r
328 public void mouseReleased(MouseEvent e) {\r
329 // TODO Auto-generated method stub\r
330\r
331 }\r
332\r
333 public void mouseEntered(MouseEvent e) {\r
334 // TODO Auto-generated method stub\r
335\r
336 }\r
337\r
338 public void mouseExited(MouseEvent e) {\r
339 // TODO Auto-generated method stub\r
340\r
341 }\r
342\r
343 public Far getFar() {\r
344 return far;\r
345 }\r
346\r
347}\r
348\r
349class PartialTableModel extends DefaultTableModel {\r
350 /**\r
351 * \r
352 */\r
353 private static final long serialVersionUID = 1L;\r
354\r
355 public boolean isCellEditable(int row, int col) {\r
356 switch (col) {\r
357 default:\r
358 return false;\r
359 }\r
360 }\r
361}\r