/* * Copyright 2008-2010 the T2 Project ant the Others. * * 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 org.t2framework.confeito.spi.impl; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.t2framework.confeito.adapter.ContainerAdapter; import org.t2framework.confeito.annotation.ActionParam; import org.t2framework.confeito.annotation.ActionPath; import org.t2framework.confeito.annotation.Ajax; import org.t2framework.confeito.annotation.DELETE; import org.t2framework.confeito.annotation.GET; import org.t2framework.confeito.annotation.HEAD; import org.t2framework.confeito.annotation.OPTIONS; import org.t2framework.confeito.annotation.POST; import org.t2framework.confeito.annotation.PUT; import org.t2framework.confeito.annotation.TRACE; import org.t2framework.confeito.contexts.HttpMethod; import org.t2framework.confeito.contexts.WebContext; import org.t2framework.confeito.method.ActionMethodResolver; import org.t2framework.confeito.method.impl.ActionParamResolver; import org.t2framework.confeito.method.impl.ActionPathResolver; import org.t2framework.confeito.method.impl.AjaxResolver; import org.t2framework.confeito.method.impl.DefaultResolver; import org.t2framework.confeito.method.impl.HttpMethodActionMethodResolver; import org.t2framework.confeito.parameter.ParameterResolver; import org.t2framework.confeito.parameter.impl.CookieParameterResolver; import org.t2framework.confeito.parameter.impl.ErrorInfoParameterResolver; import org.t2framework.confeito.parameter.impl.FormParameterResolver; import org.t2framework.confeito.parameter.impl.InParameterResolver; import org.t2framework.confeito.parameter.impl.IndexParameterResolver; import org.t2framework.confeito.parameter.impl.JsonParameterResolverImpl; import org.t2framework.confeito.parameter.impl.RequestHeaderResolver; import org.t2framework.confeito.parameter.impl.RequestParamParameterResolver; import org.t2framework.confeito.parameter.impl.ServletParameterResolver; import org.t2framework.confeito.parameter.impl.SessionAttributeResolver; import org.t2framework.confeito.parameter.impl.UploadFileParameterResolver; import org.t2framework.confeito.parameter.impl.VarParameterResolver; import org.t2framework.confeito.parameter.impl.WebContextParameterResolver; import org.t2framework.confeito.spi.AnnotationResolverCreator; /** * <#if locale="en"> * <p> * Default implementation of {@code AnnotationResolverCreator}. * * </p> * <#else> * <p> * * </p> * </#if> * * @author shot * */ public class DefaultAnnotationResolverCreatorImpl implements AnnotationResolverCreator { protected List<ParameterResolver> parameterResolvers = new ArrayList<ParameterResolver>(); protected Map<Class<? extends Annotation>, ActionMethodResolver> actionAnnotationResolverMap = new HashMap<Class<? extends Annotation>, ActionMethodResolver>(); protected ActionMethodResolver defaultAnnotationResolver = new DefaultResolver(); { // parameter resolvers parameterResolvers.add(new WebContextParameterResolver()); parameterResolvers.add(new ServletParameterResolver()); parameterResolvers.add(new CookieParameterResolver()); parameterResolvers.add(new RequestParamParameterResolver()); parameterResolvers.add(new SessionAttributeResolver()); parameterResolvers.add(new FormParameterResolver()); parameterResolvers.add(new UploadFileParameterResolver()); parameterResolvers.add(new ErrorInfoParameterResolver()); parameterResolvers.add(new IndexParameterResolver()); parameterResolvers.add(new VarParameterResolver()); parameterResolvers.add(new RequestHeaderResolver()); parameterResolvers.add(new JsonParameterResolverImpl()); parameterResolvers.add(new InParameterResolver()); // method resolvers actionAnnotationResolverMap.put(GET.class, new HttpMethodActionMethodResolver(HttpMethod.GET)); actionAnnotationResolverMap.put(POST.class, new HttpMethodActionMethodResolver(HttpMethod.POST)); actionAnnotationResolverMap.put(PUT.class, new HttpMethodActionMethodResolver(HttpMethod.PUT)); actionAnnotationResolverMap.put(DELETE.class, new HttpMethodActionMethodResolver(HttpMethod.DELETE)); actionAnnotationResolverMap.put(HEAD.class, new HttpMethodActionMethodResolver(HttpMethod.HEAD)); actionAnnotationResolverMap.put(OPTIONS.class, new HttpMethodActionMethodResolver(HttpMethod.OPTIONS)); actionAnnotationResolverMap.put(TRACE.class, new HttpMethodActionMethodResolver(HttpMethod.TRACE)); actionAnnotationResolverMap.put(ActionPath.class, new ActionPathResolver()); actionAnnotationResolverMap.put(ActionParam.class, new ActionParamResolver()); actionAnnotationResolverMap.put(Ajax.class, new AjaxResolver()); }; @Override public Map<Class<? extends Annotation>, ActionMethodResolver> createActionMethodResolvers( ContainerAdapter<?> containerAdapter) { return actionAnnotationResolverMap; } @Override public ActionMethodResolver createDefaultActionMethodResolver( ContainerAdapter<?> containerAdapter) { return defaultAnnotationResolver; } @Override public List<ParameterResolver> createParameterResolvers( ContainerAdapter<?> containerAdapter, WebContext context) { return parameterResolvers; } @Override public Set<Class<? extends Annotation>> getActionAnnotationSet( ContainerAdapter<?> containerAdapter) { return actionAnnotationResolverMap.keySet(); } }