/*
* Autopsy Forensic Browser
*
* Copyright 2011-2016 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.keywordsearch;
import org.openide.util.NbBundle;
import org.sleuthkit.datamodel.BlackboardAttribute;
/**
* A representation of a keyword for which to search. The search term for the
* keyword may be either a literal term, to be treated as either a whole word or
* a substring, or a regex.
*
* It is currently possible to optionally associate an artifact attribute type
* with a keyword. This feature was added to support an initial implementation
* of account number search and may be removed in the future.
*/
class Keyword {
private String searchTerm;
private boolean isLiteral;
private boolean isWholeWord;
private BlackboardAttribute.ATTRIBUTE_TYPE artifactAtrributeType;
/**
* Constructs a representation of a keyword for which to search. The search
* term for the keyword may be either a literal term that will be treated as
* a whole word, or a regex.
*
* @param searchTerm The search term for the keyword.
* @param isLiteral Whether or not the search term is a literal term that
* will be treated as a whole word, instead of a regex.
*/
Keyword(String searchTerm, boolean isLiteral) {
this.searchTerm = searchTerm;
this.isLiteral = isLiteral;
this.isWholeWord = true;
}
/**
* Constructs a representation of a keyword for which to search. The search
* term may be either a literal term, to be treated as either a whole word
* or as a substring, or a regex.
*
* @param searchTerm The search term.
* @param isLiteral Whether or not the search term is a literal term,
* instead of a regex.
* @param isWholeWord Whether or not the search term, if it is a literal
* search term, should be treated as a whole word rather
* than a substring.
*/
Keyword(String searchTerm, boolean isLiteral, boolean isWholeWord) {
this.searchTerm = searchTerm;
this.isLiteral = isLiteral;
this.isWholeWord = isWholeWord;
}
/**
* Constructs a representation of a keyword for which to search, for the
* purpose of finding a specific artifact attribute. The search term may be
* either a literal term, to be treated as a whole word, or a regex.
*
* The association of an artifact attribute type with a keyword was added to
* support an initial implementation of account number search and may be
* removed in the future.
*
* @param searchTerm The search term.
* @param isLiteral Whether or not the search term is a literal term, to
* be treated as a whole word, instead of a regex.
* @param keywordType The artifact attribute type.
*/
Keyword(String searchTerm, boolean isLiteral, BlackboardAttribute.ATTRIBUTE_TYPE artifactAtrributeType) {
this(searchTerm, isLiteral);
this.artifactAtrributeType = artifactAtrributeType;
}
/**
* Gets the search term for the keyword, which may be either a literal term
* or a regex.
*
* @return The search term.
*/
String getSearchTerm() {
return searchTerm;
}
/**
* Indicates whether the search term for the keyword is a literal term or a
* regex.
*
* @return True or false.
*/
boolean searchTermIsLiteral() {
return isLiteral;
}
/**
* Indicates whether or not the search term for the keyword, if it is a
* literal term and not a regex, will be treated as a whole word or as a
* substring.
*
* @return True or false.
*/
boolean searchTermIsWholeWord() {
return isWholeWord;
}
String getSearchTermType() {
if (isLiteral) {
if (isWholeWord) {
return NbBundle.getMessage(NewKeywordPanel.class, "NewKeywordPanel.exactButton.text");
} else {
return NbBundle.getMessage(NewKeywordPanel.class, "NewKeywordPanel.substringButton.text");
}
} else {
return NbBundle.getMessage(NewKeywordPanel.class, "NewKeywordPanel.regexButton.text");
}
}
/**
* Sets the artifact attribute type associated with the keyword, if any.
*
* The association of an artifact attribute type with the keyword was added
* to support an initial implementation of account number search and may be
* removed in the future.
*
* @param artifactAtrributeType
*/
void setArtifactAttributeType(BlackboardAttribute.ATTRIBUTE_TYPE artifactAtrributeType) {
this.artifactAtrributeType = artifactAtrributeType;
}
/**
* Gets the artifact attribute type associated with the keyword, if any.
*
* The association of an artifact attribute type with the keyword was added
* to support an initial implementation of account number search and may be
* removed in the future.
*
* @return A attribute type object or null.
*/
BlackboardAttribute.ATTRIBUTE_TYPE getArtifactAttributeType() {
return this.artifactAtrributeType;
}
@Override
public String toString() {
return String.format("Keyword{searchTerm='%s', isLiteral=%s, isWholeWord=%s}", searchTerm, isLiteral, isWholeWord);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Keyword other = (Keyword) obj;
return (this.searchTerm.equals(other.getSearchTerm())
&& this.isLiteral == other.searchTermIsLiteral()
&& this.isWholeWord == other.searchTermIsWholeWord());
}
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + this.searchTerm.hashCode();
hash = 17 * hash + (this.isLiteral ? 1 : 0);
hash = 17 * hash + (this.isWholeWord ? 1 : 0);
return hash;
}
}