/**
 * *******************************************************************************
 * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency 
 * 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:
 *      Pierre Allard - initial API and implementation
 *      Regent L'Archeveque 
 *      Olivier L. Larouche
 *         
 * SPDX-License-Identifier: EPL-1.0    
 * *******************************************************************************
 */
package org.eclipse.apogy.core.invocator.ui.impl;

import org.eclipse.apogy.common.emf.ui.emfforms.impl.NamedDescribedElementEMFFormsWizardPageProviderCustomImpl;

import org.eclipse.apogy.core.invocator.ui.ApogyCoreInvocatorUIPackage;
import org.eclipse.apogy.core.invocator.ui.ScriptBasedProgramsGroupWizardPagesProvider;

import org.eclipse.emf.ecore.EClass;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Script Based Programs Group Wizard Pages Provider</b></em>'.
 * <!-- end-user-doc -->
 *
 * @generated
 */
public abstract class ScriptBasedProgramsGroupWizardPagesProviderImpl extends NamedDescribedElementEMFFormsWizardPageProviderCustomImpl implements ScriptBasedProgramsGroupWizardPagesProvider {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ScriptBasedProgramsGroupWizardPagesProviderImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ApogyCoreInvocatorUIPackage.Literals.SCRIPT_BASED_PROGRAMS_GROUP_WIZARD_PAGES_PROVIDER;
	}

} //ScriptBasedProgramsGroupWizardPagesProviderImpl
