protected void handleEClassifier(
     EClassifier classifier, Set<EPackage> visitedPackages, Set<Object> visited) {
   if (classifier != null && visited.add(classifier)) {
     handleEPackage(classifier.getEPackage(), visitedPackages);
     handleETypeParameters(classifier.getETypeParameters(), visitedPackages, visited);
     if (classifier instanceof EClass) {
       EClass eClass = (EClass) classifier;
       handleEStructuralFeatures(eClass.getEStructuralFeatures(), visitedPackages, visited);
       handleEOperations(eClass.getEOperations(), visitedPackages, visited);
       handleEGenericTypes(eClass.getEGenericSuperTypes(), visitedPackages, visited);
     }
   }
 }
  /**
   * 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
    TypesPackage theTypesPackage =
        (TypesPackage) EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);

    // Create type parameters

    // Set bounds for type parameters

    // Add supertypes to classes
    iContactEClass.getESuperTypes().add(this.getIdentifiable());
    iContactEClass.getESuperTypes().add(this.getDeleteable());
    iPersistentObjectEClass.getESuperTypes().add(this.getIdentifiable());
    iXidEClass.getESuperTypes().add(this.getIPersistentObject());
    EGenericType g1 = createEGenericType(theTypesPackage.getComparable());
    EGenericType g2 = createEGenericType(this.getISticker());
    g1.getETypeArguments().add(g2);
    iStickerEClass.getEGenericSuperTypes().add(g1);
    iPersonEClass.getESuperTypes().add(this.getIContact());
    iPatientEClass.getESuperTypes().add(this.getIPerson());
    iUserEClass.getESuperTypes().add(this.getIContact());

    // Initialize classes and features; add operations and parameters
    initEClass(
        iContactEClass,
        IContact.class,
        "IContact",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIContact_ContactType(),
        theTypesPackage.getContactType(),
        "contactType",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Mandator(),
        ecorePackage.getEBoolean(),
        "mandator",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_User(),
        ecorePackage.getEBoolean(),
        "user",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Patient(),
        ecorePackage.getEBoolean(),
        "patient",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Description1(),
        ecorePackage.getEString(),
        "description1",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Description2(),
        ecorePackage.getEString(),
        "description2",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Description3(),
        ecorePackage.getEString(),
        "description3",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Code(),
        ecorePackage.getEString(),
        "code",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Country(),
        theTypesPackage.getCountryCode(),
        "country",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Zip(),
        ecorePackage.getEString(),
        "zip",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_City(),
        ecorePackage.getEString(),
        "city",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Street(),
        ecorePackage.getEString(),
        "street",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Phone1(),
        ecorePackage.getEString(),
        "phone1",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Phone2(),
        ecorePackage.getEString(),
        "phone2",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Fax(),
        ecorePackage.getEString(),
        "fax",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Email(),
        ecorePackage.getEString(),
        "email",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Website(),
        ecorePackage.getEString(),
        "website",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Mobile(),
        ecorePackage.getEString(),
        "mobile",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIContact_Comment(),
        ecorePackage.getEString(),
        "comment",
        null,
        0,
        1,
        IContact.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        iPersistentObjectEClass,
        IPersistentObject.class,
        "IPersistentObject",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getIPersistentObject_Xid(),
        this.getIXid(),
        null,
        "xid",
        null,
        0,
        1,
        IPersistentObject.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getIPersistentObject_Xids(),
        this.getIXid(),
        null,
        "xids",
        null,
        0,
        -1,
        IPersistentObject.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass,
        ecorePackage.getELong(),
        "getLastUpdate",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass,
        ecorePackage.getEBoolean(),
        "isValid",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass,
        ecorePackage.getEString(),
        "storeToString",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass, ecorePackage.getEInt(), "state", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass, ecorePackage.getEBoolean(), "exists", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iPersistentObjectEClass,
        ecorePackage.getEBoolean(),
        "isAvailable",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    EOperation op =
        addEOperation(
            iPersistentObjectEClass,
            ecorePackage.getEString(),
            "getXid",
            0,
            1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "domain", 0, 1, IS_UNIQUE, IS_ORDERED);

    op =
        addEOperation(
            iPersistentObjectEClass,
            ecorePackage.getEBoolean(),
            "addXid",
            0,
            1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "domain", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "domain_id", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEBoolean(), "updateIfExists", 0, 1, IS_UNIQUE, IS_ORDERED);

    op =
        addEOperation(
            iPersistentObjectEClass,
            ecorePackage.getEBoolean(),
            "get",
            0,
            1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, this.getStringArray(), "fields", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, this.getStringArray(), "values", 0, 1, IS_UNIQUE, IS_ORDERED);

    op =
        addEOperation(
            iPersistentObjectEClass, ecorePackage.getEString(), "get", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "field", 0, 1, IS_UNIQUE, IS_ORDERED);

    op =
        addEOperation(
            iPersistentObjectEClass,
            ecorePackage.getEBoolean(),
            "set",
            0,
            1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "field", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "value", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        iXidEClass, IXid.class, "IXid", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIXid_Domain(),
        ecorePackage.getEString(),
        "domain",
        null,
        0,
        1,
        IXid.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIXid_DomainId(),
        ecorePackage.getEString(),
        "domainId",
        null,
        0,
        1,
        IXid.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getIXid_Object(),
        this.getIPersistentObject(),
        null,
        "object",
        null,
        0,
        1,
        IXid.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIXid_Quality(),
        ecorePackage.getEInt(),
        "quality",
        null,
        0,
        1,
        IXid.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIXid_GUID(),
        ecorePackage.getEBoolean(),
        "gUID",
        null,
        0,
        1,
        IXid.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        !IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        iCodeElementEClass,
        ICodeElement.class,
        "ICodeElement",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    addEOperation(
        iCodeElementEClass,
        ecorePackage.getEString(),
        "getCodeSystemName",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    addEOperation(
        iCodeElementEClass,
        ecorePackage.getEString(),
        "getCodeSystemCode",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    addEOperation(
        iCodeElementEClass, ecorePackage.getEString(), "getId", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iCodeElementEClass, ecorePackage.getEString(), "getCode", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iCodeElementEClass, ecorePackage.getEString(), "getText", 0, 1, IS_UNIQUE, IS_ORDERED);

    op =
        addEOperation(
            iCodeElementEClass,
            ecorePackage.getEJavaObject(),
            "getActions",
            0,
            -1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, ecorePackage.getEJavaObject(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        iChangeListenerEClass,
        IChangeListener.class,
        "IChangeListener",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    op = addEOperation(iChangeListenerEClass, null, "valueChanged", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, this.getIPersistentObject(), "object", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEString(), "field", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEJavaObject(), "oldValue", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEJavaObject(), "newValue", 0, 1, IS_UNIQUE, IS_ORDERED);

    op = addEOperation(iChangeListenerEClass, null, "objectDisposing", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, this.getIPersistentObject(), "object", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        iStickerEClass,
        ISticker.class,
        "ISticker",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getISticker_Background(),
        ecorePackage.getEString(),
        "background",
        null,
        0,
        1,
        ISticker.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getISticker_Foreground(),
        ecorePackage.getEString(),
        "foreground",
        null,
        0,
        1,
        ISticker.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getISticker_Visible(),
        ecorePackage.getEBoolean(),
        "visible",
        null,
        0,
        1,
        ISticker.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    addEOperation(iStickerEClass, ecorePackage.getEString(), "getId", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iStickerEClass, ecorePackage.getEString(), "getLabel", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(iStickerEClass, ecorePackage.getEInt(), "getWert", 0, 1, IS_UNIQUE, IS_ORDERED);

    op = addEOperation(iStickerEClass, null, "setWert", 0, 1, IS_UNIQUE, IS_ORDERED);
    addEParameter(op, ecorePackage.getEInt(), "w", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iStickerEClass, ecorePackage.getEBoolean(), "delete", 0, 1, IS_UNIQUE, IS_ORDERED);

    op = addEOperation(iStickerEClass, null, "setClassForSticker", 0, 1, IS_UNIQUE, IS_ORDERED);
    g1 = createEGenericType(ecorePackage.getEJavaClass());
    g2 = createEGenericType();
    g1.getETypeArguments().add(g2);
    addEParameter(op, g1, "clazz", 0, 1, IS_UNIQUE, IS_ORDERED);

    op = addEOperation(iStickerEClass, null, "removeClassForSticker", 0, 1, IS_UNIQUE, IS_ORDERED);
    g1 = createEGenericType(ecorePackage.getEJavaClass());
    g2 = createEGenericType();
    g1.getETypeArguments().add(g2);
    addEParameter(op, g1, "clazz", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        iStickerEClass,
        ecorePackage.getEString(),
        "getClassesForSticker",
        0,
        -1,
        IS_UNIQUE,
        IS_ORDERED);

    initEClass(
        iPersonEClass,
        IPerson.class,
        "IPerson",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIPerson_DateOfBirth(),
        theTypesPackage.getTimeTool(),
        "dateOfBirth",
        null,
        0,
        1,
        IPerson.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPerson_Gender(),
        theTypesPackage.getContactGender(),
        "gender",
        null,
        0,
        1,
        IPerson.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPerson_Titel(),
        ecorePackage.getEString(),
        "titel",
        null,
        0,
        1,
        IPerson.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPerson_TitelSuffix(),
        ecorePackage.getEString(),
        "titelSuffix",
        null,
        0,
        1,
        IPerson.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        iPatientEClass,
        IPatient.class,
        "IPatient",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIPatient_Diagnosen(),
        ecorePackage.getEString(),
        "diagnosen",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPatient_Risk(),
        ecorePackage.getEString(),
        "risk",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPatient_FamilyAnamnese(),
        ecorePackage.getEString(),
        "familyAnamnese",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPatient_PersonalAnamnese(),
        ecorePackage.getEString(),
        "personalAnamnese",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPatient_Allergies(),
        ecorePackage.getEString(),
        "allergies",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIPatient_PatientNr(),
        ecorePackage.getEString(),
        "patientNr",
        null,
        0,
        1,
        IPatient.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    addEOperation(
        iPatientEClass, ecorePackage.getEString(), "getPatientLabel", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        iUserEClass, IUser.class, "IUser", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIUser_Username(),
        ecorePackage.getEString(),
        "username",
        null,
        0,
        1,
        IUser.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getIUser_Password(),
        ecorePackage.getEString(),
        "password",
        null,
        0,
        1,
        IUser.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        identifiableEClass,
        Identifiable.class,
        "Identifiable",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    addEOperation(
        identifiableEClass, ecorePackage.getEString(), "getId", 0, 1, IS_UNIQUE, IS_ORDERED);

    addEOperation(
        identifiableEClass, ecorePackage.getEString(), "getLabel", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        deleteableEClass,
        Deleteable.class,
        "Deleteable",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getDeleteable_Deleted(),
        ecorePackage.getEBoolean(),
        "deleted",
        null,
        0,
        1,
        Deleteable.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    // Initialize data types
    initEDataType(
        stringArrayEDataType,
        String[].class,
        "StringArray",
        IS_SERIALIZABLE,
        !IS_GENERATED_INSTANCE_CLASS);

    // Create resource
    createResource(eNS_URI);
  }
  /**
   * 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);

    // Create type parameters
    ETypeParameter equalPredicateEClass_T = addETypeParameter(equalPredicateEClass, "T");
    ETypeParameter intoPredicateEClass_T = addETypeParameter(intoPredicateEClass, "T");
    ETypeParameter iTypedPredicateEClass_T = addETypeParameter(iTypedPredicateEClass, "T");

    // Set bounds for type parameters
    EGenericType g1 = createEGenericType(ecorePackage.getEJavaObject());
    equalPredicateEClass_T.getEBounds().add(g1);

    // Add supertypes to classes
    compositePredicateEClass.getESuperTypes().add(this.getIListeningPredicate());
    customPredicateEClass.getESuperTypes().add(this.getIPredicate());
    equalPredicateEClass.getESuperTypes().add(this.getIPredicate());
    g1 = createEGenericType(this.getEqualPredicate());
    EGenericType g2 = createEGenericType(ecorePackage.getEString());
    g1.getETypeArguments().add(g2);
    stringEqualPredicateEClass.getEGenericSuperTypes().add(g1);
    g1 = createEGenericType(this.getEqualPredicate());
    g2 = createEGenericType(ecorePackage.getEDate());
    g1.getETypeArguments().add(g2);
    dateEqualPredicateEClass.getEGenericSuperTypes().add(g1);
    g1 = createEGenericType(this.getEqualPredicate());
    g2 = createEGenericType(ecorePackage.getEString());
    g1.getETypeArguments().add(g2);
    enumEqualPredicateEClass.getEGenericSuperTypes().add(g1);
    g1 = createEGenericType(this.getEqualPredicate());
    g2 = createEGenericType(ecorePackage.getEBooleanObject());
    g1.getETypeArguments().add(g2);
    booleanEqualPredicateEClass.getEGenericSuperTypes().add(g1);
    containsPatternPredicateEClass.getESuperTypes().add(this.getIPredicate());
    intoPredicateEClass.getESuperTypes().add(this.getIPredicate());
    g1 = createEGenericType(this.getIntoPredicate());
    g2 = createEGenericType(ecorePackage.getEString());
    g1.getETypeArguments().add(g2);
    stringIntoPredicateEClass.getEGenericSuperTypes().add(g1);
    g1 = createEGenericType(this.getIntoPredicate());
    g2 = createEGenericType(ecorePackage.getEString());
    g1.getETypeArguments().add(g2);
    enumIntoPredicateEClass.getEGenericSuperTypes().add(g1);
    andPredicateEClass.getESuperTypes().add(this.getCompositePredicate());
    orPredicateEClass.getESuperTypes().add(this.getCompositePredicate());
    notPredicateEClass.getESuperTypes().add(this.getCompositePredicate());
    compareNumberPredicateEClass.getESuperTypes().add(this.getIPredicate());
    iTypedPredicateEClass.getESuperTypes().add(this.getIPredicateContainer());
    g1 = createEGenericType(this.getITypedPredicate());
    g2 = createEGenericType(ecorePackage.getEAttribute());
    g1.getETypeArguments().add(g2);
    ieAttrPredicateEClass.getEGenericSuperTypes().add(g1);
    g1 = createEGenericType(this.getITypedPredicate());
    g2 = createEGenericType(ecorePackage.getEClassifier());
    g1.getETypeArguments().add(g2);
    ieClassifierPredicateEClass.getEGenericSuperTypes().add(g1);
    truePredicateEClass.getESuperTypes().add(this.getIPredicate());
    operationPredicateEClass.getESuperTypes().add(this.getIPredicateContainer());
    operationPredicateEClass.getESuperTypes().add(this.getIListeningPredicate());
    intParameterEClass.getESuperTypes().add(this.getParameter());
    booleanParameterEClass.getESuperTypes().add(this.getParameter());
    stringParameterEClass.getESuperTypes().add(this.getParameter());
    eObjectParameterEClass.getESuperTypes().add(this.getParameter());
    iPredicateContainerEClass.getESuperTypes().add(this.getIPredicate());
    isTypeOfPredicateEClass.getESuperTypes().add(this.getIPredicate());
    isNullPredicateEClass.getESuperTypes().add(this.getIPredicate());
    iListeningPredicateEClass.getESuperTypes().add(this.getIPredicate());

    // Initialize classes, features, and operations; add parameters
    initEClass(
        iPredicateEClass,
        IPredicate.class,
        "IPredicate",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIPredicate_DisplayName(),
        ecorePackage.getEString(),
        "displayName",
        null,
        0,
        1,
        IPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    EOperation op =
        initEOperation(
            getIPredicate__Match__Object(),
            ecorePackage.getEBoolean(),
            "match",
            0,
            1,
            IS_UNIQUE,
            IS_ORDERED);
    addEParameter(op, ecorePackage.getEJavaObject(), "input", 0, 1, IS_UNIQUE, IS_ORDERED);

    initEClass(
        compositePredicateEClass,
        CompositePredicate.class,
        "CompositePredicate",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getCompositePredicate_Predicates(),
        this.getIPredicate(),
        null,
        "predicates",
        null,
        0,
        -1,
        CompositePredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        customPredicateEClass,
        CustomPredicate.class,
        "CustomPredicate",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        equalPredicateEClass,
        EqualPredicate.class,
        "EqualPredicate",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    g1 = createEGenericType(equalPredicateEClass_T);
    initEAttribute(
        getEqualPredicate_Input(),
        g1,
        "input",
        null,
        0,
        1,
        EqualPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    g1 = createEGenericType(equalPredicateEClass_T);
    initEAttribute(
        getEqualPredicate_ExpectedObject(),
        g1,
        "expectedObject",
        null,
        0,
        1,
        EqualPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        stringEqualPredicateEClass,
        StringEqualPredicate.class,
        "StringEqualPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        dateEqualPredicateEClass,
        DateEqualPredicate.class,
        "DateEqualPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        enumEqualPredicateEClass,
        EnumEqualPredicate.class,
        "EnumEqualPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        booleanEqualPredicateEClass,
        BooleanEqualPredicate.class,
        "BooleanEqualPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        containsPatternPredicateEClass,
        ContainsPatternPredicate.class,
        "ContainsPatternPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getContainsPatternPredicate_Input(),
        this.getCharSequence(),
        "input",
        null,
        0,
        1,
        ContainsPatternPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getContainsPatternPredicate_ExpectedPattern(),
        this.getPattern(),
        "expectedPattern",
        null,
        0,
        1,
        ContainsPatternPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        intoPredicateEClass,
        IntoPredicate.class,
        "IntoPredicate",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    g1 = createEGenericType(intoPredicateEClass_T);
    initEAttribute(
        getIntoPredicate_Input(),
        g1,
        "input",
        null,
        0,
        1,
        IntoPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    g1 = createEGenericType(intoPredicateEClass_T);
    initEAttribute(
        getIntoPredicate_AllowedEntries(),
        g1,
        "allowedEntries",
        null,
        0,
        -1,
        IntoPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        stringIntoPredicateEClass,
        StringIntoPredicate.class,
        "StringIntoPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        enumIntoPredicateEClass,
        EnumIntoPredicate.class,
        "EnumIntoPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        andPredicateEClass,
        AndPredicate.class,
        "AndPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        orPredicateEClass,
        OrPredicate.class,
        "OrPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        notPredicateEClass,
        NotPredicate.class,
        "NotPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        compareNumberPredicateEClass,
        CompareNumberPredicate.class,
        "CompareNumberPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getCompareNumberPredicate_Input(),
        this.getNumber(),
        "input",
        null,
        0,
        1,
        CompareNumberPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getCompareNumberPredicate_ExpectedValue(),
        this.getNumber(),
        "expectedValue",
        null,
        0,
        1,
        CompareNumberPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEAttribute(
        getCompareNumberPredicate_Operator(),
        this.getOPERATOR(),
        "operator",
        null,
        0,
        1,
        CompareNumberPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        iTypedPredicateEClass,
        ITypedPredicate.class,
        "ITypedPredicate",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    g1 = createEGenericType(iTypedPredicateEClass_T);
    initEReference(
        getITypedPredicate_TypedElement(),
        g1,
        null,
        "typedElement",
        null,
        0,
        1,
        ITypedPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        ieAttrPredicateEClass,
        IEAttrPredicate.class,
        "IEAttrPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        ieClassifierPredicateEClass,
        IEClassifierPredicate.class,
        "IEClassifierPredicate",
        IS_ABSTRACT,
        IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        truePredicateEClass,
        TruePredicate.class,
        "TruePredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        operationPredicateEClass,
        OperationPredicate.class,
        "OperationPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getOperationPredicate_OperationName(),
        ecorePackage.getEString(),
        "operationName",
        null,
        0,
        1,
        OperationPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getOperationPredicate_Parameters(),
        this.getParameter(),
        null,
        "parameters",
        null,
        0,
        -1,
        OperationPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        parameterEClass,
        Parameter.class,
        "Parameter",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getParameter_Name(),
        ecorePackage.getEString(),
        "name",
        null,
        0,
        1,
        Parameter.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEOperation(
        getParameter__GetObjectValue(),
        ecorePackage.getEJavaObject(),
        "getObjectValue",
        0,
        1,
        IS_UNIQUE,
        IS_ORDERED);

    initEClass(
        intParameterEClass,
        IntParameter.class,
        "IntParameter",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIntParameter_Value(),
        ecorePackage.getEInt(),
        "value",
        null,
        0,
        1,
        IntParameter.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        booleanParameterEClass,
        BooleanParameter.class,
        "BooleanParameter",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getBooleanParameter_Value(),
        ecorePackage.getEBoolean(),
        "value",
        null,
        0,
        1,
        BooleanParameter.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        stringParameterEClass,
        StringParameter.class,
        "StringParameter",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getStringParameter_Value(),
        ecorePackage.getEString(),
        "value",
        null,
        0,
        1,
        StringParameter.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        eObjectParameterEClass,
        EObjectParameter.class,
        "EObjectParameter",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getEObjectParameter_Value(),
        ecorePackage.getEObject(),
        null,
        "value",
        null,
        0,
        1,
        EObjectParameter.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        iPredicateContainerEClass,
        IPredicateContainer.class,
        "IPredicateContainer",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEReference(
        getIPredicateContainer_ResultPredicate(),
        this.getIPredicate(),
        null,
        "resultPredicate",
        null,
        0,
        1,
        IPredicateContainer.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        IS_COMPOSITE,
        !IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        isTypeOfPredicateEClass,
        IsTypeOfPredicate.class,
        "IsTypeOfPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(
        getIsTypeOfPredicate_IsStrictTypeOf(),
        ecorePackage.getEBoolean(),
        "isStrictTypeOf",
        null,
        0,
        1,
        IsTypeOfPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_UNSETTABLE,
        !IS_ID,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);
    initEReference(
        getIsTypeOfPredicate_Type(),
        ecorePackage.getEClass(),
        null,
        "type",
        null,
        0,
        1,
        IsTypeOfPredicate.class,
        !IS_TRANSIENT,
        !IS_VOLATILE,
        IS_CHANGEABLE,
        !IS_COMPOSITE,
        IS_RESOLVE_PROXIES,
        !IS_UNSETTABLE,
        IS_UNIQUE,
        !IS_DERIVED,
        IS_ORDERED);

    initEClass(
        isNullPredicateEClass,
        IsNullPredicate.class,
        "IsNullPredicate",
        !IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEClass(
        iListeningPredicateEClass,
        IListeningPredicate.class,
        "IListeningPredicate",
        IS_ABSTRACT,
        !IS_INTERFACE,
        IS_GENERATED_INSTANCE_CLASS);

    initEOperation(
        getIListeningPredicate__GetObjectsToListen(),
        ecorePackage.getEJavaObject(),
        "getObjectsToListen",
        0,
        -1,
        IS_UNIQUE,
        IS_ORDERED);

    // Initialize enums and add enum literals
    initEEnum(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.class, "OPERATOR");
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.EQ);
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.NQ);
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.GT);
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.GET);
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.LT);
    addEEnumLiteral(operatorEEnum, org.polarsys.reqcycle.predicates.core.api.OPERATOR.LET);

    // Initialize data types
    initEDataType(
        patternEDataType, Pattern.class, "Pattern", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
    initEDataType(
        charSequenceEDataType,
        CharSequence.class,
        "CharSequence",
        IS_SERIALIZABLE,
        !IS_GENERATED_INSTANCE_CLASS);
    initEDataType(
        numberEDataType, Number.class, "Number", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);

    // Create resource
    createResource(eNS_URI);

    // Create annotations
    // www.eclipse.org/reqcycle/predicates/userInput
    createUserInputAnnotations();
    // www.eclipse.org/reqcycle/predicates/specificUserInput
    createSpecificUserInputAnnotations();
    // www.eclipse.org/reqcycle/predicates/input_javaclass_type
    createInput_javaclass_typeAnnotations();
    // www.eclipse.org/reqcycle/predicates/adaptInput
    createAdaptInputAnnotations();
  }