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 :
1 2 3 4 5 |
// 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 :
1 2 3 4 5 |
// Add a new color Generic green = color.addInstance("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 :
1 2 3 4 5 6 7 8 |
// 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 :
1 2 3 4 5 6 7 8 |
// Create a new vehicle with a power and a few options Generic awesomeCar = vehicle.addInstance("awesomeCar"); awesomeCar.addHolder(power, 600); awesomeCar.addHolder(options, "bat mobile"); awesomeCar.addHolder(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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 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 :
1 2 3 |
// Find the instances Generic myVehicle = vehicle.getInstance("myVehicle"); Generic yellow = color.getInstance("yellow"); |
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 :
1 2 3 4 5 6 7 |
// 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 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.