package husacct.control.presentation.util; import husacct.ServiceProvider; import husacct.common.locale.ILocaleService; import husacct.control.ControlServiceImpl; import husacct.control.task.MainController; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.WindowEvent; import javax.swing.BoxLayout; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.border.EmptyBorder; import org.apache.log4j.Logger; public class LoadingDialog extends JDialog implements Runnable { private int amountOfProcesses = 1; private int currentProcessNumber = 1; final WindowEvent we = new WindowEvent(this, WindowEvent.WINDOW_CLOSING); private static final long serialVersionUID = 1L; private String progressInfoText; private String projectProgressInfoText; private String processInfoText; private JLabel progressLabel; private JLabel projectProgressLabel; private JProgressBar progressBar; private JProgressBar projectProgressBar; private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService(); private JLabel processLabel; private final Logger logger = Logger.getLogger(LoadingDialog.class); public LoadingDialog(MainController mainController, String processInfoText) { super(); setTitle(localeService.getTranslatedString("Prepare")); this.processInfoText = processInfoText; setup(); addComponents(); } public LoadingDialog(String processInfoText){ ControlServiceImpl controlService = (ControlServiceImpl) ServiceProvider.getInstance().getControlService(); new LoadingDialog(controlService.getMainController(), processInfoText); } public void setProgressText(int percentage) { progressBar.setIndeterminate(false); this.progressLabel.setText(percentage + "%"); this.setTitle((percentage + "%")); this.progressBar.setValue(percentage); } public void setAmountOfProcesses(int amount) { this.amountOfProcesses = amount; this.projectProgressBar.setMaximum(amount); } public void setCurrentProcess(int number) { if(this.currentProcessNumber != number) { this.progressLabel.setText("0%"); this.progressBar.setIndeterminate(true); } this.currentProcessNumber = number; this.projectProgressLabel.setText(number+1 + " / " + this.amountOfProcesses); this.projectProgressBar.setValue(number+1); } private void setup() { this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); this.setSize(new Dimension(400, 250)); this.setResizable(false); DialogUtils.alignCenter(this); } private void addComponents() { JPanel processPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel projectLabelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel projectProgressPanel = new JPanel(new GridLayout(1, 1)); JPanel labelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel progressPanel = new JPanel(new GridLayout(1, 1)); JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); processLabel = new JLabel(processInfoText); progressLabel = new JLabel(progressInfoText); progressBar = new JProgressBar(); progressBar.setValue(0); progressPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); progressBar.setIndeterminate(true); projectProgressLabel = new JLabel(projectProgressInfoText); projectProgressBar = new JProgressBar(); projectProgressBar.setValue(0); projectProgressPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); JLabel waitLabel = new JLabel(localeService.getTranslatedString("Wait")); processPanel.add(processLabel); labelPanel.add(progressLabel); progressPanel.add(progressBar); projectLabelPanel.add(projectProgressLabel); projectProgressPanel.add(projectProgressBar); buttonsPanel.add(waitLabel); add(processPanel); add(projectLabelPanel); add(projectProgressPanel); add(labelPanel); add(progressPanel); add(buttonsPanel); add(buttonPanel); } @Override public void run() { try{ super.setVisible(true); super.setAlwaysOnTop(false); } catch (Exception exception) { this.logger.warn("Exception: " + exception.getClass() + exception.getMessage()); } } }