FilterComponentRegistration
is more than just registering a component. It is more like registering a condition with component, state converter and custom UI to editing the condition. Good example of custom filter condition is the Search
add-on.
And registration:
@Bean("search_FullTextFilterRegistration")
public FilterComponentRegistration registerFullTextFilter() {
return FilterComponentRegistrationBuilder.create(FullTextFilter.class,
FullTextFilterCondition.class,
FullTextFilterConverter.class)
.build();
}
If you need only generate your custom component in Property condition
or in Jpql condition
you can extend the component factories:
AppPropertyFilterComponentGenerationStrategy.java
@org.springframework.stereotype.Component("app_PropertyFilterComponentGenerationStrategy")
public class AppPropertyFilterComponentGenerationStrategy extends PropertyFilterComponentGenerationStrategy {
public AppPropertyFilterComponentGenerationStrategy(Messages messages,
UiComponents uiComponents,
EntityFieldCreationSupport entityFieldCreationSupport,
Metadata metadata, MetadataTools metadataTools,
Icons icons, Actions actions,
DataAwareComponentsTools dataAwareComponentsTools,
ApplicationContext applicationContext) {
super(messages, uiComponents, entityFieldCreationSupport, metadata, metadataTools, icons, actions,
dataAwareComponentsTools, applicationContext);
}
@Override
protected Component createCollectionField(ComponentGenerationContext context, MetaPropertyPath mpp) {
ValuesPicker valuesPicker = (ValuesPicker) super.createCollectionField(context, mpp);
ValuesSelectAction selectAction = (ValuesSelectAction) valuesPicker.getAction("values_select");
// Check some conditions
// Set custom select screen
selectAction.setSelectValueScreenClass(MySelectScreenClass.class);
return valuesPicker;
}
@Override
public int getOrder() {
return JmixOrder.HIGHEST_PRECEDENCE;
}
AppJpqlFilterComponentGenerationStrategy.java
@org.springframework.stereotype.Component("app_AppJpqlFilterComponentGenerationStrategy")
public class AppJpqlFilterComponentGenerationStrategy extends JpqlFilterComponentGenerationStrategy {
public AppJpqlFilterComponentGenerationStrategy(Messages messages, UiComponents uiComponents,
EntityFieldCreationSupport entityFieldCreationSupport,
Metadata metadata, MetadataTools metadataTools, Icons icons,
Actions actions, DatatypeRegistry datatypeRegistry,
DataAwareComponentsTools dataAwareComponentsTools) {
super(messages, uiComponents, entityFieldCreationSupport, metadata, metadataTools, icons, actions,
datatypeRegistry, dataAwareComponentsTools);
}
@Override
protected Component createCollectionField(ComponentGenerationContext context) {
ValuesPicker valuesPicker = (ValuesPicker) super.createCollectionField(context);
ValuesSelectAction selectAction = (ValuesSelectAction) valuesPicker.getAction("values_select");
// check some conditions
// Set custom select screen
selectAction.setSelectValueScreenClass(MySelectScreenClass.class);
return valuesPicker;
}
@Override
public int getOrder() {
return JmixOrder.HIGHEST_PRECEDENCE;
}
}