/*
* Copyright 2014 MOSPA(Ministry of Security and Public Administration).
*
* 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 egovframework.rte.ptl.mvc.bind.annotation;
import java.util.ArrayList;
import java.util.List;
import egovframework.rte.ptl.mvc.bind.AnnotationCommandMapArgumentResolver;
import org.springframework.web.method.annotation.MapMethodProcessor;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
/**
* EgovRequestMappingHandlerAdapter.java
* <p/><b>NOTE:</b> <pre>Spring 3.1부터 AnnotationMethodHandlerAdapter는 deprecated되고 RequestMappingHandlerAdapter를 대신 써야한다.
* 또한 Map타입의 Argument를 처리해주는 MapMethodProcessor가 추가되어 RequestMappingHandlerAdapter를 그대로 써줄 경우
* Egov에서 제공하는 CommandMapArgumentResolver를 쓸 수 없다.
* HandlerMethodArgumentResolver을 implements하는 AnnotationCommandMapArgumentResolver를 구현하였으며
* EgovRequestMapping에서는 MapMethodProcessor보다 AnnotationCommandMapArgumentResolver가 먼저 ArgumentResolver로 인식될 수 있도록
* ArgumentResolver list의 순서를 변경해준다.
*
* </pre>
* @author 이영지
* @since 2014.04.23
* @version 3.0
* @see AnnotationCommandMapArgumentResolver, {@link CommandMap}
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2014.04.23 이영지 최초 생성
* 2014.12.11 이기하 @RequestParam으로 대체
* 2015.04.10 장동한 resolvers 수정 (나중에 삭제 처리해야 됨)
*
* </pre>
* @deprecated This class has been deprecated.
*/
@Deprecated
public class EgovRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter {
/**
* CommandMapMethodArgumentResolver를 쓰기 위하여
* ArgumentResolver list에서 MapMethodProcessor보다 앞에 CommandMapMethodArgumentResolver를 추가한다.
* MapMethodProcessor의 기능을 살리기 위해 CommandMapArgument를 쓸 때는 @CommandMap을 붙여야 한다.
*
* @see CommandMap
*/
@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();
if (getArgumentResolvers() != null) {
//List<HandlerMethodArgumentResolver> resolvers = new ArrayList<HandlerMethodArgumentResolver>(getArgumentResolvers().getResolvers());
List<HandlerMethodArgumentResolver> resolvers = new ArrayList<HandlerMethodArgumentResolver>(getArgumentResolvers());
int mapMethodProcessorInx = -1;
int commandMapInx = -1;
HandlerMethodArgumentResolver commandMapArgResolver = null;
for (int inx = 0; inx < resolvers.size(); inx++) {
HandlerMethodArgumentResolver resolver = resolvers.get(inx);
if (resolver instanceof MapMethodProcessor) {
mapMethodProcessorInx = inx;
} else if (resolver instanceof AnnotationCommandMapArgumentResolver) {
commandMapInx = inx;
}
}
if (commandMapInx != -1) {
commandMapArgResolver = resolvers.remove(commandMapInx);
resolvers.add(mapMethodProcessorInx, commandMapArgResolver);
setArgumentResolvers(resolvers);
}
}
}
}