/**
   * 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
    IdentitiesPackageImpl theIdentitiesPackage =
        (IdentitiesPackageImpl)
            EPackage.Registry.INSTANCE.getEPackage(IdentitiesPackageImpl.eNS_URI);
    ServicesPackageImpl theServicesPackage =
        (ServicesPackageImpl) EPackage.Registry.INSTANCE.getEPackage(ServicesPackageImpl.eNS_URI);
    FacilitiesPackageImpl theFacilitiesPackage =
        (FacilitiesPackageImpl)
            EPackage.Registry.INSTANCE.getEPackage(FacilitiesPackageImpl.eNS_URI);
    PaymentPackageImpl thePaymentPackage =
        (PaymentPackageImpl) EPackage.Registry.INSTANCE.getEPackage(PaymentPackageImpl.eNS_URI);
    OrderingPackageImpl theOrderingPackage =
        (OrderingPackageImpl) EPackage.Registry.INSTANCE.getEPackage(OrderingPackageImpl.eNS_URI);

    // Create type parameters

    // Set bounds for type parameters

    // Add supertypes to classes
    guestEClass.getESuperTypes().add(theIdentitiesPackage.getRealPerson());
    guestEClass.getESuperTypes().add(this.getClient());
    guestEClass.getESuperTypes().add(theServicesPackage.getServiceConsumer());
    customerEClass.getESuperTypes().add(this.getClient());

    // Initialize classes and features; add operations and parameters
    initEClass(
        guestEClass,
        Guest.class,
        "Guest",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getGuest_Key(),
        theFacilitiesPackage.getKey(),
        null,
        "key",
        null,
        1,
        1,
        Guest.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);

    initEClass(
        customerEClass,
        Customer.class,
        "Customer",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getCustomer_PaymentMethod(),
        thePaymentPackage.getPaymentMethod(),
        "paymentMethod",
        null,
        1,
        1,
        Customer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEReference(
        getCustomer_Card(),
        thePaymentPackage.getCreditCard(),
        null,
        "card",
        null,
        1,
        1,
        Customer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEReference(
        getCustomer_AssociatedAdress(),
        this.getAddress(),
        null,
        "associatedAdress",
        null,
        1,
        1,
        Customer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEReference(
        getCustomer_Identity(),
        theIdentitiesPackage.getIdentity(),
        null,
        "identity",
        null,
        1,
        1,
        Customer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getCustomer_Email(),
        ecorePackage.getEString(),
        "email",
        null,
        1,
        1,
        Customer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);

    initEClass(
        addressEClass,
        Address.class,
        "Address",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getAddress_Street(),
        ecorePackage.getEString(),
        "street",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_ZipCode(),
        ecorePackage.getEInt(),
        "zipCode",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_ZipArea(),
        ecorePackage.getEString(),
        "zipArea",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_Country(),
        ecorePackage.getEString(),
        "country",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_Region(),
        ecorePackage.getEString(),
        "region",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_Municipality(),
        ecorePackage.getEString(),
        "municipality",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
    initEAttribute(
        getAddress_CareOf(),
        ecorePackage.getEString(),
        "careOf",
        null,
        1,
        1,
        Address.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);

    initEClass(
        iClientEClass,
        IClient.class,
        "IClient",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    EOperation op =
        addEOperation(
            iClientEClass, this.getCustomer(), "createCustomer", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, theIdentitiesPackage.getIdentity(), "identity", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(
        op, thePaymentPackage.getPaymentMethod(), "paymentMethod", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "email", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, thePaymentPackage.getCreditCard(), "card", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, this.getAddress(), "address", 1, 1, IS_UNIQUE, !IS_ORDERED);

    op = addEOperation(iClientEClass, this.getGuest(), "createGuest", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "name", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "ssn", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEInt(), "age", 1, 1, IS_UNIQUE, !IS_ORDERED);

    op =
        addEOperation(
            iClientEClass, this.getAddress(), "createAddress", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "street", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEInt(), "zipCode", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "zipArea", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "country", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "region", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "municipality", 1, 1, IS_UNIQUE, !IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "careOf", 1, 1, IS_UNIQUE, !IS_ORDERED);

    initEClass(
        clientEClass,
        Client.class,
        "Client",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getClient_Invoices(),
        theOrderingPackage.getInvoice(),
        null,
        "invoices",
        null,
        0,
        -1,
        Client.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        !IS_ORDERED);
  }