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");