/* * Copyright 2012 astamuse company,Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.astamuse.asta4d.misc.spring.mvc.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.astamuse.asta4d.web.WebApplicationConfiguration; import com.astamuse.asta4d.web.dispatch.RequestDispatcher; import com.astamuse.asta4d.web.dispatch.mapping.UrlMappingRule; import com.astamuse.asta4d.web.dispatch.mapping.UrlMappingRuleInitializer; import com.astamuse.asta4d.web.dispatch.mapping.UrlMappingRuleSet; @Controller public class GenericController implements ApplicationContextAware { private final static Logger logger = LoggerFactory.getLogger(GenericController.class); private ApplicationContext beanCtx = null; private RequestDispatcher dispatcher = new RequestDispatcher(); private List<UrlMappingRule> ruleList; public void init() { try { WebApplicationConfiguration conf = beanCtx.getBean(WebApplicationConfiguration.class); WebApplicationConfiguration.setConfiguration(conf); UrlMappingRuleSet ruleSet = conf.getUrlMappingRuleSetCls().newInstance(); UrlMappingRuleInitializer ruleInitializer = conf.getUrlMappingRuleInitializer(); ruleInitializer.initUrlMappingRules(ruleSet); ruleList = ruleSet.getArrangedRuleList(); logger.info("url mapping rules are initialized."); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } } @RequestMapping(value = "/**") public void doService(HttpServletRequest request, HttpServletResponse response) throws Exception { dispatcher.dispatchAndProcess(ruleList); /* Object contentProvider = dispatcher.handleRequest(request); return contentProvider == null ? null : convertSpringView(contentProvider); */ } @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.beanCtx = context; // we have to inovke init here because the // SpringManagedRequestHandlerResolver need to call application context. // And there is no matter that rule list is initialized in multi times, // so we do not apply a lock here. init(); } /* private View convertSpringView(ContentProvider contentProvider) throws TemplateException { if (contentProvider instanceof Asta4DPageProvider) { return new SpringWebPageView((Asta4DPageProvider) contentProvider); } else if (contentProvider instanceof RedirectActionProvider) { RedirectActionProvider redirector = (RedirectActionProvider) contentProvider; String url = RedirectUtil.setFlashScopeData(redirector.getUrl(), redirector.getFlashScopeData()); return new org.springframework.web.servlet.view.RedirectView(url); } throw new UnsupportedOperationException("ContentProvider Type:" + contentProvider.getClass().getName()); } */ }