Example usage for org.springframework.web.bind.support WebArgumentResolver getClass

List of usage examples for org.springframework.web.bind.support WebArgumentResolver getClass

Introduction

In this page you can find the example usage for org.springframework.web.bind.support WebArgumentResolver getClass.

Prototype

@HotSpotIntrinsicCandidate
public final native Class<?> getClass();

Source Link

Document

Returns the runtime class of this Object .

Usage

From source file:ch.ralscha.extdirectspring.util.ParametersResolver.java

@SuppressWarnings("unchecked")
public Object[] resolveParameters(HttpServletRequest request, HttpServletResponse response, Locale locale,
        ExtDirectRequest directRequest, MethodInfo methodInfo) throws Exception {

    int jsonParamIndex = 0;
    Map<String, Object> remainingParameters = null;
    ExtDirectStoreReadRequest extDirectStoreReadRequest = null;

    List<Object> directStoreModifyRecords = null;
    Class<?> directStoreEntryClass;

    if (methodInfo.isType(ExtDirectMethodType.STORE_READ) || methodInfo.isType(ExtDirectMethodType.FORM_LOAD)
            || methodInfo.isType(ExtDirectMethodType.TREE_LOAD)) {

        List<Object> data = (List<Object>) directRequest.getData();

        if (data != null && data.size() > 0) {
            if (methodInfo.isType(ExtDirectMethodType.STORE_READ)) {
                extDirectStoreReadRequest = new ExtDirectStoreReadRequest();
                remainingParameters = fillReadRequestFromMap(extDirectStoreReadRequest,
                        (Map<String, Object>) data.get(0));
            } else {
                remainingParameters = (Map<String, Object>) data.get(0);
            }/*from w  w w.  j  a  v a 2s.  c  o  m*/
            jsonParamIndex = 1;
        }
    } else if (methodInfo.isType(ExtDirectMethodType.STORE_MODIFY)) {
        directStoreEntryClass = methodInfo.getCollectionType();
        List<Object> data = (List<Object>) directRequest.getData();

        if (directStoreEntryClass != null && data != null && data.size() > 0) {
            Object obj = data.get(0);
            if (obj instanceof List) {
                directStoreModifyRecords = convertObjectEntriesToType((List<Object>) obj,
                        directStoreEntryClass);
            } else {
                Map<String, Object> jsonData = (Map<String, Object>) obj;
                Object records = jsonData.get("records");
                if (records != null) {
                    if (records instanceof List) {
                        directStoreModifyRecords = convertObjectEntriesToType((List<Object>) records,
                                directStoreEntryClass);
                    } else {
                        directStoreModifyRecords = new ArrayList<Object>();
                        directStoreModifyRecords
                                .add(this.jsonHandler.convertValue(records, directStoreEntryClass));
                    }
                    remainingParameters = new HashMap<String, Object>(jsonData);
                    remainingParameters.remove("records");
                } else {
                    directStoreModifyRecords = new ArrayList<Object>();
                    directStoreModifyRecords
                            .add(this.jsonHandler.convertValue(jsonData, directStoreEntryClass));
                }
            }
            jsonParamIndex = 1;

        } else if (data != null && data.size() > 0) {
            Object obj = data.get(0);
            if (obj instanceof Map) {
                remainingParameters = new HashMap<String, Object>((Map<String, Object>) obj);
                remainingParameters.remove("records");
            }
        }
    } else if (methodInfo.isType(ExtDirectMethodType.SIMPLE_NAMED)) {
        Map<String, Object> data = (Map<String, Object>) directRequest.getData();
        if (data != null && data.size() > 0) {
            remainingParameters = new HashMap<String, Object>(data);
        }
    } else if (methodInfo.isType(ExtDirectMethodType.POLL)) {
        throw new IllegalStateException("this controller does not handle poll calls");
    } else if (methodInfo.isType(ExtDirectMethodType.FORM_POST)) {
        throw new IllegalStateException("this controller does not handle form posts");
    } else if (methodInfo.isType(ExtDirectMethodType.FORM_POST_JSON)) {
        List<Object> data = (List<Object>) directRequest.getData();

        if (data != null && data.size() > 0) {
            Object obj = data.get(0);
            if (obj instanceof Map) {
                remainingParameters = new HashMap<String, Object>((Map<String, Object>) obj);
                remainingParameters.remove("records");
            }
        }

    }

    List<ParameterInfo> methodParameters = methodInfo.getParameters();
    Object[] parameters = null;

    if (!methodParameters.isEmpty()) {
        parameters = new Object[methodParameters.size()];

        for (int paramIndex = 0; paramIndex < methodParameters.size(); paramIndex++) {
            ParameterInfo methodParameter = methodParameters.get(paramIndex);

            if (methodParameter.isSupportedParameter()) {
                parameters[paramIndex] = SupportedParameters.resolveParameter(methodParameter.getType(),
                        request, response, locale, directRequest);
            } else if (ExtDirectStoreReadRequest.class.isAssignableFrom(methodParameter.getType())) {
                parameters[paramIndex] = extDirectStoreReadRequest;
            } else if (directStoreModifyRecords != null && methodParameter.getCollectionType() != null) {
                parameters[paramIndex] = directStoreModifyRecords;
            } else if (methodParameter.hasRequestParamAnnotation()) {
                parameters[paramIndex] = resolveRequestParam(null, remainingParameters, methodParameter);
            } else if (methodParameter.hasMetadataParamAnnotation()) {
                parameters[paramIndex] = resolveRequestParam(null, directRequest.getMetadata(),
                        methodParameter);
            } else if (methodParameter.hasRequestHeaderAnnotation()) {
                parameters[paramIndex] = resolveRequestHeader(request, methodParameter);
            } else if (methodParameter.hasCookieValueAnnotation()) {
                parameters[paramIndex] = resolveCookieValue(request, methodParameter);
            } else if (methodParameter.hasAuthenticationPrincipalAnnotation()) {
                parameters[paramIndex] = resolveAuthenticationPrincipal(methodParameter);
            } else if (remainingParameters != null
                    && remainingParameters.containsKey(methodParameter.getName())) {
                Object jsonValue = remainingParameters.get(methodParameter.getName());
                parameters[paramIndex] = convertValue(jsonValue, methodParameter);
            } else if (directRequest.getData() != null && directRequest.getData() instanceof List
                    && ((List<Object>) directRequest.getData()).size() > jsonParamIndex) {
                Object jsonValue = ((List<Object>) directRequest.getData()).get(jsonParamIndex);
                parameters[paramIndex] = convertValue(jsonValue, methodParameter);
                jsonParamIndex++;
            } else {

                if (methodInfo.isType(ExtDirectMethodType.SIMPLE_NAMED)) {
                    if (Map.class.isAssignableFrom(methodParameter.getType())) {
                        parameters[paramIndex] = remainingParameters;
                        continue;
                    } else if (methodParameter.isJavaUtilOptional()) {
                        parameters[paramIndex] = javaUtilOptionalEmpty;
                        continue;
                    }
                }

                log.info("WebResolvers size:" + this.webArgumentResolvers.size());
                log.info("ParamIndex:" + paramIndex);

                log.info("Request params size:" + request.getParameterMap().isEmpty());
                log.info("Request params names:" + request.getParameterMap().keySet());
                log.info("Direct Request:" + directRequest.toString());

                MethodParameter p = new MethodParameter(methodInfo.getMethod(), paramIndex);
                request.setAttribute("directRequest", directRequest);
                request.setAttribute("extDirectStoreReadRequest", extDirectStoreReadRequest);
                ServletWebRequest r = new ServletWebRequest(request);
                Object result = WebArgumentResolver.UNRESOLVED;

                for (WebArgumentResolver resolver : this.webArgumentResolvers) {
                    log.info("Resolving with:" + resolver.getClass().getCanonicalName());

                    result = resolver.resolveArgument(p, r);
                    if (result != WebArgumentResolver.UNRESOLVED) {
                        log.info("Resolved by:" + resolver.getClass().getCanonicalName());
                        parameters[paramIndex] = result;
                        break;
                    }
                }
                if (result == WebArgumentResolver.UNRESOLVED) {
                    throw new IllegalArgumentException(
                            "Error, parameter mismatch. Please check your remoting method signature to ensure all supported parameters types are used.");
                }
            }
        }
    }

    return parameters;
}