source: release-kits/shared/ant-installer/src/org/tp23/antinstaller/renderer/swing/SwingPageRenderer.java@ 15210

Last change on this file since 15210 was 15210, checked in by oranfry, 16 years ago

Lots of changes to the installer. Now only look in LanguagePack resource bundle for strings.

File size: 8.5 KB
Line 
1/*
2 * Copyright 2005 Paul Hinds
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.tp23.antinstaller.renderer.swing;
17
18import java.awt.BorderLayout;
19import java.awt.Color;
20import java.awt.Dimension;
21import java.awt.Font;
22import java.awt.GridLayout;
23import java.awt.event.ActionEvent;
24import java.awt.event.ActionListener;
25import java.io.ByteArrayOutputStream;
26import java.io.InputStream;
27import java.util.ResourceBundle;
28
29import javax.swing.BorderFactory;
30import javax.swing.ImageIcon;
31import javax.swing.JButton;
32import javax.swing.JLabel;
33import javax.swing.JPanel;
34import javax.swing.border.Border;
35
36import org.tp23.antinstaller.InstallerContext;
37import org.tp23.antinstaller.ValidationException;
38import org.tp23.antinstaller.page.Page;
39
40/**
41 *
42 * <p>Abstract super class for page renderers. setPage will always be called. </p>
43 * <p>Subclasses should implement instanceInit for initialising swing components
44 * on the page. </p>
45 * @author Paul Hinds
46 * @version $Id: SwingPageRenderer.java,v 1.10 2007/01/19 00:24:35 teknopaul Exp $
47 */
48public abstract class SwingPageRenderer
49 extends JPanel {
50
51 private static final ResourceBundle res = ResourceBundle.getBundle("resources.LanguagePack");
52
53 // gui components
54 private BorderLayout borderLayout1 = new BorderLayout();
55
56 // holds the next back buttons etc
57 private JPanel controlPanel = new JPanel();
58
59 private JButton backButton = new JButton();
60 private JButton cancelButton = new JButton();
61 private JButton nextButton = new JButton();
62 private JButton finishButton = new JButton();
63
64 public JPanel masterPanel = new JPanel( new BorderLayout() );
65
66 private JPanel titlePanel = new JPanel();
67 private JLabel titleLabel = new JLabel();
68 private JLabel imagePanel = new JLabel(); // Graphic for the installer
69 private GridLayout titleLayout = new GridLayout();
70
71 // app components
72 protected Page page;
73 protected SwingInstallerContext swingCtx;
74 protected InstallerContext ctx;
75 protected PageCompletionListener listener;
76 private Border bevelBorder;
77
78
79 private static Font titleFont;
80 static{
81 titleFont = new JLabel().getFont();
82 try {
83 titleFont = new Font(titleFont.getFamily(), Font.BOLD, 14);
84 }
85 catch (Exception ex) {
86 // lets not fail due to font errors
87 }
88 }
89
90 public SwingPageRenderer(){
91 super();
92 }
93 public void setPage(Page page){
94 this.page = page;
95 try {
96 jbInit();
97 }
98 catch (Exception e) {
99 ctx.log(e.getMessage());
100 if(ctx.getInstaller().isVerbose()) {
101 ctx.log(e);
102 }
103 }
104 }
105
106 public void setContext(SwingInstallerContext swingCtx){
107 this.ctx = swingCtx.getInstallerContext();
108 this.swingCtx = swingCtx;
109 }
110
111
112 private void jbInit() throws Exception {
113
114 this.setDoubleBuffered(true);
115 //emptyBorder = BorderFactory.createEmptyBorder(2,5,2,2);
116 //bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(116, 116, 112),new Color(166, 166, 161)),BorderFactory.createEmptyBorder(2,SwingInputFieldRenderer.LEFT_INDENT,2,2));
117 bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black,1),BorderFactory.createEmptyBorder(2,SizeConstants.LEFT_INDENT,2,2));
118 bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),BorderFactory.createEmptyBorder(2,SizeConstants.LEFT_INDENT,2,2));
119 Border tripleBorder = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(3,4,1,4),bevelBorder);
120 this.setLayout(borderLayout1);
121 titleLabel.setBorder(tripleBorder);
122 controlPanel.setBorder(tripleBorder);
123
124 masterPanel.add(titlePanel, BorderLayout.NORTH);
125 this.add(masterPanel, BorderLayout.NORTH);
126 this.add(controlPanel, BorderLayout.SOUTH);
127
128 // title panel
129 titlePanel.add(imagePanel, null);
130 titlePanel.add(titleLabel, null);
131
132 titlePanel.setLayout(titleLayout);
133 titleLayout.setColumns(1);
134 titleLayout.setHgap(0);
135 titleLayout.setRows(2);
136 titleLayout.setVgap(2);
137 titlePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
138 titlePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
139 titlePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
140
141 titleLabel.setText(page.getDisplayText());
142 titleLabel.setFont(titleFont);
143 setImage(page.getImageResource());
144 imagePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
145 imagePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
146 imagePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
147
148 // Ctrl Panel
149 controlPanel.add(cancelButton, null);
150 controlPanel.add(backButton, null);
151 controlPanel.add(nextButton, null);
152 controlPanel.add(finishButton, null);
153 backButton.setText(res.getString("backButton"));// "<< Back");
154 cancelButton.setText(res.getString("cancelButton"));// "Cancel");
155 nextButton.setText(res.getString("nextButton"));// "Next >>");
156 finishButton.setText(ctx.getInstaller().getFinishButtonText());
157 finishButton.setEnabled(false);
158 setEventListeners();
159 setIcons();
160 }
161 public abstract void instanceInit() throws Exception ;
162 public abstract void updateInputFields();
163 public abstract void updateDefaultValues();
164 public abstract boolean validateFields()throws ValidationException;
165
166 public void setPageCompletionListener(PageCompletionListener listener){
167 this.listener = listener;
168 }
169
170 private void setImage(String resource) throws Exception{
171 if(resource == null){
172 resource = ctx.getInstaller().getDefaultImageResource();
173 }
174 ImageIcon icon = getImage(resource);
175 imagePanel.setIcon(icon);
176 }
177
178 protected ImageIcon getImage(String resource){
179 try {
180 if (resource != null) {
181 ByteArrayOutputStream baos = new ByteArrayOutputStream();
182 InputStream in = this.getClass().getResourceAsStream(resource);
183 byte[] buffer = new byte[2048];
184 int read = -1;
185 while ( (read = in.read(buffer)) != -1) {
186 baos.write(buffer, 0, read);
187 }
188 ImageIcon icon = new ImageIcon(baos.toByteArray());
189 return icon;
190 }
191 }
192 catch (Exception ex) {
193 ctx.log("Can't load image resource:" + resource);
194 if(ctx.getInstaller().isVerbose()){
195 ctx.log(ex);
196 }
197 }
198 return null;
199 }
200
201
202 private void setEventListeners(){
203 backButton.addActionListener(new ActionListener(){
204 public void actionPerformed(ActionEvent e){
205 listener.pageBack(page);
206 }
207 });
208 cancelButton.addActionListener(new ActionListener(){
209 public void actionPerformed(ActionEvent e){
210 page.setAbort(true);
211 if (ctx.getInstaller().isVerbose()) {
212 ctx.log("Abort called");
213 }
214 listener.pageComplete(page);
215 }
216 });
217 nextButton.addActionListener(new ActionListener(){
218 public void actionPerformed(ActionEvent e){
219 listener.pageComplete(page);
220
221 }
222 });
223 finishButton.addActionListener(new ActionListener(){
224 public void actionPerformed(ActionEvent e){
225 if(finishButton.getText().equals(res.getString("exit"))) {
226 //TODO FindBugs this will prevent cleanup in FinalizerFilter
227 System.exit(0);
228 }
229 listener.pageComplete(page);
230 //((SwingInstallerContext)ctx).getSwingRunner().finish();
231 }
232 });
233 }
234
235 private void setIcons(){
236 backButton.setIcon(getImage("/resources/icons/back.png"));
237 cancelButton.setIcon(getImage("/resources/icons/cancel.png"));
238 nextButton.setIcon(getImage("/resources/icons/next.png"));
239 finishButton.setIcon(getImage("/resources/icons/finish.png"));
240 }
241
242 public JButton getCancelButton() {
243 return cancelButton;
244 }
245
246 public InstallerContext getCtx() {
247 return ctx;
248 }
249
250 public JPanel getControlPanel() {
251 return controlPanel;
252 }
253
254 public JLabel getImagePanel() {
255 return imagePanel;
256 }
257
258 public JButton getNextButton() {
259 return nextButton;
260 }
261
262 public JLabel getTitleLabel() {
263 return titleLabel;
264 }
265 public JButton getFinishButton() {
266 return finishButton;
267 }
268 public JButton getBackButton() {
269 return backButton;
270 }
271}
Note: See TracBrowser for help on using the repository browser.