/*
 * 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 java.util.Date;
import java.util.List;

/**
 * A list of keywords for which to search. Includes list creation and
 * modification metadata and settings that determine how the list is to be used
 * when ingesting a data source. Standard lists provided by Autopsy may be
 * marked as not editable.
 */
public class KeywordList {

    private String name;
    private Date created;
    private Date modified;
    private Boolean useForIngest;
    private Boolean postIngestMessages;
    private List<Keyword> keywords;
    private Boolean isEditable;

    /**
     * Constructs a list of keywords for which to search. Includes list creation
     * and modification metadata and settings that determine how the list is to
     * be used when ingesting a data source. Standard lists provided by Autopsy
     * may be marked as not editable.
     *
     * @param name               The name to asociate with the list.
     * @param created            When the list was created.
     * @param modified           When the list was last modified.
     * @param useForIngest       Whether or not the list is to be used when
     *                           ingesting a data source.
     * @param postIngestMessages Whether or not to post ingest inbox messages
     *                           when a keyword within the list is found while
     *                           ingesting a data source.
     * @param keywords           The keywords that make up the list.
     * @param isEditable         Whether or not the list may be edited by a
     *                           user; standard lists provided by Autopsy should
     *                           not be edited.
     */
    KeywordList(String name, Date created, Date modified, Boolean useForIngest, Boolean postIngestMessages, List<Keyword> keywords, boolean isEditable) {
        this.name = name;
        this.created = created;
        this.modified = modified;
        this.useForIngest = useForIngest;
        this.postIngestMessages = postIngestMessages;
        this.keywords = keywords;
        this.isEditable = isEditable;
    }

    /**
     * Constructs a list of keywords for which to search. Includes list creation
     * and modification metadata and settings that determine how the list is to
     * be used when ingesting a data source. The list will be marked as a
     * standard lists provided by Autopsy that should not be treated as
     * editable.
     *
     * @param name               The name to asociate with the list.
     * @param created            When the list was created.
     * @param modified           When the list was last modified.
     * @param useForIngest       Whether or not the list is to be used when
     *                           ingesting a data source.
     * @param postIngestMessages Whether or not to post ingest inbox messages
     *                           when a keyword within the list is found while
     *                           ingesting a data source.
     * @param keywords           The keywords that make up the list.
     */
    KeywordList(String name, Date created, Date modified, Boolean useForIngest, Boolean ingestMessages, List<Keyword> keywords) {
        this(name, created, modified, useForIngest, ingestMessages, keywords, false);
    }

    /**
     * Constructs a temporary list of keywords to be used for ad hoc keyword
     * search and then discarded.
     *
     * @param keywords
     */
    KeywordList(List<Keyword> keywords) {
        this("", new Date(0), new Date(0), false, false, keywords, false);
    }

    /**
     * Get the name assigned to the keyword list.
     *
     * @return The list name.
     */
    String getName() {
        return name;
    }

    /**
     * Gets the date the keyword list was created.
     *
     * @return The date.
     */
    Date getDateCreated() {
        return created;
    }

    /**
     * Gets the date the keyword list was last modified.
     *
     * @return The date.
     */
    Date getDateModified() {
        return modified;
    }

    /**
     * Gets whether or not the list should be used when ingesting a data source.
     *
     * @return True or false.
     */
    Boolean getUseForIngest() {
        return useForIngest;
    }

    /**
     * Sets whether or not the list should be used when ingesting a data source.
     *
     * @param useForIngest True or false.
     */
    void setUseForIngest(boolean useForIngest) {
        this.useForIngest = useForIngest;
    }

    /**
     * Gets whether or not to post ingest inbox messages when a keyword within
     * the list is found while ingesting a data source.
     *
     * @return true or false
     */
    Boolean getIngestMessages() {
        return postIngestMessages;
    }

    /**
     * Sets whether or not to post ingest inbox messages when a keyword within
     * the list is found while ingesting a data source.
     *
     * @param postIngestMessages True or false.
     */
    void setIngestMessages(boolean postIngestMessages) {
        this.postIngestMessages = postIngestMessages;
    }

    /**
     * Gets the keywords included in the list
     *
     * @return A colleciton of Keyword objects.
     */
    List<Keyword> getKeywords() {
        return keywords;
    }

    /**
     * Indicates whether or not a given keyword is included in the list.
     *
     * @param keyword The keyword of interest.
     *
     * @return
     */
    boolean hasKeyword(Keyword keyword) {
        return keywords.contains(keyword);
    }

    /**
     * Indicates whether or not a given search term is included in the list.
     *
     * @param searchTerm The search term.
     *
     * @return True or false.
     */
    boolean hasSearchTerm(String searchTerm) {
        for (Keyword word : keywords) {
            if (word.getSearchTerm().equals(searchTerm)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Indicates Whether or not the list should be editable by a user; standard
     * lists provided by Autopsy should be marked as not editable when they are
     * contructed.
     *
     * @return True or false.
     */
    Boolean isEditable() {
        return isEditable;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final KeywordList other = (KeywordList) obj;
        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        return hash;
    }

}

@@ -6942,502 +6942,6 @@
  %7D%0A%0A
-    @Override%0A    public boolean equals(Object obj) %7B%0A        if (obj == null) %7B%0A            return false;%0A        %7D%0A        if (getClass() != obj.getClass()) %7B%0A            return false;%0A        %7D%0A        final KeywordList other = (KeywordList) obj;%0A        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) %7B%0A            return false;%0A        %7D%0A        return true;%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        int hash = 5;%0A        return hash;%0A    %7D%0A%0A
 %7D%0A

Remove incorrect but unused equals and hashCode methods from KeywordList