/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.internal.ide.dialogs;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.ide.dialogs.InstallCapabilityStep.IProjectProvider;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;

public abstract class MultiStepCapabilityWizard extends MultiStepWizard
        implements IProjectProvider {
    /**
     * Creates an empty wizard
     */
    protected MultiStepCapabilityWizard() {
        super();
    }

    /**
     * Returns the IDs of the perspectives to present
     * as choices to the user.
     */
    protected abstract String[] getPerspectiveChoices();

    /* (non-Javadoc)
     * Method declared on IWizard.
     */
    public boolean performFinish() {
        if (!super.performFinish())
            return false;

        // Allow the user to choose which perspective to
        // switch to.
        if (isConfigureStepMode()) {
            IWorkbenchWindow window = PlatformUI.getWorkbench()
                    .getActiveWorkbenchWindow();
            String[] perspIds = getPerspectiveChoices();
            if (perspIds.length > 0) {
                ProjectPerspectiveChoiceDialog dialog;
                dialog = new ProjectPerspectiveChoiceDialog(window, perspIds);
                dialog.open();
                if (dialog.getReturnCode() == Window.OK)
                    window = dialog.showChosenPerspective();
            }

            IProject project = getProject();
            if (project != null) {
                BasicNewResourceWizard.selectAndReveal(project, window);
            }
        }

        return true;
    }
}
