/*******************************************************************************
 * Copyright (c) 2014 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.windup.ui.internal.wizards;

import javax.inject.Inject;

import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.IExportWizard;
import org.eclipse.ui.IWorkbench;
import org.jboss.tools.windup.core.services.WindupService;
import org.jboss.tools.windup.ui.WindupUIPlugin;
import org.jboss.tools.windup.ui.internal.Messages;

/**
 * <p>
 * Wizard used to export Windup Reports.
 * </p>
 */
public class WindupReportExportWizard extends Wizard implements IExportWizard
{
    /**
     * The ID of the wizard.
     */
    public static final String ID = "org.jboss.tools.windup.ui.exportWizard.WindupReport"; //$NON-NLS-1$

    /**
     * The selection when the wizard was opened used to populate default list of projects to export the Windup Reports for.
     */
    private IStructuredSelection selection;

    /**
     * The main page of the wizard.
     */
    private WindupReportExportWizardPage1 mainPage;
    
    @Inject private WindupService windup;

    /**
     * <p>
     * Required default constructor for extension point creation.
     * </p>
     */
    public WindupReportExportWizard()
    {
        this.setWindowTitle(Messages.WindupReportExport_exportReportsTitle);

        IDialogSettings workbenchSettings = WindupUIPlugin.getDefault().getDialogSettings();
        IDialogSettings section = workbenchSettings.getSection("WindupReportExportWizard");//$NON-NLS-1$
        if (section == null)
        {
            section = workbenchSettings.addNewSection("WindupReportExportWizard");//$NON-NLS-1$
        }
        this.setDialogSettings(section);
    }

    /**
     * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
     */
    @Override
    public void init(IWorkbench workbench, IStructuredSelection selection)
    {
        this.selection = selection;
    }

    /**
     * @see org.eclipse.jface.wizard.Wizard#addPages()
     */
    @Override
    public void addPages()
    {
    	this.mainPage = new WindupReportExportWizardPage1(windup, this.selection);
        this.addPage(mainPage);
    }

    /**
     * @see org.eclipse.jface.wizard.Wizard#performFinish()
     */
    @Override
    public boolean performFinish()
    {
        return this.mainPage.finish();
    }

    /**
     * <p>
     * The export process can be a lengthy one, especially if new Windup reports need to be generated first, therefore show a progress bar for any
     * runables run during the finish operation.
     * </p>
     * 
     * @see org.eclipse.jface.wizard.Wizard#needsProgressMonitor()
     */
    @Override
    public boolean needsProgressMonitor()
    {
        return true;
    }
}