<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.admin.repository.utils;<a name="line.1"></a>
<FONT color="green">002</FONT>    /*<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<FONT color="green">004</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<FONT color="green">005</FONT>     * distributed with this work for additional information<a name="line.5"></a>
<FONT color="green">006</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<FONT color="green">007</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<FONT color="green">008</FONT>     * "License"); you may not use this file except in compliance<a name="line.8"></a>
<FONT color="green">009</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<FONT color="green">012</FONT>     *<a name="line.12"></a>
<FONT color="green">013</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<FONT color="green">014</FONT>     * software distributed under the License is distributed on an<a name="line.14"></a>
<FONT color="green">015</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<FONT color="green">016</FONT>     * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<FONT color="green">017</FONT>     * specific language governing permissions and limitations<a name="line.17"></a>
<FONT color="green">018</FONT>     * under the License.<a name="line.18"></a>
<FONT color="green">019</FONT>     */<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.archiva.admin.model.beans.AbstractRepository;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Comparator;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    /**<a name="line.25"></a>
<FONT color="green">026</FONT>     * @author Olivier Lamy<a name="line.26"></a>
<FONT color="green">027</FONT>     * @since 1.4-M1<a name="line.27"></a>
<FONT color="green">028</FONT>     */<a name="line.28"></a>
<FONT color="green">029</FONT>    public class RepositoryComparator<a name="line.29"></a>
<FONT color="green">030</FONT>        implements Comparator&lt;AbstractRepository&gt;<a name="line.30"></a>
<FONT color="green">031</FONT>    {<a name="line.31"></a>
<FONT color="green">032</FONT>        public int compare( AbstractRepository o1, AbstractRepository o2 )<a name="line.32"></a>
<FONT color="green">033</FONT>        {<a name="line.33"></a>
<FONT color="green">034</FONT>            if ( o1 == null &amp;&amp; o2 == null )<a name="line.34"></a>
<FONT color="green">035</FONT>            {<a name="line.35"></a>
<FONT color="green">036</FONT>                return 0;<a name="line.36"></a>
<FONT color="green">037</FONT>            }<a name="line.37"></a>
<FONT color="green">038</FONT>    <a name="line.38"></a>
<FONT color="green">039</FONT>            if ( o1 == null )<a name="line.39"></a>
<FONT color="green">040</FONT>            {<a name="line.40"></a>
<FONT color="green">041</FONT>                return -1;<a name="line.41"></a>
<FONT color="green">042</FONT>            }<a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>            if ( o2 == null )<a name="line.44"></a>
<FONT color="green">045</FONT>            {<a name="line.45"></a>
<FONT color="green">046</FONT>                return 1;<a name="line.46"></a>
<FONT color="green">047</FONT>            }<a name="line.47"></a>
<FONT color="green">048</FONT>    <a name="line.48"></a>
<FONT color="green">049</FONT>            return o1.getId().compareToIgnoreCase( o2.getId() );<a name="line.49"></a>
<FONT color="green">050</FONT>        }<a name="line.50"></a>
<FONT color="green">051</FONT>    }<a name="line.51"></a>




























































</PRE>
</BODY>
</HTML>