001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.servicemix.jbi.nmr.flow;
018
019 import javax.jbi.messaging.MessageExchange;
020 import javax.jbi.messaging.MessagingException;
021
022 import org.apache.servicemix.JbiConstants;
023 import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
024
025 public class DefaultFlowChooser implements FlowChooser {
026
027 public DefaultFlowChooser() {
028 }
029
030 public Flow chooseFlow(Flow[] flows, MessageExchange exchange) throws MessagingException {
031 // Check if flow was specified
032 String flow = (String) exchange.getProperty(JbiConstants.FLOW_PROPERTY_NAME);
033 if (flow != null) {
034 Flow foundFlow = null;
035 for (int i = 0; i < flows.length; i++) {
036 if (flows[i].getName().equalsIgnoreCase(flow)) {
037 foundFlow = flows[i];
038 break;
039 }
040 }
041 if (foundFlow == null) {
042 throw new MessagingException("Flow '" + flow + "' was specified but not found");
043 }
044 if (foundFlow.canHandle(exchange)) {
045 return foundFlow;
046 } else {
047 throw new MessagingException("Flow '" + flow + "' was specified but not able to handle exchange");
048 }
049 }
050 // Check against flow capabilities
051 for (int i = 0; i < flows.length; i++) {
052 if (flows[i].canHandle(exchange)) {
053 ((MessageExchangeImpl) exchange).getPacket().setProperty(JbiConstants.FLOW_PROPERTY_NAME, flows[i].getName());
054 return flows[i];
055 }
056 }
057 return null;
058 }
059
060 }