]> source.dussan.org Git - archiva.git/blob
50ed79b28181d7ca06af45118e59fbedfcaf0555
[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  * @version $Id$
38  */
39 public class SearchResults
40 {
41     private List repositories = new ArrayList();
42
43     private Map hits = new HashMap();
44
45     private int totalHits;
46
47     private SearchResultLimits limits;
48
49     public SearchResults()
50     {
51         /* do nothing */
52     }
53
54     public void addHit( LuceneRepositoryContentRecord record )
55     {
56         if ( record instanceof FileContentRecord )
57         {
58             FileContentRecord filecontent = (FileContentRecord) record;
59             addFileContentHit( filecontent );
60         }
61         else if ( record instanceof HashcodesRecord )
62         {
63             HashcodesRecord hashcodes = (HashcodesRecord) record;
64             addHashcodeHit( hashcodes );
65         }
66         else if ( record instanceof BytecodeRecord )
67         {
68             BytecodeRecord bytecode = (BytecodeRecord) record;
69             addBytecodeHit( bytecode );
70         }
71     }
72
73     private void addBytecodeHit( BytecodeRecord bytecode )
74     {
75         String key = toKey( bytecode.getArtifact() );
76         
77         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
78
79         if ( hit == null )
80         {
81             hit = new SearchResultHit();
82         }
83         
84         hit.setRepositoryId( bytecode.getRepositoryId() );
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.getModel().getRepositoryId() ) ).append( ":" );
96         key.append( StringUtils.defaultString( artifact.getGroupId() ) ).append( ":" );
97         key.append( StringUtils.defaultString( artifact.getArtifactId() ) ).append( ":" );
98         key.append( StringUtils.defaultString( artifact.getVersion() ) );
99
100         return key.toString();
101     }
102
103     private void addHashcodeHit( HashcodesRecord hashcodes )
104     {
105         String key = toKey( hashcodes.getArtifact() );
106
107         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
108
109         if ( hit == null )
110         {
111             hit = new SearchResultHit();
112         }
113
114         hit.addArtifact( hashcodes.getArtifact() );
115         hit.setContext( null ); // TODO: provide context on why this is a valuable hit.
116
117         this.hits.put( key, hit );
118     }
119
120     public void addFileContentHit( FileContentRecord filecontent )
121     {
122         String key = filecontent.getPrimaryKey();
123
124         SearchResultHit hit = (SearchResultHit) this.hits.get( key );
125
126         if ( hit == null )
127         {
128             // Only need to worry about this hit if it is truely new.
129             hit = new SearchResultHit();
130
131             hit.setRepositoryId( filecontent.getRepositoryId() );
132             hit.setUrl( filecontent.getRepositoryId() + "/" + filecontent.getFilename() );
133             hit.setContext( null ); // TODO: handle context + highlight later.
134             
135             // Test for possible artifact reference ...
136             if( filecontent.getArtifact() != null )
137             {
138                 hit.addArtifact( filecontent.getArtifact() );
139             }
140
141             this.hits.put( key, hit );
142         }
143     }
144
145     /**
146      * Get the list of {@link SearchResultHit} objects.
147      * 
148      * @return the list of {@link SearchResultHit} objects.
149      */
150     public List getHits()
151     {
152         return new ArrayList( hits.values() );
153     }
154
155     public List getRepositories()
156     {
157         return repositories;
158     }
159
160     public boolean isEmpty()
161     {
162         return hits.isEmpty();
163     }
164
165     public void setRepositories( List repositories )
166     {
167         this.repositories = repositories;
168     }
169
170     public SearchResultLimits getLimits()
171     {
172         return limits;
173     }
174
175     public void setLimits( SearchResultLimits limits )
176     {
177         this.limits = limits;
178     }
179
180     public int getTotalHits()
181     {
182         return totalHits;
183     }
184
185     public void setTotalHits( int totalHits )
186     {
187         this.totalHits = totalHits;
188     }
189 }