Author: jcouteau Date: 2011-04-11 15:40:25 +0200 (Mon, 11 Apr 2011) New Revision: 776 Url: http://nuiton.org/repositories/revision/wikitty/776 Log: Add faq and search doc Added: trunk/src/site/rst/user/faq.rst trunk/src/site/rst/user/search.rst Added: trunk/src/site/rst/user/faq.rst =================================================================== --- trunk/src/site/rst/user/faq.rst (rev 0) +++ trunk/src/site/rst/user/faq.rst 2011-04-11 13:40:25 UTC (rev 776) @@ -0,0 +1,41 @@ +========================= +FAQ - Foire aux questions +========================= + +Comment récupérer uniquement les objets que l'utilisateur peut lire ? +===================================================================== + +Dans Wikitty, si vous gérez la sécurité et qu'un utilisateur n'a pas le droit de +lire un objet que vous demandez, null sera retourné. Dans le cas de listes +d'objets, cela peut vite devenir génant de devoir vérifier que l'objet retourné +n'est pas nul. Une manière de contourner ceci est de limiter les résultats de +recherche aux objets que l'utilisateur à le droit de lire. + +Exemple +~~~~~~~ + +Dans cet exemple, le droit de lecture est accordé au privateGroup. On vérifie +donc que l'utilisateur authentifié fait soit partie du privateGroup soit on +restreint les résultats aux objets dont le reader n'est pas le privateGroup:: + + +// Récupère le privateGroup (méthode métier) +WikittyGroup privateGroup = getPrivateGroup(); + +// Récupère l'utilisateur authentifié +WikittyUser user = getLoggedInUser(); + +// Récupère les membres du privateGroup +Set<String> members = privateGroup.getMembers(); + +// Vérifie si l'utilisateur fait partie du privateGroup +if (members != null && user != null && + members.contains(user.getWikittyId())) { + // L'utilisateur fait partie du privateGroup, on ne change rien à la + // requête. +} else { + // L'utilisateur ne fait pas partie du privateGroup, on restreint + // donc les résultats de notre query. + query.neq(WikittyAuthorisation.FQ_FIELD_WIKITTYAUTHORISATION_READER, + privateGroup.getWikittyId()); +} \ No newline at end of file Added: trunk/src/site/rst/user/search.rst =================================================================== --- trunk/src/site/rst/user/search.rst (rev 0) +++ trunk/src/site/rst/user/search.rst 2011-04-11 13:40:25 UTC (rev 776) @@ -0,0 +1,136 @@ +====================== +Recherche avec Wikitty +====================== + +Wikitty permet de rechercher parmis les entités enregistrées tout en fournissant +les fonctionalités de pagination. Pour cela vous pouvez construire +programmatiquement vos recherches en utilisant un système de Criteria. + +Structure d'une requête +----------------------- + +Pour créer une recherche, vous commencez par initier un arbre de contrainte:: + +Search myQuery = Search.query(); + +La racine est un noeud ET. Vous pouvez ensuite rajouter des contraintes ou des +sous-noeuds. + +Par exemple, la requette A ET (B OU C) se représente en arbre :: + +ET +|- A +`- OU + |- B + `- C + +Et de manière programmatique, nous aurons (les contraintes A, B et C sont +représentées par des méthodes similaires. Elle devraient-être remplacées par les +vraies méthodes de contrainte):: + +//Ajout de la contrainte A +myQuery.A(); + +//Ajout du node OU, on le récupère pour lui ajouter des fils +Search orNode = myQuery.or(); + +//Ajout des fils du OU +orNode.B().C(); + +Les contraintes disponibles +--------------------------- + +De nombreuses contraintes sont disponibles pour créer vos recherches : + +* Egalité : eq - Vérifie si un champ est égal a une valeur. + +* Non égalité : neq - Vérifie si un champ n'est pas égal a une valeur. + +* Contient : contains - Vérifie si un champ multivalué contient une valeur. + +* Dans : in - Vérifie si un champ est une valeur + +* Egalité d'extension : exteq - Vérifie si un Wikitty possède une extension + +* Non égalité d'extension : extneq - Vérifie qu'un Wikitty ne porte pas une +extension. + +* Égalité d'extension : ideq - Vérifie qu'un Wikitty porte l'identifiant + +* Non égalité d'identifiant : idneq - Vérifie qu'un Wikitty ne porte pas +l'identifiant. + +* Similitude : like - Vérifie qu'une chaîne de caractère est présente dans un +champ (ex : "pit" est présent dans "chapiteau"). + +* Non similitude : unlike - Vérifie qu'une chaîne de caractère n'est pas +présente dans un champ. + +* Supérieur strictement : gt - Vérifie qu'un champ est strictement supérieur à +une valeur. + +* Supérieur ou égal : ge - Vérifie si un champ est supérieur ou égal à une +valeur. + +* Inférieur strictement : lt - Vérifie si un champ est strictement inférieur à +une valeur. + +* Inférieur ou égal : le - Vérifie si un champ est inférieur ou égal à une +valeur. + +* Entre : bw - Vérifie si un champ est compris entre deux valeurs. + +* Commence par : sw - Vérifie si un champ de type chaîne commence par une valeur. + +* Ne commence pas par : nsw - Vérifie si un champ de type chaîne ne commence pas +par une valeur. + +* Termine par : ew - Vérifie si un champ de type chaîne termine par une valeur. + +* Ne termine pas par : notew - Vérifie si un champs de type chaîne ne termine +pas par une valeur. + +* Mot-clé : keyword - Vérifie si la valeur est présente dans n'importe quel +champ du Wikitty. + +* Nul : isNull - Vérifie si la valeur d'un champ est nulle. + +* Non nul : isNotNull - Vérifie si la valeur d'un champ n'est pas nulle. + +Les noeuds à sous-requête +------------------------- + +Les noeuds à sous requêtes permettent de faire des requêtes complexes. + +Non : not - Résultat inverse de la sous-requête. + +Ou : or - Ou entre les différentes sous-requêtes. + +Et : and - Et entre les différentes sous-requêtes. + +Requête associée : associated - Permet d'effectuer des jointures. + +Les critères +------------ + +Les critères de recherches permettent d'ajouter un ordre ou des facettes,. On +obtient le critère de recherche à partir de la requête en faisant :: + +mySearch.criteria(); + +La recherche +------------ + +On effectue une recherche sur un proxy, en utilisant un criteria. Si on ne +spécifie pas le type d'objet retourné, on obtiendra un Wikitty. Sinon, on +obtiendra le type d'objet demandé. Cela permet de s'abstraire complètement de +Wikitty et ne manipuler que des objets métiers. + +Les résultats +------------- + +Lorsqu'on effectue une recherche, on obtient un PagedResult. En effet, les +résultats étant paginés, on obtient tout ou partie des résultats. +Un PagedResult contient le nombre total de résultats, les résultats de la page +ainsi que le premier index, le nombre de résultats et les facettes si elles ont +été utilisées pour la recherche. \ No newline at end of file