Les bases – Rechercher une information

Comme dans tout moteur de persistance, il est possible de rechercher des informations stockées dans Generic System. On distingue deux types de recherche :

  • les recherches simples, pour lesquelles un seul résultat est attendu ;
  • les recherches avancées, qui peuvent conduire à un ensemble de résultats.

Nous allons détailler dans cet article comment réaliser une recherche simple, les recherches avancées seront abordées dans l’article Les bases – Rechercher plusieurs informations.

Introduction

Generic System permet de créer des types, des instances, des relations, etc. Nous avons également vu que la valeur d’un Generic est unique : par exemple, il est impossible de créer deux types avec le même nom. Une recherche simple renverra donc un résultat unique.

Si pour ajouter un Generic on fait appel à la méthode addGeneric, il existe donc une méthode getGeneric pour retourner le Generic correspondant à la recherche. Il existe également une méthode setGeneric, dont le comportement diffère selon si le Generic existe ou non dans le moteur : s’il existe, la méthode renvoie le Generic en question, sinon elle le crée.

Rechercher un type

La recherche d’un type fait appel à la méthode  getInstance. Reprenons l’exemple créé au fil des articles précédents : notre moteur contient un type Vehicle et un type Color. Voici comment les retrouver :

Comme le nom d’un type est unique, la recherche ne peut renvoyer qu’un seul résultat. Une fois que vous avez trouvé votre Generic, vous pouvez l’utiliser tout à fait normalement :

Rechercher un attribut ou une propriété

La recherche d’un attribut ou d’une propriété fait appel à la méthode getAttribute. En effet, la propriété n’est qu’un attribut pour lequel il existe une contrainte d’unicité.

Dans notre exemple, nous avions créé un attribut Options et une propriété Power que l’on va pouvoir récupérer :

Là-encore, ces Generic peuvent être réutilisés :

Rechercher une relation ou un link

La recherche d’une relation ou d’un link fait logiquement appel aux méthodes getRelation et getLink à partir de chaque type (ou instance) que la relation ou le link relient.

Dans notre exemple, nous avions créé la relation VehicleColor et un link myVehicleRed. Voici comment les retrouver :

Dans tous les cas, chaque membre peut servir à rechercher la relation ou le link.

Rechercher une instance

La recherche d’une instance est très similaire. Pour ainsi dire, elle fait appel à la méthode… getInstance ! Vous aviez peut-être remarqué, dans l’exemple ci-dessus sur la recherche de links, que nous avions utilisé les instances  myVehicle et yellow sans les avoir cherchées ni créées. Voici comment nous avons procédé en coulisses :

À noter
Le nom d’une instance, d’un holder ou d’un link est unique pour ce type, cet attribut ou cette relation. Il est donc tout à fait possible que deux instances portent le même nom, mais n’appartiennent pas au même type. Ainsi, on s’assure qu’il n’y ait qu’un seul résultat possible lors de la recherche d’une instance pour un type donné.

Rechercher un holder

La recherche d’un holder (équivalent de l’instance d’un attribut ou d’une propriété) est légèrement différente des recherches que vous avez découvertes jusque là. Bien que l’on fasse logiquement appel à la méthode getHolder, il faut ici préciser pour quel attribut (ou propriété) rechercher le holder :

En résumé

Generic System permet de rechercher facilement des informations dans le moteur Engine : il existe des méthodes  getGeneric qui permettent de renvoyer le Generic correspondant à la recherche (type, relation, holder, etc.).

Dans les cas les plus simples, la recherche ne renvoie qu’un seul résultat. Pour effectuer des recherches qui renvoient plusieurs résultats, vous pouvez consulter l’article dédié Les bases – Rechercher plusieurs informations.