/**
 * <copyright>
 * </copyright>
 *
 * $Id: DescriptionPackageImpl.java,v 1.1 2006/01/24 15:43:02 xblanc Exp $
 */
package org.eclipse.mddi.modelbus.description.impl;

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 org.eclipse.mddi.modelbus.description.DescriptionFactory;
import org.eclipse.mddi.modelbus.description.DescriptionPackage;
import org.eclipse.mddi.modelbus.description.ModelBusPackaging;

import org.eclipse.mddi.modelbus.description.abstract_.AbstractPackage;

import org.eclipse.mddi.modelbus.description.abstract_.impl.AbstractPackageImpl;

import org.eclipse.mddi.modelbus.description.concrete.ConcretePackage;

import org.eclipse.mddi.modelbus.description.concrete.impl.ConcretePackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class DescriptionPackageImpl extends EPackageImpl implements DescriptionPackage {
    /**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    public static final String copyright = "Copyright (c) 2002-2003 IST-2004-2006-511731 ModelWare - ModelBus.  All rights reserved.This software is published under the terms of the ModelBus Software License in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of ModelBus Software License is provided with this distribution in doc/LICENSE.txt file.";

    /**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    private EClass modelBusPackagingEClass = 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 org.eclipse.mddi.modelbus.description.DescriptionPackage#eNS_URI
     * @see #init()
     * @generated
     */
    private DescriptionPackageImpl() {
        super(eNS_URI, DescriptionFactory.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.  Simple
     * dependencies are satisfied by calling this method on all
     * dependent packages before doing anything else.  This method drives
     * initialization for interdependent packages directly, in parallel
     * with this package, itself.
     * <p>Of this package and its interdependencies, all packages which
     * have not yet been registered by their URI values are first created
     * and registered.  The packages are then initialized in two steps:
     * meta-model objects for all of the packages are created before any
     * are initialized, since one package's meta-model objects may refer to
     * those of another.
     * <p>Invocation of this method will not affect any packages that have
     * already been initialized.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see #eNS_URI
     * @see #createPackageContents()
     * @see #initializePackageContents()
     * @generated
     */
    public static DescriptionPackage init() {
        if (isInited) return (DescriptionPackage)EPackage.Registry.INSTANCE.getEPackage(DescriptionPackage.eNS_URI);

        // Obtain or create and register package
        DescriptionPackageImpl theDescriptionPackage = (DescriptionPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof DescriptionPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new DescriptionPackageImpl());

        isInited = true;

        // Obtain or create and register interdependencies
        AbstractPackageImpl theAbstractPackage = (AbstractPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AbstractPackage.eNS_URI) instanceof AbstractPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AbstractPackage.eNS_URI) : AbstractPackageImpl.eINSTANCE);
        ConcretePackageImpl theConcretePackage = (ConcretePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ConcretePackage.eNS_URI) instanceof ConcretePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ConcretePackage.eNS_URI) : ConcretePackageImpl.eINSTANCE);

        // Create package meta-data objects
        theDescriptionPackage.createPackageContents();
        theAbstractPackage.createPackageContents();
        theConcretePackage.createPackageContents();

        // Initialize created meta-data
        theDescriptionPackage.initializePackageContents();
        theAbstractPackage.initializePackageContents();
        theConcretePackage.initializePackageContents();

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

        return theDescriptionPackage;
    }

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

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

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

    /**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    public DescriptionFactory getDescriptionFactory() {
        return (DescriptionFactory)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
        modelBusPackagingEClass = createEClass(MODEL_BUS_PACKAGING);
        createEReference(modelBusPackagingEClass, MODEL_BUS_PACKAGING__CONTENT);
        createEAttribute(modelBusPackagingEClass, MODEL_BUS_PACKAGING__NAME);
    }

    /**
     * <!-- 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
        AbstractPackageImpl theAbstractPackage = (AbstractPackageImpl)EPackage.Registry.INSTANCE.getEPackage(AbstractPackage.eNS_URI);
        ConcretePackageImpl theConcretePackage = (ConcretePackageImpl)EPackage.Registry.INSTANCE.getEPackage(ConcretePackage.eNS_URI);

        // Add subpackages
        getESubpackages().add(theAbstractPackage);
        getESubpackages().add(theConcretePackage);

        // Add supertypes to classes

        // Initialize classes and features; add operations and parameters
        initEClass(modelBusPackagingEClass, ModelBusPackaging.class, "ModelBusPackaging", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
        initEReference(getModelBusPackaging_Content(), ecorePackage.getEObject(), null, "content", null, 0, -1, ModelBusPackaging.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
        initEAttribute(getModelBusPackaging_Name(), ecorePackage.getEString(), "name", null, 0, 1, ModelBusPackaging.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

        // Create resource
        createResource(eNS_URI);
    }

} //DescriptionPackageImpl
