/**
 */
package ua.ansymo.hintco.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EcorePackage;

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

import ua.ansymo.hintco.Adaptation;
import ua.ansymo.hintco.Alternative;
import ua.ansymo.hintco.ApproximationAdaptation;
import ua.ansymo.hintco.CandidateScenario;
import ua.ansymo.hintco.Candidates;
import ua.ansymo.hintco.CosimUnitDeclaration;
import ua.ansymo.hintco.CosimUnitInstance;
import ua.ansymo.hintco.DecompositionAdaptation;
import ua.ansymo.hintco.ExtrapolationAdaptation;
import ua.ansymo.hintco.HierarchicalCosimUnitDeclaration;
import ua.ansymo.hintco.HintcoFactory;
import ua.ansymo.hintco.HintcoPackage;
import ua.ansymo.hintco.IDed;
import ua.ansymo.hintco.InputPortDeclaration;
import ua.ansymo.hintco.InputPortInstance;
import ua.ansymo.hintco.InterpolationAdaptation;
import ua.ansymo.hintco.OutputPortDeclaration;
import ua.ansymo.hintco.OutputPortInstance;
import ua.ansymo.hintco.PortDeclaration;
import ua.ansymo.hintco.PortInstance;
import ua.ansymo.hintco.PrecendenceNode;
import ua.ansymo.hintco.VariantDiagram;
import ua.ansymo.hintco.XorAdaptation;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EDataType intEDataType = 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 ua.ansymo.hintco.HintcoPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private HintcoPackageImpl() {
		super(eNS_URI, HintcoFactory.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 HintcoPackage#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 HintcoPackage init() {
		if (isInited) return (HintcoPackage)EPackage.Registry.INSTANCE.getEPackage(HintcoPackage.eNS_URI);

		// Obtain or create and register package
		Object registeredHintcoPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
		HintcoPackageImpl theHintcoPackage = registeredHintcoPackage instanceof HintcoPackageImpl ? (HintcoPackageImpl)registeredHintcoPackage : new HintcoPackageImpl();

		isInited = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EOperation getAdaptation__AdaptedPort() {
		return adaptationEClass.getEOperations().get(0);
	}

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

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

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

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

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

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

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

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

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

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

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EDataType getInt() {
		return intEDataType;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public HintcoFactory getHintcoFactory() {
		return (HintcoFactory)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
		iDedEClass = createEClass(IDED);
		createEAttribute(iDedEClass, IDED__IDENTIFIER);

		candidatesEClass = createEClass(CANDIDATES);
		createEReference(candidatesEClass, CANDIDATES__CANDIDATES);
		createEReference(candidatesEClass, CANDIDATES__CSU_DECLARATIONS);
		createEReference(candidatesEClass, CANDIDATES__ROOT);
		createEReference(candidatesEClass, CANDIDATES__NODES);

		variantDiagramEClass = createEClass(VARIANT_DIAGRAM);
		createEReference(variantDiagramEClass, VARIANT_DIAGRAM__CHILDREN);
		createEReference(variantDiagramEClass, VARIANT_DIAGRAM__ALTERNATIVE);
		createEAttribute(variantDiagramEClass, VARIANT_DIAGRAM__NAME);

		precendenceNodeEClass = createEClass(PRECENDENCE_NODE);
		createEReference(precendenceNodeEClass, PRECENDENCE_NODE__PRECEDES);
		createEReference(precendenceNodeEClass, PRECENDENCE_NODE__SUCCEEDS);
		createEReference(precendenceNodeEClass, PRECENDENCE_NODE__BEFORE);
		createEReference(precendenceNodeEClass, PRECENDENCE_NODE__AFTER);

		candidateScenarioEClass = createEClass(CANDIDATE_SCENARIO);
		createEReference(candidateScenarioEClass, CANDIDATE_SCENARIO__COSIMUNITS);
		createEAttribute(candidateScenarioEClass, CANDIDATE_SCENARIO__NAME);

		cosimUnitDeclarationEClass = createEClass(COSIM_UNIT_DECLARATION);
		createEReference(cosimUnitDeclarationEClass, COSIM_UNIT_DECLARATION__PORTS);

		hierarchicalCosimUnitDeclarationEClass = createEClass(HIERARCHICAL_COSIM_UNIT_DECLARATION);
		createEReference(hierarchicalCosimUnitDeclarationEClass, HIERARCHICAL_COSIM_UNIT_DECLARATION__CHILDREN);

		cosimUnitInstanceEClass = createEClass(COSIM_UNIT_INSTANCE);
		createEReference(cosimUnitInstanceEClass, COSIM_UNIT_INSTANCE__DECLARATION);
		createEReference(cosimUnitInstanceEClass, COSIM_UNIT_INSTANCE__PORTS);

		portDeclarationEClass = createEClass(PORT_DECLARATION);

		inputPortDeclarationEClass = createEClass(INPUT_PORT_DECLARATION);

		outputPortDeclarationEClass = createEClass(OUTPUT_PORT_DECLARATION);

		portInstanceEClass = createEClass(PORT_INSTANCE);
		createEReference(portInstanceEClass, PORT_INSTANCE__ADAPTATION);
		createEReference(portInstanceEClass, PORT_INSTANCE__UNIT);

		inputPortInstanceEClass = createEClass(INPUT_PORT_INSTANCE);
		createEReference(inputPortInstanceEClass, INPUT_PORT_INSTANCE__DECLARATION);
		createEReference(inputPortInstanceEClass, INPUT_PORT_INSTANCE__VALUE_FROM);

		outputPortInstanceEClass = createEClass(OUTPUT_PORT_INSTANCE);
		createEReference(outputPortInstanceEClass, OUTPUT_PORT_INSTANCE__VALUE_TO);
		createEReference(outputPortInstanceEClass, OUTPUT_PORT_INSTANCE__DECLARATION);

		alternativeEClass = createEClass(ALTERNATIVE);
		createEAttribute(alternativeEClass, ALTERNATIVE__WEIGHT);
		createEReference(alternativeEClass, ALTERNATIVE__IMPLIES);

		adaptationEClass = createEClass(ADAPTATION);
		createEReference(adaptationEClass, ADAPTATION__PARENT);
		createEReference(adaptationEClass, ADAPTATION__PORT);
		createEOperation(adaptationEClass, ADAPTATION___ADAPTED_PORT);

		decompositionAdaptationEClass = createEClass(DECOMPOSITION_ADAPTATION);
		createEReference(decompositionAdaptationEClass, DECOMPOSITION_ADAPTATION__CHILDREN);

		xorAdaptationEClass = createEClass(XOR_ADAPTATION);
		createEAttribute(xorAdaptationEClass, XOR_ADAPTATION__NAME);

		approximationAdaptationEClass = createEClass(APPROXIMATION_ADAPTATION);
		createEAttribute(approximationAdaptationEClass, APPROXIMATION_ADAPTATION__ORDER);

		extrapolationAdaptationEClass = createEClass(EXTRAPOLATION_ADAPTATION);
		createEAttribute(extrapolationAdaptationEClass, EXTRAPOLATION_ADAPTATION__NAME);

		interpolationAdaptationEClass = createEClass(INTERPOLATION_ADAPTATION);
		createEAttribute(interpolationAdaptationEClass, INTERPOLATION_ADAPTATION__NAME);

		// Create data types
		intEDataType = createEDataType(INT);
	}

	/**
	 * <!-- 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
		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		variantDiagramEClass.getESuperTypes().add(this.getIDed());
		candidateScenarioEClass.getESuperTypes().add(this.getIDed());
		candidateScenarioEClass.getESuperTypes().add(this.getAlternative());
		cosimUnitDeclarationEClass.getESuperTypes().add(this.getIDed());
		hierarchicalCosimUnitDeclarationEClass.getESuperTypes().add(this.getCosimUnitDeclaration());
		cosimUnitInstanceEClass.getESuperTypes().add(this.getIDed());
		cosimUnitInstanceEClass.getESuperTypes().add(this.getPrecendenceNode());
		portDeclarationEClass.getESuperTypes().add(this.getIDed());
		inputPortDeclarationEClass.getESuperTypes().add(this.getPortDeclaration());
		outputPortDeclarationEClass.getESuperTypes().add(this.getPortDeclaration());
		portInstanceEClass.getESuperTypes().add(this.getPrecendenceNode());
		portInstanceEClass.getESuperTypes().add(this.getIDed());
		inputPortInstanceEClass.getESuperTypes().add(this.getPortInstance());
		outputPortInstanceEClass.getESuperTypes().add(this.getPortInstance());
		adaptationEClass.getESuperTypes().add(this.getAlternative());
		decompositionAdaptationEClass.getESuperTypes().add(this.getAdaptation());
		xorAdaptationEClass.getESuperTypes().add(this.getDecompositionAdaptation());
		approximationAdaptationEClass.getESuperTypes().add(this.getAdaptation());
		extrapolationAdaptationEClass.getESuperTypes().add(this.getApproximationAdaptation());
		interpolationAdaptationEClass.getESuperTypes().add(this.getApproximationAdaptation());

		// Initialize classes, features, and operations; add parameters
		initEClass(iDedEClass, IDed.class, "IDed", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getIDed_Identifier(), theEcorePackage.getEString(), "identifier", null, 0, 1, IDed.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(candidatesEClass, Candidates.class, "Candidates", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCandidates_Candidates(), this.getCandidateScenario(), null, "candidates", null, 0, -1, Candidates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCandidates_CsuDeclarations(), this.getCosimUnitDeclaration(), null, "csuDeclarations", null, 0, -1, Candidates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCandidates_Root(), this.getVariantDiagram(), null, "root", null, 0, 1, Candidates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCandidates_Nodes(), this.getVariantDiagram(), null, "nodes", null, 0, -1, Candidates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variantDiagramEClass, VariantDiagram.class, "VariantDiagram", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariantDiagram_Children(), this.getVariantDiagram(), null, "children", null, 0, -1, VariantDiagram.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariantDiagram_Alternative(), this.getAlternative(), null, "alternative", null, 0, 1, VariantDiagram.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getVariantDiagram_Name(), theEcorePackage.getEString(), "name", null, 0, 1, VariantDiagram.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(precendenceNodeEClass, PrecendenceNode.class, "PrecendenceNode", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getPrecendenceNode_Precedes(), this.getPrecendenceNode(), this.getPrecendenceNode_Succeeds(), "precedes", null, 0, -1, PrecendenceNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getPrecendenceNode_Succeeds(), this.getPrecendenceNode(), this.getPrecendenceNode_Precedes(), "succeeds", null, 0, -1, PrecendenceNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getPrecendenceNode_Before(), this.getPrecendenceNode(), this.getPrecendenceNode_After(), "before", null, 0, 1, PrecendenceNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getPrecendenceNode_After(), this.getPrecendenceNode(), this.getPrecendenceNode_Before(), "after", null, 0, 1, PrecendenceNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(candidateScenarioEClass, CandidateScenario.class, "CandidateScenario", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCandidateScenario_Cosimunits(), this.getCosimUnitInstance(), null, "cosimunits", null, 0, -1, CandidateScenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getCandidateScenario_Name(), theEcorePackage.getEString(), "name", null, 0, 1, CandidateScenario.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(cosimUnitDeclarationEClass, CosimUnitDeclaration.class, "CosimUnitDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCosimUnitDeclaration_Ports(), this.getPortDeclaration(), null, "ports", null, 0, -1, CosimUnitDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(hierarchicalCosimUnitDeclarationEClass, HierarchicalCosimUnitDeclaration.class, "HierarchicalCosimUnitDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getHierarchicalCosimUnitDeclaration_Children(), this.getCosimUnitInstance(), null, "children", null, 0, -1, HierarchicalCosimUnitDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cosimUnitInstanceEClass, CosimUnitInstance.class, "CosimUnitInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCosimUnitInstance_Declaration(), this.getCosimUnitDeclaration(), null, "declaration", null, 1, 1, CosimUnitInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCosimUnitInstance_Ports(), this.getPortInstance(), this.getPortInstance_Unit(), "ports", null, 0, -1, CosimUnitInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(portDeclarationEClass, PortDeclaration.class, "PortDeclaration", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(inputPortDeclarationEClass, InputPortDeclaration.class, "InputPortDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(outputPortDeclarationEClass, OutputPortDeclaration.class, "OutputPortDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(portInstanceEClass, PortInstance.class, "PortInstance", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getPortInstance_Adaptation(), this.getAdaptation(), this.getAdaptation_Port(), "adaptation", null, 0, 1, PortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getPortInstance_Unit(), this.getCosimUnitInstance(), this.getCosimUnitInstance_Ports(), "unit", null, 0, 1, PortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(inputPortInstanceEClass, InputPortInstance.class, "InputPortInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getInputPortInstance_Declaration(), this.getInputPortDeclaration(), null, "declaration", null, 0, 1, InputPortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getInputPortInstance_ValueFrom(), this.getOutputPortInstance(), this.getOutputPortInstance_ValueTo(), "valueFrom", null, 0, 1, InputPortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(outputPortInstanceEClass, OutputPortInstance.class, "OutputPortInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getOutputPortInstance_ValueTo(), this.getInputPortInstance(), this.getInputPortInstance_ValueFrom(), "valueTo", null, 0, -1, OutputPortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getOutputPortInstance_Declaration(), this.getOutputPortDeclaration(), null, "declaration", null, 0, 1, OutputPortInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(alternativeEClass, Alternative.class, "Alternative", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAlternative_Weight(), theEcorePackage.getEInt(), "weight", null, 0, 1, Alternative.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getAlternative_Implies(), this.getAlternative(), null, "implies", null, 0, -1, Alternative.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(adaptationEClass, Adaptation.class, "Adaptation", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getAdaptation_Parent(), this.getDecompositionAdaptation(), this.getDecompositionAdaptation_Children(), "parent", null, 0, 1, Adaptation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getAdaptation_Port(), this.getPortInstance(), this.getPortInstance_Adaptation(), "port", null, 0, 1, Adaptation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEOperation(getAdaptation__AdaptedPort(), this.getPortInstance(), "adaptedPort", 0, 1, !IS_UNIQUE, IS_ORDERED);

		initEClass(decompositionAdaptationEClass, DecompositionAdaptation.class, "DecompositionAdaptation", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getDecompositionAdaptation_Children(), this.getAdaptation(), this.getAdaptation_Parent(), "children", null, 0, -1, DecompositionAdaptation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(xorAdaptationEClass, XorAdaptation.class, "XorAdaptation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getXorAdaptation_Name(), theEcorePackage.getEString(), "name", null, 0, 1, XorAdaptation.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(approximationAdaptationEClass, ApproximationAdaptation.class, "ApproximationAdaptation", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getApproximationAdaptation_Order(), theEcorePackage.getEInt(), "order", null, 0, 1, ApproximationAdaptation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(extrapolationAdaptationEClass, ExtrapolationAdaptation.class, "ExtrapolationAdaptation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getExtrapolationAdaptation_Name(), theEcorePackage.getEString(), "name", null, 0, 1, ExtrapolationAdaptation.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(interpolationAdaptationEClass, InterpolationAdaptation.class, "InterpolationAdaptation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getInterpolationAdaptation_Name(), theEcorePackage.getEString(), "name", null, 0, 1, InterpolationAdaptation.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		// Initialize data types
		initEDataType(intEDataType, int.class, "Int", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);

		// Create resource
		createResource(eNS_URI);
	}

} //HintcoPackageImpl
