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.asset.AssetService; import com.github.czyzby.autumn.mvc.component.ui.InterfaceService; import com.github.czyzby.autumn.mvc.component.ui.controller.ViewController; import com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController; import com.github.czyzby.autumn.mvc.stereotype.View; import com.github.czyzby.autumn.processor.AbstractAnnotationProcessor; /** Processes {@link com.github.czyzby.autumn.mvc.stereotype.View} components. Initiates controllers. * * @author MJ */ public class ViewAnnotationProcessor extends AbstractAnnotationProcessor<View> { @Inject private InterfaceService interfaceService; @Inject private AssetService assetService; @Override public Class<View> getSupportedAnnotationType() { return View.class; } @Override public boolean isSupportingTypes() { return true; } @Override public void processType(final Class<?> type, final View annotation, final Object component, final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) { if (component instanceof ViewController) { interfaceService.registerController(type, (ViewController) component); } else { interfaceService.registerController(type, new AnnotatedViewController(annotation, component, assetService)); } } }