/*******************************************************************************
 * 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.internal.rar.actions;


import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jst.j2ee.internal.actions.AbstractOpenWizardWorkbenchAction;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
import org.eclipse.jst.j2ee.internal.rar.ui.util.JCAUIMessages;
import org.eclipse.jst.j2ee.internal.rar.wizard.JCAProjectWizard;
import org.eclipse.ui.IWorkbench;



/**
 * Creates an action for the Connector project
 */
public class NewConnectorProjectAction extends AbstractOpenWizardWorkbenchAction {

	// TODO MDE 02-28 Find correct label
	public static String LABEL = JCAUIMessages.getResourceString("NewConnectorProjectAction_UI_0"); //$NON-NLS-1$
	private static final String ICON = "newear_wiz"; //$NON-NLS-1$

	/**
	 * Default constructor
	 */
	public NewConnectorProjectAction() {
		setText(LABEL);
		setImageDescriptor(J2EEUIPlugin.getDefault().getImageDescriptor(ICON));
	}// NewConnectorProjectAction

	/**
	 * Constructor initialization.
	 * 
	 * @param IWorkbench
	 *            workbench - Workbench to add to this wizard too.
	 * @param String
	 *            label - Label for project.
	 * @param Class[]
	 *            acceptedTypes - List of accepted types for this wizard
	 */
	public NewConnectorProjectAction(IWorkbench workbench, String label, Class[] acceptedTypes) {
		super(workbench, label, acceptedTypes, false);
		setImageDescriptor(J2EEUIPlugin.getDefault().getImageDescriptor(ICON));
	}// NewConnectorProjectAction

	/**
	 * Creates the wizard
	 * 
	 * @return Wizard
	 */
	protected Wizard createWizard() {
		return new JCAProjectWizard();
	}// createWizard

	/**
	 * shouldAcceptElement - Always true
	 * 
	 * @param Object
	 *            obj
	 */
	protected boolean shouldAcceptElement(Object obj) {
		return true; /* NewGroup.isOnBuildPath(obj) && !NewGroup.isInArchive(obj); */
	}// shouldAcceptElement

	protected String getDialogText() {
		return null;
	}
}// NewConnectorProjectAction
