Les bases
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 à une méthode add — addInstance, addAttribute, addRelation, addHolder ou addLink —, il existe une méthode get correspondante — getInstance, getAttribute, getRelation, getHolder ou getLink — pour retourner le Generic correspondant à la recherche. Il existe également une méthode set — setInstance, setAttribute, setRelation, setHolder ou setLink —, 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 :
// Find the type Vehicle
Generic vehicle = engine.getInstance("Vehicle");
// Find the type Color
Generic color = engine.getInstance("Color");
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 :
// Add a new color
Generic green = color.setInstance("green");
// Persist changes
engine.getCurrentCache().flush();
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 :
// Find the type Vehicle
Generic vehicle = engine.getInstance("Vehicle");
// Find the attribute Options
Generic options = vehicle.getAttribute("Options");
// Find the property Power
Generic power = vehicle.getAttribute("Power");
Là-encore, ces Generic peuvent être réutilisés :
// Create a new vehicle with a power and a few options
Generic awesomeCar = vehicle.setInstance("awesomeCar");
awesomeCar.setHolder(power, 600);
awesomeCar.setHolder(options, "bat mobile");
awesomeCar.setHolder(options, "super turbo");
// Persist changes
engine.getCurrentCache().flush();
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 :
// Find the types
Generic vehicle = engine.getInstance("Vehicle");
Generic color = engine.getInstance("Color");
// Find the relation VehicleColor from type Vehicle
Generic vehicleColor = vehicle.getRelation("VehicleColor");
// Or from type Color
Generic vehicleColorAlt = color.getRelation("VehicleColor");
// Find the link myVehicleRed from myVehicle
Generic myVehicleRed = myVehicle.getLink(vehicleColor, "myVehicleRed");
// Find the link myVehicleYellow from yellow
Generic myVehicleYellow = yellow.getLink(vehicleColor, "myVehicleYellow");
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 :
// Find the instances
Generic myVehicle = vehicle.getInstance("myVehicle");
Generic yellow = color.getInstance("yellow");
À 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 :
// Find the type Vehicle, the attribute Options and myVehicle
Generic vehicle = engine.getInstance("Vehicle");
Generic options = vehicle.getAttribute("Options");
Generic myVehicle = vehicle.getInstance("myVehicle");
// Find the holder GPS
Generic gps = myVehicle.getHolder(options, "GPS");
En résumé
Generic System permet de rechercher facilement des informations dans le moteur Engine : il existe des méthodes get — getInstance, getAttribute, getRelation, getHolder, getLink — 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.
