/**
   * 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);
  }
 /**
  * Returns the meta object for the reference list '{@link
  * sechalmersmdsdgroup5.hotel.clients.Client#getInvoices <em>Invoices</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the reference list '<em>Invoices</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Client#getInvoices()
  * @see #getClient()
  * @generated
  */
 public EReference getClient_Invoices() {
   return (EReference) clientEClass.getEStructuralFeatures().get(0);
 }
 /**
  * Returns the meta object for the reference '{@link
  * sechalmersmdsdgroup5.hotel.clients.Guest#getKey <em>Key</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the reference '<em>Key</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Guest#getKey()
  * @see #getGuest()
  * @generated
  */
 public EReference getGuest_Key() {
   return (EReference) guestEClass.getEStructuralFeatures().get(0);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getMunicipality <em>Municipality</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Municipality</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getMunicipality()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_Municipality() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(5);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getCareOf <em>Care Of</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Care Of</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getCareOf()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_CareOf() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(6);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getCountry <em>Country</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Country</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getCountry()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_Country() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(3);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getRegion <em>Region</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Region</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getRegion()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_Region() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(4);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getStreet <em>Street</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Street</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getStreet()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_Street() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(0);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Address#getZipArea <em>Zip Area</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Zip Area</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Address#getZipArea()
  * @see #getAddress()
  * @generated
  */
 public EAttribute getAddress_ZipArea() {
   return (EAttribute) addressEClass.getEStructuralFeatures().get(2);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Customer#getEmail <em>Email</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Email</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Customer#getEmail()
  * @see #getCustomer()
  * @generated
  */
 public EAttribute getCustomer_Email() {
   return (EAttribute) customerEClass.getEStructuralFeatures().get(4);
 }
 /**
  * Returns the meta object for the reference '{@link
  * sechalmersmdsdgroup5.hotel.clients.Customer#getIdentity <em>Identity</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the reference '<em>Identity</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Customer#getIdentity()
  * @see #getCustomer()
  * @generated
  */
 public EReference getCustomer_Identity() {
   return (EReference) customerEClass.getEStructuralFeatures().get(3);
 }
 /**
  * Returns the meta object for the reference '{@link
  * sechalmersmdsdgroup5.hotel.clients.Customer#getAssociatedAdress <em>Associated Adress</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the reference '<em>Associated Adress</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Customer#getAssociatedAdress()
  * @see #getCustomer()
  * @generated
  */
 public EReference getCustomer_AssociatedAdress() {
   return (EReference) customerEClass.getEStructuralFeatures().get(2);
 }
 /**
  * Returns the meta object for the reference '{@link
  * sechalmersmdsdgroup5.hotel.clients.Customer#getCard <em>Card</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the reference '<em>Card</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Customer#getCard()
  * @see #getCustomer()
  * @generated
  */
 public EReference getCustomer_Card() {
   return (EReference) customerEClass.getEStructuralFeatures().get(1);
 }
 /**
  * Returns the meta object for the attribute '{@link
  * sechalmersmdsdgroup5.hotel.clients.Customer#getPaymentMethod <em>Payment Method</em>}'.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @return the meta object for the attribute '<em>Payment Method</em>'.
  * @see sechalmersmdsdgroup5.hotel.clients.Customer#getPaymentMethod()
  * @see #getCustomer()
  * @generated
  */
 public EAttribute getCustomer_PaymentMethod() {
   return (EAttribute) customerEClass.getEStructuralFeatures().get(0);
 }