package com.github.czyzby.autumn.mvc.component.ui.processor;
import com.github.czyzby.autumn.annotation.Inject;
import com.github.czyzby.autumn.context.Context;
import com.github.czyzby.autumn.context.ContextDestroyer;
import com.github.czyzby.autumn.context.ContextInitializer;
import com.github.czyzby.autumn.mvc.component.ui.InterfaceService;
import com.github.czyzby.autumn.mvc.component.ui.controller.ViewDialogController;
import com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewDialogController;
import com.github.czyzby.autumn.mvc.stereotype.ViewDialog;
import com.github.czyzby.autumn.processor.AbstractAnnotationProcessor;
/** Processes {@link com.github.czyzby.autumn.mvc.stereotype.ViewDialog} components. Initiates dialog controllers.
*
* @author MJ */
public class ViewDialogAnnotationProcessor extends AbstractAnnotationProcessor<ViewDialog> {
@Inject private InterfaceService interfaceService;
@Override
public Class<ViewDialog> getSupportedAnnotationType() {
return ViewDialog.class;
}
@Override
public boolean isSupportingTypes() {
return true;
}
@Override
public void processType(final Class<?> type, final ViewDialog annotation, final Object component,
final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
if (component instanceof ViewDialogController) {
interfaceService.registerDialogController(type, (ViewDialogController) component);
} else {
interfaceService.registerDialogController(type,
new AnnotatedViewDialogController(annotation, component, interfaceService));
}
}
}