package org.marketcetera.photon.strategy.engine.sa.ui;
import java.util.concurrent.Callable;
import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.jface.wizard.Wizard;
import org.marketcetera.photon.commons.Validate;
import org.marketcetera.photon.commons.ui.JFaceUtils;
import org.marketcetera.photon.internal.strategy.engine.sa.ui.NewStrategyAgentWizardPage;
import org.marketcetera.photon.strategy.engine.IStrategyEngines;
import org.marketcetera.photon.strategy.engine.model.sa.StrategyAgentEngine;
import org.marketcetera.photon.strategy.engine.model.sa.StrategyAgentEngineFactory;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Wizard for creating a new {@link StrategyAgentEngine}.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: NewStrategyAgentWizard.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
*/
@ClassVersion("$Id: NewStrategyAgentWizard.java 16154 2012-07-14 16:34:05Z colin $")
public class NewStrategyAgentWizard extends Wizard {
private final StrategyAgentEngine mEngine;
private final IStrategyEngines mEngines;
private volatile StrategyAgentEngine mResult;
/**
* Constructor.
*
* @param engines
* the service to use to add the new engine
* @param engine
* seeded values for the wizard, can be null
* @throws IllegalArgumentException
* if engines is null
*/
public NewStrategyAgentWizard(IStrategyEngines engines,
StrategyAgentEngine engine) {
Validate.notNull(engines, "engines"); //$NON-NLS-1$
setWindowTitle(Messages.NEW_STRATEGY_AGENT_WIZARD__TITLE.getText());
mEngines = engines;
mEngine = engine == null ? StrategyAgentEngineFactory.eINSTANCE
.createStrategyAgentEngine() : engine;
}
@Override
public void addPages() {
addPage(new NewStrategyAgentWizardPage(mEngine));
}
@Override
public boolean performFinish() {
Callable<Boolean> operation = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
mResult = (StrategyAgentEngine) mEngines.addEngine(mEngine);
return true;
}
};
return JFaceUtils
.runWithErrorDialog(new SameShellProvider(getShell()),
operation,
Messages.NEW_STRATEGY_AGENT_WIZARD_ADD_ENGINE_FAILED);
}
/**
* Returns the result of the wizard.
*
* @return the resulting engine
*/
public StrategyAgentEngine getResult() {
return mResult;
}
}