diff options
4 files changed, 74 insertions, 30 deletions
diff --git a/plugins/org.eclipse.osee.framework.search.engine.test/src/org/eclipse/osee/framework/search/engine/test/utility/WordOrderMatcherTest.java b/plugins/org.eclipse.osee.framework.search.engine.test/src/org/eclipse/osee/framework/search/engine/test/utility/WordOrderMatcherTest.java index 05535bbd8ca..7050d46a614 100644 --- a/plugins/org.eclipse.osee.framework.search.engine.test/src/org/eclipse/osee/framework/search/engine/test/utility/WordOrderMatcherTest.java +++ b/plugins/org.eclipse.osee.framework.search.engine.test/src/org/eclipse/osee/framework/search/engine/test/utility/WordOrderMatcherTest.java @@ -63,6 +63,16 @@ public class WordOrderMatcherTest { addTest(data, "Why is this here this again.", "THIS", false, true, getLocs(8, 11, 18, 21)); addTest(data, "hello #@!@$$%'- again.", "hello again", false, false, getLocs(1, 21)); addTest(data, "hello word again.", "hello again", false, false, getLocs()); + addTest(data, " (Selected) -> [.SELECTED_STRING_ID] Selected -> ", "SELECTED_STRING_ID", false, false, + getLocs(18, 35)); + addTest(data, " (Selected) -> [.SELECTED_STRING_ID] Selected -> ", "SELECTED_STRING_ID", true, false, + getLocs(18, 35)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_ID_TWO] Selected -> ", + "SELECTED_STRING_ID", true, false, getLocs(41, 58)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_ID_TWO] Selected -> ", + "SELECTED_STRING_ID", false, false, getLocs(41, 58)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_\nID_TWO] Selected -> ", + "SELECTED_STRING_ID", false, false, getLocs(41, 59)); return data; } diff --git a/plugins/org.eclipse.osee.framework.search.engine/src/org/eclipse/osee/framework/search/engine/utility/WordOrderMatcher.java b/plugins/org.eclipse.osee.framework.search.engine/src/org/eclipse/osee/framework/search/engine/utility/WordOrderMatcher.java index dcf2b028298..378f52f47ba 100644 --- a/plugins/org.eclipse.osee.framework.search.engine/src/org/eclipse/osee/framework/search/engine/utility/WordOrderMatcher.java +++ b/plugins/org.eclipse.osee.framework.search.engine/src/org/eclipse/osee/framework/search/engine/utility/WordOrderMatcher.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.framework.search.engine.utility; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -36,7 +37,9 @@ public final class WordOrderMatcher { List<MatchLocation> matchLocations = new ArrayList<MatchLocation>(); Reader reader = null; try { - reader = new InputStreamReader(inputStream, "UTF-8"); + boolean matchedAWhitespace = false; + int savedCharCount = 0; + reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); boolean isCaseInsensitive = !options.isCaseSensitive(); char[] charsToSearch = WordsUtil.removeExtraSpacesAndSpecialCharacters(toSearch, isCaseInsensitive); int charCount = 0; @@ -45,6 +48,7 @@ public final class WordOrderMatcher { boolean lastCharacterAddedWasWhiteSpace = false; boolean currCharValid = false; MatchLocation matchLocation = new MatchLocation(); + reader.mark(charsToSearch.length); while (value != -1) { value = reader.read(); charCount++; @@ -53,31 +57,39 @@ public final class WordOrderMatcher { currChar = Character.toLowerCase(currChar); } - if (currChar != '\r' && currChar != '\n') { - if (WordsUtil.isPunctuationOrApostrophe(currChar)) { - currChar = ' '; - } + if (WordsUtil.isPunctuationOrApostrophe(currChar)) { + currChar = ' '; + } - if (Character.isWhitespace(currChar)) { - if (!lastCharacterAddedWasWhiteSpace) { - currCharValid = true; - lastCharacterAddedWasWhiteSpace = true; - } else { - currCharValid = false; - } - } else { + if (Character.isWhitespace(currChar)) { + reader.mark(toSearch.length()); + savedCharCount = charCount; + if (!lastCharacterAddedWasWhiteSpace) { currCharValid = true; - lastCharacterAddedWasWhiteSpace = false; + lastCharacterAddedWasWhiteSpace = true; + } else { + currCharValid = false; } + } else { + currCharValid = true; + lastCharacterAddedWasWhiteSpace = false; } if (currCharValid) { if (charsToSearch[index] != currChar) { - index = 0; matchLocation.reset(); + if (matchedAWhitespace) { + reader.reset(); + charCount = savedCharCount; + } + index = 0; + matchedAWhitespace = false; } if (charsToSearch[index] == currChar) { + if (currChar == ' ' && index > 0) { + matchedAWhitespace = true; + } if (index == 0) { matchLocation.setStartPosition(charCount); } diff --git a/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcherTest.java b/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcherTest.java index fcc303aa904..8e6c80667d3 100644 --- a/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcherTest.java +++ b/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcherTest.java @@ -66,6 +66,16 @@ public class WordOrderMatcherTest { addTest(data, "Why is this here this again.", "THIS", CaseType.IGNORE_CASE, true, getLocs(8, 11, 18, 21)); addTest(data, "hello #@!@$$%'- again.", "hello again", CaseType.IGNORE_CASE, false, getLocs(1, 21)); addTest(data, "hello word again.", "hello again", CaseType.IGNORE_CASE, false, getLocs()); + addTest(data, " (Selected) -> [.SELECTED_STRING_ID] Selected -> ", "SELECTED_STRING_ID", + CaseType.IGNORE_CASE, false, getLocs(18, 35)); + addTest(data, " (Selected) -> [.SELECTED_STRING_ID] Selected -> ", "SELECTED_STRING_ID", + CaseType.MATCH_CASE, false, getLocs(18, 35)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_ID_TWO] Selected -> ", + "SELECTED_STRING_ID", CaseType.MATCH_CASE, false, getLocs(41, 58)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_ID_TWO] Selected -> ", + "SELECTED_STRING_ID", CaseType.IGNORE_CASE, false, getLocs(41, 58)); + addTest(data, " (Selected) -> [.SELECTED_STRING_IWRONG SELECTED_STRING_\nID_TWO] Selected -> ", + "SELECTED_STRING_ID", CaseType.IGNORE_CASE, false, getLocs(41, 59)); return data; } diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcher.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcher.java index b459766c671..d8c372298dc 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcher.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/WordOrderMatcher.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.orcs.db.internal.search.util; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -36,7 +37,9 @@ public final class WordOrderMatcher { List<MatchLocation> matchLocations = new ArrayList<MatchLocation>(); Reader reader = null; try { - reader = new InputStreamReader(inputStream, "UTF-8"); + boolean matchedAWhitespace = false; + int savedCharCount = 0; + reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); boolean isCaseInsensitive = !caseType.isCaseSensitive(); char[] charsToSearch = WordsUtil.removeExtraSpacesAndSpecialCharacters(toSearch, isCaseInsensitive); int charCount = 0; @@ -45,6 +48,7 @@ public final class WordOrderMatcher { boolean lastCharacterAddedWasWhiteSpace = false; boolean currCharValid = false; MatchLocation matchLocation = new MatchLocation(); + reader.mark(charsToSearch.length); while (value != -1) { value = reader.read(); charCount++; @@ -53,31 +57,39 @@ public final class WordOrderMatcher { currChar = Character.toLowerCase(currChar); } - if (currChar != '\r' && currChar != '\n') { - if (WordsUtil.isPunctuationOrApostrophe(currChar)) { - currChar = ' '; - } + if (WordsUtil.isPunctuationOrApostrophe(currChar)) { + currChar = ' '; + } - if (Character.isWhitespace(currChar)) { - if (!lastCharacterAddedWasWhiteSpace) { - currCharValid = true; - lastCharacterAddedWasWhiteSpace = true; - } else { - currCharValid = false; - } - } else { + if (Character.isWhitespace(currChar)) { + reader.mark(toSearch.length()); + savedCharCount = charCount; + if (!lastCharacterAddedWasWhiteSpace) { currCharValid = true; - lastCharacterAddedWasWhiteSpace = false; + lastCharacterAddedWasWhiteSpace = true; + } else { + currCharValid = false; } + } else { + currCharValid = true; + lastCharacterAddedWasWhiteSpace = false; } if (currCharValid) { if (charsToSearch[index] != currChar) { - index = 0; matchLocation.reset(); + if (matchedAWhitespace) { + reader.reset(); + charCount = savedCharCount; + } + index = 0; + matchedAWhitespace = false; } if (charsToSearch[index] == currChar) { + if (currChar == ' ' && index > 0) { + matchedAWhitespace = true; + } if (index == 0) { matchLocation.setStartPosition(charCount); } |