validate method for %ParameterSet

        Since the introduction of ResponseFieldListParser, the parameter _response_field_list
        will be ignored, this is a prestans reserved parameter, and cannot be used by apps.

        :param request: The request object to be validated
        :type request: webob.request.Request
        :return The validated parameter set
        :rtype: ParameterSet

def validate(self, request):
        """
        validate method for %ParameterSet

        Since the introduction of ResponseFieldListParser, the parameter _response_field_list
        will be ignored, this is a prestans reserved parameter, and cannot be used by apps.

        :param request: The request object to be validated
        :type request: webob.request.Request
        :return The validated parameter set
        :rtype: ParameterSet
        """

        validated_parameter_set = self.__class__()

        # Inspects the attributes of a parameter set and tries to validate the input
        for attribute_name, type_instance in self.getmembers():

            #: Must be one of the following types
            if not isinstance(type_instance, String) and \
               not isinstance(type_instance, Float) and \
               not isinstance(type_instance, Integer) and \
               not isinstance(type_instance, Date) and \
               not isinstance(type_instance, DateTime) and \
               not isinstance(type_instance, Array):
                raise TypeError("%s should be of type \
                    prestans.types.String/Integer/Float/Date/DateTime/Array" % attribute_name)

            if issubclass(type_instance.__class__, Array):

                if not isinstance(type_instance.element_template, String) and \
                   not isinstance(type_instance.element_template, Float) and \
                   not isinstance(type_instance.element_template, Integer):
                    raise TypeError("%s elements should be of \
                        type prestans.types.String/Integer/Float" % attribute_name)

            try:

                #: Get input from parameters
                #: Empty list returned if key is missing for getall
                if issubclass(type_instance.__class__, Array):
                    validation_input = request.params.getall(attribute_name)
                #: Key error thrown if key is missing for getone
                else:
                    try:
                        validation_input = request.params.getone(attribute_name)
                    except KeyError:
                        validation_input = None

                #: Validate input based on data type rules,
                #: raises DataTypeValidationException if validation fails
                validation_result = type_instance.validate(validation_input)

                setattr(validated_parameter_set, attribute_name, validation_result)

            except exception.DataValidationException as exp:
                raise exception.ValidationError(
                    message=str(exp),
                    attribute_name=attribute_name,
                    value=validation_input,
                    blueprint=type_instance.blueprint())

        return validated_parameter_set