]> source.dussan.org Git - archiva.git/blob
6465814c39cde33f969bfa145b983ce175629954
[archiva.git] /
1 package org.apache.maven.archiva.indexer.search;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.commons.lang.StringUtils;
23 import org.apache.maven.archiva.indexer.bytecode.BytecodeRecord;
24 import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
25 import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecord;
26 import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
27 import org.apache.maven.archiva.model.ArchivaArtifact;
28
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33
34 /**
35  * SearchResults 
36  *
37  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
38  * @version $Id$
39  */
40 public class SearchResults
41 {
42     private List repositories = new ArrayList();
43
44     private Map hits = new HashMap();
45
46     private int totalHits;
47
48     private SearchResultLimits limits;
49
50     public SearchResults()
51     {
52         /* do nothing */
53     }
54
55     public void addHit( LuceneRepositoryContentRecord record )
56     {
57         if ( record instanceof FileContentRecord )
58         {
59             FileContentRecord filecontent = (FileContentRecord) record;
60             addFileContentHit( filecontent );
61         }
62         else if ( record instanceof HashcodesRecord )
63         {
64             HashcodesRecord hashcodes = (HashcodesRecord) record;
65             addHashcodeHit( hashcodes );
66         }
67         else if ( record instanceof BytecodeRecord )
68         {
69             BytecodeRecord bytecode = (BytecodeRecord) record;
70             addBytecodeHit( bytecode );
71         }
72     }
73
74     private void addBytecodeHit( BytecodeRecord bytecode )
75     {
76         String key = toKey( bytecode.getArtifact() );
77
78         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
79
80         if ( hit == null )
81         {
82             hit = new SearchResultHit();
83         }
84
85         hit.addArtifact( bytecode.getArtifact() );
86         hit.setContext( null ); // TODO: provide context on why this is a valuable hit.
87
88         this.hits.put( key, hit );
89     }
90
91     private String toKey( ArchivaArtifact artifact )
92     {
93         StringBuffer key = new StringBuffer();
94
95         key.append( StringUtils.defaultString( artifact.getGroupId() ) ).append( ":" );
96         key.append( StringUtils.defaultString( artifact.getArtifactId() ) );
97
98         return key.toString();
99     }
100
101     private void addHashcodeHit( HashcodesRecord hashcodes )
102     {
103         String key = toKey( hashcodes.getArtifact() );
104
105         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
106
107         if ( hit == null )
108         {
109             hit = new SearchResultHit();
110         }
111
112         hit.addArtifact( hashcodes.getArtifact() );
113         hit.setContext( null ); // TODO: provide context on why this is a valuable hit.
114
115         this.hits.put( key, hit );
116     }
117
118     public void addFileContentHit( FileContentRecord filecontent )
119     {
120         String key = filecontent.getPrimaryKey();
121
122         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
123
124         if ( hit == null )
125         {
126             // Only need to worry about this hit if it is truely new.
127             hit = new SearchResultHit();
128
129             hit.setRepositoryId( filecontent.getRepositoryId() );
130             hit.setUrl( filecontent.getRepositoryId() + "/" + filecontent.getFilename() );
131             hit.setContext( null ); // TODO: handle context + highlight later.
132             
133             // Test for possible artifact reference ...
134             if( filecontent.getArtifact() != null )
135             {
136                 hit.addArtifact( filecontent.getArtifact() );
137             }
138
139             this.hits.put( key, hit );
140         }
141     }
142
143     /**
144      * Get the list of {@link SearchResultHit} objects.
145      * 
146      * @return the list of {@link SearchResultHit} objects.
147      */
148     public List getHits()
149     {
150         return new ArrayList( hits.values() );
151     }
152
153     public List getRepositories()
154     {
155         return repositories;
156     }
157
158     public boolean isEmpty()
159     {
160         return hits.isEmpty();
161     }
162
163     public void setRepositories( List repositories )
164     {
165         this.repositories = repositories;
166     }
167
168     public SearchResultLimits getLimits()
169     {
170         return limits;
171     }
172
173     public void setLimits( SearchResultLimits limits )
174     {
175         this.limits = limits;
176     }
177
178     public int getTotalHits()
179     {
180         return totalHits;
181     }
182
183     public void setTotalHits( int totalHits )
184     {
185         this.totalHits = totalHits;
186     }
187 }