<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.indexer.maven.search;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.admin.model.RepositoryAdminException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.admin.model.beans.ProxyConnector;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.indexer.UnsupportedBaseContextException;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.indexer.search.ArtifactInfoFilter;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.indexer.search.NoClassifierArtifactInfoFilter;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.indexer.search.RepositorySearch;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.indexer.search.RepositorySearchException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.indexer.search.SearchFields;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.indexer.search.SearchResultHit;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.archiva.indexer.search.SearchResultLimits;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.archiva.indexer.search.SearchResults;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.archiva.indexer.util.SearchUtil;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.archiva.model.ArchivaArtifactModel;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.archiva.repository.RemoteRepository;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.archiva.repository.Repository;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.archiva.repository.RepositoryRegistry;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.archiva.repository.RepositoryType;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.commons.lang3.StringUtils;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.maven.index.ArtifactInfo;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.maven.index.FlatSearchRequest;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.maven.index.FlatSearchResponse;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.maven.index.Indexer;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.maven.index.MAVEN;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.maven.index.OSGI;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.maven.index.QueryCreator;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.maven.index.SearchType;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.maven.index.context.IndexingContext;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.maven.index.expr.SearchExpression;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.maven.index.expr.SearchTyped;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.maven.index.expr.SourcedSearchExpression;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.maven.index.expr.UserInputSearchExpression;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.maven.index_shaded.lucene.search.BooleanClause;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.maven.index_shaded.lucene.search.BooleanClause.Occur;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.maven.index_shaded.lucene.search.BooleanQuery;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.springframework.stereotype.Service;<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>import javax.inject.Inject;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import java.io.IOException;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import java.util.ArrayList;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import java.util.Collection;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import java.util.Collections;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import java.util.HashSet;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import java.util.List;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import java.util.Map;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import java.util.Set;<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>/**<a name="line.71"></a>
<span class="sourceLineNo">072</span> * RepositorySearch implementation which uses the Maven Indexer for searching.<a name="line.72"></a>
<span class="sourceLineNo">073</span> */<a name="line.73"></a>
<span class="sourceLineNo">074</span>@Service( "repositorySearch#maven" )<a name="line.74"></a>
<span class="sourceLineNo">075</span>public class MavenRepositorySearch<a name="line.75"></a>
<span class="sourceLineNo">076</span>    implements RepositorySearch<a name="line.76"></a>
<span class="sourceLineNo">077</span>{<a name="line.77"></a>
<span class="sourceLineNo">078</span>    private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>    private Indexer indexer;<a name="line.80"></a>
<span class="sourceLineNo">081</span><a name="line.81"></a>
<span class="sourceLineNo">082</span>    private QueryCreator queryCreator;<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    RepositoryRegistry repositoryRegistry;<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    private ProxyConnectorAdmin proxyConnectorAdmin;<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>    protected MavenRepositorySearch()<a name="line.89"></a>
<span class="sourceLineNo">090</span>    {<a name="line.90"></a>
<span class="sourceLineNo">091</span>        // for test purpose<a name="line.91"></a>
<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
<span class="sourceLineNo">093</span><a name="line.93"></a>
<span class="sourceLineNo">094</span>    @Inject<a name="line.94"></a>
<span class="sourceLineNo">095</span>    public MavenRepositorySearch( Indexer nexusIndexer, RepositoryRegistry repositoryRegistry,<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>                                  ProxyConnectorAdmin proxyConnectorAdmin, QueryCreator queryCreator )<a name="line.97"></a>
<span class="sourceLineNo">098</span>    {<a name="line.98"></a>
<span class="sourceLineNo">099</span>        this.indexer = nexusIndexer;<a name="line.99"></a>
<span class="sourceLineNo">100</span>        this.queryCreator = queryCreator;<a name="line.100"></a>
<span class="sourceLineNo">101</span>        this.repositoryRegistry = repositoryRegistry;<a name="line.101"></a>
<span class="sourceLineNo">102</span>        this.proxyConnectorAdmin = proxyConnectorAdmin;<a name="line.102"></a>
<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>    /**<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * @see RepositorySearch#search(String, List, String, SearchResultLimits, List)<a name="line.106"></a>
<span class="sourceLineNo">107</span>     */<a name="line.107"></a>
<span class="sourceLineNo">108</span>    @Override<a name="line.108"></a>
<span class="sourceLineNo">109</span>    public SearchResults search(String principal, List&lt;String&gt; selectedRepos, String term, SearchResultLimits limits,<a name="line.109"></a>
<span class="sourceLineNo">110</span>                                List&lt;String&gt; previousSearchTerms )<a name="line.110"></a>
<span class="sourceLineNo">111</span>        throws RepositorySearchException<a name="line.111"></a>
<span class="sourceLineNo">112</span>    {<a name="line.112"></a>
<span class="sourceLineNo">113</span>        List&lt;String&gt; indexingContextIds = addIndexingContexts( selectedRepos );<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>        // since upgrade to nexus 2.0.0, query has changed from g:[QUERIED TERM]* to g:*[QUERIED TERM]*<a name="line.115"></a>
<span class="sourceLineNo">116</span>        //      resulting to more wildcard searches so we need to increase max clause count<a name="line.116"></a>
<span class="sourceLineNo">117</span>        BooleanQuery.setMaxClauseCount( Integer.MAX_VALUE );<a name="line.117"></a>
<span class="sourceLineNo">118</span>        BooleanQuery.Builder qb = new BooleanQuery.Builder();<a name="line.118"></a>
<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span>        if ( previousSearchTerms == null || previousSearchTerms.isEmpty() )<a name="line.120"></a>
<span class="sourceLineNo">121</span>        {<a name="line.121"></a>
<span class="sourceLineNo">122</span>            constructQuery( term, qb );<a name="line.122"></a>
<span class="sourceLineNo">123</span>        }<a name="line.123"></a>
<span class="sourceLineNo">124</span>        else<a name="line.124"></a>
<span class="sourceLineNo">125</span>        {<a name="line.125"></a>
<span class="sourceLineNo">126</span>            for ( String previousTerm : previousSearchTerms )<a name="line.126"></a>
<span class="sourceLineNo">127</span>            {<a name="line.127"></a>
<span class="sourceLineNo">128</span>                BooleanQuery.Builder iQuery = new BooleanQuery.Builder();<a name="line.128"></a>
<span class="sourceLineNo">129</span>                constructQuery( previousTerm, iQuery );<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>                qb.add( iQuery.build(), BooleanClause.Occur.MUST );<a name="line.131"></a>
<span class="sourceLineNo">132</span>            }<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>            BooleanQuery.Builder iQuery = new BooleanQuery.Builder();<a name="line.134"></a>
<span class="sourceLineNo">135</span>            constructQuery( term, iQuery );<a name="line.135"></a>
<span class="sourceLineNo">136</span>            qb.add( iQuery.build(), BooleanClause.Occur.MUST );<a name="line.136"></a>
<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>        // we retun only artifacts without classifier in quick search, olamy cannot find a way to say with this field empty<a name="line.139"></a>
<span class="sourceLineNo">140</span>        // FIXME  cannot find a way currently to setup this in constructQuery !!!<a name="line.140"></a>
<span class="sourceLineNo">141</span>        return search( limits, qb.build(), indexingContextIds, NoClassifierArtifactInfoFilter.LIST, selectedRepos, true );<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    /**<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * @see RepositorySearch#search(String, SearchFields, SearchResultLimits)<a name="line.146"></a>
<span class="sourceLineNo">147</span>     */<a name="line.147"></a>
<span class="sourceLineNo">148</span>    @SuppressWarnings( "deprecation" )<a name="line.148"></a>
<span class="sourceLineNo">149</span>    @Override<a name="line.149"></a>
<span class="sourceLineNo">150</span>    public SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits )<a name="line.150"></a>
<span class="sourceLineNo">151</span>        throws RepositorySearchException<a name="line.151"></a>
<span class="sourceLineNo">152</span>    {<a name="line.152"></a>
<span class="sourceLineNo">153</span>        if ( searchFields.getRepositories() == null )<a name="line.153"></a>
<span class="sourceLineNo">154</span>        {<a name="line.154"></a>
<span class="sourceLineNo">155</span>            throw new RepositorySearchException( "Repositories cannot be null." );<a name="line.155"></a>
<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
<span class="sourceLineNo">157</span><a name="line.157"></a>
<span class="sourceLineNo">158</span>        List&lt;String&gt; indexingContextIds = addIndexingContexts( searchFields.getRepositories() );<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>        // if no index found in the specified ones return an empty search result instead of doing a search on all index<a name="line.160"></a>
<span class="sourceLineNo">161</span>        // olamy: IMHO doesn't make sense<a name="line.161"></a>
<span class="sourceLineNo">162</span>        if ( !searchFields.getRepositories().isEmpty() &amp;&amp; ( indexingContextIds == null<a name="line.162"></a>
<span class="sourceLineNo">163</span>            || indexingContextIds.isEmpty() ) )<a name="line.163"></a>
<span class="sourceLineNo">164</span>        {<a name="line.164"></a>
<span class="sourceLineNo">165</span>            return new SearchResults();<a name="line.165"></a>
<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>        BooleanQuery.Builder qb = new BooleanQuery.Builder();<a name="line.168"></a>
<span class="sourceLineNo">169</span>        if ( StringUtils.isNotBlank( searchFields.getGroupId() ) )<a name="line.169"></a>
<span class="sourceLineNo">170</span>        {<a name="line.170"></a>
<span class="sourceLineNo">171</span>            qb.add( indexer.constructQuery( MAVEN.GROUP_ID, searchFields.isExactSearch() ? new SourcedSearchExpression(<a name="line.171"></a>
<span class="sourceLineNo">172</span>                       searchFields.getGroupId() ) : new UserInputSearchExpression( searchFields.getGroupId() ) ),<a name="line.172"></a>
<span class="sourceLineNo">173</span>                   BooleanClause.Occur.MUST );<a name="line.173"></a>
<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span>        if ( StringUtils.isNotBlank( searchFields.getArtifactId() ) )<a name="line.176"></a>
<span class="sourceLineNo">177</span>        {<a name="line.177"></a>
<span class="sourceLineNo">178</span>            qb.add( indexer.constructQuery( MAVEN.ARTIFACT_ID,<a name="line.178"></a>
<span class="sourceLineNo">179</span>                                           searchFields.isExactSearch()<a name="line.179"></a>
<span class="sourceLineNo">180</span>                                               ? new SourcedSearchExpression( searchFields.getArtifactId() )<a name="line.180"></a>
<span class="sourceLineNo">181</span>                                               : new UserInputSearchExpression( searchFields.getArtifactId() ) ),<a name="line.181"></a>
<span class="sourceLineNo">182</span>                   BooleanClause.Occur.MUST );<a name="line.182"></a>
<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>        if ( StringUtils.isNotBlank( searchFields.getVersion() ) )<a name="line.185"></a>
<span class="sourceLineNo">186</span>        {<a name="line.186"></a>
<span class="sourceLineNo">187</span>            qb.add( indexer.constructQuery( MAVEN.VERSION, searchFields.isExactSearch() ? new SourcedSearchExpression(<a name="line.187"></a>
<span class="sourceLineNo">188</span>                       searchFields.getVersion() ) : new SourcedSearchExpression( searchFields.getVersion() ) ),<a name="line.188"></a>
<span class="sourceLineNo">189</span>                   BooleanClause.Occur.MUST );<a name="line.189"></a>
<span class="sourceLineNo">190</span>        }<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>        if ( StringUtils.isNotBlank( searchFields.getPackaging() ) )<a name="line.192"></a>
<span class="sourceLineNo">193</span>        {<a name="line.193"></a>
<span class="sourceLineNo">194</span>            qb.add( indexer.constructQuery( MAVEN.PACKAGING, searchFields.isExactSearch() ? new SourcedSearchExpression(<a name="line.194"></a>
<span class="sourceLineNo">195</span>                       searchFields.getPackaging() ) : new UserInputSearchExpression( searchFields.getPackaging() ) ),<a name="line.195"></a>
<span class="sourceLineNo">196</span>                   BooleanClause.Occur.MUST );<a name="line.196"></a>
<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>        if ( StringUtils.isNotBlank( searchFields.getClassName() ) )<a name="line.199"></a>
<span class="sourceLineNo">200</span>        {<a name="line.200"></a>
<span class="sourceLineNo">201</span>            qb.add( indexer.constructQuery( MAVEN.CLASSNAMES,<a name="line.201"></a>
<span class="sourceLineNo">202</span>                                           new UserInputSearchExpression( searchFields.getClassName() ) ),<a name="line.202"></a>
<span class="sourceLineNo">203</span>                   BooleanClause.Occur.MUST );<a name="line.203"></a>
<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>        if ( StringUtils.isNotBlank( searchFields.getBundleSymbolicName() ) )<a name="line.206"></a>
<span class="sourceLineNo">207</span>        {<a name="line.207"></a>
<span class="sourceLineNo">208</span>            qb.add( indexer.constructQuery( OSGI.SYMBOLIC_NAME,<a name="line.208"></a>
<span class="sourceLineNo">209</span>                                           new UserInputSearchExpression( searchFields.getBundleSymbolicName() ) ),<a name="line.209"></a>
<span class="sourceLineNo">210</span>                   BooleanClause.Occur.MUST );<a name="line.210"></a>
<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>        if ( StringUtils.isNotBlank( searchFields.getBundleVersion() ) )<a name="line.213"></a>
<span class="sourceLineNo">214</span>        {<a name="line.214"></a>
<span class="sourceLineNo">215</span>            qb.add( indexer.constructQuery( OSGI.VERSION,<a name="line.215"></a>
<span class="sourceLineNo">216</span>                                           new UserInputSearchExpression( searchFields.getBundleVersion() ) ),<a name="line.216"></a>
<span class="sourceLineNo">217</span>                   BooleanClause.Occur.MUST );<a name="line.217"></a>
<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span>        if ( StringUtils.isNotBlank( searchFields.getBundleExportPackage() ) )<a name="line.220"></a>
<span class="sourceLineNo">221</span>        {<a name="line.221"></a>
<span class="sourceLineNo">222</span>            qb.add( indexer.constructQuery( OSGI.EXPORT_PACKAGE,<a name="line.222"></a>
<span class="sourceLineNo">223</span>                                           new UserInputSearchExpression( searchFields.getBundleExportPackage() ) ),<a name="line.223"></a>
<span class="sourceLineNo">224</span>                   Occur.MUST );<a name="line.224"></a>
<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>        if ( StringUtils.isNotBlank( searchFields.getBundleExportService() ) )<a name="line.227"></a>
<span class="sourceLineNo">228</span>        {<a name="line.228"></a>
<span class="sourceLineNo">229</span>            qb.add( indexer.constructQuery( OSGI.EXPORT_SERVICE,<a name="line.229"></a>
<span class="sourceLineNo">230</span>                                           new UserInputSearchExpression( searchFields.getBundleExportService() ) ),<a name="line.230"></a>
<span class="sourceLineNo">231</span>                   Occur.MUST );<a name="line.231"></a>
<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>        if ( StringUtils.isNotBlank( searchFields.getBundleImportPackage() ) )<a name="line.234"></a>
<span class="sourceLineNo">235</span>        {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            qb.add( indexer.constructQuery( OSGI.IMPORT_PACKAGE,<a name="line.236"></a>
<span class="sourceLineNo">237</span>                                           new UserInputSearchExpression( searchFields.getBundleImportPackage() ) ),<a name="line.237"></a>
<span class="sourceLineNo">238</span>                   Occur.MUST );<a name="line.238"></a>
<span class="sourceLineNo">239</span>        }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>        if ( StringUtils.isNotBlank( searchFields.getBundleName() ) )<a name="line.241"></a>
<span class="sourceLineNo">242</span>        {<a name="line.242"></a>
<span class="sourceLineNo">243</span>            qb.add( indexer.constructQuery( OSGI.NAME, new UserInputSearchExpression( searchFields.getBundleName() ) ),<a name="line.243"></a>
<span class="sourceLineNo">244</span>                   Occur.MUST );<a name="line.244"></a>
<span class="sourceLineNo">245</span>        }<a name="line.245"></a>
<span class="sourceLineNo">246</span><a name="line.246"></a>
<span class="sourceLineNo">247</span>        if ( StringUtils.isNotBlank( searchFields.getBundleImportPackage() ) )<a name="line.247"></a>
<span class="sourceLineNo">248</span>        {<a name="line.248"></a>
<span class="sourceLineNo">249</span>            qb.add( indexer.constructQuery( OSGI.IMPORT_PACKAGE,<a name="line.249"></a>
<span class="sourceLineNo">250</span>                                           new UserInputSearchExpression( searchFields.getBundleImportPackage() ) ),<a name="line.250"></a>
<span class="sourceLineNo">251</span>                   Occur.MUST );<a name="line.251"></a>
<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>        if ( StringUtils.isNotBlank( searchFields.getBundleRequireBundle() ) )<a name="line.254"></a>
<span class="sourceLineNo">255</span>        {<a name="line.255"></a>
<span class="sourceLineNo">256</span>            qb.add( indexer.constructQuery( OSGI.REQUIRE_BUNDLE,<a name="line.256"></a>
<span class="sourceLineNo">257</span>                                           new UserInputSearchExpression( searchFields.getBundleRequireBundle() ) ),<a name="line.257"></a>
<span class="sourceLineNo">258</span>                   Occur.MUST );<a name="line.258"></a>
<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>        if ( StringUtils.isNotBlank( searchFields.getClassifier() ) )<a name="line.261"></a>
<span class="sourceLineNo">262</span>        {<a name="line.262"></a>
<span class="sourceLineNo">263</span>            qb.add( indexer.constructQuery( MAVEN.CLASSIFIER, searchFields.isExactSearch() ? new SourcedSearchExpression(<a name="line.263"></a>
<span class="sourceLineNo">264</span>                       searchFields.getClassifier() ) : new UserInputSearchExpression( searchFields.getClassifier() ) ),<a name="line.264"></a>
<span class="sourceLineNo">265</span>                   Occur.MUST );<a name="line.265"></a>
<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
<span class="sourceLineNo">267</span>        else if ( searchFields.isExactSearch() )<a name="line.267"></a>
<span class="sourceLineNo">268</span>        {<a name="line.268"></a>
<span class="sourceLineNo">269</span>            //TODO improvement in case of exact search and no classifier we must query for classifier with null value<a name="line.269"></a>
<span class="sourceLineNo">270</span>            // currently it's done in DefaultSearchService with some filtering<a name="line.270"></a>
<span class="sourceLineNo">271</span>        }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>        BooleanQuery qu = qb.build();<a name="line.273"></a>
<span class="sourceLineNo">274</span>        if ( qu.clauses() == null || qu.clauses().size() &lt;= 0 )<a name="line.274"></a>
<span class="sourceLineNo">275</span>        {<a name="line.275"></a>
<span class="sourceLineNo">276</span>            throw new RepositorySearchException( "No search fields set." );<a name="line.276"></a>
<span class="sourceLineNo">277</span>        }<a name="line.277"></a>
<span class="sourceLineNo">278</span>        if (qu.clauses()!=null) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>            log.debug("CLAUSES ", qu.clauses());<a name="line.279"></a>
<span class="sourceLineNo">280</span>            for (BooleanClause cl : qu.clauses()) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                log.debug("Clause ",cl);<a name="line.281"></a>
<span class="sourceLineNo">282</span>            }<a name="line.282"></a>
<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>        return search( limits, qu, indexingContextIds, Collections.&lt;ArtifactInfoFilter&gt;emptyList(),<a name="line.285"></a>
<span class="sourceLineNo">286</span>                       searchFields.getRepositories(), searchFields.isIncludePomArtifacts() );<a name="line.286"></a>
<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>    private static class NullSearch<a name="line.289"></a>
<span class="sourceLineNo">290</span>        implements SearchTyped, SearchExpression<a name="line.290"></a>
<span class="sourceLineNo">291</span>    {<a name="line.291"></a>
<span class="sourceLineNo">292</span>        private static final NullSearch INSTANCE = new NullSearch();<a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>        @Override<a name="line.294"></a>
<span class="sourceLineNo">295</span>        public String getStringValue()<a name="line.295"></a>
<span class="sourceLineNo">296</span>        {<a name="line.296"></a>
<span class="sourceLineNo">297</span>            return "[[NULL_VALUE]]";<a name="line.297"></a>
<span class="sourceLineNo">298</span>        }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>        @Override<a name="line.300"></a>
<span class="sourceLineNo">301</span>        public SearchType getSearchType()<a name="line.301"></a>
<span class="sourceLineNo">302</span>        {<a name="line.302"></a>
<span class="sourceLineNo">303</span>            return SearchType.EXACT;<a name="line.303"></a>
<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>    private SearchResults search( SearchResultLimits limits, BooleanQuery q, List&lt;String&gt; indexingContextIds,<a name="line.307"></a>
<span class="sourceLineNo">308</span>                                  List&lt;? extends ArtifactInfoFilter&gt; filters, List&lt;String&gt; selectedRepos,<a name="line.308"></a>
<span class="sourceLineNo">309</span>                                  boolean includePoms )<a name="line.309"></a>
<span class="sourceLineNo">310</span>        throws RepositorySearchException<a name="line.310"></a>
<span class="sourceLineNo">311</span>    {<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>        try<a name="line.313"></a>
<span class="sourceLineNo">314</span>        {<a name="line.314"></a>
<span class="sourceLineNo">315</span>            FlatSearchRequest request = new FlatSearchRequest( q );<a name="line.315"></a>
<span class="sourceLineNo">316</span><a name="line.316"></a>
<span class="sourceLineNo">317</span>            request.setContexts( getIndexingContexts( indexingContextIds ) );<a name="line.317"></a>
<span class="sourceLineNo">318</span>            if ( limits != null )<a name="line.318"></a>
<span class="sourceLineNo">319</span>            {<a name="line.319"></a>
<span class="sourceLineNo">320</span>                // we apply limits only when first page asked<a name="line.320"></a>
<span class="sourceLineNo">321</span>                if ( limits.getSelectedPage() == 0 )<a name="line.321"></a>
<span class="sourceLineNo">322</span>                {<a name="line.322"></a>
<span class="sourceLineNo">323</span>                    request.setCount( limits.getPageSize() * ( Math.max( 1, limits.getSelectedPage() ) ) );<a name="line.323"></a>
<span class="sourceLineNo">324</span>                }<a name="line.324"></a>
<span class="sourceLineNo">325</span>            }<a name="line.325"></a>
<span class="sourceLineNo">326</span><a name="line.326"></a>
<span class="sourceLineNo">327</span>            FlatSearchResponse response = indexer.searchFlat( request );<a name="line.327"></a>
<span class="sourceLineNo">328</span><a name="line.328"></a>
<span class="sourceLineNo">329</span>            if ( response == null || response.getTotalHitsCount() == 0 )<a name="line.329"></a>
<span class="sourceLineNo">330</span>            {<a name="line.330"></a>
<span class="sourceLineNo">331</span>                SearchResults results = new SearchResults();<a name="line.331"></a>
<span class="sourceLineNo">332</span>                results.setLimits( limits );<a name="line.332"></a>
<span class="sourceLineNo">333</span>                return results;<a name="line.333"></a>
<span class="sourceLineNo">334</span>            }<a name="line.334"></a>
<span class="sourceLineNo">335</span><a name="line.335"></a>
<span class="sourceLineNo">336</span>            return convertToSearchResults( response, limits, filters, selectedRepos, includePoms );<a name="line.336"></a>
<span class="sourceLineNo">337</span>        }<a name="line.337"></a>
<span class="sourceLineNo">338</span>        catch ( IOException e )<a name="line.338"></a>
<span class="sourceLineNo">339</span>        {<a name="line.339"></a>
<span class="sourceLineNo">340</span>            throw new RepositorySearchException( e.getMessage(), e );<a name="line.340"></a>
<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
<span class="sourceLineNo">342</span>        catch ( RepositoryAdminException e )<a name="line.342"></a>
<span class="sourceLineNo">343</span>        {<a name="line.343"></a>
<span class="sourceLineNo">344</span>            throw new RepositorySearchException( e.getMessage(), e );<a name="line.344"></a>
<span class="sourceLineNo">345</span>        }<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>    private IndexingContext getIndexingContext(String id) {<a name="line.349"></a>
<span class="sourceLineNo">350</span>        String repoId;<a name="line.350"></a>
<span class="sourceLineNo">351</span>        if (StringUtils.startsWith(id, "remote-")) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>            repoId = StringUtils.substringAfter(id, "remote-");<a name="line.352"></a>
<span class="sourceLineNo">353</span>        } else {<a name="line.353"></a>
<span class="sourceLineNo">354</span>            repoId = id;<a name="line.354"></a>
<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
<span class="sourceLineNo">356</span>        Repository repo = repositoryRegistry.getRepository(repoId);<a name="line.356"></a>
<span class="sourceLineNo">357</span>        if (repo==null) {<a name="line.357"></a>
<span class="sourceLineNo">358</span>            return null;<a name="line.358"></a>
<span class="sourceLineNo">359</span>        } else {<a name="line.359"></a>
<span class="sourceLineNo">360</span>            if (repo.getIndexingContext()!=null) {<a name="line.360"></a>
<span class="sourceLineNo">361</span>                try {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                    return repo.getIndexingContext().getBaseContext(IndexingContext.class);<a name="line.362"></a>
<span class="sourceLineNo">363</span>                } catch (UnsupportedBaseContextException e) {<a name="line.363"></a>
<span class="sourceLineNo">364</span>                    return null;<a name="line.364"></a>
<span class="sourceLineNo">365</span>                }<a name="line.365"></a>
<span class="sourceLineNo">366</span>            } else {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                return null;<a name="line.367"></a>
<span class="sourceLineNo">368</span>            }<a name="line.368"></a>
<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>    private List&lt;IndexingContext&gt; getIndexingContexts( List&lt;String&gt; ids )<a name="line.372"></a>
<span class="sourceLineNo">373</span>    {<a name="line.373"></a>
<span class="sourceLineNo">374</span>        List&lt;IndexingContext&gt; contexts = new ArrayList&lt;&gt;( ids.size() );<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>        for ( String id : ids )<a name="line.376"></a>
<span class="sourceLineNo">377</span>        {<a name="line.377"></a>
<span class="sourceLineNo">378</span>            IndexingContext context = getIndexingContext(id);<a name="line.378"></a>
<span class="sourceLineNo">379</span>            if ( context != null )<a name="line.379"></a>
<span class="sourceLineNo">380</span>            {<a name="line.380"></a>
<span class="sourceLineNo">381</span>                contexts.add( context );<a name="line.381"></a>
<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
<span class="sourceLineNo">383</span>            else<a name="line.383"></a>
<span class="sourceLineNo">384</span>            {<a name="line.384"></a>
<span class="sourceLineNo">385</span>                log.warn( "context with id {} not exists", id );<a name="line.385"></a>
<span class="sourceLineNo">386</span>            }<a name="line.386"></a>
<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>        return contexts;<a name="line.389"></a>
<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>    private void constructQuery( String term, BooleanQuery.Builder q )<a name="line.392"></a>
<span class="sourceLineNo">393</span>    {<a name="line.393"></a>
<span class="sourceLineNo">394</span>        q.add( indexer.constructQuery( MAVEN.GROUP_ID, new UserInputSearchExpression( term ) ), Occur.SHOULD );<a name="line.394"></a>
<span class="sourceLineNo">395</span>        q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new UserInputSearchExpression( term ) ), Occur.SHOULD );<a name="line.395"></a>
<span class="sourceLineNo">396</span>        q.add( indexer.constructQuery( MAVEN.VERSION, new UserInputSearchExpression( term ) ), Occur.SHOULD );<a name="line.396"></a>
<span class="sourceLineNo">397</span>        q.add( indexer.constructQuery( MAVEN.PACKAGING, new UserInputSearchExpression( term ) ), Occur.SHOULD );<a name="line.397"></a>
<span class="sourceLineNo">398</span>        q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new UserInputSearchExpression( term ) ), Occur.SHOULD );<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>        //Query query =<a name="line.400"></a>
<span class="sourceLineNo">401</span>        //    new WildcardQuery( new Term( MAVEN.CLASSNAMES.getFieldName(), "*" ) );<a name="line.401"></a>
<span class="sourceLineNo">402</span>        //q.add( query, Occur.MUST_NOT );<a name="line.402"></a>
<span class="sourceLineNo">403</span>        // olamy IMHO we could set this option as at least one must match<a name="line.403"></a>
<span class="sourceLineNo">404</span>        //q.setMinimumNumberShouldMatch( 1 );<a name="line.404"></a>
<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
<span class="sourceLineNo">408</span>    /**<a name="line.408"></a>
<span class="sourceLineNo">409</span>     * @param selectedRepos<a name="line.409"></a>
<span class="sourceLineNo">410</span>     * @return indexing contextId used<a name="line.410"></a>
<span class="sourceLineNo">411</span>     */<a name="line.411"></a>
<span class="sourceLineNo">412</span>    private List&lt;String&gt; addIndexingContexts( List&lt;String&gt; selectedRepos )<a name="line.412"></a>
<span class="sourceLineNo">413</span>    {<a name="line.413"></a>
<span class="sourceLineNo">414</span>        Set&lt;String&gt; indexingContextIds = new HashSet&lt;&gt;();<a name="line.414"></a>
<span class="sourceLineNo">415</span>        for ( String repo : selectedRepos )<a name="line.415"></a>
<span class="sourceLineNo">416</span>        {<a name="line.416"></a>
<span class="sourceLineNo">417</span>            try<a name="line.417"></a>
<span class="sourceLineNo">418</span>            {<a name="line.418"></a>
<span class="sourceLineNo">419</span>                Repository rRepo = repositoryRegistry.getRepository(repo);<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>                if ( rRepo != null )<a name="line.421"></a>
<span class="sourceLineNo">422</span>                {<a name="line.422"></a>
<span class="sourceLineNo">423</span><a name="line.423"></a>
<span class="sourceLineNo">424</span>                    if (rRepo.getType().equals(RepositoryType.MAVEN)) {<a name="line.424"></a>
<span class="sourceLineNo">425</span>                        assert rRepo.getIndexingContext() != null;<a name="line.425"></a>
<span class="sourceLineNo">426</span>                        IndexingContext context = rRepo.getIndexingContext().getBaseContext(IndexingContext.class);<a name="line.426"></a>
<span class="sourceLineNo">427</span>                        if (context.isSearchable()) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                            indexingContextIds.addAll(getRemoteIndexingContextIds(repo));<a name="line.428"></a>
<span class="sourceLineNo">429</span>                            indexingContextIds.add(context.getId());<a name="line.429"></a>
<span class="sourceLineNo">430</span>                        } else {<a name="line.430"></a>
<span class="sourceLineNo">431</span>                            log.warn("indexingContext with id {} not searchable", rRepo.getId());<a name="line.431"></a>
<span class="sourceLineNo">432</span>                        }<a name="line.432"></a>
<span class="sourceLineNo">433</span>                    }<a name="line.433"></a>
<span class="sourceLineNo">434</span><a name="line.434"></a>
<span class="sourceLineNo">435</span>                }<a name="line.435"></a>
<span class="sourceLineNo">436</span>                else<a name="line.436"></a>
<span class="sourceLineNo">437</span>                {<a name="line.437"></a>
<span class="sourceLineNo">438</span>                    log.warn( "Repository '{}' not found in configuration.", repo );<a name="line.438"></a>
<span class="sourceLineNo">439</span>                }<a name="line.439"></a>
<span class="sourceLineNo">440</span>            }<a name="line.440"></a>
<span class="sourceLineNo">441</span>            catch ( RepositorySearchException e )<a name="line.441"></a>
<span class="sourceLineNo">442</span>            {<a name="line.442"></a>
<span class="sourceLineNo">443</span>                log.warn( "RepositorySearchException occured while accessing index of repository '{}' : {}", repo,<a name="line.443"></a>
<span class="sourceLineNo">444</span>                    e.getMessage() );<a name="line.444"></a>
<span class="sourceLineNo">445</span>                continue;<a name="line.445"></a>
<span class="sourceLineNo">446</span>            } catch (UnsupportedBaseContextException e) {<a name="line.446"></a>
<span class="sourceLineNo">447</span>                log.error("Fatal situation: Maven repository without IndexingContext found.");<a name="line.447"></a>
<span class="sourceLineNo">448</span>                continue;<a name="line.448"></a>
<span class="sourceLineNo">449</span>            }<a name="line.449"></a>
<span class="sourceLineNo">450</span>        }<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>        return new ArrayList&lt;&gt;( indexingContextIds );<a name="line.452"></a>
<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span><a name="line.455"></a>
<span class="sourceLineNo">456</span>    @Override<a name="line.456"></a>
<span class="sourceLineNo">457</span>    public Set&lt;String&gt; getRemoteIndexingContextIds( String managedRepoId )<a name="line.457"></a>
<span class="sourceLineNo">458</span>        throws RepositorySearchException<a name="line.458"></a>
<span class="sourceLineNo">459</span>    {<a name="line.459"></a>
<span class="sourceLineNo">460</span>        Set&lt;String&gt; ids = new HashSet&lt;&gt;();<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>        List&lt;ProxyConnector&gt; proxyConnectors = null;<a name="line.462"></a>
<span class="sourceLineNo">463</span>        try<a name="line.463"></a>
<span class="sourceLineNo">464</span>        {<a name="line.464"></a>
<span class="sourceLineNo">465</span>            proxyConnectors = proxyConnectorAdmin.getProxyConnectorAsMap().get( managedRepoId );<a name="line.465"></a>
<span class="sourceLineNo">466</span>        }<a name="line.466"></a>
<span class="sourceLineNo">467</span>        catch ( RepositoryAdminException e )<a name="line.467"></a>
<span class="sourceLineNo">468</span>        {<a name="line.468"></a>
<span class="sourceLineNo">469</span>            throw new RepositorySearchException( e.getMessage(), e );<a name="line.469"></a>
<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>        if ( proxyConnectors == null || proxyConnectors.isEmpty() )<a name="line.472"></a>
<span class="sourceLineNo">473</span>        {<a name="line.473"></a>
<span class="sourceLineNo">474</span>            return ids;<a name="line.474"></a>
<span class="sourceLineNo">475</span>        }<a name="line.475"></a>
<span class="sourceLineNo">476</span><a name="line.476"></a>
<span class="sourceLineNo">477</span>        for ( ProxyConnector proxyConnector : proxyConnectors )<a name="line.477"></a>
<span class="sourceLineNo">478</span>        {<a name="line.478"></a>
<span class="sourceLineNo">479</span>            String remoteId = "remote-" + proxyConnector.getTargetRepoId();<a name="line.479"></a>
<span class="sourceLineNo">480</span>            RemoteRepository repo = repositoryRegistry.getRemoteRepository(proxyConnector.getTargetRepoId());<a name="line.480"></a>
<span class="sourceLineNo">481</span>            if (repo.getType()==RepositoryType.MAVEN) {<a name="line.481"></a>
<span class="sourceLineNo">482</span>                try {<a name="line.482"></a>
<span class="sourceLineNo">483</span>                    IndexingContext context = repo.getIndexingContext() != null ? repo.getIndexingContext().getBaseContext(IndexingContext.class) : null;<a name="line.483"></a>
<span class="sourceLineNo">484</span>                    if (context!=null &amp;&amp; context.isSearchable()) {<a name="line.484"></a>
<span class="sourceLineNo">485</span>                        ids.add(remoteId);<a name="line.485"></a>
<span class="sourceLineNo">486</span>                    }<a name="line.486"></a>
<span class="sourceLineNo">487</span>                } catch (UnsupportedBaseContextException e) {<a name="line.487"></a>
<span class="sourceLineNo">488</span>                    // Ignore this one<a name="line.488"></a>
<span class="sourceLineNo">489</span>                }<a name="line.489"></a>
<span class="sourceLineNo">490</span>            }<a name="line.490"></a>
<span class="sourceLineNo">491</span>        }<a name="line.491"></a>
<span class="sourceLineNo">492</span><a name="line.492"></a>
<span class="sourceLineNo">493</span>        return ids;<a name="line.493"></a>
<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
<span class="sourceLineNo">497</span>    public Collection&lt;String&gt; getAllGroupIds( String principal, List&lt;String&gt; selectedRepos )<a name="line.497"></a>
<span class="sourceLineNo">498</span>        throws RepositorySearchException<a name="line.498"></a>
<span class="sourceLineNo">499</span>    {<a name="line.499"></a>
<span class="sourceLineNo">500</span>        List&lt;IndexingContext&gt; indexContexts = getIndexingContexts( selectedRepos );<a name="line.500"></a>
<span class="sourceLineNo">501</span><a name="line.501"></a>
<span class="sourceLineNo">502</span>        if ( indexContexts == null || indexContexts.isEmpty() )<a name="line.502"></a>
<span class="sourceLineNo">503</span>        {<a name="line.503"></a>
<span class="sourceLineNo">504</span>            return Collections.emptyList();<a name="line.504"></a>
<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>        try<a name="line.507"></a>
<span class="sourceLineNo">508</span>        {<a name="line.508"></a>
<span class="sourceLineNo">509</span>            Set&lt;String&gt; allGroupIds = new HashSet&lt;&gt;();<a name="line.509"></a>
<span class="sourceLineNo">510</span>            for ( IndexingContext indexingContext : indexContexts )<a name="line.510"></a>
<span class="sourceLineNo">511</span>            {<a name="line.511"></a>
<span class="sourceLineNo">512</span>                allGroupIds.addAll( indexingContext.getAllGroups() );<a name="line.512"></a>
<span class="sourceLineNo">513</span>            }<a name="line.513"></a>
<span class="sourceLineNo">514</span>            return allGroupIds;<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span>        catch ( IOException e )<a name="line.516"></a>
<span class="sourceLineNo">517</span>        {<a name="line.517"></a>
<span class="sourceLineNo">518</span>            throw new RepositorySearchException( e.getMessage(), e );<a name="line.518"></a>
<span class="sourceLineNo">519</span>        }<a name="line.519"></a>
<span class="sourceLineNo">520</span><a name="line.520"></a>
<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>    private SearchResults convertToSearchResults( FlatSearchResponse response, SearchResultLimits limits,<a name="line.523"></a>
<span class="sourceLineNo">524</span>                                                  List&lt;? extends ArtifactInfoFilter&gt; artifactInfoFilters,<a name="line.524"></a>
<span class="sourceLineNo">525</span>                                                  List&lt;String&gt; selectedRepos, boolean includePoms )<a name="line.525"></a>
<span class="sourceLineNo">526</span>        throws RepositoryAdminException<a name="line.526"></a>
<span class="sourceLineNo">527</span>    {<a name="line.527"></a>
<span class="sourceLineNo">528</span>        SearchResults results = new SearchResults();<a name="line.528"></a>
<span class="sourceLineNo">529</span>        Set&lt;ArtifactInfo&gt; artifactInfos = response.getResults();<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>        for ( ArtifactInfo artifactInfo : artifactInfos )<a name="line.531"></a>
<span class="sourceLineNo">532</span>        {<a name="line.532"></a>
<span class="sourceLineNo">533</span>            if ( StringUtils.equalsIgnoreCase( "pom", artifactInfo.getFileExtension() ) &amp;&amp; !includePoms )<a name="line.533"></a>
<span class="sourceLineNo">534</span>            {<a name="line.534"></a>
<span class="sourceLineNo">535</span>                continue;<a name="line.535"></a>
<span class="sourceLineNo">536</span>            }<a name="line.536"></a>
<span class="sourceLineNo">537</span>            String id = SearchUtil.getHitId( artifactInfo.getGroupId(), //<a name="line.537"></a>
<span class="sourceLineNo">538</span>                                             artifactInfo.getArtifactId(), //<a name="line.538"></a>
<span class="sourceLineNo">539</span>                                             artifactInfo.getClassifier(), //<a name="line.539"></a>
<span class="sourceLineNo">540</span>                                             artifactInfo.getPackaging() );<a name="line.540"></a>
<span class="sourceLineNo">541</span>            Map&lt;String, SearchResultHit&gt; hitsMap = results.getHitsMap();<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span><a name="line.543"></a>
<span class="sourceLineNo">544</span>            if ( !applyArtifactInfoFilters( artifactInfo, artifactInfoFilters, hitsMap ) )<a name="line.544"></a>
<span class="sourceLineNo">545</span>            {<a name="line.545"></a>
<span class="sourceLineNo">546</span>                continue;<a name="line.546"></a>
<span class="sourceLineNo">547</span>            }<a name="line.547"></a>
<span class="sourceLineNo">548</span><a name="line.548"></a>
<span class="sourceLineNo">549</span>            SearchResultHit hit = hitsMap.get( id );<a name="line.549"></a>
<span class="sourceLineNo">550</span>            if ( hit != null )<a name="line.550"></a>
<span class="sourceLineNo">551</span>            {<a name="line.551"></a>
<span class="sourceLineNo">552</span>                if ( !hit.getVersions().contains( artifactInfo.getVersion() ) )<a name="line.552"></a>
<span class="sourceLineNo">553</span>                {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                    hit.addVersion( artifactInfo.getVersion() );<a name="line.554"></a>
<span class="sourceLineNo">555</span>                }<a name="line.555"></a>
<span class="sourceLineNo">556</span>            }<a name="line.556"></a>
<span class="sourceLineNo">557</span>            else<a name="line.557"></a>
<span class="sourceLineNo">558</span>            {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                hit = new SearchResultHit();<a name="line.559"></a>
<span class="sourceLineNo">560</span>                hit.setArtifactId( artifactInfo.getArtifactId() );<a name="line.560"></a>
<span class="sourceLineNo">561</span>                hit.setGroupId( artifactInfo.getGroupId() );<a name="line.561"></a>
<span class="sourceLineNo">562</span>                hit.setRepositoryId( artifactInfo.getRepository() );<a name="line.562"></a>
<span class="sourceLineNo">563</span>                hit.addVersion( artifactInfo.getVersion() );<a name="line.563"></a>
<span class="sourceLineNo">564</span>                hit.setBundleExportPackage( artifactInfo.getBundleExportPackage() );<a name="line.564"></a>
<span class="sourceLineNo">565</span>                hit.setBundleExportService( artifactInfo.getBundleExportService() );<a name="line.565"></a>
<span class="sourceLineNo">566</span>                hit.setBundleSymbolicName( artifactInfo.getBundleSymbolicName() );<a name="line.566"></a>
<span class="sourceLineNo">567</span>                hit.setBundleVersion( artifactInfo.getBundleVersion() );<a name="line.567"></a>
<span class="sourceLineNo">568</span>                hit.setBundleDescription( artifactInfo.getBundleDescription() );<a name="line.568"></a>
<span class="sourceLineNo">569</span>                hit.setBundleDocUrl( artifactInfo.getBundleDocUrl() );<a name="line.569"></a>
<span class="sourceLineNo">570</span>                hit.setBundleRequireBundle( artifactInfo.getBundleRequireBundle() );<a name="line.570"></a>
<span class="sourceLineNo">571</span>                hit.setBundleImportPackage( artifactInfo.getBundleImportPackage() );<a name="line.571"></a>
<span class="sourceLineNo">572</span>                hit.setBundleLicense( artifactInfo.getBundleLicense() );<a name="line.572"></a>
<span class="sourceLineNo">573</span>                hit.setBundleName( artifactInfo.getBundleName() );<a name="line.573"></a>
<span class="sourceLineNo">574</span>                hit.setContext( artifactInfo.getContext() );<a name="line.574"></a>
<span class="sourceLineNo">575</span>                hit.setGoals( artifactInfo.getGoals() );<a name="line.575"></a>
<span class="sourceLineNo">576</span>                hit.setPrefix( artifactInfo.getPrefix() );<a name="line.576"></a>
<span class="sourceLineNo">577</span>                hit.setPackaging( artifactInfo.getPackaging() );<a name="line.577"></a>
<span class="sourceLineNo">578</span>                hit.setClassifier( artifactInfo.getClassifier() );<a name="line.578"></a>
<span class="sourceLineNo">579</span>                hit.setFileExtension( artifactInfo.getFileExtension() );<a name="line.579"></a>
<span class="sourceLineNo">580</span>                hit.setUrl( getBaseUrl( artifactInfo, selectedRepos ) );<a name="line.580"></a>
<span class="sourceLineNo">581</span>            }<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span>            results.addHit( id, hit );<a name="line.583"></a>
<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>        results.setTotalHits( response.getTotalHitsCount() );<a name="line.586"></a>
<span class="sourceLineNo">587</span>        results.setTotalHitsMapSize( results.getHitsMap().values().size() );<a name="line.587"></a>
<span class="sourceLineNo">588</span>        results.setReturnedHitsCount( response.getReturnedHitsCount() );<a name="line.588"></a>
<span class="sourceLineNo">589</span>        results.setLimits( limits );<a name="line.589"></a>
<span class="sourceLineNo">590</span><a name="line.590"></a>
<span class="sourceLineNo">591</span>        if ( limits == null || limits.getSelectedPage() == SearchResultLimits.ALL_PAGES )<a name="line.591"></a>
<span class="sourceLineNo">592</span>        {<a name="line.592"></a>
<span class="sourceLineNo">593</span>            return results;<a name="line.593"></a>
<span class="sourceLineNo">594</span>        }<a name="line.594"></a>
<span class="sourceLineNo">595</span>        else<a name="line.595"></a>
<span class="sourceLineNo">596</span>        {<a name="line.596"></a>
<span class="sourceLineNo">597</span>            return paginate( results );<a name="line.597"></a>
<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>    /**<a name="line.601"></a>
<span class="sourceLineNo">602</span>     * calculate baseUrl without the context and base Archiva Url<a name="line.602"></a>
<span class="sourceLineNo">603</span>     *<a name="line.603"></a>
<span class="sourceLineNo">604</span>     * @param artifactInfo<a name="line.604"></a>
<span class="sourceLineNo">605</span>     * @return<a name="line.605"></a>
<span class="sourceLineNo">606</span>     */<a name="line.606"></a>
<span class="sourceLineNo">607</span>    protected String getBaseUrl( ArtifactInfo artifactInfo, List&lt;String&gt; selectedRepos )<a name="line.607"></a>
<span class="sourceLineNo">608</span>        throws RepositoryAdminException<a name="line.608"></a>
<span class="sourceLineNo">609</span>    {<a name="line.609"></a>
<span class="sourceLineNo">610</span>        StringBuilder sb = new StringBuilder();<a name="line.610"></a>
<span class="sourceLineNo">611</span>        if ( StringUtils.startsWith( artifactInfo.getContext(), "remote-" ) )<a name="line.611"></a>
<span class="sourceLineNo">612</span>        {<a name="line.612"></a>
<span class="sourceLineNo">613</span>            // it's a remote index result we search a managed which proxying this remote and on which<a name="line.613"></a>
<span class="sourceLineNo">614</span>            // current user has read karma<a name="line.614"></a>
<span class="sourceLineNo">615</span>            String managedRepoId =<a name="line.615"></a>
<span class="sourceLineNo">616</span>                getManagedRepoId( StringUtils.substringAfter( artifactInfo.getContext(), "remote-" ), selectedRepos );<a name="line.616"></a>
<span class="sourceLineNo">617</span>            if ( managedRepoId != null )<a name="line.617"></a>
<span class="sourceLineNo">618</span>            {<a name="line.618"></a>
<span class="sourceLineNo">619</span>                sb.append( '/' ).append( managedRepoId );<a name="line.619"></a>
<span class="sourceLineNo">620</span>                artifactInfo.setContext( managedRepoId );<a name="line.620"></a>
<span class="sourceLineNo">621</span>            }<a name="line.621"></a>
<span class="sourceLineNo">622</span>        }<a name="line.622"></a>
<span class="sourceLineNo">623</span>        else<a name="line.623"></a>
<span class="sourceLineNo">624</span>        {<a name="line.624"></a>
<span class="sourceLineNo">625</span>            sb.append( '/' ).append( artifactInfo.getContext() );<a name="line.625"></a>
<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>        sb.append( '/' ).append( StringUtils.replaceChars( artifactInfo.getGroupId(), '.', '/' ) );<a name="line.628"></a>
<span class="sourceLineNo">629</span>        sb.append( '/' ).append( artifactInfo.getArtifactId() );<a name="line.629"></a>
<span class="sourceLineNo">630</span>        sb.append( '/' ).append( artifactInfo.getVersion() );<a name="line.630"></a>
<span class="sourceLineNo">631</span>        sb.append( '/' ).append( artifactInfo.getArtifactId() );<a name="line.631"></a>
<span class="sourceLineNo">632</span>        sb.append( '-' ).append( artifactInfo.getVersion() );<a name="line.632"></a>
<span class="sourceLineNo">633</span>        if ( StringUtils.isNotBlank( artifactInfo.getClassifier() ) )<a name="line.633"></a>
<span class="sourceLineNo">634</span>        {<a name="line.634"></a>
<span class="sourceLineNo">635</span>            sb.append( '-' ).append( artifactInfo.getClassifier() );<a name="line.635"></a>
<span class="sourceLineNo">636</span>        }<a name="line.636"></a>
<span class="sourceLineNo">637</span>        // maven-plugin packaging is a jar<a name="line.637"></a>
<span class="sourceLineNo">638</span>        if ( StringUtils.equals( "maven-plugin", artifactInfo.getPackaging() ) )<a name="line.638"></a>
<span class="sourceLineNo">639</span>        {<a name="line.639"></a>
<span class="sourceLineNo">640</span>            sb.append( "jar" );<a name="line.640"></a>
<span class="sourceLineNo">641</span>        }<a name="line.641"></a>
<span class="sourceLineNo">642</span>        else<a name="line.642"></a>
<span class="sourceLineNo">643</span>        {<a name="line.643"></a>
<span class="sourceLineNo">644</span>            sb.append( '.' ).append( artifactInfo.getPackaging() );<a name="line.644"></a>
<span class="sourceLineNo">645</span>        }<a name="line.645"></a>
<span class="sourceLineNo">646</span><a name="line.646"></a>
<span class="sourceLineNo">647</span>        return sb.toString();<a name="line.647"></a>
<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
<span class="sourceLineNo">649</span><a name="line.649"></a>
<span class="sourceLineNo">650</span>    /**<a name="line.650"></a>
<span class="sourceLineNo">651</span>     * return a managed repo for a remote result<a name="line.651"></a>
<span class="sourceLineNo">652</span>     *<a name="line.652"></a>
<span class="sourceLineNo">653</span>     * @param remoteRepo<a name="line.653"></a>
<span class="sourceLineNo">654</span>     * @param selectedRepos<a name="line.654"></a>
<span class="sourceLineNo">655</span>     * @return<a name="line.655"></a>
<span class="sourceLineNo">656</span>     * @throws RepositoryAdminException<a name="line.656"></a>
<span class="sourceLineNo">657</span>     */<a name="line.657"></a>
<span class="sourceLineNo">658</span>    private String getManagedRepoId( String remoteRepo, List&lt;String&gt; selectedRepos )<a name="line.658"></a>
<span class="sourceLineNo">659</span>        throws RepositoryAdminException<a name="line.659"></a>
<span class="sourceLineNo">660</span>    {<a name="line.660"></a>
<span class="sourceLineNo">661</span>        Map&lt;String, List&lt;ProxyConnector&gt;&gt; proxyConnectorMap = proxyConnectorAdmin.getProxyConnectorAsMap();<a name="line.661"></a>
<span class="sourceLineNo">662</span>        if ( proxyConnectorMap == null || proxyConnectorMap.isEmpty() )<a name="line.662"></a>
<span class="sourceLineNo">663</span>        {<a name="line.663"></a>
<span class="sourceLineNo">664</span>            return null;<a name="line.664"></a>
<span class="sourceLineNo">665</span>        }<a name="line.665"></a>
<span class="sourceLineNo">666</span>        if ( selectedRepos != null &amp;&amp; !selectedRepos.isEmpty() )<a name="line.666"></a>
<span class="sourceLineNo">667</span>        {<a name="line.667"></a>
<span class="sourceLineNo">668</span>            for ( Map.Entry&lt;String, List&lt;ProxyConnector&gt;&gt; entry : proxyConnectorMap.entrySet() )<a name="line.668"></a>
<span class="sourceLineNo">669</span>            {<a name="line.669"></a>
<span class="sourceLineNo">670</span>                if ( selectedRepos.contains( entry.getKey() ) )<a name="line.670"></a>
<span class="sourceLineNo">671</span>                {<a name="line.671"></a>
<span class="sourceLineNo">672</span>                    for ( ProxyConnector proxyConnector : entry.getValue() )<a name="line.672"></a>
<span class="sourceLineNo">673</span>                    {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                        if ( StringUtils.equals( remoteRepo, proxyConnector.getTargetRepoId() ) )<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        {<a name="line.675"></a>
<span class="sourceLineNo">676</span>                            return proxyConnector.getSourceRepoId();<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        }<a name="line.677"></a>
<span class="sourceLineNo">678</span>                    }<a name="line.678"></a>
<span class="sourceLineNo">679</span>                }<a name="line.679"></a>
<span class="sourceLineNo">680</span>            }<a name="line.680"></a>
<span class="sourceLineNo">681</span>        }<a name="line.681"></a>
<span class="sourceLineNo">682</span><a name="line.682"></a>
<span class="sourceLineNo">683</span>        // we don't find in search selected repos so return the first one<a name="line.683"></a>
<span class="sourceLineNo">684</span>        for ( Map.Entry&lt;String, List&lt;ProxyConnector&gt;&gt; entry : proxyConnectorMap.entrySet() )<a name="line.684"></a>
<span class="sourceLineNo">685</span>        {<a name="line.685"></a>
<span class="sourceLineNo">686</span><a name="line.686"></a>
<span class="sourceLineNo">687</span>            for ( ProxyConnector proxyConnector : entry.getValue() )<a name="line.687"></a>
<span class="sourceLineNo">688</span>            {<a name="line.688"></a>
<span class="sourceLineNo">689</span>                if ( StringUtils.equals( remoteRepo, proxyConnector.getTargetRepoId() ) )<a name="line.689"></a>
<span class="sourceLineNo">690</span>                {<a name="line.690"></a>
<span class="sourceLineNo">691</span>                    return proxyConnector.getSourceRepoId();<a name="line.691"></a>
<span class="sourceLineNo">692</span>                }<a name="line.692"></a>
<span class="sourceLineNo">693</span>            }<a name="line.693"></a>
<span class="sourceLineNo">694</span><a name="line.694"></a>
<span class="sourceLineNo">695</span>        }<a name="line.695"></a>
<span class="sourceLineNo">696</span>        return null;<a name="line.696"></a>
<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
<span class="sourceLineNo">698</span><a name="line.698"></a>
<span class="sourceLineNo">699</span>    private boolean applyArtifactInfoFilters( ArtifactInfo artifactInfo,<a name="line.699"></a>
<span class="sourceLineNo">700</span>                                              List&lt;? extends ArtifactInfoFilter&gt; artifactInfoFilters,<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                              Map&lt;String, SearchResultHit&gt; currentResult )<a name="line.701"></a>
<span class="sourceLineNo">702</span>    {<a name="line.702"></a>
<span class="sourceLineNo">703</span>        if ( artifactInfoFilters == null || artifactInfoFilters.isEmpty() )<a name="line.703"></a>
<span class="sourceLineNo">704</span>        {<a name="line.704"></a>
<span class="sourceLineNo">705</span>            return true;<a name="line.705"></a>
<span class="sourceLineNo">706</span>        }<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>        ArchivaArtifactModel artifact = new ArchivaArtifactModel();<a name="line.708"></a>
<span class="sourceLineNo">709</span>        artifact.setArtifactId( artifactInfo.getArtifactId() );<a name="line.709"></a>
<span class="sourceLineNo">710</span>        artifact.setClassifier( artifactInfo.getClassifier() );<a name="line.710"></a>
<span class="sourceLineNo">711</span>        artifact.setGroupId( artifactInfo.getGroupId() );<a name="line.711"></a>
<span class="sourceLineNo">712</span>        artifact.setRepositoryId( artifactInfo.getRepository() );<a name="line.712"></a>
<span class="sourceLineNo">713</span>        artifact.setVersion( artifactInfo.getVersion() );<a name="line.713"></a>
<span class="sourceLineNo">714</span>        artifact.setChecksumMD5( artifactInfo.getMd5() );<a name="line.714"></a>
<span class="sourceLineNo">715</span>        artifact.setChecksumSHA1( artifactInfo.getSha1() );<a name="line.715"></a>
<span class="sourceLineNo">716</span>        for ( ArtifactInfoFilter filter : artifactInfoFilters )<a name="line.716"></a>
<span class="sourceLineNo">717</span>        {<a name="line.717"></a>
<span class="sourceLineNo">718</span>            if ( !filter.addArtifactInResult( artifact, currentResult ) )<a name="line.718"></a>
<span class="sourceLineNo">719</span>            {<a name="line.719"></a>
<span class="sourceLineNo">720</span>                return false;<a name="line.720"></a>
<span class="sourceLineNo">721</span>            }<a name="line.721"></a>
<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
<span class="sourceLineNo">723</span>        return true;<a name="line.723"></a>
<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
<span class="sourceLineNo">725</span><a name="line.725"></a>
<span class="sourceLineNo">726</span>    protected SearchResults paginate( SearchResults results )<a name="line.726"></a>
<span class="sourceLineNo">727</span>    {<a name="line.727"></a>
<span class="sourceLineNo">728</span>        SearchResultLimits limits = results.getLimits();<a name="line.728"></a>
<span class="sourceLineNo">729</span>        SearchResults paginated = new SearchResults();<a name="line.729"></a>
<span class="sourceLineNo">730</span><a name="line.730"></a>
<span class="sourceLineNo">731</span>        // ( limits.getPageSize() * ( Math.max( 1, limits.getSelectedPage() ) ) );<a name="line.731"></a>
<span class="sourceLineNo">732</span><a name="line.732"></a>
<span class="sourceLineNo">733</span>        int fetchCount = limits.getPageSize();<a name="line.733"></a>
<span class="sourceLineNo">734</span>        int offset = ( limits.getSelectedPage() * limits.getPageSize() );<a name="line.734"></a>
<span class="sourceLineNo">735</span><a name="line.735"></a>
<span class="sourceLineNo">736</span>        if ( fetchCount &gt; results.getTotalHits() )<a name="line.736"></a>
<span class="sourceLineNo">737</span>        {<a name="line.737"></a>
<span class="sourceLineNo">738</span>            fetchCount = results.getTotalHits();<a name="line.738"></a>
<span class="sourceLineNo">739</span>        }<a name="line.739"></a>
<span class="sourceLineNo">740</span><a name="line.740"></a>
<span class="sourceLineNo">741</span>        // Goto offset.<a name="line.741"></a>
<span class="sourceLineNo">742</span>        if ( offset &lt; results.getTotalHits() )<a name="line.742"></a>
<span class="sourceLineNo">743</span>        {<a name="line.743"></a>
<span class="sourceLineNo">744</span>            // only process if the offset is within the hit count.<a name="line.744"></a>
<span class="sourceLineNo">745</span>            for ( int i = 0; i &lt; fetchCount; i++ )<a name="line.745"></a>
<span class="sourceLineNo">746</span>            {<a name="line.746"></a>
<span class="sourceLineNo">747</span>                // Stop fetching if we are past the total # of available hits.<a name="line.747"></a>
<span class="sourceLineNo">748</span>                if ( offset + i &gt;= results.getHits().size() )<a name="line.748"></a>
<span class="sourceLineNo">749</span>                {<a name="line.749"></a>
<span class="sourceLineNo">750</span>                    break;<a name="line.750"></a>
<span class="sourceLineNo">751</span>                }<a name="line.751"></a>
<span class="sourceLineNo">752</span><a name="line.752"></a>
<span class="sourceLineNo">753</span>                SearchResultHit hit = results.getHits().get( ( offset + i ) );<a name="line.753"></a>
<span class="sourceLineNo">754</span>                if ( hit != null )<a name="line.754"></a>
<span class="sourceLineNo">755</span>                {<a name="line.755"></a>
<span class="sourceLineNo">756</span>                    String id = SearchUtil.getHitId( hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(),<a name="line.756"></a>
<span class="sourceLineNo">757</span>                                                     hit.getPackaging() );<a name="line.757"></a>
<span class="sourceLineNo">758</span>                    paginated.addHit( id, hit );<a name="line.758"></a>
<span class="sourceLineNo">759</span>                }<a name="line.759"></a>
<span class="sourceLineNo">760</span>                else<a name="line.760"></a>
<span class="sourceLineNo">761</span>                {<a name="line.761"></a>
<span class="sourceLineNo">762</span>                    break;<a name="line.762"></a>
<span class="sourceLineNo">763</span>                }<a name="line.763"></a>
<span class="sourceLineNo">764</span>            }<a name="line.764"></a>
<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
<span class="sourceLineNo">766</span>        paginated.setTotalHits( results.getTotalHits() );<a name="line.766"></a>
<span class="sourceLineNo">767</span>        paginated.setReturnedHitsCount( paginated.getHits().size() );<a name="line.767"></a>
<span class="sourceLineNo">768</span>        paginated.setTotalHitsMapSize( results.getTotalHitsMapSize() );<a name="line.768"></a>
<span class="sourceLineNo">769</span>        paginated.setLimits( limits );<a name="line.769"></a>
<span class="sourceLineNo">770</span><a name="line.770"></a>
<span class="sourceLineNo">771</span>        return paginated;<a name="line.771"></a>
<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
<span class="sourceLineNo">773</span><a name="line.773"></a>
<span class="sourceLineNo">774</span><a name="line.774"></a>
<span class="sourceLineNo">775</span>}<a name="line.775"></a>




























































</pre>
</div>
</body>
</html>