/*
* #%L
* gitools-ui-platform
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* 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 3 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, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.platform.wizard;
import org.gitools.ui.platform.help.HelpContext;
import javax.swing.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class AbstractWizard implements IWizard, IWizardPageUpdateListener {
protected IWizardPage currentPage;
private String title;
private Icon logo;
private HelpContext helpContext;
private List<IWizardPage> pages;
private Map<String, IWizardPage> pageIdMap;
private List<IWizardUpdateListener> listeners;
protected AbstractWizard() {
init();
}
protected void init() {
pages = new ArrayList<>();
pageIdMap = new HashMap<>();
listeners = new ArrayList<>();
}
@Override
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
pageUpdated(null);
}
@Override
public Icon getLogo() {
return logo;
}
protected void setLogo(Icon icon) {
this.logo = icon;
pageUpdated(null);
}
@Override
public HelpContext getHelpContext() {
return helpContext;
}
protected void setHelpContext(String helpContextId) {
this.helpContext = new HelpContext(helpContextId);
}
public void setHelpContext(HelpContext helpContext) {
this.helpContext = helpContext;
}
protected void addPage(IWizardPage page) {
String id = page.getId();
if (id == null) {
id = "Page" + pages.size();
}
addPage(id, page);
}
protected void addPage(String id, IWizardPage page) {
page.setId(id);
page.setWizard(this);
pages.add(page);
pageIdMap.put(id, page);
page.addPageUpdateListener(this);
}
@Override
public IWizardPage getStartingPage() {
return pages.size() > 0 ? pages.get(0) : null;
}
@Override
public IWizardPage getCurrentPage() {
return currentPage;
}
@Override
public void setCurrentPage(IWizardPage currentPage) {
this.currentPage = currentPage;
}
@Override
public IWizardPage getNextPage(IWizardPage page) {
int idx = pages.indexOf(page);
return idx == -1 || idx == pages.size() - 1 ? null : pages.get(idx + 1);
}
@Override
public IWizardPage getPreviousPage(IWizardPage page) {
int idx = pages.indexOf(page);
return idx == -1 || idx == 0 ? null : pages.get(idx - 1);
}
@Override
public boolean isLastPage(IWizardPage page) {
return page.equals(pages.get(pages.size() - 1));
}
@Override
public IWizardPage getPage(String id) {
return pageIdMap.get(id);
}
@Override
public IWizardPage[] getPages() {
final IWizardPage[] pagesArray = new IWizardPage[pages.size()];
pages.toArray(pagesArray);
return pagesArray;
}
@Override
public int getPageCount() {
return pages.size();
}
@Override
public void pageLeft(IWizardPage currentPage) {
}
@Override
public void pageEntered(IWizardPage page) {
}
@Override
public boolean canFinish() {
return currentPage != null ? currentPage.isComplete() && isLastPage(currentPage) : false;
}
@Override
public void performFinish() {
}
@Override
public void performCancel() {
}
@Override
public void addWizardUpdateListener(IWizardUpdateListener listener) {
listeners.add(listener);
}
@Override
public void removeWizardUpdateListener(IWizardUpdateListener listener) {
listeners.remove(listener);
}
@Override
public void pageUpdated(IWizardPage page) {
for (IWizardUpdateListener l : listeners)
l.pageUpdated(page);
}
public void fireWizardUpdate() {
for (IWizardUpdateListener l : listeners)
l.wizardUpdated(this);
}
}