xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/search/Hit.java (revision c6f0939b1c668e9f8e1e276424439c3106b3a029)
1b5840353SAdam Hornáček /*
2b5840353SAdam Hornáček  * CDDL HEADER START
3b5840353SAdam Hornáček  *
4b5840353SAdam Hornáček  * The contents of this file are subject to the terms of the
5b5840353SAdam Hornáček  * Common Development and Distribution License (the "License").
6b5840353SAdam Hornáček  * You may not use this file except in compliance with the License.
7b5840353SAdam Hornáček  *
8b5840353SAdam Hornáček  * See LICENSE.txt included in this distribution for the specific
9b5840353SAdam Hornáček  * language governing permissions and limitations under the License.
10b5840353SAdam Hornáček  *
11b5840353SAdam Hornáček  * When distributing Covered Code, include this CDDL HEADER in each
12b5840353SAdam Hornáček  * file and include the License file at LICENSE.txt.
13b5840353SAdam Hornáček  * If applicable, add the following below this CDDL HEADER, with the
14b5840353SAdam Hornáček  * fields enclosed by brackets "[]" replaced with your own identifying
15b5840353SAdam Hornáček  * information: Portions Copyright [yyyy] [name of copyright owner]
16b5840353SAdam Hornáček  *
17b5840353SAdam Hornáček  * CDDL HEADER END
18b5840353SAdam Hornáček  */
19b5840353SAdam Hornáček 
20b5840353SAdam Hornáček /*
21*c6f0939bSAdam Hornacek  * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
22b5840353SAdam Hornáček  */
239805b761SAdam Hornáček package org.opengrok.indexer.search;
24b5840353SAdam Hornáček 
25b5840353SAdam Hornáček import java.io.File;
26b5840353SAdam Hornáček 
27b5840353SAdam Hornáček /**
28ff44f24aSAdam Hornáček  * The hit class represents a single search hit.
29b5840353SAdam Hornáček  *
30b5840353SAdam Hornáček  * @author Trond Norbye
31b5840353SAdam Hornáček  */
32b5840353SAdam Hornáček public class Hit implements Comparable<Hit> {
33b5840353SAdam Hornáček     /**
34b5840353SAdam Hornáček      * Holds value of property filename.
35b5840353SAdam Hornáček      */
36b5840353SAdam Hornáček     private String filename;
37b5840353SAdam Hornáček 
38b5840353SAdam Hornáček     /**
39ff44f24aSAdam Hornáček      * Holds value of property directory.
40b5840353SAdam Hornáček      */
41b5840353SAdam Hornáček     private String directory;
42b5840353SAdam Hornáček 
43b5840353SAdam Hornáček     /**
44b5840353SAdam Hornáček      * Holds value of property line.
45b5840353SAdam Hornáček      */
46b5840353SAdam Hornáček     private String line;
47b5840353SAdam Hornáček 
48b5840353SAdam Hornáček     /**
49b5840353SAdam Hornáček      * Holds value of property line no.
50b5840353SAdam Hornáček      */
51b5840353SAdam Hornáček     private String lineno;
52b5840353SAdam Hornáček 
53b5840353SAdam Hornáček     /**
54b5840353SAdam Hornáček      * Holds value of property binary.
55b5840353SAdam Hornáček      */
56b5840353SAdam Hornáček     private boolean binary;
57b5840353SAdam Hornáček 
58b5840353SAdam Hornáček     /**
59b5840353SAdam Hornáček      * Holds value of property alt used to highlight alternating files.
60b5840353SAdam Hornáček      */
61*c6f0939bSAdam Hornacek     private final boolean alt;
62b5840353SAdam Hornáček 
63b5840353SAdam Hornáček     /**
64b5840353SAdam Hornáček      * path relative to source root.
65b5840353SAdam Hornáček      */
66b5840353SAdam Hornáček     private String path;
67b5840353SAdam Hornáček 
68b5840353SAdam Hornáček     /**
69ff44f24aSAdam Hornáček      * Creates a new instance of Hit.
70b5840353SAdam Hornáček      */
Hit()71b5840353SAdam Hornáček     public Hit() {
72b5840353SAdam Hornáček         this(null, null, null, false, false);
73b5840353SAdam Hornáček     }
74b5840353SAdam Hornáček 
75b5840353SAdam Hornáček     /**
76ff44f24aSAdam Hornáček      * Creates a new instance of Hit.
77b5840353SAdam Hornáček      *
78b5840353SAdam Hornáček      * @param filename The name of the file this hit represents
79b5840353SAdam Hornáček      * @param line The line containing the match
80b5840353SAdam Hornáček      * @param lineno The line number in the file the match was found
81b5840353SAdam Hornáček      * @param binary If this is a binary file or not
82b5840353SAdam Hornáček      * @param alt Is this the "alternate" file
83b5840353SAdam Hornáček      */
Hit(String filename, String line, String lineno, boolean binary, boolean alt)84b5840353SAdam Hornáček     public Hit(String filename, String line, String lineno, boolean binary, boolean alt) {
85b5840353SAdam Hornáček         if (filename != null) {
86b5840353SAdam Hornáček             File file = new File(filename);
87b5840353SAdam Hornáček             this.path = filename;
88b5840353SAdam Hornáček             this.filename = file.getName();
89b5840353SAdam Hornáček             this.directory = file.getParent();
90b5840353SAdam Hornáček             if (directory == null) {
91b5840353SAdam Hornáček                 directory = "";
92b5840353SAdam Hornáček             }
93b5840353SAdam Hornáček         }
94b5840353SAdam Hornáček         this.line = line;
95b5840353SAdam Hornáček         this.lineno = lineno;
96b5840353SAdam Hornáček         this.binary = binary;
97b5840353SAdam Hornáček         this.alt = alt;
98b5840353SAdam Hornáček     }
99b5840353SAdam Hornáček 
100b5840353SAdam Hornáček     /**
101b5840353SAdam Hornáček      * Getter for property filename.
102b5840353SAdam Hornáček      *
103b5840353SAdam Hornáček      * @return Value of property filename.
104b5840353SAdam Hornáček      */
getFilename()105b5840353SAdam Hornáček     public String getFilename() {
106b5840353SAdam Hornáček         return this.filename;
107b5840353SAdam Hornáček     }
108b5840353SAdam Hornáček 
109b5840353SAdam Hornáček     /**
110b5840353SAdam Hornáček      * Getter for property path.
111b5840353SAdam Hornáček      *
112b5840353SAdam Hornáček      * @return Value of property path.
113b5840353SAdam Hornáček      */
getPath()114b5840353SAdam Hornáček     public String getPath() {
115b5840353SAdam Hornáček         return this.path;
116b5840353SAdam Hornáček     }
117b5840353SAdam Hornáček 
118b5840353SAdam Hornáček     /**
119ff44f24aSAdam Hornáček      * Getter for property directory.
120b5840353SAdam Hornáček      *
121b5840353SAdam Hornáček      * @return Value of property directory
122b5840353SAdam Hornáček      */
getDirectory()123b5840353SAdam Hornáček     public String getDirectory() {
124b5840353SAdam Hornáček         return this.directory;
125b5840353SAdam Hornáček     }
126b5840353SAdam Hornáček 
127b5840353SAdam Hornáček     /**
128b5840353SAdam Hornáček      * Setter for property filename.
129b5840353SAdam Hornáček      *
130b5840353SAdam Hornáček      * @param filename New value of property filename.
131b5840353SAdam Hornáček      */
setFilename(String filename)132b5840353SAdam Hornáček     public void setFilename(String filename) {
133b5840353SAdam Hornáček         this.filename = filename;
134b5840353SAdam Hornáček     }
135b5840353SAdam Hornáček 
136b5840353SAdam Hornáček     /**
137b5840353SAdam Hornáček      * Getter for property line.
138b5840353SAdam Hornáček      *
139b5840353SAdam Hornáček      * @return Value of property line.
140b5840353SAdam Hornáček      */
getLine()141b5840353SAdam Hornáček     public String getLine() {
142b5840353SAdam Hornáček         return this.line;
143b5840353SAdam Hornáček     }
144b5840353SAdam Hornáček 
145b5840353SAdam Hornáček     /**
146b5840353SAdam Hornáček      * Setter for property line.
147b5840353SAdam Hornáček      *
148b5840353SAdam Hornáček      * @param line New value of property line.
149b5840353SAdam Hornáček      */
setLine(String line)150b5840353SAdam Hornáček     public void setLine(String line) {
151b5840353SAdam Hornáček         this.line = line;
152b5840353SAdam Hornáček     }
153b5840353SAdam Hornáček 
154b5840353SAdam Hornáček     /**
155b5840353SAdam Hornáček      * Getter for property line no.
156b5840353SAdam Hornáček      *
157b5840353SAdam Hornáček      * @return Value of property line no.
158b5840353SAdam Hornáček      */
getLineno()159b5840353SAdam Hornáček     public String getLineno() {
160b5840353SAdam Hornáček         return this.lineno;
161b5840353SAdam Hornáček     }
162b5840353SAdam Hornáček 
163b5840353SAdam Hornáček     /**
164b5840353SAdam Hornáček      * Setter for property line no.
165b5840353SAdam Hornáček      *
166b5840353SAdam Hornáček      * @param lineno New value of property line no.
167b5840353SAdam Hornáček      */
setLineno(String lineno)168b5840353SAdam Hornáček     public void setLineno(String lineno) {
169b5840353SAdam Hornáček         this.lineno = lineno;
170b5840353SAdam Hornáček     }
171b5840353SAdam Hornáček 
172b5840353SAdam Hornáček     /**
173ff44f24aSAdam Hornáček      * Compare this object to another hit (in order to implement the comparable interface).
174b5840353SAdam Hornáček      *
175b5840353SAdam Hornáček      * @param o The object to compare this object with
176b5840353SAdam Hornáček      *
177b5840353SAdam Hornáček      * @return the result of a toString().compareTo() of the filename
178b5840353SAdam Hornáček      */
179b5840353SAdam Hornáček     @Override
compareTo(Hit o)180b5840353SAdam Hornáček     public int compareTo(Hit o) throws ClassCastException {
181b5840353SAdam Hornáček         return filename.compareTo(o.filename);
182b5840353SAdam Hornáček     }
183b5840353SAdam Hornáček 
184b5840353SAdam Hornáček     /**
185b5840353SAdam Hornáček      * Getter for property binary.
186b5840353SAdam Hornáček      *
187b5840353SAdam Hornáček      * @return Value of property binary.
188b5840353SAdam Hornáček      */
isBinary()189b5840353SAdam Hornáček     public boolean isBinary() {
190b5840353SAdam Hornáček         return this.binary;
191b5840353SAdam Hornáček     }
192b5840353SAdam Hornáček 
193b5840353SAdam Hornáček     /**
194b5840353SAdam Hornáček      * Setter for property binary.
195b5840353SAdam Hornáček      *
196b5840353SAdam Hornáček      * @param binary New value of property binary.
197b5840353SAdam Hornáček      */
setBinary(boolean binary)198b5840353SAdam Hornáček     public void setBinary(boolean binary) {
199b5840353SAdam Hornáček         this.binary = binary;
200b5840353SAdam Hornáček     }
201b5840353SAdam Hornáček 
202b5840353SAdam Hornáček     /**
203b5840353SAdam Hornáček      * Holds value of property tag.
204b5840353SAdam Hornáček      */
205b5840353SAdam Hornáček     private String tag;
206b5840353SAdam Hornáček 
207b5840353SAdam Hornáček     /**
208b5840353SAdam Hornáček      * Getter for property tag.
209b5840353SAdam Hornáček      * @return Value of property tag.
210b5840353SAdam Hornáček      */
getTag()211b5840353SAdam Hornáček     public String getTag() {
212b5840353SAdam Hornáček 
213b5840353SAdam Hornáček         return this.tag;
214b5840353SAdam Hornáček     }
215b5840353SAdam Hornáček 
216b5840353SAdam Hornáček     /**
217b5840353SAdam Hornáček      * Setter for property tag.
218b5840353SAdam Hornáček      * @param tag New value of property tag.
219b5840353SAdam Hornáček      */
setTag(String tag)220b5840353SAdam Hornáček     public void setTag(String tag) {
221b5840353SAdam Hornáček 
222b5840353SAdam Hornáček         this.tag = tag;
223b5840353SAdam Hornáček     }
224b5840353SAdam Hornáček 
225b5840353SAdam Hornáček     /**
226b5840353SAdam Hornáček      * Should this be alternate file?
227b5840353SAdam Hornáček      * @return true if this is the "alternate" file
228b5840353SAdam Hornáček      */
getAlt()229b5840353SAdam Hornáček     public boolean getAlt() {
230b5840353SAdam Hornáček         return alt;
231b5840353SAdam Hornáček     }
232b5840353SAdam Hornáček 
233b5840353SAdam Hornáček     /**
234b5840353SAdam Hornáček      * Check if two objects are equal. Only consider the {@code filename} field
235b5840353SAdam Hornáček      * to match the return value of the {@link #compareTo(Hit)} method.
236b5840353SAdam Hornáček      * @param o the object to compare with
237b5840353SAdam Hornáček      * @return true if the filenames are equal
238b5840353SAdam Hornáček      */
239b5840353SAdam Hornáček     @Override
equals(Object o)240b5840353SAdam Hornáček     public boolean equals(Object o) {
241b5840353SAdam Hornáček         if (o instanceof Hit) {
242b5840353SAdam Hornáček             return compareTo((Hit) o) == 0;
243b5840353SAdam Hornáček         }
244b5840353SAdam Hornáček         return false;
245b5840353SAdam Hornáček     }
246b5840353SAdam Hornáček 
247b5840353SAdam Hornáček     @Override
hashCode()248b5840353SAdam Hornáček     public int hashCode() {
249b5840353SAdam Hornáček         return filename.hashCode();
250b5840353SAdam Hornáček     }
251b5840353SAdam Hornáček }
252