Package com.salas.bb.installation.wizard

Source Code of com.salas.bb.installation.wizard.InstallationWizard$FinishActionListener

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2006 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: InstallationWizard.java,v 1.13 2008/04/07 16:35:23 spyromus Exp $
//

package com.salas.bb.installation.wizard;

import com.jgoodies.forms.factories.Borders;
import com.jgoodies.uif.AbstractDialog;
import com.jgoodies.uif.panel.CardPanel;
import com.jgoodies.uif.util.Resizer;
import com.salas.bb.utils.i18n.Strings;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Collections;

/**
* Installation wizard dialog box.
*/
public class InstallationWizard extends AbstractDialog
{
    private IWizardPage[]       panels;

    private CardPanel           cpanel;
    private ServiceAccountPage  serviceAccountPage;
    private StartingPointsPage  startingPointsPage;

    private InstallationSettings installationSettings = new InstallationSettings();

    /**
     * Contains pages that should not be validated on 'doPrevious' event.
     */
    private java.util.List skipPreviousValidationPages;

    /**
     * Creates wizard dialog.
     */
    public InstallationWizard()
    {
        super((Frame)null);

        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    }

    /**
     * Builds content panel.
     *
     * @return content panel.
     */
    protected JComponent buildContent()
    {
        buildPanels();

        cpanel = new CardPanel();
        for (IWizardPage panel : panels) cpanel.add((Component)panel);

        Dimension size = Resizer.DEFAULT.fromWidth(600);
        cpanel.setMinimumSize(size);
        cpanel.setMaximumSize(size);
        cpanel.setPreferredSize(size);

        return cpanel;
    }

    /**
     * Handles window events depending on the state of the <code>defaultCloseOperation</code>
     * property.
     *
     * @see #setDefaultCloseOperation
     */
    protected void processWindowEvent(WindowEvent e)
    {
        super.processWindowEvent(e);

        if (e.getID() == WindowEvent.WINDOW_OPENED) pack();
    }

    /**
     * Build panels.
     */
    private void buildPanels()
    {
        final FinishActionListener aFinish = new FinishActionListener();
        final PrevActionListener aPrev = new PrevActionListener();
        final NextActionListener aNext = new NextActionListener();
        final CancelActionListener aCancel = new CancelActionListener();

        serviceAccountPage = new ServiceAccountPage(aFinish, aPrev, aNext, aCancel);
        startingPointsPage = new StartingPointsPage(aFinish, aPrev, aCancel);

        panels = new IWizardPage[]
        {
            new WelcomePage(aNext, aCancel),
            new LicensePage(aPrev, aNext, aCancel),
            new TutorialPage(aFinish, aPrev, aNext, aCancel),
            serviceAccountPage,
            startingPointsPage
        };

        // Populate list of pages that should not be validated on 'doPrevious' event.
        skipPreviousValidationPages = Collections.synchronizedList(new ArrayList());
        skipPreviousValidationPages.add(panels[1]); // License page.
    }

    /**
     * Display next page of wizard.
     */
    private void doNext()
    {
        // Validate current page
        if (!validatePage((IWizardPage)cpanel.getVisibleCard())) return;

        cpanel.showNextCard();

        // Do another step forward to skip starting points selection page if
        // user has service account and requested synchronization
        if (cpanel.getVisibleCard() == startingPointsPage &&
            serviceAccountPage.isSynchronizing())
        {
            cpanel.showNextCard();
        }
    }

    /**
     * Display previous page of wizard.
     */
    private void doPrevious()
    {
        // Validate current page
        if (!validatePage((IWizardPage)cpanel.getVisibleCard(),true)) return;

        cpanel.showPreviousCard();

        // Do another step backward to skip starting points selection page if
        // user has service account and requested synchronization
        if (cpanel.getVisibleCard() == startingPointsPage &&
            serviceAccountPage.isSynchronizing())
        {
            cpanel.showPreviousCard();
        }
    }

    /**
     * Asks user for confirmation and cancels wizard on it.
     */
    public void doCancel()
    {
        int choice = JOptionPane.showConfirmDialog(this,
            Strings.message("installation.wizard.confirm.cancel"),
            getTitle(), JOptionPane.YES_NO_OPTION);

        if (choice == JOptionPane.YES_OPTION) super.doCancel();
    }

    /**
     * Finish wizard.
     */
    private void doFinish()
    {
        // Validate current page
        if (!validatePage((IWizardPage)cpanel.getVisibleCard())) return;

        doAccept();
    }

    /**
     * Validates the page and returns the status. If the page isn't valid dialog box with
     * the message will be displayed.
     *
     * @param page  page to validate.
     *
     * @return <code>true</code> if everything is OK.
     */
    private boolean validatePage(IWizardPage page)
    {
        return validatePage(page, false);
    }

    /**
     * Validates the page and returns the status. If the page isn't valid dialog box with
     * the message will be displayed.
     *
     * @param page          page to validate.
     * @param isPrevious    <code>true</code> if validation is performed before switching
     *                      to the previous page, <code>false</code> otherwise.
     *
     * @return <code>true</code> if everything is OK.
     */
    private boolean validatePage(IWizardPage page, boolean isPrevious)
    {
        boolean result = true;

        // Perform validation if the page is not in the exceptions' list.
        String errorMessage = (isPrevious && skipPreviousValidationPages.contains(page)
            ? null : page.validatePage());

        if (errorMessage != null)
        {
            JOptionPane.showMessageDialog(this, errorMessage,
                Strings.message("installation.wizard.dialog.title.error"),
                JOptionPane.ERROR_MESSAGE);

            result = false;
        }

        return result;
    }

    /**
     * Returns dialog border.
     *
     * @return border.
     */
    protected Border getDialogBorder()
    {
        return Borders.EMPTY_BORDER;
    }

    /**
     * Returns settings selected by user in wizard for installation.
     *
     * @return installation settings.
     */
    public InstallationSettings getInstallationSettings()
    {
        // update settings

        // service account
        installationSettings.setServiceAccountEmail(serviceAccountPage.getEmail());
        installationSettings.setServiceAccountPassword(serviceAccountPage.getPassword());
        installationSettings.setServiceAccountExists(serviceAccountPage.isExistingAccount());
        installationSettings.setServiceAccountUse(serviceAccountPage.isAccountUsingSelected());

        // starting points
        installationSettings.setStartingPoints(startingPointsPage.getSelectedStartingPoints());

        // data initialization mode
        int mode = InstallationSettings.DATA_INIT_CLEAN;
        if (serviceAccountPage.isSynchronizing())
        {
            mode = InstallationSettings.DATA_INIT_SERVICE;
        } else if (installationSettings.getSelectedStartingPoints().length > 0)
        {
            mode = InstallationSettings.DATA_INIT_POINTS;
        }
        installationSettings.setDataInitMode(mode);

        return installationSettings;
    }

    /**
     * Opens dialog and returns installation setting or <code>NULL</code> if installation
     * was cancelled.
     *
     * @return settings or <code>NULL</code>.
     */
    public InstallationSettings openDialog()
    {
        super.open();

        return hasBeenCanceled() ? null : getInstallationSettings();
    }

    /**
     * Listener of next-button events.
     */
    private class NextActionListener implements ActionListener
    {
        /**
         * Invoked when an action occurs.
         */
        public void actionPerformed(ActionEvent e)
        {
            doNext();
        }
    }

    /**
     * Listener of prev-button events.
     */
    private class PrevActionListener implements ActionListener
    {
        /**
         * Invoked when an action occurs.
         */
        public void actionPerformed(ActionEvent e)
        {
            doPrevious();
        }
    }

    /**
     * Listener of cancel-button events.
     */
    private class CancelActionListener implements ActionListener
    {
        /**
         * Invoked when an action occurs.
         */
        public void actionPerformed(ActionEvent e)
        {
            doCancel();
        }
    }

    /**
     * Listener of finish-button events.
     */
    private class FinishActionListener implements ActionListener
    {
        /**
         * Invoked when an action occurs.
         */
        public void actionPerformed(ActionEvent e)
        {
            doFinish();
        }
    }
}
TOP

Related Classes of com.salas.bb.installation.wizard.InstallationWizard$FinishActionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.