/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.wizard;
import javax.validation.constraints.NotNull;
import org.eclipse.che.commons.annotation.Nullable;
/**
* The main responsibility of a {@link Wizard} subclass is doing the real work when the wizard completes.
*
* @param <T>
* the type of the data-object that stores collected data
* @author Andrey Plotnikov
* @author Artem Zatsarynnyi
*/
public interface Wizard<T> {
/**
* Performs some actions required for flipping to first page and returning to the first page of a wizard.
*
* @return first page
*/
@Nullable
WizardPage<T> navigateToFirst();
/**
* Provides a way to move to the next wizard page.
*
* @return the next page or {@code null} if wizard has no next page
*/
@Nullable
WizardPage<T> navigateToNext();
/**
* Provides a way to move to the previous wizard page.
*
* @return the previous page or {@code null} if wizard has no previous page
*/
@Nullable
WizardPage<T> navigateToPrevious();
/**
* Returns whether the wizard has the next page.
*
* @return {@code true} if the wizard has next page, otherwise - {@code false}
*/
boolean hasNext();
/**
* Returns whether the wizard has previous page.
*
* @return {@code true} if the wizard has previous page, otherwise - {@code false}
*/
boolean hasPrevious();
/**
* Checks whether the wizard may be completed.
*
* @return {@code true} if the wizard could be completed, otherwise - {@code false}
*/
boolean canComplete();
/** Complete the wizard. */
void complete(@NotNull CompleteCallback callback);
/** Sets update control delegate. */
void setUpdateDelegate(@NotNull UpdateDelegate delegate);
/** Usually it is required to enable/disable navigation buttons in wizard view. */
interface UpdateDelegate {
/** Called when wizard view should be updated. */
void updateControls();
}
interface CompleteCallback {
/** Called when wizard completed successfully. */
void onCompleted();
/** Called when failure occurred while completing wizard. */
void onFailure(Throwable e);
}
}