protected function doProcess(Exchange $exchange, SerializableArray $processingContext)
    {
        $evaluator = $this->getEvaluator();

        foreach ($this->clauses as $clause) {
            if ($evaluator->evaluateWithExchange($clause->getCondition(), $exchange)) {
                $exchange->getItinerary()->prepend($clause->getItinerary());
                $processingContext->set(self::CONDITION_MATCHED, $clause->getCondition());

                return true;
            }
        }

        if ($this->fallbackItinerary) {
            $exchange->getItinerary()->prepend($this->fallbackItinerary);
            $processingContext->set(self::CONDITION_MATCHED, 'fallback itinerary');

            return true;
        }

        return false;
    }