/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.integration.samples.loanbroker; import java.util.Collections; import java.util.List; import org.springframework.integration.samples.loanbroker.domain.LoanQuote; import org.springframework.messaging.handler.annotation.Header; /** * Aggregates {@link LoanQuote}s based on the value of the 'RESPONSE_TYPE' message header. * When only the <i>best</i> quote is desired, the 'RESPONSE_TYPE' header should have a value * of 'BEST'. In this example, that value is set by the 'gateway' when the * {@link LoanBrokerGateway#getBestLoanQuote(org.springframework.integration.samples.loanbroker.domain.LoanRequest)} * method is invoked by the client. * * @author Oleg Zhurakousky */ public class LoanQuoteAggregator { /** * Aggregates LoanQuote Messages to return a single reply Message. * * @param quotes list of loan quotes received from upstream lenders * @param responseType header that indicates the response type * @return the best {@link LoanQuote} if the 'RESPONSE_TYPE' header value is 'BEST' else all quotes */ public Object aggregateQuotes(List<LoanQuote> quotes, @Header(value="RESPONSE_TYPE", required=false) String responseType) { Collections.sort(quotes); return ("BEST".equals(responseType)) ? quotes.get(0) : quotes; } }