/**
   * 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 BasicPackageImpl#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 BasicPackageImpl init() {
    if (isInited)
      return (BasicPackageImpl) EPackage.Registry.INSTANCE.getEPackage(BasicPackageImpl.eNS_URI);

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

    isInited = true;

    // Obtain or create and register interdependencies
    ApplicationPackageImpl theApplicationPackage =
        (ApplicationPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(ApplicationPackageImpl.eNS_URI)
                    instanceof ApplicationPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(ApplicationPackageImpl.eNS_URI)
                : ApplicationPackageImpl.eINSTANCE);
    CommandsPackageImpl theCommandsPackage =
        (CommandsPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(CommandsPackageImpl.eNS_URI)
                    instanceof CommandsPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(CommandsPackageImpl.eNS_URI)
                : CommandsPackageImpl.eINSTANCE);
    UiPackageImpl theUiPackage =
        (UiPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(UiPackageImpl.eNS_URI) instanceof UiPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(UiPackageImpl.eNS_URI)
                : UiPackageImpl.eINSTANCE);
    MenuPackageImpl theMenuPackage =
        (MenuPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(MenuPackageImpl.eNS_URI)
                    instanceof MenuPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(MenuPackageImpl.eNS_URI)
                : MenuPackageImpl.eINSTANCE);
    org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl theBasicPackage_1 =
        (org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(
                        org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.eNS_URI)
                    instanceof org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(
                    org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.eNS_URI)
                : org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.eINSTANCE);
    AdvancedPackageImpl theAdvancedPackage =
        (AdvancedPackageImpl)
            (EPackage.Registry.INSTANCE.getEPackage(AdvancedPackageImpl.eNS_URI)
                    instanceof AdvancedPackageImpl
                ? EPackage.Registry.INSTANCE.getEPackage(AdvancedPackageImpl.eNS_URI)
                : AdvancedPackageImpl.eINSTANCE);

    // Create package meta-data objects
    theBasicPackage.createPackageContents();
    theApplicationPackage.createPackageContents();
    theCommandsPackage.createPackageContents();
    theUiPackage.createPackageContents();
    theMenuPackage.createPackageContents();
    theBasicPackage_1.createPackageContents();
    theAdvancedPackage.createPackageContents();

    // Initialize created meta-data
    theBasicPackage.initializePackageContents();
    theApplicationPackage.initializePackageContents();
    theCommandsPackage.initializePackageContents();
    theUiPackage.initializePackageContents();
    theMenuPackage.initializePackageContents();
    theBasicPackage_1.initializePackageContents();
    theAdvancedPackage.initializePackageContents();

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

    // Update the registry and return the package
    EPackage.Registry.INSTANCE.put(BasicPackageImpl.eNS_URI, theBasicPackage);
    return theBasicPackage;
  }
  /**
   * 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
    ApplicationPackageImpl theApplicationPackage =
        (ApplicationPackageImpl)
            EPackage.Registry.INSTANCE.getEPackage(ApplicationPackageImpl.eNS_URI);
    UiPackageImpl theUiPackage =
        (UiPackageImpl) EPackage.Registry.INSTANCE.getEPackage(UiPackageImpl.eNS_URI);
    CommandsPackageImpl theCommandsPackage =
        (CommandsPackageImpl) EPackage.Registry.INSTANCE.getEPackage(CommandsPackageImpl.eNS_URI);
    MenuPackageImpl theMenuPackage =
        (MenuPackageImpl) EPackage.Registry.INSTANCE.getEPackage(MenuPackageImpl.eNS_URI);

    // Create type parameters

    // Set bounds for type parameters

    // Add supertypes to classes
    partDescriptorEClass.getESuperTypes().add(theApplicationPackage.getApplicationElement());
    partDescriptorEClass.getESuperTypes().add(theUiPackage.getUILabel());
    partDescriptorEClass.getESuperTypes().add(theCommandsPackage.getHandlerContainer());
    partDescriptorEClass.getESuperTypes().add(theCommandsPackage.getBindings());

    // Initialize classes, features, and operations; add parameters
    initEClass(
        partDescriptorEClass,
        MPartDescriptor.class,
        "PartDescriptor",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_AllowMultiple(),
        ecorePackage.getEBoolean(),
        "allowMultiple",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_Category(),
        ecorePackage.getEString(),
        "category",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEReference(
        getPartDescriptor_Menus(),
        theMenuPackage.getMenu(),
        null,
        "menus",
        null,
        0,
        -1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEReference(
        getPartDescriptor_Toolbar(),
        theMenuPackage.getToolBar(),
        null,
        "toolbar",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_Closeable(),
        ecorePackage.getEBoolean(),
        "closeable",
        "false",
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
    initEAttribute(
        getPartDescriptor_Dirtyable(),
        ecorePackage.getEBoolean(),
        "dirtyable",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_ContributionURI(),
        ecorePackage.getEString(),
        "contributionURI",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_Description(),
        ecorePackage.getEString(),
        "description",
        null,
        0,
        1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_LocalizedDescription(),
        ecorePackage.getEString(),
        "localizedDescription",
        null,
        0,
        1,
        MPartDescriptor.class,
        IS_TRANSIENT,
        IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
    initEAttribute(
        getPartDescriptor_Variables(),
        ecorePackage.getEString(),
        "variables",
        null,
        0,
        -1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED); //$NON-NLS-1$
    initEReference(
        getPartDescriptor_Properties(),
        theApplicationPackage.getStringToStringMap(),
        null,
        "properties",
        null,
        0,
        -1,
        MPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$

    initEClass(
        partDescriptorContainerEClass,
        MPartDescriptorContainer.class,
        "PartDescriptorContainer",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
    initEReference(
        getPartDescriptorContainer_Descriptors(),
        this.getPartDescriptor(),
        null,
        "descriptors",
        null,
        0,
        -1,
        MPartDescriptorContainer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED); //$NON-NLS-1$
  }
  /**
   * 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
    BasicPackageImpl theBasicPackage =
        (BasicPackageImpl) EPackage.Registry.INSTANCE.getEPackage(BasicPackageImpl.eNS_URI);
    ApplicationPackageImpl theApplicationPackage =
        (ApplicationPackageImpl)
            EPackage.Registry.INSTANCE.getEPackage(ApplicationPackageImpl.eNS_URI);
    PreferencesPackage thePreferencesPackage =
        (PreferencesPackage) EPackage.Registry.INSTANCE.getEPackage(PreferencesPackage.eNS_URI);

    // Create type parameters

    // Set bounds for type parameters

    // Add supertypes to classes
    editorPartDescriptorEClass.getESuperTypes().add(theBasicPackage.getPartDescriptor());
    vaaclipseApplicationEClass.getESuperTypes().add(theApplicationPackage.getApplication());

    // Initialize classes and features; add operations and parameters
    initEClass(
        editorPartDescriptorEClass,
        EditorPartDescriptor.class,
        "EditorPartDescriptor",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getEditorPartDescriptor_UriFilter(),
        ecorePackage.getEString(),
        "uriFilter",
        null,
        0,
        1,
        EditorPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getEditorPartDescriptor_PartAddingLogicUri(),
        ecorePackage.getEString(),
        "partAddingLogicUri",
        "bundleclass://org.semanticsoft.e4extension/org.semanticsoft.e4extension.shared.DefaultPartAddingLogic",
        0,
        1,
        EditorPartDescriptor.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        vaaclipseApplicationEClass,
        VaaclipseApplication.class,
        "VaaclipseApplication",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getVaaclipseApplication_EditorDescriptors(),
        this.getEditorPartDescriptor(),
        null,
        "editorDescriptors",
        null,
        0,
        -1,
        VaaclipseApplication.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getVaaclipseApplication_PreferencesCategories(),
        thePreferencesPackage.getPreferencesCategory(),
        null,
        "preferencesCategories",
        null,
        0,
        -1,
        VaaclipseApplication.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getVaaclipseApplication_PreferencesPages(),
        thePreferencesPackage.getPreferencesPage(),
        null,
        "preferencesPages",
        null,
        0,
        -1,
        VaaclipseApplication.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);
  }