public function procure(Request $request, Annotation $annotation)
    {
        $read        = $this->readSourceMethod($request, $annotation);
        $valueReader = $request->$read($annotation->getParamName());
        /* @var $valueReader \stubbles\input\ValueReader */
        if ($annotation->isRequired()) {
            return $this->filter(
                    $valueReader->required($annotation->getRequiredErrorId('FIELD_EMPTY')),
                    $annotation
            );
        }

        if ($this->supportsDefault() && $annotation->hasValueByName('default')) {
            return $this->filter(
                    $valueReader->defaultingTo($this->parseDefault($annotation->getDefault())),
                    $annotation
            );
        }

        return $this->filter($valueReader, $annotation);
    }