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

io.vertigo.dynamo.plugins.environment.registries.domain.DomainGrammar Maven / Gradle / Ivy

There is a newer version: 2.1.0
Show newest version
/**
 * vertigo - simple java starter
 *
 * Copyright (C) 2013-2016, 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.domain;

import static io.vertigo.core.definition.dsl.entity.DslPropertyType.Boolean;
import static io.vertigo.core.definition.dsl.entity.DslPropertyType.Integer;
import static io.vertigo.core.definition.dsl.entity.DslPropertyType.String;
import static io.vertigo.dynamo.plugins.environment.KspProperty.ARGS;
import static io.vertigo.dynamo.plugins.environment.KspProperty.CLASS_NAME;
import static io.vertigo.dynamo.plugins.environment.KspProperty.DATA_SPACE;
import static io.vertigo.dynamo.plugins.environment.KspProperty.DISPLAY_FIELD;
import static io.vertigo.dynamo.plugins.environment.KspProperty.DYNAMIC;
import static io.vertigo.dynamo.plugins.environment.KspProperty.EXPRESSION;
import static io.vertigo.dynamo.plugins.environment.KspProperty.FK_FIELD_NAME;
import static io.vertigo.dynamo.plugins.environment.KspProperty.FRAGMENT_OF;
import static io.vertigo.dynamo.plugins.environment.KspProperty.INDEX_TYPE;
import static io.vertigo.dynamo.plugins.environment.KspProperty.LABEL;
import static io.vertigo.dynamo.plugins.environment.KspProperty.LABEL_A;
import static io.vertigo.dynamo.plugins.environment.KspProperty.LABEL_B;
import static io.vertigo.dynamo.plugins.environment.KspProperty.MAX_LENGTH;
import static io.vertigo.dynamo.plugins.environment.KspProperty.MSG;
import static io.vertigo.dynamo.plugins.environment.KspProperty.MULTIPLICITY_A;
import static io.vertigo.dynamo.plugins.environment.KspProperty.MULTIPLICITY_B;
import static io.vertigo.dynamo.plugins.environment.KspProperty.NAVIGABILITY_A;
import static io.vertigo.dynamo.plugins.environment.KspProperty.NAVIGABILITY_B;
import static io.vertigo.dynamo.plugins.environment.KspProperty.NOT_NULL;
import static io.vertigo.dynamo.plugins.environment.KspProperty.PERSISTENT;
import static io.vertigo.dynamo.plugins.environment.KspProperty.ROLE_A;
import static io.vertigo.dynamo.plugins.environment.KspProperty.ROLE_B;
import static io.vertigo.dynamo.plugins.environment.KspProperty.SORT_FIELD;
import static io.vertigo.dynamo.plugins.environment.KspProperty.STEREOTYPE;
import static io.vertigo.dynamo.plugins.environment.KspProperty.STORE_TYPE;
import static io.vertigo.dynamo.plugins.environment.KspProperty.TABLE_NAME;
import static io.vertigo.dynamo.plugins.environment.KspProperty.TYPE;
import static io.vertigo.dynamo.plugins.environment.KspProperty.UNIT;

import java.util.List;

import io.vertigo.core.definition.dsl.entity.DslEntity;
import io.vertigo.core.definition.dsl.entity.DslEntityBuilder;
import io.vertigo.core.definition.dsl.entity.DslGrammar;
import io.vertigo.core.definition.loader.KernelGrammar;
import io.vertigo.util.ListBuilder;

/**
 * @author pchretien
 */
public final class DomainGrammar implements DslGrammar {
	/**
	 * Clé des FIELD_DEFINITION de type PK utilisés dans les DT_DEFINITION.
	 */
	public static final String ID = "key";
	/**
	 * Clé des FIELD_DEFINITION de type FIELD utilisés dans les DT_DEFINITION.
	 */
	public static final String FIELD = "field";
	/**
	 * Clé des FIELD_DEFINITION de type COMPUTED utilisés dans les DT_DEFINITION.
	 */
	public static final String COMPUTED = "computed";

	/**Définition d'une constraint.*/
	public static final DslEntity CONSTRAINT_ENTITY;
	/**Définition d'un formatter.*/
	public static final DslEntity FORMATTER_ENTITY;
	/**Définition d'un domain.*/
	public static final DslEntity DOMAIN_ENTITY;

	/**Field*/
	public static final DslEntity DT_FIELD_ENTITY;

	public static final DslEntity DT_DEFINITION_ENTITY;
	/**Définition d'une association simple.*/
	public static final DslEntity ASSOCIATION_ENTITY;
	/**Définition d'une association NN.*/
	public static final DslEntity ASSOCIATION_NN_ENTITY;

	/**
	 * Fragments
	 */
	public static final DslEntity FRAGMENT_ENTITY;

	static {
		CONSTRAINT_ENTITY = new DslEntityBuilder("Constraint")
				.addRequiredField(CLASS_NAME, String)
				.addOptionalField(ARGS, String)
				.addOptionalField(MSG, String)
				.build();
		FORMATTER_ENTITY = new DslEntityBuilder("Formatter")
				.addRequiredField(CLASS_NAME, String)
				.addOptionalField(ARGS, String)
				.build();

		DOMAIN_ENTITY = new DslEntityBuilder("Domain")
				.addOptionalField(MAX_LENGTH, Integer)
				.addOptionalField(TYPE, String)
				.addOptionalField(UNIT, String)
				.addOptionalField(INDEX_TYPE, String)
				.addOptionalField(STORE_TYPE, String)
				.addRequiredField("formatter", FORMATTER_ENTITY.getLink())
				.addRequiredField("dataType", KernelGrammar.getDataTypeEntity().getLink())
				.addManyFields("constraint", CONSTRAINT_ENTITY.getLink())
				.build();

		DT_FIELD_ENTITY = new DslEntityBuilder("Field")
				.addRequiredField(LABEL, String)
				.addRequiredField(NOT_NULL, Boolean)
				.addRequiredField("domain", DOMAIN_ENTITY.getLink())
				.addOptionalField(EXPRESSION, String)
				.addOptionalField(PERSISTENT, Boolean)
				.build();

		final DslEntity computedFieldEntity = new DslEntityBuilder("ComputedField")
				.addRequiredField(LABEL, String)
				.addRequiredField("domain", DOMAIN_ENTITY.getLink())
				.addRequiredField(EXPRESSION, String)
				.build();

		DT_DEFINITION_ENTITY = new DslEntityBuilder("DtDefinition")
				.addOptionalField(DISPLAY_FIELD, String)
				.addOptionalField(SORT_FIELD, String)
				.addManyFields(FIELD, DT_FIELD_ENTITY)
				.addManyFields(COMPUTED, computedFieldEntity)
				.addOptionalField(ID, DT_FIELD_ENTITY)
				.addOptionalField(DYNAMIC, Boolean)
				.addOptionalField(FRAGMENT_OF, String)
				.addOptionalField(STEREOTYPE, String)
				.addOptionalField(DATA_SPACE, String)
				.build();

		final DslEntity fieldAliasEntity = new DslEntityBuilder("fieldAlias")
				.addOptionalField(LABEL, String)
				.addOptionalField(NOT_NULL, Boolean)
				.build();

		FRAGMENT_ENTITY = new DslEntityBuilder("Fragment")
				.addRequiredField("from", DT_DEFINITION_ENTITY.getLink())
				.addManyFields("alias", fieldAliasEntity) //on peut ajouter des champs
				.addOptionalField(DISPLAY_FIELD, String)
				.addOptionalField(SORT_FIELD, String)
				.addManyFields(FIELD, DT_FIELD_ENTITY) //on peut ajouter des champs
				.addManyFields(COMPUTED, computedFieldEntity) //et des computed
				.build();

		ASSOCIATION_ENTITY = new DslEntityBuilder("Association")
				.addOptionalField(FK_FIELD_NAME, String)
				.addRequiredField(MULTIPLICITY_A, String)
				.addRequiredField(NAVIGABILITY_A, Boolean)
				.addRequiredField(ROLE_A, String)
				.addRequiredField(LABEL_A, String)
				.addRequiredField(MULTIPLICITY_B, String)
				.addRequiredField(NAVIGABILITY_B, Boolean)
				.addRequiredField(ROLE_B, String)
				.addRequiredField(LABEL_B, String)
				.addRequiredField("dtDefinitionA", DT_DEFINITION_ENTITY.getLink())
				.addRequiredField("dtDefinitionB", DT_DEFINITION_ENTITY.getLink())
				.build();

		ASSOCIATION_NN_ENTITY = new DslEntityBuilder("AssociationNN")
				.addRequiredField(TABLE_NAME, String)
				.addRequiredField(NAVIGABILITY_A, Boolean)
				.addRequiredField(ROLE_A, String)
				.addRequiredField(LABEL_A, String)
				.addRequiredField(NAVIGABILITY_B, Boolean)
				.addRequiredField(ROLE_B, String)
				.addRequiredField(LABEL_B, String)
				.addRequiredField("dtDefinitionA", DT_DEFINITION_ENTITY.getLink())
				.addRequiredField("dtDefinitionB", DT_DEFINITION_ENTITY.getLink())
				.build();

	}

	@Override
	public List getEntities() {
		return new ListBuilder()
				.add(CONSTRAINT_ENTITY)
				.add(FORMATTER_ENTITY)
				//---
				.add(DOMAIN_ENTITY)
				.add(FRAGMENT_ENTITY)
				.add(DT_DEFINITION_ENTITY)
				.add(ASSOCIATION_ENTITY)
				.add(ASSOCIATION_NN_ENTITY)
				.unmodifiable()
				.build();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy