src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java

changeset 83
24a3596b8f98
parent 80
27a25f32048e
child 86
0a658e53177c
     1.1 --- a/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java	Sat May 30 15:28:27 2020 +0200
     1.2 +++ b/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java	Sat May 30 18:05:06 2020 +0200
     1.3 @@ -39,10 +39,7 @@
     1.4  import javax.servlet.http.HttpServletResponse;
     1.5  import javax.servlet.http.HttpSession;
     1.6  import java.io.IOException;
     1.7 -import java.lang.reflect.Constructor;
     1.8 -import java.lang.reflect.InvocationTargetException;
     1.9 -import java.lang.reflect.Method;
    1.10 -import java.lang.reflect.Modifier;
    1.11 +import java.lang.reflect.*;
    1.12  import java.sql.Connection;
    1.13  import java.sql.SQLException;
    1.14  import java.util.*;
    1.15 @@ -280,30 +277,44 @@
    1.16       * @return the parameter value or an empty optional, if no parameter with the specified name was found
    1.17       */
    1.18      protected <T> Optional<T> getParameter(HttpServletRequest req, Class<T> clazz, String name) {
    1.19 -        final String paramValue = req.getParameter(name);
    1.20 -        if (paramValue == null) return Optional.empty();
    1.21 -        if (clazz.equals(Boolean.class)) {
    1.22 -            if (paramValue.toLowerCase().equals("false") || paramValue.equals("0")) {
    1.23 -                return Optional.of((T)Boolean.FALSE);
    1.24 -            } else {
    1.25 -                return Optional.of((T)Boolean.TRUE);
    1.26 +        if (clazz.isArray()) {
    1.27 +            final String[] paramValues = req.getParameterValues(name);
    1.28 +            int len = paramValues == null ? 0 : paramValues.length;
    1.29 +            final var array = (T) Array.newInstance(clazz.getComponentType(), len);
    1.30 +            for (int i = 0 ; i < len ; i++) {
    1.31 +                try {
    1.32 +                    final Constructor<?> ctor = clazz.getComponentType().getConstructor(String.class);
    1.33 +                    Array.set(array, i, ctor.newInstance(paramValues[i]));
    1.34 +                } catch (ReflectiveOperationException e) {
    1.35 +                    throw new RuntimeException(e);
    1.36 +                }
    1.37 +            }
    1.38 +            return Optional.of(array);
    1.39 +        } else {
    1.40 +            final String paramValue = req.getParameter(name);
    1.41 +            if (paramValue == null) return Optional.empty();
    1.42 +            if (clazz.equals(Boolean.class)) {
    1.43 +                if (paramValue.toLowerCase().equals("false") || paramValue.equals("0")) {
    1.44 +                    return Optional.of((T) Boolean.FALSE);
    1.45 +                } else {
    1.46 +                    return Optional.of((T) Boolean.TRUE);
    1.47 +                }
    1.48 +            }
    1.49 +            if (clazz.equals(String.class)) return Optional.of((T) paramValue);
    1.50 +            if (java.sql.Date.class.isAssignableFrom(clazz)) {
    1.51 +                try {
    1.52 +                    return Optional.of((T) java.sql.Date.valueOf(paramValue));
    1.53 +                } catch (IllegalArgumentException ex) {
    1.54 +                    return Optional.empty();
    1.55 +                }
    1.56 +            }
    1.57 +            try {
    1.58 +                final Constructor<T> ctor = clazz.getConstructor(String.class);
    1.59 +                return Optional.of(ctor.newInstance(paramValue));
    1.60 +            } catch (ReflectiveOperationException e) {
    1.61 +                throw new RuntimeException(e);
    1.62              }
    1.63          }
    1.64 -        if (clazz.equals(String.class)) return Optional.of((T) paramValue);
    1.65 -        if (java.sql.Date.class.isAssignableFrom(clazz)) {
    1.66 -            try {
    1.67 -                return Optional.of((T)java.sql.Date.valueOf(paramValue));
    1.68 -            } catch (IllegalArgumentException ex) {
    1.69 -                return Optional.empty();
    1.70 -            }
    1.71 -        }
    1.72 -        try {
    1.73 -            final Constructor<T> ctor = clazz.getConstructor(String.class);
    1.74 -            return Optional.of(ctor.newInstance(paramValue));
    1.75 -        } catch (ReflectiveOperationException e) {
    1.76 -            throw new RuntimeException(e);
    1.77 -        }
    1.78 -
    1.79      }
    1.80  
    1.81      /**

mercurial