diff --git a/src/tap/parameters/TAPParameters.java b/src/tap/parameters/TAPParameters.java index dc0503326d7aff917faa93194a8f2b10b69ea487..6e48638e2a8b810c156193d01e415abf4e9174ca 100644 --- a/src/tap/parameters/TAPParameters.java +++ b/src/tap/parameters/TAPParameters.java @@ -42,7 +42,7 @@ import uws.job.parameters.UWSParameters; * submitted by a TAP client to this TAP service. * * @author Grégory Mantelet (CDS;ARI) - * @version 2.1 (06/2016) + * @version 2.1 (04/2017) */ public class TAPParameters extends UWSParameters { @@ -55,7 +55,7 @@ public class TAPParameters extends UWSParameters { * @param service Description of the TAP service in which the parameters are created and will be used. */ public TAPParameters(final ServiceConnection service){ - super(TAP_PARAMETERS, buildDefaultControllers(service)); + super(TAP_PARAMETERS, buildDefaultControllers(service, null)); } /** @@ -72,6 +72,24 @@ public class TAPParameters extends UWSParameters { this(service, getParameters(request)); } + /** + * Create a {@link TAPParameters} instance whose the parameters must be extracted from the given {@link HttpServletRequest}. + * + * @param request HTTP request containing the parameters to gather inside this class. + * @param service Description of the TAP service in which the parameters are created and will be used. + * @param controllers Additional/Replacing controllers to apply on some input parameters. + * <i>Ignored if <code>NULL</code>.</i> + * + * @throws TAPException If any error occurs while extracting the DALIParameters OR while setting a parameter. + * + * @see #getParameters(HttpServletRequest) + * + * @since 2.1 + */ + public TAPParameters(final HttpServletRequest request, final ServiceConnection service, final Map<String,InputParamController> controllers) throws TAPException{ + this(service, getParameters(request), controllers); + } + /** * Create a {@link TAPParameters} instance whose the parameters are given in parameter. * @@ -79,9 +97,25 @@ public class TAPParameters extends UWSParameters { * @param params List of parameters to load inside this object. * * @throws TAPException If any error occurs while extracting the DALIParameters OR while setting a parameter. + * + * @see #TAPParameters(ServiceConnection, Map, Map) */ public TAPParameters(final ServiceConnection service, final Map<String,Object> params) throws TAPException{ - super(TAP_PARAMETERS, buildDefaultControllers(service)); + this(service, params, null); + } + + /** + * Create a {@link TAPParameters} instance whose the parameters are given in parameter. + * + * @param service Description of the TAP service. Limits of the standard TAP parameters are listed in it. + * @param params List of parameters to load inside this object. + * @param controllers Additional/Replacing controllers to apply on some input parameters. + * <i>Ignored if <code>NULL</code>.</i> + * + * @throws TAPException If any error occurs while extracting the DALIParameters OR while setting a parameter. + */ + public TAPParameters(final ServiceConnection service, final Map<String,Object> params, final Map<String,InputParamController> controllers) throws TAPException{ + super(TAP_PARAMETERS, buildDefaultControllers(service, controllers)); if (params != null && !params.isEmpty()){ // Deal with the UPLOAD parameter(s): @@ -110,14 +144,18 @@ public class TAPParameters extends UWSParameters { * tested in the constructor while interpreting it. * </i></p> * - * @param service Description of the TAP service. + * @param service Description of the TAP service. + * @param customControllers Additional/Replacing controllers to apply on some input parameters. + * <i>Ignored if <code>NULL</code>.</i> * * @return Map of all default controllers. * * @since 2.0 */ - protected static final Map<String,InputParamController> buildDefaultControllers(final ServiceConnection service){ + protected static final Map<String,InputParamController> buildDefaultControllers(final ServiceConnection service, final Map<String,InputParamController> customControllers){ Map<String,InputParamController> controllers = new HashMap<String,InputParamController>(10); + + // Set the default controllers: controllers.put(TAPJob.PARAM_EXECUTION_DURATION, new TAPExecutionDurationController(service)); controllers.put(TAPJob.PARAM_DESTRUCTION_TIME, new TAPDestructionTimeController(service)); controllers.put(TAPJob.PARAM_REQUEST, new StringParamController(TAPJob.PARAM_REQUEST, null, new String[]{TAPJob.REQUEST_DO_QUERY,TAPJob.REQUEST_GET_CAPABILITIES}, true)); @@ -126,6 +164,15 @@ public class TAPParameters extends UWSParameters { controllers.put(TAPJob.PARAM_QUERY, new StringParamController(TAPJob.PARAM_QUERY)); controllers.put(TAPJob.PARAM_FORMAT, new FormatController(service)); controllers.put(TAPJob.PARAM_MAX_REC, new MaxRecController(service)); + + // Add/Replace with the given controllers: + if (customControllers != null){ + for(Map.Entry<String,InputParamController> item : customControllers.entrySet()){ + if (item.getKey() != null && item.getValue() != null) + controllers.put(item.getKey(), item.getValue()); + } + } + return controllers; }