All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertigo.dynamo.plugins.environment.registries.search.SearchGrammar Maven / Gradle / Ivy

There is a newer version: 2.1.0
Show newest version
/**
 * vertigo - simple java starter
 *
 * Copyright (C) 2013, KleeGroup, [email protected] (http://www.kleegroup.com)
 * KleeGroup, Centre d'affaire la Boursidiere - BP 159 - 92357 Le Plessis Robinson Cedex - France
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.vertigo.dynamo.plugins.environment.registries.search;

import static io.vertigo.core.definition.dsl.entity.EntityPropertyType.String;
import io.vertigo.core.definition.dsl.entity.Entity;
import io.vertigo.core.definition.dsl.entity.EntityBuilder;
import io.vertigo.core.definition.dsl.entity.EntityGrammar;
import io.vertigo.dynamo.plugins.environment.KspProperty;
import io.vertigo.dynamo.plugins.environment.registries.domain.DomainGrammar;

/**
 * @author pchretien
 */
final class SearchGrammar {

	/** Index definition. */
	public static final Entity INDEX_DEFINITION_ENTITY;
	/** Search loader id. */
	public static final String SEARCH_LOADER_PROPERTY = "LOADER_ID";
	/** List filter class. */
	public static final String LIST_FILTER_BUILDER_CLASS = "LIST_FILTER_BUILDER_CLASS";
	/** List filter query. */
	public static final String LIST_FILTER_BUILDER_QUERY = "LIST_FILTER_BUILDER_QUERY";

	/** Index copy fields. */
	public static final Entity INDEX_COPY_ENTITY;

	/** Fieldname. */
	public static final String FIELD_NAME = "FIELD_NAME";
	/** Facet order. */
	public static final String FACET_ORDER = "ORDER";
	/** Facet definition. */
	public static final Entity FACET_DEFINITION_ENTITY;
	/** Facet range. */
	private static final Entity FACET_RANGE_ENTITY;
	/** Range filter. */
	public static final String RANGE_FILTER_PROPERTY = "FILTER";
	/** Faceted query definition. */
	public static final Entity FACETED_QUERY_DEFINITION_ENTITY;

	/** indexCopy to. */
	public static final String INDEX_COPY_TO_PROPERTY = "indexCopyTo";
	/** indexCopy from. */
	public static final String INDEX_COPY_FROM_PROPERTY = "FROM";

	/** Search Grammar instance. */
	public static final EntityGrammar GRAMMAR;

	/*
	 * create IndexDefinition IDX_TEST {
	    keyConcept : DT_TEST,
	    dtResult : DT_TEST,
	    dtIndex : DT_TEST,
	    indexCopyTo FIELD_TO_1 : { from: "FIELD_FROM_1,FIELD_FROM_2" }, //use field formatters
	    indexCopyTo FIELD_TO_2 : { from: "FIELD_FROM_3" }, //use field formatters

	    searchLoader : com.project.domain.search.dao.SearchLoaderPeople
	}

	create FacetDefinition FCT_MOVIE_GENRE {
		dtDefinition : DT_TEST, fieldName : "GENRE", label : "Par genre"
	}

	create FacetDefinition FCT_MOVIE_ANNEE {
		dtDefinition : DT_TEST, fieldName : "YEAR", label : "Par année",
	 	range R1 { filter : "YEAR:[* TO 2000]", label : "avant 2000"}, //TODO : fieldName in filter too ?
	 	range R2 { filter : "YEAR:[2000 TO 2005]", label : "2000-2005"},
	 	range R3 { filter : "YEAR:[2005 TO *]", label : "après 2005"}
	}

	create FacetedQueryDefinition QRY_MOVIE {
		facet FCT_MOVIE_GENRE,
		facet FCT_MOVIE_ANNEE,
	}
	*/

	static {
		INDEX_COPY_ENTITY = new EntityBuilder("indexCopyTo")
				.addField(INDEX_COPY_FROM_PROPERTY, String, true)
				.build();

		INDEX_DEFINITION_ENTITY = new EntityBuilder("IndexDefinition")
				.addField("keyConcept", DomainGrammar.DT_DEFINITION_ENTITY.getLink(), true)
				.addField("dtIndex", DomainGrammar.DT_DEFINITION_ENTITY.getLink(), true)
				.addFields(INDEX_COPY_TO_PROPERTY, INDEX_COPY_ENTITY, false) //facultative
				.addField(SEARCH_LOADER_PROPERTY, String, true)
				.build();

		FACET_RANGE_ENTITY = new EntityBuilder("range")
				.addField(RANGE_FILTER_PROPERTY, String, true)
				.addField(KspProperty.LABEL, String, true)
				.build();

		FACET_DEFINITION_ENTITY = new EntityBuilder("FacetDefinition")
				.addField("dtDefinition", DomainGrammar.DT_DEFINITION_ENTITY.getLink(), true)
				.addField(FIELD_NAME, String, true)
				.addField(KspProperty.LABEL, String, true)
				.addField(FACET_ORDER, String, false) //facultative, default to count
				.addFields("range", FACET_RANGE_ENTITY, false) //facultative
				.build();

		FACETED_QUERY_DEFINITION_ENTITY = new EntityBuilder("FacetedQueryDefinition")
				.addField("keyConcept", DomainGrammar.DT_DEFINITION_ENTITY.getLink(), true)
				.addField("domainCriteria", DomainGrammar.DOMAIN_ENTITY.getLink(), true)
				.addField(LIST_FILTER_BUILDER_CLASS, String, true)
				.addField(LIST_FILTER_BUILDER_QUERY, String, true)
				.addFields("facets", FACET_DEFINITION_ENTITY.getLink(), true)
				.build();

		GRAMMAR = new EntityGrammar(INDEX_DEFINITION_ENTITY, FACET_DEFINITION_ENTITY, FACETED_QUERY_DEFINITION_ENTITY);
	}

	private SearchGrammar() {
		//private
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy