com.izforge.izpack.panels.InstallPanel Maven / Gradle / Ivy
/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.izforge.izpack.panels;
import com.izforge.izpack.gui.IzPanelLayout;
import com.izforge.izpack.gui.LabelFactory;
import com.izforge.izpack.installer.InstallData;
import com.izforge.izpack.installer.InstallerFrame;
import com.izforge.izpack.installer.IzPanel;
import com.izforge.izpack.util.AbstractUIProgressHandler;
import javax.swing.*;
import java.awt.*;
/**
* The install panel class. Launches the actual installation job.
*
* @author Julien Ponge
*/
public class InstallPanel extends IzPanel implements AbstractUIProgressHandler
{
private static final long serialVersionUID = 3257282547959410992L;
/**
* The tip label.
*/
protected JLabel tipLabel;
/**
* The operation label .
*/
protected JLabel packOpLabel;
/**
* The operation label .
*/
protected JLabel overallOpLabel;
/**
* The icon used.
*/
protected String iconName = "preferences";
/**
* The pack progress bar.
*/
protected JProgressBar packProgressBar;
/**
* The progress bar.
*/
protected JProgressBar overallProgressBar;
/**
* True if the installation has been done.
*/
private volatile boolean validated = false;
/**
* How many packs we are going to install.
*/
private int noOfPacks = 0;
/**
* The constructor.
*
* @param parent The parent window.
* @param idata The installation data.
*/
public InstallPanel(InstallerFrame parent, InstallData idata)
{
super(parent, idata, new IzPanelLayout());
this.tipLabel = LabelFactory.create(parent.langpack.getString("InstallPanel.tip"),
parent.icons.getImageIcon(iconName), LEADING);
add(this.tipLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
packOpLabel = LabelFactory.create(" ", LEADING);
add(packOpLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
packProgressBar = new JProgressBar();
packProgressBar.setStringPainted(true);
packProgressBar.setString(parent.langpack.getString("InstallPanel.begin"));
packProgressBar.setValue(0);
add(packProgressBar, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
// make sure there is some space between the progress bars
add(IzPanelLayout.createVerticalStrut(5));
//add(IzPanelLayout.createParagraphGap());
overallOpLabel = LabelFactory.create(parent.langpack.getString("InstallPanel.progress"),
parent.icons.getImageIcon(iconName), LEADING);
add(this.overallOpLabel, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
overallProgressBar = new JProgressBar();
overallProgressBar.setStringPainted(true);
if (noOfPacks == 1)
{
overallProgressBar.setIndeterminate(true);
}
overallProgressBar.setString("");
overallProgressBar.setValue(0);
add(this.overallProgressBar, IzPanelLayout.getDefaultConstraint(FULL_LINE_CONTROL_CONSTRAINT));
getLayoutHelper().completeLayout();
}
/**
* Indicates wether the panel has been validated or not.
*
* @return The validation state.
*/
public boolean isValidated()
{
return this.validated;
}
/**
* The unpacker starts.
*/
public void startAction(String name, int noOfJobs)
{
this.noOfPacks = noOfJobs;
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
parent.blockGUI();
// figure out how many packs there are to install
overallProgressBar.setMinimum(0);
overallProgressBar.setMaximum(noOfPacks);
overallProgressBar.setString("0 / " + Integer.toString(noOfPacks));
}
});
}
/**
* An error was encountered.
*
* @param error The error text.
*/
public void emitError(String title, String error)
{
this.packOpLabel.setText(error);
idata.installSuccess = false;
JOptionPane.showMessageDialog(this, error, parent.langpack.getString("installer.error"),
JOptionPane.ERROR_MESSAGE);
}
/**
* The unpacker stops.
*/
public void stopAction()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
parent.releaseGUI();
parent.lockPrevButton();
// With custom actions it is possible, that the current value
// is not max - 1. Therefore we use always max for both
// progress bars to signal finish state.
overallProgressBar.setValue(overallProgressBar.getMaximum());
int ppbMax = packProgressBar.getMaximum();
if (ppbMax < 1)
{
ppbMax = 1;
packProgressBar.setMaximum(ppbMax);
}
packProgressBar.setValue(ppbMax);
packProgressBar.setString(parent.langpack.getString("InstallPanel.finished"));
packProgressBar.setEnabled(false);
String no_of_packs = Integer.toString(noOfPacks);
if (noOfPacks == 1)
{
overallProgressBar.setIndeterminate(false);
}
overallProgressBar.setString(no_of_packs + " / " + no_of_packs);
overallProgressBar.setEnabled(false);
packOpLabel.setText(" ");
packOpLabel.setEnabled(false);
idata.canClose = true;
validated = true;
if (idata.panels.indexOf(this) != (idata.panels.size() - 1))
{
parent.unlockNextButton();
}
}
});
}
/**
* Normal progress indicator.
*
* @param val The progression value.
* @param msg The progression message.
*/
public void progress(final int val, final String msg)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
packProgressBar.setValue(val + 1);
packOpLabel.setText(msg);
}
});
}
/**
* Pack changing.
*
* @param packName The pack name.
* @param stepno The number of the pack.
* @param max The new maximum progress.
*/
public void nextStep(final String packName, final int stepno, final int max)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
packProgressBar.setValue(0);
packProgressBar.setMinimum(0);
packProgressBar.setMaximum(max);
packProgressBar.setString(packName);
overallProgressBar.setValue(stepno - 1);
overallProgressBar.setString(Integer.toString(stepno) + " / "
+ Integer.toString(noOfPacks));
}
});
}
/**
* {@inheritDoc}
*/
public void setSubStepNo(final int no_of_substeps)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
packProgressBar.setMaximum(no_of_substeps);
}
});
}
/**
* Called when the panel becomes active.
*/
public void panelActivate()
{
// We clip the panel
Dimension dim = parent.getPanelsContainerSize();
dim.width -= (dim.width / 4);
dim.height = 150;
setMinimumSize(dim);
setMaximumSize(dim);
setPreferredSize(dim);
parent.lockNextButton();
parent.install(this);
}
}