/*******************************************************************************
 * Copyright (c) 2003, 2004 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.jst.j2ee.jca.ui;

import org.eclipse.jst.j2ee.internal.jca.archive.operations.ConnectorModuleExportOperation;
import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleExportDataModel;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPluginIcons;
import org.eclipse.jst.j2ee.jca.ui.internal.wizard.RARExportPage;
import org.eclipse.jst.j2ee.ui.J2EEArtifactExportWizard;
import org.eclipse.ui.IExportWizard;
import org.eclipse.wst.common.frameworks.internal.operations.WTPOperation;
import org.eclipse.wst.common.frameworks.internal.operations.WTPOperationDataModel;

/**
 * <p>
 * Wizard used to export J2EE Connector module structures 
 * from the Eclipse Workbench to a deployable Connector 
 * Archive *.rar file.  
 * </p>
 */
public final class ConnectorModuleExportWizard extends J2EEArtifactExportWizard implements IExportWizard {

	/**
	 * <p>
	 * The default constructor. Creates a wizard with no selection, 
	 * no model instance, and no operation instance. The model and 
	 * operation will be created as needed.
	 * </p>
	 */
	public ConnectorModuleExportWizard() {
		super();
	}
	
	/**
	 * <p>
	 * The model is used to prepopulate the wizard controls
	 * and interface with the operation.
	 * </p>
	 * @param model The model parameter is used to pre-populate wizard controls and interface with the operation
	 */
	public ConnectorModuleExportWizard(ConnectorModuleExportDataModel model) {
		super(model);
	}

	/**
	 * {@inheritDoc} 
	 * 
	 * <p>
	 * Overridden to return an {@link ConnectorModuleExportDataModel}.
	 * </p>
	 *  
	 * @see org.eclipse.wst.common.frameworks.internal.ui.wizard.WTPWizard#createDefaultModel()
	 */
	protected WTPOperationDataModel createDefaultModel() {
		return new ConnectorModuleExportDataModel(); 
	}

	/**
	 * {@inheritDoc} 
	 * 
	 * <p>
	 * Returns an {@link ConnectorModuleExportOperation} using the model either
	 * supplied in the constructor or created from {@link #createDefaultModel()}.
	 * </p>
	 * @return Returns the operation to be executed when the Wizard completes.
	 */
	protected WTPOperation createOperation() {
		return new ConnectorModuleExportOperation(getSpecificModel());
	}

	/**
	 * <p>
	 * Adds the following pages:
	 * <ul>
	 * 	<li> {@link RARExportPage} as the main wizard page ({@link #MAIN_PG}) 
	 * </ul>
	 * </p>
	 */
	public void addPages() {
		addPage(new RARExportPage(getSpecificModel(), MAIN_PG, getSelection()));
	}

	/**
	 * {@inheritDoc}   
	 * 
	 * <p>
	 * Sets up the default wizard page image. 
	 * </p>
	 */
	protected void doInit() {
		setDefaultPageImageDescriptor(J2EEUIPlugin.getDefault().getImageDescriptor(J2EEUIPluginIcons.JCA_EXPORT_WIZARD_BANNER));
	} 

	private ConnectorModuleExportDataModel getSpecificModel() {
		return (ConnectorModuleExportDataModel) getModel();
	}

}