KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > izforge > izpack > panels > InstallPanel


1 /*
2  * IzPack - Copyright 2001-2007 Julien Ponge, All Rights Reserved.
3  *
4  * http://www.izforge.com/izpack/
5  * http://developer.berlios.de/projects/izpack/
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */

19
20 package com.izforge.izpack.panels;
21
22 import java.awt.Dimension JavaDoc;
23
24 import javax.swing.JLabel JavaDoc;
25 import javax.swing.JOptionPane JavaDoc;
26 import javax.swing.JProgressBar JavaDoc;
27 import javax.swing.SwingUtilities JavaDoc;
28
29 import com.izforge.izpack.gui.IzPanelLayout;
30 import com.izforge.izpack.gui.LabelFactory;
31 import com.izforge.izpack.installer.InstallData;
32 import com.izforge.izpack.installer.InstallerFrame;
33 import com.izforge.izpack.installer.IzPanel;
34 import com.izforge.izpack.util.AbstractUIProgressHandler;
35
36 /**
37  * The install panel class. Launches the actual installation job.
38  *
39  * @author Julien Ponge
40  */

41 public class InstallPanel extends IzPanel implements AbstractUIProgressHandler
42 {
43
44     private static final long serialVersionUID = 3257282547959410992L;
45
46     /** The tip label. */
47     protected JLabel JavaDoc tipLabel;
48
49     /** The operation label . */
50     protected JLabel JavaDoc packOpLabel;
51
52     /** The operation label . */
53     protected JLabel JavaDoc overallOpLabel;
54
55     /** The pack progress bar. */
56     protected JProgressBar JavaDoc packProgressBar;
57
58     /** The progress bar. */
59     protected JProgressBar JavaDoc overallProgressBar;
60
61     /** True if the installation has been done. */
62     private volatile boolean validated = false;
63
64     /** How many packs we are going to install. */
65     private int noOfPacks = 0;
66
67     /**
68      * The constructor.
69      *
70      * @param parent The parent window.
71      * @param idata The installation data.
72      */

73     public InstallPanel(InstallerFrame parent, InstallData idata)
74     {
75         super(parent, idata, new IzPanelLayout());
76         this.tipLabel = LabelFactory.create(parent.langpack.getString("InstallPanel.tip"),
77                 parent.icons.getImageIcon("information"), LEADING);
78         add(this.tipLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
79         packOpLabel = LabelFactory.create(" ", LEADING);
80         add(packOpLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
81
82         packProgressBar = new JProgressBar JavaDoc();
83         packProgressBar.setStringPainted(true);
84         packProgressBar.setString(parent.langpack.getString("InstallPanel.begin"));
85         packProgressBar.setValue(0);
86         add(packProgressBar, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
87         // make sure there is some space between the progress bars
88
add(IzPanelLayout.createParagraphGap());
89
90         overallOpLabel = LabelFactory.create(parent.langpack.getString("InstallPanel.progress"),
91                 parent.icons.getImageIcon("information"), LEADING);
92         add(this.overallOpLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
93
94         overallProgressBar = new JProgressBar JavaDoc();
95         overallProgressBar.setStringPainted(true);
96         overallProgressBar.setString("");
97         overallProgressBar.setValue(0);
98         add(this.overallProgressBar, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
99         getLayoutHelper().completeLayout();
100         
101     }
102
103     /**
104      * Indicates wether the panel has been validated or not.
105      *
106      * @return The validation state.
107      */

108     public boolean isValidated()
109     {
110         return this.validated;
111     }
112
113     /** The unpacker starts. */
114     public void startAction(String JavaDoc name, int noOfJobs)
115     {
116         this.noOfPacks = noOfJobs;
117         SwingUtilities.invokeLater(new Runnable JavaDoc() {
118             public void run()
119             {
120                 parent.blockGUI();
121                 
122                 // figure out how many packs there are to install
123
overallProgressBar.setMinimum(0);
124                 overallProgressBar.setMaximum(noOfPacks);
125                 overallProgressBar.setString("0 / " + Integer.toString(noOfPacks));
126             }
127         });
128     }
129
130     /**
131      * An error was encountered.
132      *
133      * @param error The error text.
134      */

135     public void emitError(String JavaDoc title, String JavaDoc error)
136     {
137         this.packOpLabel.setText(error);
138         idata.installSuccess = false;
139         JOptionPane.showMessageDialog(this, error, parent.langpack.getString("installer.error"),
140                 JOptionPane.ERROR_MESSAGE);
141     }
142
143     /** The unpacker stops. */
144     public void stopAction()
145     {
146         SwingUtilities.invokeLater(new Runnable JavaDoc() {
147             public void run()
148             {
149                 parent.releaseGUI();
150                 parent.lockPrevButton();
151                 
152                 // With custom actions it is possible, that the current value
153
// is not max - 1. Therefore we use always max for both
154
// progress bars to signal finish state.
155
overallProgressBar.setValue(overallProgressBar.getMaximum());
156                 int ppbMax = packProgressBar.getMaximum();
157                 if (ppbMax < 1)
158                 {
159                     ppbMax = 1;
160                     packProgressBar.setMaximum(ppbMax);
161                 }
162                 packProgressBar.setValue(ppbMax);
163
164                 packProgressBar.setString(parent.langpack.getString("InstallPanel.finished"));
165                 packProgressBar.setEnabled(false);
166                 String JavaDoc no_of_packs = Integer.toString(noOfPacks);
167                 overallProgressBar.setString(no_of_packs + " / " + no_of_packs);
168                 overallProgressBar.setEnabled(false);
169                 packOpLabel.setText(" ");
170                 packOpLabel.setEnabled(false);
171                 idata.canClose = true;
172                 validated = true;
173                 if (idata.panels.indexOf(this) != (idata.panels.size() - 1)) parent.unlockNextButton();
174             }
175         });
176     }
177
178     /**
179      * Normal progress indicator.
180      *
181      * @param val The progression value.
182      * @param msg The progression message.
183      */

184     public void progress(final int val, final String JavaDoc msg)
185     {
186         SwingUtilities.invokeLater(new Runnable JavaDoc() {
187             public void run()
188             {
189                 packProgressBar.setValue(val + 1);
190                 packOpLabel.setText(msg);
191             }
192         });
193     }
194
195     /**
196      * Pack changing.
197      *
198      * @param packName The pack name.
199      * @param stepno The number of the pack.
200      * @param max The new maximum progress.
201      */

202     public void nextStep(final String JavaDoc packName, final int stepno, final int max)
203     {
204         SwingUtilities.invokeLater(new Runnable JavaDoc() {
205             public void run()
206             {
207                 packProgressBar.setValue(0);
208                 packProgressBar.setMinimum(0);
209                 packProgressBar.setMaximum(max);
210                 packProgressBar.setString(packName);
211                 overallProgressBar.setValue(stepno - 1);
212                 overallProgressBar.setString(Integer.toString(stepno) + " / "
213                         + Integer.toString(noOfPacks));
214             }
215         });
216     }
217
218     /** Called when the panel becomes active. */
219     public void panelActivate()
220     {
221         // We clip the panel
222
Dimension JavaDoc dim = parent.getPanelsContainerSize();
223         dim.width -= (dim.width / 4);
224         dim.height = 150;
225         setMinimumSize(dim);
226         setMaximumSize(dim);
227         setPreferredSize(dim);
228         parent.lockNextButton();
229
230         parent.install(this);
231     }
232
233 }
234
Popular Tags