<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.indexer.search;<a name="line.1"></a>
<FONT color="green">002</FONT>    <a name="line.2"></a>
<FONT color="green">003</FONT>    /*<a name="line.3"></a>
<FONT color="green">004</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<FONT color="green">005</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<FONT color="green">006</FONT>     * distributed with this work for additional information<a name="line.6"></a>
<FONT color="green">007</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<FONT color="green">008</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<FONT color="green">009</FONT>     * "License"); you may not use this file except in compliance<a name="line.9"></a>
<FONT color="green">010</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<FONT color="green">013</FONT>     *<a name="line.13"></a>
<FONT color="green">014</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<FONT color="green">015</FONT>     * software distributed under the License is distributed on an<a name="line.15"></a>
<FONT color="green">016</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<FONT color="green">017</FONT>     * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<FONT color="green">018</FONT>     * specific language governing permissions and limitations<a name="line.18"></a>
<FONT color="green">019</FONT>     * under the License.<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.archiva.admin.model.RepositoryAdminException;<a name="line.22"></a>
<FONT color="green">023</FONT>    <a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.Collection;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.List;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.Set;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    <a name="line.28"></a>
<FONT color="green">029</FONT>    public interface RepositorySearch<a name="line.29"></a>
<FONT color="green">030</FONT>    {<a name="line.30"></a>
<FONT color="green">031</FONT>        /**<a name="line.31"></a>
<FONT color="green">032</FONT>         * Quick search by won't return artifact with file extension pom<a name="line.32"></a>
<FONT color="green">033</FONT>         *<a name="line.33"></a>
<FONT color="green">034</FONT>         * @param principal<a name="line.34"></a>
<FONT color="green">035</FONT>         * @param selectedRepos<a name="line.35"></a>
<FONT color="green">036</FONT>         * @param term<a name="line.36"></a>
<FONT color="green">037</FONT>         * @param limits<a name="line.37"></a>
<FONT color="green">038</FONT>         * @param previousSearchTerms<a name="line.38"></a>
<FONT color="green">039</FONT>         * @return<a name="line.39"></a>
<FONT color="green">040</FONT>         */<a name="line.40"></a>
<FONT color="green">041</FONT>        SearchResults search( String principal, List&lt;String&gt; selectedRepos, String term, SearchResultLimits limits,<a name="line.41"></a>
<FONT color="green">042</FONT>                              List&lt;String&gt; previousSearchTerms )<a name="line.42"></a>
<FONT color="green">043</FONT>            throws RepositorySearchException;<a name="line.43"></a>
<FONT color="green">044</FONT>    <a name="line.44"></a>
<FONT color="green">045</FONT>        /**<a name="line.45"></a>
<FONT color="green">046</FONT>         * Advanced search.<a name="line.46"></a>
<FONT color="green">047</FONT>         *<a name="line.47"></a>
<FONT color="green">048</FONT>         * @param principal<a name="line.48"></a>
<FONT color="green">049</FONT>         * @param searchFields<a name="line.49"></a>
<FONT color="green">050</FONT>         * @param limits<a name="line.50"></a>
<FONT color="green">051</FONT>         * @return<a name="line.51"></a>
<FONT color="green">052</FONT>         */<a name="line.52"></a>
<FONT color="green">053</FONT>        SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits )<a name="line.53"></a>
<FONT color="green">054</FONT>            throws RepositorySearchException;<a name="line.54"></a>
<FONT color="green">055</FONT>    <a name="line.55"></a>
<FONT color="green">056</FONT>        Collection&lt;String&gt; getAllGroupIds( String principal, List&lt;String&gt; selectedRepos )<a name="line.56"></a>
<FONT color="green">057</FONT>            throws RepositorySearchException;<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>        Set&lt;String&gt; getRemoteIndexingContextIds( String managedRepoId )<a name="line.59"></a>
<FONT color="green">060</FONT>            throws RepositoryAdminException;<a name="line.60"></a>
<FONT color="green">061</FONT>    }<a name="line.61"></a>




























































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