use of io.vertigo.dynamo.domain.metamodel.DtDefinitionBuilder in project vertigo by KleeGroup.
the class DomainDynamicRegistry method createFragmentDtDefinition.
private static DtDefinition createFragmentDtDefinition(final DefinitionSpace definitionSpace, final DslDefinition xdtDefinition) {
final DtDefinition from = definitionSpace.resolve(xdtDefinition.getDefinitionLinkName("from"), DtDefinition.class);
final String sortFieldName = (String) xdtDefinition.getPropertyValue(KspProperty.SORT_FIELD);
final String displayFieldName = (String) xdtDefinition.getPropertyValue(KspProperty.DISPLAY_FIELD);
// 0. clones characteristics
final DtDefinitionBuilder dtDefinitionBuilder = DtDefinition.builder(xdtDefinition.getName()).withFragment(from).withPackageName(xdtDefinition.getPackageName()).withDataSpace(from.getDataSpace()).withPackageName(from.getPackageName()).withSortField(sortFieldName).withDisplayField(displayFieldName);
// 1. adds aliases
for (final DslDefinition alias : xdtDefinition.getChildDefinitions("alias")) {
final DtField aliasDtField = from.getField(alias.getName());
// --- REQUIRED
final Boolean overiddenRequired = (Boolean) alias.getPropertyValue(KspProperty.NOT_NULL);
final boolean required = overiddenRequired != null ? overiddenRequired : aliasDtField.isRequired();
// --- LABEL
final String overiddenLabel = (String) alias.getPropertyValue(KspProperty.LABEL);
final String label = overiddenLabel != null ? overiddenLabel : aliasDtField.getLabel().getDisplay();
dtDefinitionBuilder.addDataField(aliasDtField.getName(), label, aliasDtField.getDomain(), required, aliasDtField.isPersistent());
}
// 2. adds data and computed fields
// Déclaration des champs du DT
final List<DslDefinition> fields = xdtDefinition.getChildDefinitions(DomainGrammar.FIELD);
populateDataDtField(definitionSpace, dtDefinitionBuilder, fields);
// Déclaration des champs calculés
final List<DslDefinition> computedFields = xdtDefinition.getChildDefinitions(DomainGrammar.COMPUTED);
populateComputedDtField(definitionSpace, dtDefinitionBuilder, computedFields);
final DtDefinition dtDefinition = dtDefinitionBuilder.build();
// 0. adds ID field -->>> Should be first, but needs an already build DtDefinition
if (from.getIdField().isPresent()) {
final DtField idField = from.getIdField().get();
dtDefinitionBuilder.addForeignKey(idField.getName(), idField.getLabel().getDisplay(), idField.getDomain(), true, from.getName());
}
return dtDefinition;
}
use of io.vertigo.dynamo.domain.metamodel.DtDefinitionBuilder in project vertigo by KleeGroup.
the class DomainDynamicRegistry method createDtDefinition.
/**
* @param xdtDefinition Définition de DT
*/
private DtDefinition createDtDefinition(final DefinitionSpace definitionSpace, final DslDefinition xdtDefinition) {
// Déclaration de la définition
final String sortFieldName = (String) xdtDefinition.getPropertyValue(KspProperty.SORT_FIELD);
final String displayFieldName = (String) xdtDefinition.getPropertyValue(KspProperty.DISPLAY_FIELD);
// -----
final String tmpStereotype = (String) xdtDefinition.getPropertyValue(KspProperty.STEREOTYPE);
// Si Stereotype est non renseigné on suppose que la définition est DtStereotype.Data.
final DtStereotype stereotype = tmpStereotype != null ? DtStereotype.valueOf(tmpStereotype) : null;
// -----
final String dataSpace = (String) xdtDefinition.getPropertyValue(KspProperty.DATA_SPACE);
// -----
final String fragmentOf = (String) xdtDefinition.getPropertyValue(KspProperty.FRAGMENT_OF);
// -----
// -----
final String dtDefinitionName = xdtDefinition.getName();
final DtDefinitionBuilder dtDefinitionBuilder = DtDefinition.builder(dtDefinitionName).withPackageName(xdtDefinition.getPackageName()).withDataSpace(dataSpace).withSortField(sortFieldName).withDisplayField(displayFieldName);
if (stereotype != null) {
dtDefinitionBuilder.withStereoType(stereotype);
}
if (!StringUtil.isEmpty(fragmentOf)) {
dtDefinitionBuilder.withFragment(definitionSpace.resolve(fragmentOf, DtDefinition.class));
}
// On enregistre les Builder pour pouvoir les mettre à jour sur les associations.
Assertion.checkArgument(!dtDefinitionBuilders.containsKey(dtDefinitionName), "Definition '{0}' already registered", dtDefinitionName);
dtDefinitionBuilders.put(dtDefinitionName, dtDefinitionBuilder);
// Déclaration de la clé primaire
final List<DslDefinition> keys = xdtDefinition.getChildDefinitions(DomainGrammar.ID);
populateIdDtField(definitionSpace, dtDefinitionBuilder, keys);
// Déclaration des champs du DT
final List<DslDefinition> fields = xdtDefinition.getChildDefinitions(DomainGrammar.FIELD);
populateDataDtField(definitionSpace, dtDefinitionBuilder, fields);
// Déclaration des champs calculés
final List<DslDefinition> computedFields = xdtDefinition.getChildDefinitions(DomainGrammar.COMPUTED);
populateComputedDtField(definitionSpace, dtDefinitionBuilder, computedFields);
return dtDefinitionBuilder.build();
}
Aggregations