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