/*
 * Copyright
 *   2007 axYus - www.axyus.com
 *   2005 C.Marchand - christophe.marchand@axyus.com
 *
 * This file is part of XEMELIOS.
 *
 * XEMELIOS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * XEMELIOS 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with XEMELIOS; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package fr.gouv.finances.cp.xemelios.updater;

import fr.gouv.finances.cp.utils.PropertiesExpansion;
import fr.gouv.finances.cp.xemelios.ui.MainWindow;

/**
 * This class is the parent of all configurator started after an update.
 * @author chm
 *
 */
public abstract class AbstractConfigurator {
	protected PropertiesExpansion props;
	protected MainWindow mw;
	private AbstractConfigurator previousConfigurator = null;

	public AbstractConfigurator() {
		super();
	}
	/**
	 * Called by updater to set parameters.
	 * @param props
	 */
	public void setProperties(PropertiesExpansion props) {
		this.props=props;
	}
	/**
	 * Called by updater to set the main window
	 * @param mw
	 */
	public void setMainWindow(MainWindow mw) {
		this.mw=mw;
	}
	public void setPreviousConfigurator(AbstractConfigurator prev) {
		if(prev==null) return;
		this.previousConfigurator = prev;
		prev.setMainWindow(mw);
		prev.setProperties(props);
	}
	public void doConfigure() throws Exception {
		run();
		if(previousConfigurator!=null) previousConfigurator.doConfigure();
	}
	/**
	 * Called by updater to perform configuration.
	 * Implementors just have to implement this method.
	 * @throws Exception
	 */
	public abstract void run() throws Exception;
}
