use of org.jowidgets.cap.common.api.filter.IArithmeticFilter in project jo-client-platform by jo-source.
the class CriteriaQueryCreator method createFilterPredicate.
private Predicate createFilterPredicate(final CriteriaBuilder criteriaBuilder, final Root<?> bean, final CriteriaQuery<?> query, final IFilter filter, final PARAM_TYPE parameter) {
if (filter instanceof IPropertyFilter) {
final IPropertyFilter propertyFilter = (IPropertyFilter) filter;
final String propertyName = propertyFilter.getPropertyName();
final IPropertyFilterPredicateCreator<PARAM_TYPE> predicateCreator = propertyFilterPredicateCreators.get(propertyName);
if (predicateCreator != null) {
return predicateCreator.createPredicate(criteriaBuilder, bean, query, propertyFilter, parameter);
}
}
if (filter instanceof IArithmeticFilter) {
return createArithmeticFilterPredicate(criteriaBuilder, bean, query, (IArithmeticFilter) filter);
} else if (filter instanceof IArithmeticPropertyFilter) {
// TODO MG support IArithmeticPropertyFilter
throw new IllegalArgumentException("unsupported filter type: " + filter.getClass().getName());
} else if (filter instanceof IBooleanFilter) {
final Predicate predicate;
predicate = createBooleanFilterPredicate(criteriaBuilder, bean, query, (IBooleanFilter) filter, parameter);
return invertPredicateIfNeeded(criteriaBuilder, predicate, filter, true);
} else if (filter instanceof ICustomFilter) {
final ICustomFilter customFilter = (ICustomFilter) filter;
final ICustomFilterPredicateCreator<PARAM_TYPE> customFilterPredicateCreator = getCustomFilterPredicateCreator(customFilter);
if (customFilterPredicateCreator != null) {
final Predicate predicate;
predicate = customFilterPredicateCreator.createPredicate(criteriaBuilder, getPath(bean, customFilter.getPropertyName()), query, customFilter, parameter);
return invertPredicateIfNeeded(criteriaBuilder, predicate, filter, true);
} else {
throw new IllegalArgumentException("unsupported custom filter type: " + customFilter.getFilterType());
}
} else {
throw new IllegalArgumentException("unsupported filter type: " + filter.getClass().getName());
}
}
use of org.jowidgets.cap.common.api.filter.IArithmeticFilter in project jo-client-platform by jo-source.
the class LinkCreatorServiceImpl method checkExecutableState.
private void checkExecutableState(final ILinkCreation link, final IExecutionCallback executionCallback) {
final Collection<IBeanKey> linkableBeans = link.getLinkableBeans();
if (!EmptyCheck.isEmpty(linkableBeans)) {
for (final IBeanKey sourceBean : link.getSourceBeans()) {
final IFilterFactory filterFactory = CapCommonToolkit.filterFactory();
final Object[] linkableKeys = new Object[linkableBeans.size()];
int index = 0;
for (final IBeanKey key : linkableBeans) {
linkableKeys[index] = key.getId();
index++;
}
final IArithmeticFilter filter;
if (destinationProperties != null) {
filter = filterFactory.arithmeticFilter(destinationProperties.getKeyPropertyName(), ArithmeticOperator.CONTAINS_ANY, linkableKeys);
} else if (sourceProperties != null) {
filter = filterFactory.arithmeticFilter(sourceProperties.getKeyPropertyName(), ArithmeticOperator.CONTAINS_ANY, linkableKeys);
} else {
throw new IllegalStateException("Neither the source not the destination properties are defined");
}
final SyncResultCallback<Integer> result = new SyncResultCallback<Integer>();
linkableReaderService.count(result, Collections.singletonList(sourceBean), filter, null, executionCallback);
final Integer count = result.getResultSynchronious();
if (count == null || count.intValue() < linkableKeys.length) {
throw new ExecutableCheckException(sourceBean.getId(), "Beans are not linkable", DATASETS_CAN_NOT_BE_LINKED.get());
}
}
}
}
Aggregations