package org.webpieces.router.impl.loader;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.webpieces.router.api.actions.Action;
import org.webpieces.router.api.dto.MethodMeta;
import org.webpieces.router.impl.FilterInfo;
import org.webpieces.router.impl.RouteMeta;
import org.webpieces.router.impl.hooks.MetaLoaderProxy;
import org.webpieces.util.filters.Service;
@Singleton
public class ControllerLoader {
private MetaLoaderProxy loader;
private ControllerResolver resolver;
@Inject
public ControllerLoader(MetaLoaderProxy loader, ControllerResolver resolver) {
this.loader = loader;
this.resolver = resolver;
}
/**
* isInitializingAllControllers is true if in process of initializing ALL controllers and false if just being called to
* initialize on controller
*
* @param meta
* @param isInitializingAllControllers
*/
public void loadControllerIntoMetaObject(RouteMeta meta, boolean isInitializingAllControllers) {
ResolvedMethod method = resolver.resolveControllerClassAndMethod(meta);
//This is a hook for the dev server with auto-compile (if isInitializing, dev server skips this piece)
//if not initializing, dev server does this piece. Production does the opposite.
loader.loadControllerIntoMeta(meta, method, isInitializingAllControllers);
}
public void loadFiltersIntoMeta(RouteMeta m, List<FilterInfo<?>> filters, boolean isInitializingAllFilters) {
loader.loadFiltersIntoMeta(m, filters, isInitializingAllFilters);
}
public Service<MethodMeta, Action> createNotFoundService(RouteMeta m, List<FilterInfo<?>> filterInfos) {
return loader.createServiceFromFilters(m, filterInfos);
}
}