/**
 * *******************************************************************************
 * 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.ContextWizardPagesProvider;

import org.eclipse.emf.ecore.EClass;

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

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

} //ContextWizardPagesProviderImpl
