[OLINGO-1417]Serach query to support +
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
index 6a40e00..f89eca0 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
@@ -54,9 +54,6 @@
protected static final char CHAR_R = 'R';
protected static final char CHAR_CLOSE = ')';
protected static final char CHAR_OPEN = '(';
- protected static final char CHAR_COMMA = ',';
- protected static final char CHAR_DOT = '.';
- protected static final char CHAR_HYPEN = '-';
public State() {}
@@ -123,10 +120,8 @@
static boolean isAllowedWord(final char character) {
return Character.isUnicodeIdentifierStart(character)
- || Character.DASH_PUNCTUATION == Character.getType(character)
- || Character.DECIMAL_DIGIT_NUMBER == Character.getType(character)
- || (Character.OTHER_PUNCTUATION == Character.getType(character) &&
- (character != ';' && character != '"'));
+ || isUnreserved(character)
+ || isOtherDelimsForWord(character);
}
/**
@@ -207,6 +202,26 @@
}
/**
+ * other-delims = "!" / "(" / ")" / "*" / "+" / "," / ";"
+ * @param character which is checked
+ * @return true if character is allowed
+ */
+ private static boolean isOtherDelimsForWord(final char character) {
+ return character == '!'
+ || character == '*'
+ || character == '+'
+ || character == ','
+ || character == ':'
+ || character == '@'
+ || character == '/'
+ || character == '?'
+ || character == '$'
+ || character == '='
+ || character == '%'
+ || character == '\'';
+ }
+
+ /**
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* @param character which is checked
* @return true if character is allowed
@@ -352,11 +367,7 @@
@Override
public State nextChar(final char c) throws SearchTokenizerException {
- if (isAllowedWord(c) ||
- ('0' <= c && c <= '9') ||
- (c == CHAR_COMMA) ||
- (c == CHAR_DOT) ||
- (c == CHAR_HYPEN)) {
+ if (isAllowedWord(c)) {
return allowed(c);
} else if (c == CHAR_CLOSE) {
finish();
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
index 216323d..47ac334 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
@@ -45,6 +45,7 @@
@Test
public void parseWords() throws Exception {
+ assertQuery("C++%20=$@:,*!/?'%27").resultsIn(WORD);
assertQuery("somesimpleword").resultsIn(WORD);
assertQuery("anotherWord\u1234").resultsIn(WORD);
// special