Search in sources :

Example 1 with IsEventFilter

use of com.github.mvp4g.mvp4g2.core.eventbus.IsEventFilter in project mvp4g2 by mvp4g.

the class AbstractEventBus method doFilterEvent.

/**
 * Performs the actual filtering by calling each associated event filter in turn. If any event
 * filter returns false, then the event will be canceled.
 *
 * @param eventName event's name
 * @param params    event parameters for this event
 */
@SuppressWarnings("unchecked")
private boolean doFilterEvent(String eventName, Object[] params) {
    int filterCount = eventFilters.size();
    @SuppressWarnings("rawtypes") IsEventFilter eventFilter;
    for (int i = 0; i < filterCount; i++) {
        eventFilter = eventFilters.get(i);
        if (!eventFilter.filterEvent(this, eventName, params)) {
            return false;
        }
    }
    return true;
}
Also used : IsEventFilter(com.github.mvp4g.mvp4g2.core.eventbus.IsEventFilter)

Example 2 with IsEventFilter

use of com.github.mvp4g.mvp4g2.core.eventbus.IsEventFilter in project mvp4g2 by mvp4g.

the class FilterAnnotationValidator method validate.

public void validate() throws ProcessorException {
    // get elements annotated with EventBus annotation
    Set<? extends Element> elementsWithFilterAnnotation = this.roundEnvironment.getElementsAnnotatedWith(Filters.class);
    // at least there should only one Application annotation!
    if (elementsWithFilterAnnotation.size() > 1) {
        throw new ProcessorException("Mvp4g2Processor: There should be at least only one interface, that is annotated with @Filter");
    }
    // annotated element has to be a interface
    for (Element element : elementsWithFilterAnnotation) {
        if (element instanceof TypeElement) {
            TypeElement typeElement = (TypeElement) element;
            if (!typeElement.getKind().isInterface()) {
                throw new ProcessorException("Mvp4g2Processor: @Filter can only be used with an interface");
            }
            // @Filter can only be used on a interface that extends IsEventBus
            if (!this.processorUtils.extendsClassOrInterface(this.processingEnvironment.getTypeUtils(), typeElement.asType(), this.processingEnvironment.getElementUtils().getTypeElement(IsEventBus.class.getCanonicalName()).asType())) {
                throw new ProcessorException("Mvp4g2Processor: @Filter can only be used on interfaces that extends IsEventBus");
            }
            // test, that all filters implement IsEventFilter!
            List<String> eventFilterAsStringList = this.getEventFiltersAsList(eventBusTypeElement);
            for (String eventFilterClassname : eventFilterAsStringList) {
                TypeElement filterElement = this.processingEnvironment.getElementUtils().getTypeElement(eventFilterClassname);
                if (!this.processorUtils.extendsClassOrInterface(this.processingEnvironment.getTypeUtils(), filterElement.asType(), this.processingEnvironment.getElementUtils().getTypeElement(IsEventFilter.class.getCanonicalName()).asType())) {
                    throw new ProcessorException("Mvp4g2Processor: @Filter - the filters attribute needs class that implements IsEventFilter");
                }
            }
        } else {
            throw new ProcessorException("Mvp4g2Processor: @Filter can only be used on a type (interface)");
        }
    }
}
Also used : ProcessorException(com.github.mvp4g.mvp4g2.processor.ProcessorException) TypeElement(javax.lang.model.element.TypeElement) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement)

Aggregations

IsEventFilter (com.github.mvp4g.mvp4g2.core.eventbus.IsEventFilter)1 ProcessorException (com.github.mvp4g.mvp4g2.processor.ProcessorException)1 Element (javax.lang.model.element.Element)1 TypeElement (javax.lang.model.element.TypeElement)1