/*******************************************************************************
 * Copyright (c) 2015, 2016 CNRS, IRIT, IRT AESE (IRT Saint Exupéry).
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the LGPL 3.0
 * which accompanies this distribution, and is available at
 * https://www.gnu.org/licenses/lgpl-3.0-standalone.html
 *
 * Contributors:
 *     Faiez Zalila - initial API and implementation and/or initial documentation
 *******************************************************************************/
/**
 */
package com.irtsaintexupery.fiacre.instance.fiacreinstance.impl;

import fr.irit.fiacre.xtext.fiacre.FiacrePackage;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import com.irtsaintexupery.fiacre.instance.fiacreinstance.BlockInstance;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.ComponentDeclarationInstance;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.CompositionInstance;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.DeclarationInstance;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.EnabledStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.ExecutableStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.ExecutedStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.FiacreinstanceFactory;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.FiacreinstancePackage;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.FireableStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceEnabledStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceExecutableStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceExecutedStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceFireableStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceModel;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.InstanceStatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.ProcessDeclarationInstance;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.StatementBlock;
import com.irtsaintexupery.fiacre.instance.fiacreinstance.VariableDeclarationInstance;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class FiacreinstancePackageImpl extends EPackageImpl implements FiacreinstancePackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass statementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass executedStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass executableStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass fireableStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass enabledStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass blockInstanceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass compositionInstanceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass declarationInstanceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass componentDeclarationInstanceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass processDeclarationInstanceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceExecutedStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceExecutableStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceFireableStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass instanceEnabledStatementBlockEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variableDeclarationInstanceEClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see com.irtsaintexupery.fiacre.instance.fiacreinstance.FiacreinstancePackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private FiacreinstancePackageImpl() {
		super(eNS_URI, FiacreinstanceFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link FiacreinstancePackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static FiacreinstancePackage init() {
		if (isInited) return (FiacreinstancePackage)EPackage.Registry.INSTANCE.getEPackage(FiacreinstancePackage.eNS_URI);

		// Obtain or create and register package
		FiacreinstancePackageImpl theFiacreinstancePackage = (FiacreinstancePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof FiacreinstancePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new FiacreinstancePackageImpl());

		isInited = true;

		// Initialize simple dependencies
		FiacrePackage.eINSTANCE.eClass();

		// Create package meta-data objects
		theFiacreinstancePackage.createPackageContents();

		// Initialize created meta-data
		theFiacreinstancePackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theFiacreinstancePackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(FiacreinstancePackage.eNS_URI, theFiacreinstancePackage);
		return theFiacreinstancePackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceModel() {
		return instanceModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getInstanceModel_Name() {
		return (EAttribute)instanceModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getInstanceModel_Model() {
		return (EReference)instanceModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getInstanceModel_Instance() {
		return (EReference)instanceModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getInstanceModel_StatementBlocks() {
		return (EReference)instanceModelEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getStatementBlock() {
		return statementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getStatementBlock_InstanceStatementBlocks() {
		return (EReference)statementBlockEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStatementBlock_Name() {
		return (EAttribute)statementBlockEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getExecutedStatementBlock() {
		return executedStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getExecutableStatementBlock() {
		return executableStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getExecutableStatementBlock_Date() {
		return (EAttribute)executableStatementBlockEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFireableStatementBlock() {
		return fireableStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEnabledStatementBlock() {
		return enabledStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBlockInstance() {
		return blockInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBlockInstance_BlockInstances() {
		return (EReference)blockInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCompositionInstance() {
		return compositionInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCompositionInstance_Composition() {
		return (EReference)compositionInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDeclarationInstance() {
		return declarationInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDeclarationInstance_VariableDeclarationInstances() {
		return (EReference)declarationInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeclarationInstance_Name() {
		return (EAttribute)declarationInstanceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDeclarationInstance_Instance() {
		return (EReference)declarationInstanceEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeclarationInstance_Flatname() {
		return (EAttribute)declarationInstanceEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getComponentDeclarationInstance() {
		return componentDeclarationInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getComponentDeclarationInstance_Component() {
		return (EReference)componentDeclarationInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getProcessDeclarationInstance() {
		return processDeclarationInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getProcessDeclarationInstance_CurrentState() {
		return (EReference)processDeclarationInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getProcessDeclarationInstance_Process() {
		return (EReference)processDeclarationInstanceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getProcessDeclarationInstance_InstanceStatementBlocks() {
		return (EReference)processDeclarationInstanceEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceStatementBlock() {
		return instanceStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getInstanceStatementBlock_TransitionSource() {
		return (EReference)instanceStatementBlockEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getInstanceStatementBlock_Statements() {
		return (EReference)instanceStatementBlockEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getInstanceStatementBlock_Name() {
		return (EAttribute)instanceStatementBlockEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceExecutedStatementBlock() {
		return instanceExecutedStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceExecutableStatementBlock() {
		return instanceExecutableStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceFireableStatementBlock() {
		return instanceFireableStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInstanceEnabledStatementBlock() {
		return instanceEnabledStatementBlockEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariableDeclarationInstance() {
		return variableDeclarationInstanceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableDeclarationInstance_VariableDeclaration() {
		return (EReference)variableDeclarationInstanceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableDeclarationInstance_CurrentValue() {
		return (EReference)variableDeclarationInstanceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public FiacreinstanceFactory getFiacreinstanceFactory() {
		return (FiacreinstanceFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		instanceModelEClass = createEClass(INSTANCE_MODEL);
		createEAttribute(instanceModelEClass, INSTANCE_MODEL__NAME);
		createEReference(instanceModelEClass, INSTANCE_MODEL__MODEL);
		createEReference(instanceModelEClass, INSTANCE_MODEL__INSTANCE);
		createEReference(instanceModelEClass, INSTANCE_MODEL__STATEMENT_BLOCKS);

		statementBlockEClass = createEClass(STATEMENT_BLOCK);
		createEReference(statementBlockEClass, STATEMENT_BLOCK__INSTANCE_STATEMENT_BLOCKS);
		createEAttribute(statementBlockEClass, STATEMENT_BLOCK__NAME);

		executedStatementBlockEClass = createEClass(EXECUTED_STATEMENT_BLOCK);

		executableStatementBlockEClass = createEClass(EXECUTABLE_STATEMENT_BLOCK);
		createEAttribute(executableStatementBlockEClass, EXECUTABLE_STATEMENT_BLOCK__DATE);

		fireableStatementBlockEClass = createEClass(FIREABLE_STATEMENT_BLOCK);

		enabledStatementBlockEClass = createEClass(ENABLED_STATEMENT_BLOCK);

		blockInstanceEClass = createEClass(BLOCK_INSTANCE);
		createEReference(blockInstanceEClass, BLOCK_INSTANCE__BLOCK_INSTANCES);

		compositionInstanceEClass = createEClass(COMPOSITION_INSTANCE);
		createEReference(compositionInstanceEClass, COMPOSITION_INSTANCE__COMPOSITION);

		declarationInstanceEClass = createEClass(DECLARATION_INSTANCE);
		createEReference(declarationInstanceEClass, DECLARATION_INSTANCE__VARIABLE_DECLARATION_INSTANCES);
		createEAttribute(declarationInstanceEClass, DECLARATION_INSTANCE__NAME);
		createEReference(declarationInstanceEClass, DECLARATION_INSTANCE__INSTANCE);
		createEAttribute(declarationInstanceEClass, DECLARATION_INSTANCE__FLATNAME);

		componentDeclarationInstanceEClass = createEClass(COMPONENT_DECLARATION_INSTANCE);
		createEReference(componentDeclarationInstanceEClass, COMPONENT_DECLARATION_INSTANCE__COMPONENT);

		processDeclarationInstanceEClass = createEClass(PROCESS_DECLARATION_INSTANCE);
		createEReference(processDeclarationInstanceEClass, PROCESS_DECLARATION_INSTANCE__CURRENT_STATE);
		createEReference(processDeclarationInstanceEClass, PROCESS_DECLARATION_INSTANCE__PROCESS);
		createEReference(processDeclarationInstanceEClass, PROCESS_DECLARATION_INSTANCE__INSTANCE_STATEMENT_BLOCKS);

		instanceStatementBlockEClass = createEClass(INSTANCE_STATEMENT_BLOCK);
		createEReference(instanceStatementBlockEClass, INSTANCE_STATEMENT_BLOCK__TRANSITION_SOURCE);
		createEReference(instanceStatementBlockEClass, INSTANCE_STATEMENT_BLOCK__STATEMENTS);
		createEAttribute(instanceStatementBlockEClass, INSTANCE_STATEMENT_BLOCK__NAME);

		instanceExecutedStatementBlockEClass = createEClass(INSTANCE_EXECUTED_STATEMENT_BLOCK);

		instanceExecutableStatementBlockEClass = createEClass(INSTANCE_EXECUTABLE_STATEMENT_BLOCK);

		instanceFireableStatementBlockEClass = createEClass(INSTANCE_FIREABLE_STATEMENT_BLOCK);

		instanceEnabledStatementBlockEClass = createEClass(INSTANCE_ENABLED_STATEMENT_BLOCK);

		variableDeclarationInstanceEClass = createEClass(VARIABLE_DECLARATION_INSTANCE);
		createEReference(variableDeclarationInstanceEClass, VARIABLE_DECLARATION_INSTANCE__VARIABLE_DECLARATION);
		createEReference(variableDeclarationInstanceEClass, VARIABLE_DECLARATION_INSTANCE__CURRENT_VALUE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		FiacrePackage theFiacrePackage = (FiacrePackage)EPackage.Registry.INSTANCE.getEPackage(FiacrePackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		executedStatementBlockEClass.getESuperTypes().add(this.getStatementBlock());
		executableStatementBlockEClass.getESuperTypes().add(this.getStatementBlock());
		fireableStatementBlockEClass.getESuperTypes().add(this.getExecutableStatementBlock());
		enabledStatementBlockEClass.getESuperTypes().add(this.getExecutableStatementBlock());
		compositionInstanceEClass.getESuperTypes().add(this.getBlockInstance());
		declarationInstanceEClass.getESuperTypes().add(this.getBlockInstance());
		componentDeclarationInstanceEClass.getESuperTypes().add(this.getDeclarationInstance());
		processDeclarationInstanceEClass.getESuperTypes().add(this.getDeclarationInstance());
		instanceExecutedStatementBlockEClass.getESuperTypes().add(this.getInstanceStatementBlock());
		instanceExecutableStatementBlockEClass.getESuperTypes().add(this.getInstanceStatementBlock());
		instanceFireableStatementBlockEClass.getESuperTypes().add(this.getInstanceExecutableStatementBlock());
		instanceEnabledStatementBlockEClass.getESuperTypes().add(this.getInstanceExecutableStatementBlock());

		// Initialize classes, features, and operations; add parameters
		initEClass(instanceModelEClass, InstanceModel.class, "InstanceModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getInstanceModel_Name(), ecorePackage.getEString(), "name", null, 0, 1, InstanceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getInstanceModel_Model(), theFiacrePackage.getModel(), null, "model", null, 1, 1, InstanceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getInstanceModel_Instance(), this.getDeclarationInstance(), null, "instance", null, 1, -1, InstanceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getInstanceModel_StatementBlocks(), this.getStatementBlock(), null, "statementBlocks", null, 0, -1, InstanceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(statementBlockEClass, StatementBlock.class, "StatementBlock", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getStatementBlock_InstanceStatementBlocks(), this.getInstanceStatementBlock(), null, "instanceStatementBlocks", null, 1, -1, StatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStatementBlock_Name(), ecorePackage.getEString(), "name", null, 0, 1, StatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(executedStatementBlockEClass, ExecutedStatementBlock.class, "ExecutedStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(executableStatementBlockEClass, ExecutableStatementBlock.class, "ExecutableStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getExecutableStatementBlock_Date(), ecorePackage.getEString(), "date", null, 0, 1, ExecutableStatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(fireableStatementBlockEClass, FireableStatementBlock.class, "FireableStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(enabledStatementBlockEClass, EnabledStatementBlock.class, "EnabledStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(blockInstanceEClass, BlockInstance.class, "BlockInstance", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getBlockInstance_BlockInstances(), this.getBlockInstance(), null, "blockInstances", null, 0, -1, BlockInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(compositionInstanceEClass, CompositionInstance.class, "CompositionInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCompositionInstance_Composition(), theFiacrePackage.getComposition(), null, "composition", null, 0, 1, CompositionInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(declarationInstanceEClass, DeclarationInstance.class, "DeclarationInstance", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getDeclarationInstance_VariableDeclarationInstances(), this.getVariableDeclarationInstance(), null, "variableDeclarationInstances", null, 0, -1, DeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeclarationInstance_Name(), ecorePackage.getEString(), "name", null, 1, 1, DeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDeclarationInstance_Instance(), theFiacrePackage.getComponentInstance(), null, "instance", null, 0, 1, DeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeclarationInstance_Flatname(), ecorePackage.getEString(), "flatname", null, 0, 1, DeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(componentDeclarationInstanceEClass, ComponentDeclarationInstance.class, "ComponentDeclarationInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getComponentDeclarationInstance_Component(), theFiacrePackage.getComponentDeclaration(), null, "component", null, 1, 1, ComponentDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(processDeclarationInstanceEClass, ProcessDeclarationInstance.class, "ProcessDeclarationInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getProcessDeclarationInstance_CurrentState(), theFiacrePackage.getStateDeclaration(), null, "currentState", null, 0, 1, ProcessDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getProcessDeclarationInstance_Process(), theFiacrePackage.getProcessDeclaration(), null, "process", null, 1, 1, ProcessDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getProcessDeclarationInstance_InstanceStatementBlocks(), this.getInstanceStatementBlock(), null, "instanceStatementBlocks", null, 0, -1, ProcessDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(instanceStatementBlockEClass, InstanceStatementBlock.class, "InstanceStatementBlock", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getInstanceStatementBlock_TransitionSource(), theFiacrePackage.getTransitionSource(), null, "transitionSource", null, 1, 1, InstanceStatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getInstanceStatementBlock_Statements(), theFiacrePackage.getStatement(), null, "statements", null, 0, -1, InstanceStatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getInstanceStatementBlock_Name(), ecorePackage.getEString(), "name", null, 0, 1, InstanceStatementBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(instanceExecutedStatementBlockEClass, InstanceExecutedStatementBlock.class, "InstanceExecutedStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(instanceExecutableStatementBlockEClass, InstanceExecutableStatementBlock.class, "InstanceExecutableStatementBlock", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(instanceFireableStatementBlockEClass, InstanceFireableStatementBlock.class, "InstanceFireableStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(instanceEnabledStatementBlockEClass, InstanceEnabledStatementBlock.class, "InstanceEnabledStatementBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(variableDeclarationInstanceEClass, VariableDeclarationInstance.class, "VariableDeclarationInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariableDeclarationInstance_VariableDeclaration(), theFiacrePackage.getVariableDeclaration(), null, "variableDeclaration", null, 1, 1, VariableDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariableDeclarationInstance_CurrentValue(), theFiacrePackage.getValueExpression(), null, "currentValue", null, 0, 1, VariableDeclarationInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Create resource
		createResource(eNS_URI);
	}

} //FiacreinstancePackageImpl
