/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.fusesource.amqpjms.sasl;

/**
 * Used to find a SASL Mechanism that most closely matches the preferred set
 * of Mechanisms supported by the remote peer.
 *
 * The Matching mechanism is chosen by first find all instances of SASL
 * mechanism types that are supported on the remote peer, and then making a
 * final selection based on the Mechanism in the found set that has the
 * highest priority value.
 */
public class SaslMechanismFinder {

    public static Mechanism findMatchingMechanism(String...remoteMechanisms) {
        return null;
    }
}

@@ -835,16 +835,184 @@
 .sasl;%0A%0A
+import java.io.IOException;%0Aimport java.util.ArrayList;%0Aimport java.util.Collections;%0Aimport java.util.List;%0A%0Aimport org.slf4j.Logger;%0Aimport org.slf4j.LoggerFactory;%0A%0A
 /**%0A * U
@@ -1430,101 +1430,1315 @@
    p
-ublic static Mechanism findMatchingMechanism(String...remoteMechanisms) %7B%0A        return null
+rivate static final Logger LOG = LoggerFactory.getLogger(SaslMechanismFinder.class);%0A%0A    /**%0A     * Attempts to find a matching Mechanism implementation given a list of supported%0A     * mechanisms from a remote peer.%0A     *%0A     * @param remoteMechanisms%0A     *        list of mechanism names that are supported by the remote peer.%0A     *%0A     * @return the best matching Mechanism for the supported remote set.%0A     *%0A     * @throws IOException if an error occurs while locating supported mechanisms.%0A     */%0A    public static Mechanism findMatchingMechanism(String...remoteMechanisms) throws IOException %7B%0A%0A        Mechanism match = null;%0A        List%3CMechanism%3E found = new ArrayList%3CMechanism%3E();%0A%0A        for (String remoteMechanism : remoteMechanisms) %7B%0A            MechanismFactory factory = MechanismFactoryFinder.findMechanismFactory(remoteMechanism);%0A            found.add(factory.createMechanism());%0A        %7D%0A%0A        if (!found.isEmpty()) %7B%0A            // Sorts by priority using Mechanism comparison and return the last value in%0A            // list which is the Mechanism deemed to be the highest priority match.%0A            Collections.sort(found);%0A            match = found.get(found.size() - 1);%0A        %7D%0A%0A        LOG.info(%22Best match for SASL auth was: %7B%7D%22, match);%0A%0A        return match
 ;%0A  

Implement best match search.