package org.jabref.model.groups; import java.util.Objects; import org.jabref.model.entry.BibEntry; import org.jabref.model.search.GroupSearchQuery; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * This group matches entries by a complex search pattern, which might include conditions about the values of * multiple fields. */ public class SearchGroup extends AbstractGroup { private static final Log LOGGER = LogFactory.getLog(SearchGroup.class); private final GroupSearchQuery query; public SearchGroup(String name, GroupHierarchyType context, String searchExpression, boolean caseSensitive, boolean isRegEx) { super(name, context); this.query = new GroupSearchQuery(searchExpression, caseSensitive, isRegEx); } public String getSearchExpression() { return query.getSearchExpression(); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof SearchGroup)) { return false; } SearchGroup other = (SearchGroup) o; return getName().equals(other.getName()) && getSearchExpression().equals(other.getSearchExpression()) && (isCaseSensitive() == other.isCaseSensitive()) && (isRegularExpression() == other.isRegularExpression()) && (getHierarchicalContext() == other.getHierarchicalContext()); } @Override public boolean contains(BibEntry entry) { return query.isMatch(entry); } @Override public AbstractGroup deepCopy() { try { return new SearchGroup(getName(), getHierarchicalContext(), getSearchExpression(), isCaseSensitive(), isRegularExpression()); } catch (Throwable t) { // this should never happen, because the constructor obviously // succeeded in creating _this_ instance! LOGGER.error("Internal error in SearchGroup.deepCopy(). " + "Please report this on https://github.com/JabRef/jabref/issues", t); return null; } } public boolean isCaseSensitive() { return query.isCaseSensitive(); } public boolean isRegularExpression() { return query.isRegularExpression(); } @Override public boolean isDynamic() { return true; } @Override public int hashCode() { return Objects.hash(getName(), getHierarchicalContext(), getSearchExpression(), isCaseSensitive(), isRegularExpression()); } }