DSL Java Vitam ############## Cette partie va essayer de montrer quelques exemples d'usages du DSL à l'aide de la librairie DSL Java Vitam dans différentes conditions. Génération de requêtes DSL en Java ================================== Les clients externes java Vitam offrent la possibilité de créer les requêtes DSL à partir des librairies DSL. Il existent 4 types de requêtes DSL au format Json : - requêtes DSL de recherche (SELECT SINGLE) - requêtes DSL de recherche de type graphe (SELECT MULTIPLE) **EXPERIMENTAL** - requête DSL d'accès unitaire (GET BY ID) qui peut se générer de deux manières différentes - requête DSL de modification unitaire (UPDATE BY ID) qui peut se générer de deux manières différentes Pour le choix de la requête nécessaire, se référer à la document de l'API rest Vitam. Exemples de code de génération : - requête DSL graphe pour recherche sur métadonnées : Select Multi Query (collections multi-query : Unit et Objects) :: include fr.gouv.vitam.common.database.builder.request.multiple.SelectMultiQuery; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query1 = match("Title", "titre").setDepthLimit(4); Query query2 = exists("FilePlanPosition").setDepthLimit(3); SelectMultiQuery select = new SelectMultiQuery().addRoots("id0") .addQueries(query1, query2) .setLimitFilter(0, 100) .addProjection(id(), "Title", type(), parents(), object()); JsonNode json = select.getFinalSelect(); - requête DSL unitaire d'accès pour les métadonnées : Select By Id (collections multi-query : Unit et Objects) :: include fr.gouv.vitam.common.database.builder.request.multiple.SelectMultiQuery; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; SelectMultiQuery select = new SelectMultiQuery() .addProjection(id(), "Title"); JsonNode json = select.getFinalSelectById(); - requête DSL graphe pour recherche sur les données référentiel et logbook : Select Single Query :: include fr.gouv.vitam.common.database.builder.request.single.Select; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = eq("Identifier", "ID"); Select select = new Select() .setQuery(query) .setLimitFilter(0, 100) .addProjection(); JsonNode json = select.getFinalSelect(); - requête DSL unitaire d'accès pour les données référentiel et logbook : Select By Id :: include fr.gouv.vitam.common.database.builder.request.single.Select; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Select select = new Select() .addProjection(id(), "Name"); JsonNode json = select.getFinalSelectById(); - requête DSL de modification unitaire pour les métadonnées : Update By Id (collection multi-query : Unit et Objects) :: include fr.gouv.vitam.common.database.builder.request.multiple.UpdateMultiQuery; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.action.UpdateActionHelper.*; Action action = set("Description", "Ma nouvelle description"); UpdateMultiQuery update = new UpdateMultiQuery() .addAction(action); JsonNode json = update.getFinalUpdateById(); - requête DSL de modification unitaire pour les données référentiel et logbook : Update By Id (collection single) :: include fr.gouv.vitam.common.database.builder.request.single.Update; static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.action.UpdateActionHelper.*; Action action = set("Name", "Mon nouveau nom"); Update update = new Update().addActions(action); JsonNode json = update.getFinalUpdateById(); Exemples d'usages du DSL ======================== Partie $query ------------- - $and, $or, $not :: { "$and" : [ { "$gte" : { "StartDate" : "2014-03-23T00:00:00" } }, { "$lt" : { "StartDate" : "2014-04-23T00:00:00" } } ] } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = and().add(gte("StartDate", dateFormat.parse("2014-03-23T00:00:00")), lt("StartDate", dateFormat.parse("2014-04-23T00:00:00")); - $eq, $ne, $lt, $lte, $gt, $gte :: { "$gte" : { "StartDate" : "2014-03-23T00:00:00" } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = gt("StartDate", dateFormat.parse("2014-03-23T00:00:00")); - $range :: { "$range" : { "StartDate" : { "$gte" : "2014-03-23T00:00:00", "$lt" : "2014-04-23T00:00:00" } } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = range("StartDate", dateFormat.parse("2014-03-23T00:00:00"), true, dateFormat.parse("2014-04-23T00:00:00"), true); - $exists :: { "$exists" : "StartDate" } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = exists("StartDate"); - $in, $nin :: { "$in" : { "#unitups" : ["id1", "id2"] } } static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = in(unitups(), "id1", "id2"); - $wildcard :: { "$wildcard" : { "#type" : "FAC*01" } } static include fr.gouv.vitam.common.database.builder.query.VitamFieldsHelper.*; static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = wildcard(type(), "FAC*01"); - $match, $match\_all, $match\_phrase, $match\_phrase\_prefix :: { "$match" : { "Title" : "Napoléon Waterloo" } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = match("Title", "Napoléon Waterloo"); :: { "$match_phrase" : { "Description" : "le petit chat est mort" } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = matchPhrase("Description", "le petit chat est mort"); - $regex :: { "$regex" : { "Identifier" : "AC*" } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = regex("Title", "AC*"); - $search :: { "$search" : { "Title" : "\"oeufs cuits\" +(tomate | patate) + -frite" } } static include fr.gouv.vitam.common.database.builder.query.QueryHelper.*; Query query = search("Title", "\"oeufs cuits\" +(tomate | patate) + -frite"); Partie $action dans la fonction Update -------------------------------------- - $set :: { "$set" : { "Title" : "Mon nouveau titre", "Description" : "Ma nouvelle description" } } static include fr.gouv.vitam.common.database.builder.query.action.UpdateActionHelper.*; Action action = set("Title", "Mon nouveau titre").add("Description", "Ma nouvelle description"); - $unset :: { "$unset" : [ "StartDate", "EndDate" ] } static include fr.gouv.vitam.common.database.builder.query.action.UpdateActionHelper.*; Action action = unset("StartDate", "EndDate");