/******************************************************************************* * Copyright (c) 2011 GitHub Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Kevin Sawicki (GitHub Inc.) - initial API and implementation *******************************************************************************/ package org.eclipse.egit.ui.internal.search; import java.util.LinkedList; import java.util.List; import org.eclipse.jface.dialogs.IDialogSettings; /** * Class to hold settings used to search commits. */ public class CommitSearchSettings { private static final String SEARCH_SECTION = "searchSection"; //$NON-NLS-1$ private static final String TEXT_PATTERN = "textPattern"; //$NON-NLS-1$ private static final String REGEX_SEARCH = "regexSearch"; //$NON-NLS-1$ private static final String IGNORE_CASE = "ignoreCase"; //$NON-NLS-1$ private static final String MATCH_AUTHOR = "matchAuthor"; //$NON-NLS-1$ private static final String MATCH_COMMITTER = "matchCommitter"; //$NON-NLS-1$ private static final String MATCH_MESSAGE = "matchMessage"; //$NON-NLS-1$ private static final String MATCH_COMMIT = "matchCommit"; //$NON-NLS-1$ private static final String MATCH_PARENTS = "matchParents"; //$NON-NLS-1$ private static final String MATCH_TREE = "matchTree"; //$NON-NLS-1$ private static final String ALL_BRANCHES = "allBranches"; //$NON-NLS-1$ private static final String REPOSITORY_COUNT = "repositoryCount"; //$NON-NLS-1$ private static final String REPOSITORY = "repository"; //$NON-NLS-1$ /** * Create search settings from dialog settings * * @param settings * @return search settings */ public static CommitSearchSettings create(IDialogSettings settings) { IDialogSettings section = settings.getSection(SEARCH_SECTION); CommitSearchSettings searchSettings = new CommitSearchSettings(); if (section != null) { searchSettings.setTextPattern(section.get(TEXT_PATTERN)); searchSettings.setRegExSearch(section.getBoolean(REGEX_SEARCH)); searchSettings.setCaseSensitive(!section.getBoolean(IGNORE_CASE)); searchSettings.setMatchAuthor(section.getBoolean(MATCH_AUTHOR)); searchSettings.setMatchCommitter(section .getBoolean(MATCH_COMMITTER)); searchSettings.setMatchMessage(section.getBoolean(MATCH_MESSAGE)); searchSettings.setMatchCommit(section.getBoolean(MATCH_COMMIT)); searchSettings.setMatchParents(section.getBoolean(MATCH_PARENTS)); searchSettings.setMatchTree(section.getBoolean(MATCH_TREE)); searchSettings.setAllBranches(section.getBoolean(ALL_BRANCHES)); try { int count = section.getInt(REPOSITORY_COUNT); for (int i = 0; i < count; i++) searchSettings.addRepository(section.get(REPOSITORY + i)); } catch (NumberFormatException ignored) { // Ignored } } return searchSettings; } private boolean isMatchCommit = true; private boolean isMatchCommitter = true; private boolean isMatchAuthor = true; private boolean isMatchTree = true; private boolean isMatchMessage = true; private boolean isMatchParents = true; private boolean isCaseSensitive = false; private boolean isRegExSearch = false; private boolean isAllBranches = false; private String textPattern = null; private List<String> repositories = new LinkedList<>(); /** * Store search settings in dialog settings * * @param settings */ public void store(IDialogSettings settings) { IDialogSettings section = settings.getSection(SEARCH_SECTION); if (section == null) section = settings.addNewSection(SEARCH_SECTION); section.put(IGNORE_CASE, !isCaseSensitive); section.put(REGEX_SEARCH, isRegExSearch); section.put(TEXT_PATTERN, textPattern); section.put(MATCH_AUTHOR, isMatchAuthor); section.put(MATCH_COMMIT, isMatchCommit); section.put(MATCH_COMMITTER, isMatchCommitter); section.put(MATCH_MESSAGE, isMatchMessage); section.put(MATCH_PARENTS, isMatchParents); section.put(MATCH_TREE, isMatchTree); section.put(ALL_BRANCHES, isAllBranches); int count = 0; for (String repo : this.repositories) { section.put(REPOSITORY + count, repo); count++; } section.put(REPOSITORY_COUNT, this.repositories.size()); } /** @param path */ public void addRepository(String path) { this.repositories.add(path); } /** @return list of repository paths */ public List<String> getRepositories() { return this.repositories; } /** @return isMatchCommit */ public boolean isMatchCommit() { return this.isMatchCommit; } /** @param isMatchCommit */ public void setMatchCommit(boolean isMatchCommit) { this.isMatchCommit = isMatchCommit; } /** @return isMatchCommitter */ public boolean isMatchCommitter() { return this.isMatchCommitter; } /** @param isMatchCommitter */ public void setMatchCommitter(boolean isMatchCommitter) { this.isMatchCommitter = isMatchCommitter; } /** @return isMatchAuthor */ public boolean isMatchAuthor() { return this.isMatchAuthor; } /** @param isMatchAuthor */ public void setMatchAuthor(boolean isMatchAuthor) { this.isMatchAuthor = isMatchAuthor; } /** @return isMatchTree */ public boolean isMatchTree() { return this.isMatchTree; } /** @param isMatchTree */ public void setMatchTree(boolean isMatchTree) { this.isMatchTree = isMatchTree; } /** @return isMatchMessage */ public boolean isMatchMessage() { return this.isMatchMessage; } /** @param isMatchMessage */ public void setMatchMessage(boolean isMatchMessage) { this.isMatchMessage = isMatchMessage; } /** @return isMatchParents */ public boolean isMatchParents() { return this.isMatchParents; } /** @param isMatchParents */ public void setMatchParents(boolean isMatchParents) { this.isMatchParents = isMatchParents; } /** @return isCaseSensitive */ public boolean isCaseSensitive() { return this.isCaseSensitive; } /** @param isCaseSensitive */ public void setCaseSensitive(boolean isCaseSensitive) { this.isCaseSensitive = isCaseSensitive; } /** @return isRegExSearch */ public boolean isRegExSearch() { return this.isRegExSearch; } /** @param isRegExSearch */ public void setRegExSearch(boolean isRegExSearch) { this.isRegExSearch = isRegExSearch; } /** @return textPattern */ public String getTextPattern() { return this.textPattern; } /** @param textPattern */ public void setTextPattern(String textPattern) { this.textPattern = textPattern; } /** @return isAllBranches */ public boolean isAllBranches() { return this.isAllBranches; } /** @param isAllBranches */ public void setAllBranches(boolean isAllBranches) { this.isAllBranches = isAllBranches; } }