/******************************************************************************* * Copyright (c) 2014, 2015 IBH SYSTEMS GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBH SYSTEMS GmbH - initial API and implementation *******************************************************************************/ package org.eclipse.packagedrone.web.controller.binding; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; import org.eclipse.packagedrone.utils.converter.ConverterManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RequestParameterBinder implements Binder { private final static Logger logger = LoggerFactory.getLogger ( RequestParameterBinder.class ); private final HttpServletRequest request; public RequestParameterBinder ( final HttpServletRequest request ) { this.request = request; } @Override public Binding performBind ( final BindTarget target, final ConverterManager converter, final BindingManager bindingManager ) { final RequestParameter rp = target.getAnnotation ( RequestParameter.class ); if ( rp == null ) { return null; } final Class<?> type = target.getType (); if ( type.isAssignableFrom ( Part.class ) ) { try { final Part value = this.request.getPart ( rp.value () ); return Binding.simpleBinding ( value ); } catch ( final Exception e ) { logger.info ( "Failed to get part '{}'", rp.value () ); return null; } } else { final String valueString = this.request.getParameter ( rp.value () ); try { if ( valueString == null ) { if ( rp.required () ) { throw new IllegalStateException ( String.format ( "Request parameter '%s' is required but missing.", rp.value () ) ); } final Object value = converter.convertTo ( null, type ); return Binding.simpleBinding ( value ); } else { final Object value = converter.convertTo ( valueString, type ); return Binding.simpleBinding ( value ); } } catch ( final Exception e ) { logger.debug ( "Failed to bind", e ); return Binding.errorBinding ( e ); } } } }