Search in sources :

Example 56 with DtField

use of io.vertigo.dynamo.domain.metamodel.DtField in project vertigo by KleeGroup.

the class MandatoryPkValidator method checkMultiFieldConstraints.

/**
 * NO checkMonoFieldConstraints.
 * Can't check that PK was set in a checkMonoFieldConstraints.
 * Because it was called for modified fields only, if PK is undefined it will not be checked.
 */
/**
 * {@inheritDoc}
 */
@Override
protected void checkMultiFieldConstraints(final E entity, final Set<String> modifiedFieldNameSet, final DtObjectErrors dtObjectErrors) {
    final DtDefinition dtDefinition = DtObjectUtil.findDtDefinition(entity);
    final DtField idField = dtDefinition.getIdField().get();
    final String camelCaseFieldName = getCamelCaseFieldName(idField);
    if (!dtObjectErrors.hasError(camelCaseFieldName)) {
        if (DtObjectUtil.getId(entity) == null) {
            dtObjectErrors.addError(camelCaseFieldName, MessageText.of("Id is mandatory"));
        }
    }
}
Also used : DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) DtField(io.vertigo.dynamo.domain.metamodel.DtField)

Example 57 with DtField

use of io.vertigo.dynamo.domain.metamodel.DtField in project vertigo by KleeGroup.

the class AdvancedTestWebServices method createFilterFunction.

private <C extends DtObject, E extends Entity> Predicate<E> createFilterFunction(final C criteria, final Class<E> resultClass) {
    Predicate<E> filter = (o) -> true;
    final DtDefinition criteriaDefinition = DtObjectUtil.findDtDefinition(criteria);
    final DtDefinition resultDefinition = DtObjectUtil.findDtDefinition(resultClass);
    final Set<String> alreadyAddedField = new HashSet<>();
    for (final DtField field : criteriaDefinition.getFields()) {
        final String fieldName = field.getName();
        if (!alreadyAddedField.contains(fieldName)) {
            // when we consume two fields at once (min;max)
            final Object value = field.getDataAccessor().getValue(criteria);
            if (value != null) {
                if (fieldName.endsWith("_MIN") || fieldName.endsWith("_MAX")) {
                    final String filteredField = fieldName.substring(0, fieldName.length() - "_MIN".length());
                    final DtField resultDtField = resultDefinition.getField(filteredField);
                    final DtField minField = fieldName.endsWith("_MIN") ? field : criteriaDefinition.getField(filteredField + "_MIN");
                    final DtField maxField = fieldName.endsWith("_MAX") ? field : criteriaDefinition.getField(filteredField + "_MAX");
                    final Serializable minValue = (Serializable) minField.getDataAccessor().getValue(criteria);
                    final Serializable maxValue = (Serializable) maxField.getDataAccessor().getValue(criteria);
                    filter = filter.and(Criterions.isBetween(() -> resultDtField.getName(), CriterionLimit.ofIncluded(minValue), CriterionLimit.ofExcluded(maxValue)).toPredicate());
                } else {
                    final Predicate predicate = Criterions.isEqualTo(() -> fieldName, Serializable.class.cast(value)).toPredicate();
                    filter.and(predicate);
                }
            }
        }
    // si null, alors on ne filtre pas
    }
    return filter;
}
Also used : Arrays(java.util.Arrays) ServerSideSave(io.vertigo.vega.webservice.stereotype.ServerSideSave) URL(java.net.URL) Date(java.util.Date) URISyntaxException(java.net.URISyntaxException) POST(io.vertigo.vega.webservice.stereotype.POST) Doc(io.vertigo.vega.webservice.stereotype.Doc) CriterionLimit(io.vertigo.dynamo.criteria.CriterionLimit) PathParam(io.vertigo.vega.webservice.stereotype.PathParam) ExtendedObject(io.vertigo.vega.webservice.model.ExtendedObject) Criterions(io.vertigo.dynamo.criteria.Criterions) Validate(io.vertigo.vega.webservice.stereotype.Validate) AccessTokenConsume(io.vertigo.vega.webservice.stereotype.AccessTokenConsume) MandatoryPkValidator(io.vertigo.vega.webservice.data.domain.MandatoryPkValidator) ContactValidator(io.vertigo.vega.webservice.data.domain.ContactValidator) Predicate(java.util.function.Predicate) DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) Collection(java.util.Collection) Set(java.util.Set) UiContext(io.vertigo.vega.engines.webservice.json.UiContext) Instant(java.time.Instant) QueryParam(io.vertigo.vega.webservice.stereotype.QueryParam) VFile(io.vertigo.dynamo.file.model.VFile) WebServices(io.vertigo.vega.webservice.WebServices) ExcludedFields(io.vertigo.vega.webservice.stereotype.ExcludedFields) Serializable(java.io.Serializable) GET(io.vertigo.vega.webservice.stereotype.GET) VUserException(io.vertigo.lang.VUserException) FileManager(io.vertigo.dynamo.file.FileManager) List(java.util.List) HeaderParam(io.vertigo.vega.webservice.stereotype.HeaderParam) DtObject(io.vertigo.dynamo.domain.model.DtObject) StringUtil(io.vertigo.util.StringUtil) Optional(java.util.Optional) ResourceManager(io.vertigo.core.resource.ResourceManager) DtField(io.vertigo.dynamo.domain.metamodel.DtField) DtObjectUtil(io.vertigo.dynamo.domain.util.DtObjectUtil) AnonymousAccessAllowed(io.vertigo.vega.webservice.stereotype.AnonymousAccessAllowed) AccessTokenPublish(io.vertigo.vega.webservice.stereotype.AccessTokenPublish) ContactDao(io.vertigo.vega.webservice.data.domain.ContactDao) HashSet(java.util.HashSet) Inject(javax.inject.Inject) InnerBodyParam(io.vertigo.vega.webservice.stereotype.InnerBodyParam) PathPrefix(io.vertigo.vega.webservice.stereotype.PathPrefix) DateUtil(io.vertigo.util.DateUtil) ServerSideRead(io.vertigo.vega.webservice.stereotype.ServerSideRead) PUT(io.vertigo.vega.webservice.stereotype.PUT) HttpServletResponse(javax.servlet.http.HttpServletResponse) AutoSortAndPagination(io.vertigo.vega.webservice.stereotype.AutoSortAndPagination) DtList(io.vertigo.dynamo.domain.model.DtList) File(java.io.File) DtListState(io.vertigo.dynamo.domain.model.DtListState) ContactCriteria(io.vertigo.vega.webservice.data.domain.ContactCriteria) Entity(io.vertigo.dynamo.domain.model.Entity) EmptyPkValidator(io.vertigo.vega.webservice.data.domain.EmptyPkValidator) VCollectors(io.vertigo.dynamo.domain.util.VCollectors) Contact(io.vertigo.vega.webservice.data.domain.Contact) IncludedFields(io.vertigo.vega.webservice.stereotype.IncludedFields) AccessTokenMandatory(io.vertigo.vega.webservice.stereotype.AccessTokenMandatory) CollectionsManager(io.vertigo.dynamo.collections.CollectionsManager) Serializable(java.io.Serializable) DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) ExtendedObject(io.vertigo.vega.webservice.model.ExtendedObject) DtObject(io.vertigo.dynamo.domain.model.DtObject) HashSet(java.util.HashSet) DtField(io.vertigo.dynamo.domain.metamodel.DtField) Predicate(java.util.function.Predicate)

Example 58 with DtField

use of io.vertigo.dynamo.domain.metamodel.DtField in project vertigo by KleeGroup.

the class RamLuceneIndex method addAll.

/**
 * Add element to index.
 * @param fullDtc Full Dtc to index
 * @param storeValue if data are store in index
 * @throws IOException Indexation error
 */
public void addAll(final DtList<D> fullDtc, final boolean storeValue) throws IOException {
    Assertion.checkNotNull(fullDtc);
    // -----
    try (final IndexWriter indexWriter = createIndexWriter()) {
        final DtField idField = fullDtc.getDefinition().getIdField().get();
        final Collection<DtField> dtFields = fullDtc.getDefinition().getFields();
        for (final D dto : fullDtc) {
            final Document document = new Document();
            final Object pkValue = idField.getDataAccessor().getValue(dto);
            Assertion.checkNotNull(pkValue, "Indexed DtObject must have a not null primary key. {0}.{1} was null.", fullDtc.getDefinition().getName(), idField.getName());
            final String indexedPkValue = String.valueOf(pkValue);
            addKeyword(document, idField.getName(), indexedPkValue, true);
            for (final DtField dtField : dtFields) {
                final Object value = dtField.getDataAccessor().getValue(dto);
                if (value != null && !dtField.equals(idField)) {
                    if (value instanceof String) {
                        final String valueAsString = getStringValue(dto, dtField);
                        addIndexed(document, dtField.getName(), valueAsString, storeValue);
                    } else if (value instanceof Date) {
                        final String valueAsString = DateTools.dateToString((Date) value, DateTools.Resolution.DAY);
                        addKeyword(document, dtField.getName(), valueAsString, storeValue);
                    } else {
                        addKeyword(document, dtField.getName(), value.toString(), storeValue);
                    }
                }
            }
            indexWriter.addDocument(document);
            mapDocument(indexedPkValue, dto);
        }
    }
}
Also used : IndexWriter(org.apache.lucene.index.IndexWriter) DtObject(io.vertigo.dynamo.domain.model.DtObject) Document(org.apache.lucene.document.Document) Date(java.util.Date) DtField(io.vertigo.dynamo.domain.metamodel.DtField)

Example 59 with DtField

use of io.vertigo.dynamo.domain.metamodel.DtField in project vertigo by KleeGroup.

the class RamLuceneIndex method translateDocs.

private DtList<D> translateDocs(final IndexSearcher searcher, final TopDocs topDocs, final int skip, final int top) throws IOException {
    final DtField idField = dtDefinition.getIdField().get();
    final DtList<D> dtcResult = new DtList<>(dtDefinition);
    final int resultLength = topDocs.scoreDocs.length;
    if (resultLength > skip) {
        for (int i = skip; i < Math.min(skip + top, resultLength); i++) {
            final ScoreDoc scoreDoc = topDocs.scoreDocs[i];
            final Document document = searcher.doc(scoreDoc.doc);
            dtcResult.add(getDtObjectIndexed(document.get(idField.getName())));
        }
    }
    return dtcResult;
}
Also used : Document(org.apache.lucene.document.Document) DtList(io.vertigo.dynamo.domain.model.DtList) DtField(io.vertigo.dynamo.domain.metamodel.DtField) ScoreDoc(org.apache.lucene.search.ScoreDoc)

Example 60 with DtField

use of io.vertigo.dynamo.domain.metamodel.DtField in project vertigo by KleeGroup.

the class RamLuceneIndex method getStringValue.

private static String getStringValue(final DtObject dto, final DtField field) {
    final String stringValue;
    final Object value = field.getDataAccessor().getValue(dto);
    if (value != null) {
        if (field.getType() == DtField.FieldType.FOREIGN_KEY && getStoreManager().getMasterDataConfig().containsMasterData(field.getFkDtDefinition())) {
            // TODO voir pour mise en cache de cette navigation
            final DtListURIForMasterData mdlUri = getStoreManager().getMasterDataConfig().getDtListURIForMasterData(field.getFkDtDefinition());
            final DtField displayField = mdlUri.getDtDefinition().getDisplayField().get();
            final URI<Entity> uri = new URI<>(field.getFkDtDefinition(), value);
            final DtObject fkDto = getStoreManager().getDataStore().readOne(uri);
            final Object displayValue = displayField.getDataAccessor().getValue(fkDto);
            stringValue = displayField.getDomain().valueToString(displayValue);
        } else {
            stringValue = String.valueOf(field.getDataAccessor().getValue(dto));
        }
        return stringValue.trim();
    }
    return null;
}
Also used : Entity(io.vertigo.dynamo.domain.model.Entity) DtObject(io.vertigo.dynamo.domain.model.DtObject) DtObject(io.vertigo.dynamo.domain.model.DtObject) DtListURIForMasterData(io.vertigo.dynamo.domain.model.DtListURIForMasterData) URI(io.vertigo.dynamo.domain.model.URI) DtField(io.vertigo.dynamo.domain.metamodel.DtField)

Aggregations

DtField (io.vertigo.dynamo.domain.metamodel.DtField)77 DtDefinition (io.vertigo.dynamo.domain.metamodel.DtDefinition)28 DtObject (io.vertigo.dynamo.domain.model.DtObject)14 DtList (io.vertigo.dynamo.domain.model.DtList)13 URI (io.vertigo.dynamo.domain.model.URI)12 HashMap (java.util.HashMap)11 Map (java.util.Map)8 TaskDefinition (io.vertigo.dynamo.task.metamodel.TaskDefinition)7 Task (io.vertigo.dynamo.task.model.Task)7 ArrayList (java.util.ArrayList)7 Entity (io.vertigo.dynamo.domain.model.Entity)6 TaskEngineSelect (io.vertigo.dynamox.task.TaskEngineSelect)6 Serializable (java.io.Serializable)6 LinkedHashMap (java.util.LinkedHashMap)6 List (java.util.List)6 MessageText (io.vertigo.core.locale.MessageText)5 FacetValue (io.vertigo.dynamo.collections.model.FacetValue)5 Date (java.util.Date)4 SearchHit (org.elasticsearch.search.SearchHit)4 JsonObject (com.google.gson.JsonObject)3