use of io.vertigo.dynamo.domain.model.DtObject 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;
}
use of io.vertigo.dynamo.domain.model.DtObject in project vertigo by KleeGroup.
the class ValidatorWebServiceHandlerPlugin method validateParam.
private static void validateParam(final Object value, final UiMessageStack uiMessageStack, final WebServiceParam webServiceParam, final WebServiceCallContext routeContext) {
final Map<String, DtObject> contextKeyMap = new HashMap<>();
if (value instanceof UiObject) {
final UiObject<DtObject> uiObject = (UiObject<DtObject>) value;
final List<DtObjectValidator<DtObject>> dtObjectValidators = obtainDtObjectValidators(webServiceParam);
// Only authorized fields have already been checked (JsonConverterHandler)
final DtObject updatedDto = uiObject.mergeAndCheckInput(dtObjectValidators, uiMessageStack);
contextKeyMap.put(uiObject.getInputKey(), updatedDto);
routeContext.registerUpdatedDtObjects(webServiceParam, updatedDto, contextKeyMap);
} else if (value instanceof UiListDelta) {
final UiListDelta<DtObject> uiListDelta = (UiListDelta<DtObject>) value;
final List<DtObjectValidator<DtObject>> dtObjectValidators = obtainDtObjectValidators(webServiceParam);
// Only authorized fields have already been checked (JsonConverterHandler)
final DtList<DtObject> dtListCreates = mergeAndCheckInput(uiListDelta.getObjectType(), uiListDelta.getCreatesMap(), dtObjectValidators, uiMessageStack, contextKeyMap);
final DtList<DtObject> dtListUpdates = mergeAndCheckInput(uiListDelta.getObjectType(), uiListDelta.getUpdatesMap(), dtObjectValidators, uiMessageStack, contextKeyMap);
final DtList<DtObject> dtListDeletes = mergeAndCheckInput(uiListDelta.getObjectType(), uiListDelta.getDeletesMap(), dtObjectValidators, uiMessageStack, contextKeyMap);
final DtListDelta<DtObject> dtListDelta = new DtListDelta<>(dtListCreates, dtListUpdates, dtListDeletes);
routeContext.registerUpdatedDtObjects(webServiceParam, dtListDelta, contextKeyMap);
} else if (value instanceof UiListModifiable) {
final UiListModifiable<DtObject> uiList = (UiListModifiable<DtObject>) value;
final List<DtObjectValidator<DtObject>> dtObjectValidators = obtainDtObjectValidators(webServiceParam);
// Only authorized fields have already been checked (JsonConverterHandler)
final DtList<DtObject> dtList = mergeAndCheckInput(uiList.getObjectType(), uiList, dtObjectValidators, uiMessageStack, contextKeyMap);
routeContext.registerUpdatedDtObjects(webServiceParam, dtList, contextKeyMap);
} else if (value instanceof ExtendedObject) {
final ExtendedObject<?> extendedObject = (ExtendedObject) value;
validateParam(extendedObject.getInnerObject(), uiMessageStack, webServiceParam, routeContext);
final Object updatedValue = routeContext.getParamValue(webServiceParam);
final ExtendedObject<?> updatedExtendedObject = new ExtendedObject(updatedValue);
updatedExtendedObject.putAll(extendedObject);
routeContext.setParamValue(webServiceParam, updatedExtendedObject);
} else if (value instanceof Optional && ((Optional) value).isPresent()) {
validateParam(((Optional) value).get(), uiMessageStack, webServiceParam, routeContext);
}
}
use of io.vertigo.dynamo.domain.model.DtObject in project vertigo by KleeGroup.
the class DtListDeltaJsonConverter method populateWebServiceCallContext.
/**
* {@inheritDoc}
*/
@Override
public void populateWebServiceCallContext(final Object input, final WebServiceParam webServiceParam, final WebServiceCallContext routeContext) {
final Class<?> paramClass = webServiceParam.getType();
Assertion.checkArgument(canHandle(paramClass), "This JsonConverter can't read the asked type {0}. Only {1} is supported", paramClass.getSimpleName(), UiListDelta.class.getSimpleName());
Assertion.checkArgument(getSupportedInputs()[0].isInstance(input) || getSupportedInputs()[1].isInstance(input), "This JsonConverter doesn't support this input type {0}. Only {1} is supported", input.getClass().getSimpleName(), Arrays.toString(getSupportedInputs()));
// -----
final Type paramGenericType = webServiceParam.getGenericType();
final String objectPath;
final UiListDelta<DtObject> uiListDelta;
if (input instanceof String) {
uiListDelta = jsonReaderEngine.uiListDeltaFromJson((String) input, paramGenericType);
objectPath = "";
} else if (input instanceof UiContext) {
uiListDelta = (UiListDelta<DtObject>) ((UiContext) input).get(webServiceParam.getName());
Assertion.checkNotNull(uiListDelta, "InnerParam not found : {0}", webServiceParam);
objectPath = webServiceParam.getName();
} else {
throw new IllegalArgumentException(String.format("This JsonConverter can't read the asked type %s. Only %s is supported", paramClass.getSimpleName(), UiListDelta.class.getSimpleName()));
}
UiObjectUtil.postReadUiListDelta(uiListDelta, objectPath, webServiceParam);
routeContext.setParamValue(webServiceParam, uiListDelta);
}
use of io.vertigo.dynamo.domain.model.DtObject in project vertigo by KleeGroup.
the class DtListJsonConverter method populateWebServiceCallContext.
/**
* {@inheritDoc}
*/
@Override
public void populateWebServiceCallContext(final Object input, final WebServiceParam webServiceParam, final WebServiceCallContext routeContext) {
final Class<?> paramClass = webServiceParam.getType();
Assertion.checkArgument(DtList.class.isAssignableFrom(paramClass), "This JsonConverter can't read the asked type {0}. Only {1} is supported", paramClass.getSimpleName(), DtList.class.getSimpleName());
Assertion.checkArgument(getSupportedInputs()[0].isInstance(input) || getSupportedInputs()[1].isInstance(input), "This JsonConverter doesn't support this input type {0}. Only {1} is supported", input.getClass().getSimpleName(), Arrays.toString(getSupportedInputs()));
// -----
final Type paramGenericType = webServiceParam.getGenericType();
final String objectPath;
final UiListModifiable<DtObject> uiList;
if (input instanceof String) {
uiList = jsonReaderEngine.uiListFromJson((String) input, paramGenericType);
objectPath = "";
} else if (input instanceof UiContext) {
uiList = (UiListModifiable<DtObject>) ((UiContext) input).get(webServiceParam.getName());
Assertion.checkNotNull(uiList, "InnerParam not found : {0}", webServiceParam);
objectPath = webServiceParam.getName();
} else {
throw new IllegalArgumentException(String.format("This JsonConverter can't read the asked type %s. Only %s is supported", paramClass.getSimpleName(), UiListDelta.class.getSimpleName()));
}
// -----
UiObjectUtil.postReadUiList(uiList, objectPath, webServiceParam);
routeContext.setParamValue(webServiceParam, uiList);
}
use of io.vertigo.dynamo.domain.model.DtObject 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);
}
}
}
Aggregations