From eb32eccea9966d0dc94c3e8167e04c4245fde827 Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 17:57:23 -0500
Subject: [PATCH 01/10] Remove String utilities in favor of those defined in
accent4j (#356)
* Replace Strings utils in favor of those from accent4j
- Remove Strings.java
- Remove StringSplitter framework
These two things were redefined in accent4j, so we're now using thosr
* add notes to unit tests
* update changelog
* Fix formatting
* rename StringsTest to AnyStringsTest
* Add deleted classes back
* fix formatting
* fix failing unit test
* javadoc comment
---
CHANGELOG.md | 2 +
build.gradle | 2 +-
.../java/com/cinchapi/concourse/Link.java | 4 +-
.../com/cinchapi/concourse/lang/Language.java | 6 +-
.../com/cinchapi/concourse/util/Convert.java | 20 +-
.../util/QuoteAwareStringSplitter.java | 3 +
.../cinchapi/concourse/util/SplitOption.java | 1 +
.../concourse/util/StringSplitter.java | 2 +
.../com/cinchapi/concourse/util/Strings.java | 367 ++----------------
.../{StringsTest.java => AnyStringsTest.java} | 129 +++---
.../cinchapi/concourse/util/ConvertTest.java | 9 +-
.../util/QuoteAwareStringSplitterTest.java | 199 ----------
.../util/StringSplitterPerformanceTest.java | 9 +-
.../concourse/util/StringSplitterTest.java | 15 +-
.../server/ManagedConcourseServer.java | 4 +-
.../concourse/importer/LineBasedImporter.java | 12 +-
.../concourse/importer/cli/ImportCli.java | 10 +-
.../com/cinchapi/concourse/InsertTest.java | 4 +-
.../concourse/importer/ResolveKeyTest.java | 4 +-
.../concourse/shell/ConcourseShellTest.java | 4 +-
.../server/plugin/io/MessageQueue.java | 6 +-
.../server/plugin/io/SharedMemory.java | 4 +-
.../server/plugin/util/Versions.java | 4 +-
.../server/plugin/util/VersionsTest.java | 10 +-
.../concourse/server/ConcourseServer.java | 17 +-
.../server/cli/plugin/InstallPluginCli.java | 21 +-
.../server/http/EndpointContainer.java | 14 +-
.../concourse/server/http/RoutingKey.java | 6 +-
.../http/webserver/ConcourseHttpHandler.java | 4 +-
.../concourse/server/ops/Operations.java | 2 +-
.../server/plugin/PluginManager.java | 6 +-
.../concourse/server/storage/Engine.java | 4 +-
.../concourse/server/storage/Stores.java | 4 +-
.../com/cinchapi/concourse/util/Commands.java | 2 +
.../com/cinchapi/concourse/util/TStrings.java | 4 +-
.../server/http/EndpointContainerTest.java | 4 +-
.../cinchapi/concourse/util/TMapsTest.java | 7 +-
.../concourse/shell/ConcourseShell.java | 4 +-
38 files changed, 219 insertions(+), 710 deletions(-)
rename concourse-driver-java/src/test/java/com/cinchapi/concourse/util/{StringsTest.java => AnyStringsTest.java} (68%)
delete mode 100644 concourse-driver-java/src/test/java/com/cinchapi/concourse/util/QuoteAwareStringSplitterTest.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 990599b219..c45c09f976 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,8 @@
* Added the `com.cinchapi.concourse.etl` package that contains data processing utilities:
* A `Strainer` can be used to process a `Map` using Concourse's data model rules. In particular, the `Strainer` encapsulates logic to break down top-level sequence values and process their elements individually.
* The `Transform` class contains functions for common data transformations.
+* Removed the `Strings` utility class in favor of `AnyStrings` from `accent4j`.
+* Removed the `StringSplitter` framework in favor of the same from `accent4j`.
#### Version 0.9.6 (TBD)
* Fixed a bug that caused a `ParseException` to be thrown when trying to use a `Criteria` object containing a string value wrapped in single or double quotes out of necessity (i.e. because the value contained a keyword). This bug happened because the wrapping quotes were dropped by Concourse Server when parsing the `Criteria`.
diff --git a/build.gradle b/build.gradle
index aae860a0dd..1da84dc0d0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -109,7 +109,7 @@ subprojects {
compile 'joda-time:joda-time:2.2'
compile 'org.apache.thrift:libthrift:0.9.3'
compile 'commons-configuration:commons-configuration:1.9'
- compile group: 'com.cinchapi', name: 'accent4j', version: '1.5.2', changing:true
+ compile group: 'com.cinchapi', name: 'accent4j', version: '1.5.3', changing:true
compile 'com.cinchapi:lib-config:1.3.1'
testCompile 'junit:junit:4.11'
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
index 78912c9ed5..3bdf08261e 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
@@ -17,10 +17,10 @@
import javax.annotation.concurrent.Immutable;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.lang.BuildableState;
import com.cinchapi.concourse.lang.Criteria;
import com.cinchapi.concourse.util.Convert;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.base.Preconditions;
import com.google.common.primitives.Longs;
import com.google.common.primitives.UnsignedLongs;
@@ -141,7 +141,7 @@ public static String toWhere(Criteria criteria) {
*/
public static String toWhere(Object criteria) {
Preconditions.checkArgument(criteria instanceof BuildableState,
- Strings.format("{} is not a valid criteria", criteria));
+ AnyStrings.format("{} is not a valid criteria", criteria));
return toWhere(((BuildableState) criteria).build());
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
index b1624eab63..fc41344e3d 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
@@ -25,11 +25,11 @@
import com.cinchapi.ccl.grammar.Symbol;
import com.cinchapi.ccl.grammar.TimestampSymbol;
import com.cinchapi.ccl.grammar.ValueSymbol;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.thrift.TCriteria;
import com.cinchapi.concourse.thrift.TSymbol;
import com.cinchapi.concourse.thrift.TSymbolType;
import com.cinchapi.concourse.util.Convert;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.collect.Lists;
/**
@@ -55,12 +55,12 @@ else if(tsymbol.getType() == TSymbolType.KEY) {
else if(tsymbol.getType() == TSymbolType.VALUE) {
Object symbol = Convert.stringToJava(tsymbol.getSymbol());
if(symbol instanceof String && !symbol.equals(tsymbol.getSymbol())
- && Strings.isWithinQuotes(tsymbol.getSymbol())) {
+ && AnyStrings.isWithinQuotes(tsymbol.getSymbol())) {
// CON-634: This is an obscure corner case where the surrounding
// quotes on the original tsymbol were necessary to escape a
// keyword, but got dropped because of the logic in
// Convert#stringToJava
- symbol = Strings.ensureWithinQuotes(symbol.toString());
+ symbol = AnyStrings.ensureWithinQuotes(symbol.toString());
}
return new ValueSymbol(symbol);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Convert.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Convert.java
index 67c1a079ee..24902fab8c 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Convert.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Convert.java
@@ -33,6 +33,7 @@
import org.joda.time.format.DateTimeFormatter;
import com.cinchapi.ccl.util.NaturalLanguage;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.Concourse;
import com.cinchapi.concourse.Link;
@@ -142,6 +143,11 @@ public final class Convert {
private static final Pattern STRING_RESOLVABLE_LINK_REGEX = Pattern
.compile("^@(?=.*[ ]).+@$");
+ /**
+ * The character that indicates a String should be treated as a {@link Tag}.
+ */
+ private static final char TAG_MARKER = '`';
+
/**
* Takes a JSON string representation of an object or an array of JSON
* objects and returns a list of {@link Multimap multimaps} with the
@@ -455,7 +461,7 @@ public static Object stringToJava(String value) {
char first = value.charAt(0);
char last = value.charAt(value.length() - 1);
Long record;
- if(Strings.isWithinQuotes(value)) {
+ if(AnyStrings.isWithinQuotes(value, TAG_MARKER)) {
// keep value as string since its between single or double quotes
return value.substring(1, value.length() - 1);
}
@@ -475,7 +481,7 @@ else if(value.equalsIgnoreCase("true")) {
else if(value.equalsIgnoreCase("false")) {
return false;
}
- else if(first == '`' && last == '`') {
+ else if(first == TAG_MARKER && last == TAG_MARKER) {
return Tag.create(value.substring(1, value.length() - 1));
}
else if(first == '|' && last == '|') {
@@ -503,7 +509,7 @@ else if(first == '|' && last == '|') {
return timestamp;
}
else {
- return MoreObjects.firstNonNull(Strings.tryParseNumber(value),
+ return MoreObjects.firstNonNull(AnyStrings.tryParseNumber(value),
value);
}
}
@@ -555,7 +561,7 @@ public static Operator stringToOperator(String symbol) {
* @return An instruction to create a {@link ResolvableLink}
*/
public static String stringToResolvableLinkInstruction(String ccl) {
- return Strings.joinSimple(RAW_RESOLVABLE_LINK_SYMBOL_PREPEND, ccl,
+ return AnyStrings.joinSimple(RAW_RESOLVABLE_LINK_SYMBOL_PREPEND, ccl,
RAW_RESOLVABLE_LINK_SYMBOL_APPEND);
}
@@ -586,7 +592,7 @@ public static String stringToResolvableLinkInstruction(String ccl) {
public static String stringToResolvableLinkSpecification(String key,
String rawValue) {
return stringToResolvableLinkInstruction(
- Strings.joinWithSpace(key, "=", rawValue));
+ AnyStrings.joinWithSpace(key, "=", rawValue));
}
/**
@@ -881,8 +887,8 @@ public Object getValue() {
@Override
public String toString() {
- return Strings.format("{} for {}", this.getClass().getSimpleName(),
- ccl);
+ return AnyStrings.format("{} for {}",
+ this.getClass().getSimpleName(), ccl);
}
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
index 9c558b2714..f41f5bf4b2 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
@@ -20,7 +20,10 @@
* between single or double quotes
*
* @author Jeff Nelson
+ * @deprecated use {@link com.cinchapi.common.base.QuoteAwareStringSplitter}
+ * instead
*/
+@Deprecated
public class QuoteAwareStringSplitter extends StringSplitter {
/**
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
index a9098090b6..20a6e3e43b 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
@@ -22,6 +22,7 @@
*
* @author Jeff Nelson
*/
+@Deprecated
public enum SplitOption {
/**
* Split on a newline character sequence (\n, \r\n, \r) in addition to
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
index 2cd2a81ba7..72b80e1831 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
@@ -45,7 +45,9 @@
*
*
* @author Jeff Nelson
+ * @deprecated use {@link com.cinchapi.common.base.StringSplitter} instead
*/
+@Deprecated
public class StringSplitter {
/**
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
index 4611435e6b..e96d03c9f3 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
@@ -20,16 +20,7 @@
import javax.annotation.Nullable;
-import org.slf4j.helpers.MessageFormatter;
-
-import com.cinchapi.common.base.Characters;
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.primitives.Doubles;
-import com.google.common.primitives.Floats;
-import com.google.common.primitives.Ints;
-import com.google.common.primitives.Longs;
+import com.cinchapi.common.base.AnyStrings;
import com.google.gson.JsonParseException;
/**
@@ -37,7 +28,9 @@
* functionality or optimize existing ones.
*
* @author Jeff Nelson
+ * @deprecated in version 0.9.6; use {@link AnyStrings} instead
*/
+@Deprecated
public final class Strings {
/**
@@ -53,12 +46,7 @@ public final class Strings {
* {@code string}
*/
public static String ensureEndsWith(String string, String suffix) {
- if(string.endsWith(suffix)) {
- return string;
- }
- else {
- return joinSimple(string, suffix);
- }
+ return AnyStrings.ensureEndsWith(string, suffix);
}
/**
@@ -74,12 +62,7 @@ public static String ensureEndsWith(String string, String suffix) {
* {@code string}
*/
public static String ensureStartsWith(String string, String prefix) {
- if(string.startsWith(prefix)) {
- return string;
- }
- else {
- return joinSimple(prefix, string);
- }
+ return AnyStrings.ensureStartsWith(string, prefix);
}
/**
@@ -96,7 +79,7 @@ public static String ensureStartsWith(String string, String prefix) {
* not already
*/
public static String ensureWithinQuotes(String string) {
- return isWithinQuotes(string) ? string : joinSimple("\"", string, "\"");
+ return AnyStrings.ensureWithinQuotes(string);
}
/**
@@ -131,41 +114,7 @@ public static String ensureWithinQuotes(String string) {
*/
public static String ensureWithinQuotesIfNeeded(String string,
char delimiter) {
- boolean foundDouble = false;
- boolean foundSingle = false;
- boolean foundDelimiter = false;
- StringBuilder escaped = new StringBuilder();
- escaped.append('"');
- if(!isWithinQuotes(string)) {
- char[] chars = string.toCharArray();
- for (int i = 0; i < chars.length; ++i) {
- char c = chars[i];
- if(c == delimiter) {
- foundDelimiter = true;
- }
- else if(c == '"') {
- foundDouble = true;
- escaped.append('\\');
- }
- else if(c == '\'') {
- foundSingle = true;
- }
- escaped.append(c);
- }
- escaped.append('"');
- if(foundDelimiter) {
- if(foundDouble && foundSingle) {
- return escaped.toString();
- }
- else if(foundDouble) {
- return Strings.format("'{}'", string);
- }
- else { // foundSingle or found no quotes
- return Strings.format("\"{}\"", string);
- }
- }
- }
- return string;
+ return AnyStrings.ensureWithinQuotesIfNeeded(string, delimiter);
}
/**
@@ -184,51 +133,7 @@ else if(foundDouble) {
* @return the escaped {@code string}
*/
public static String escapeInner(String string, char... characters) {
- char c = '\0';
- char pchar = '\0';
- StringBuilder sb = null;
- Set chars = null;
- if(characters.length == 1) {
- c = characters[0];
- }
- else {
- chars = Sets.newHashSetWithExpectedSize(characters.length);
- for (char ch : characters) {
- chars.add(ch);
- }
- }
- char[] schars = string.toCharArray();
- int offset = 0;
- int i = 0;
- while (i < schars.length) {
- if(i > 0 && i < schars.length - 1) {
- char schar = schars[i];
- if(pchar != '\\' && ((c != '\0' && c == schar)
- || (chars != null && chars.contains(schar)))) {
- sb = MoreObjects.firstNonNull(sb, new StringBuilder());
- sb.append(schars, offset, i - offset);
- sb.append('\\');
- char escaped = Characters
- .getEscapedCharOrNullLiteral(schar);
- if(escaped != '0') {
- sb.append(escaped);
- }
- else {
- sb.append(schar);
- }
- offset = i + 1;
- }
- pchar = schar;
- }
- ++i;
- }
- if(sb != null) {
- sb.append(schars, offset, i - offset);
- return sb.toString();
- }
- else {
- return string;
- }
+ return AnyStrings.escapeInner(string, characters);
}
/**
@@ -245,31 +150,7 @@ public static String escapeInner(String string, char... characters) {
* @return a {@link String} free of confusable unicode characters
*/
public static String replaceUnicodeConfusables(String string) {
- char[] chars = string.toCharArray();
- for (int i = 0; i < chars.length; ++i) {
- char c = chars[i];
- switch (c) {
- default:
- break;
- case 'ʺ':
- case '˝':
- case 'ˮ':
- case '˶':
- case 'ײ':
- case '״':
- case '“':
- case '”':
- case '‟':
- case '″':
- case '‶':
- case '〃':
- case '"':
- c = '"';
- break;
- }
- chars[i] = c;
- }
- return String.valueOf(chars);
+ return AnyStrings.replaceUnicodeConfusables(string);
}
/**
@@ -292,7 +173,7 @@ public static String replaceUnicodeConfusables(String string) {
* @return The formatted message
*/
public static String format(String pattern, Object... params) {
- return MessageFormatter.arrayFormat(pattern, params).getMessage();
+ return AnyStrings.format(pattern, params);
}
/**
@@ -303,16 +184,7 @@ public static String format(String pattern, Object... params) {
* @return the set of substrings
*/
public static Set getAllSubStrings(String string) {
- Set result = Sets.newHashSet();
- for (int i = 0; i < string.length(); ++i) {
- for (int j = i + 1; j <= string.length(); ++j) {
- String substring = string.substring(i, j).trim();
- if(!com.google.common.base.Strings.isNullOrEmpty(substring)) {
- result.add(substring);
- }
- }
- }
- return result;
+ return AnyStrings.getAllSubStrings(string);
}
/**
@@ -324,45 +196,7 @@ public static Set getAllSubStrings(String string) {
* @return {@code true} if {@code needle} is a substring
*/
public static boolean isSubString(String needle, String haystack) {
- if(needle.length() > haystack.length()) {
- return false;
- }
- else if(needle.length() == haystack.length()) {
- return needle.equals(haystack);
- }
- else {
- char[] n = needle.toCharArray();
- char[] h = haystack.toCharArray();
- int npos = 0;
- int hpos = 0;
- int stop = h.length - n.length;
- int hstart = -1;
- while (hpos < h.length && npos < n.length) {
- char hi = h[hpos];
- char ni = n[npos];
- if(hi == ni) {
- if(hstart == -1) {
- hstart = hpos;
- }
- ++npos;
- ++hpos;
- }
- else {
- if(npos > 0) {
- npos = 0;
- hpos = hstart + 1;
- hstart = -1;
- }
- else {
- ++hpos;
- }
- if(hpos > stop) {
- return false;
- }
- }
- }
- return npos == n.length;
- }
+ return AnyStrings.isSubString(needle, haystack);
}
/**
@@ -371,7 +205,10 @@ else if(needle.length() == haystack.length()) {
*
* @param json a json formatted string
* @return {@code true} if the {@code json} is valid
+ * @deprecated in version 0.9.6; use
+ * {@link com.cinchapi.concourse.util.DataServices#jsonParser()#parse()}
*/
+ @Deprecated
public static boolean isValidJson(String json) {
char first = json.charAt(0);
char last = json.charAt(json.length() - 1);
@@ -397,14 +234,7 @@ public static boolean isValidJson(String json) {
* @return {@code true} if the string is between quotes
*/
public static boolean isWithinQuotes(String string) {
- if(string.length() > 2) {
- char first = string.charAt(0);
- if(first == '"' || first == '\'') {
- char last = string.charAt(string.length() - 1);
- return first == last;
- }
- }
- return false;
+ return AnyStrings.isWithinQuotes(string);
}
/**
@@ -417,13 +247,7 @@ public static boolean isWithinQuotes(String string) {
* @return the resulting String
*/
public static String join(char separator, Object... args) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < args.length; ++i) {
- builder.append(args[i]);
- builder.append(separator);
- }
- builder.deleteCharAt(builder.length() - 1);
- return builder.toString();
+ return AnyStrings.join(separator, args);
}
/**
@@ -436,13 +260,7 @@ public static String join(char separator, Object... args) {
* @return the resulting String
*/
public static String join(String separator, Object... args) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < args.length; ++i) {
- builder.append(args[i]);
- builder.append(separator);
- }
- builder.deleteCharAt(builder.length() - 1);
- return builder.toString();
+ return AnyStrings.join(separator, args);
}
/**
@@ -453,11 +271,7 @@ public static String join(String separator, Object... args) {
* @return the resulting String
*/
public static String joinSimple(Object... args) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < args.length; ++i) {
- builder.append(args[i]);
- }
- return builder.toString();
+ return AnyStrings.joinSimple(args);
}
/**
@@ -468,7 +282,7 @@ public static String joinSimple(Object... args) {
* @return the resulting String
*/
public static String joinWithSpace(Object... args) {
- return join(' ', args);
+ return AnyStrings.joinWithSpace(args);
}
/**
@@ -482,7 +296,7 @@ public static String joinWithSpace(Object... args) {
*/
@Deprecated
public static String[] splitButRespectQuotes(String string) {
- return splitStringByDelimiterButRespectQuotes(string, " ");
+ return AnyStrings.splitButRespectQuotes(string);
}
/**
@@ -506,21 +320,7 @@ public static String[] splitButRespectQuotes(String string) {
* boundaries
*/
public static List splitCamelCase(String string) {
- List words = Lists.newArrayList();
- char[] chars = string.toCharArray();
- StringBuilder word = new StringBuilder();
- for (int i = 0; i < chars.length; ++i) {
- char c = chars[i];
- if(Character.isUpperCase(c) || c == '$') {
- if(word.length() > 0) {
- words.add(word.toString());
- }
- word.setLength(0);
- }
- word.append(c);
- }
- words.add(word.toString());
- return words;
+ return AnyStrings.splitCamelCase(string);
}
/**
@@ -538,13 +338,8 @@ public static List splitCamelCase(String string) {
*/
public static String[] splitStringByDelimiterButRespectQuotes(String string,
String delimiter) {
- // This is pretty inefficient: convert all single quotes to double
- // quotes (except one off single quotes that are used as apostrophes) so
- // the regex below works
- string = string.replaceAll(" '", " \"");
- string = string.replaceAll("' ", "\" ");
- string = string.replaceAll("'$", "\"");
- return string.split(delimiter + "(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
+ return AnyStrings.splitStringByDelimiterButRespectQuotes(string,
+ delimiter);
}
/**
@@ -557,15 +352,7 @@ public static String[] splitStringByDelimiterButRespectQuotes(String string,
* is not possible to parse the string into a boolean
*/
public static Boolean tryParseBoolean(String value) {
- if(value.equalsIgnoreCase("true")) {
- return true;
- }
- else if(value.equalsIgnoreCase("false")) {
- return false;
- }
- else {
- return null;
- }
+ return AnyStrings.tryParseBoolean(value);
}
/**
@@ -579,88 +366,7 @@ else if(value.equalsIgnoreCase("false")) {
*/
@Nullable
public static Number tryParseNumber(String value) {
- int size = value.length();
- if(value == null || size == 0) {
- return null;
- }
- else if(value.charAt(0) == '0' && size > 1 && value.charAt(1) != '.') {
- // Do not parse a string as a number if it has a leading 0 that is
- // not followed by a decimal (i.e. 007)
- return null;
- }
- boolean decimal = false;
- boolean scientific = false;
- for (int i = 0; i < size; ++i) {
- char c = value.charAt(i);
- if(!Character.isDigit(c)) {
- if(i == 0 && c == '-'
- || (scientific && (c == '-' || c == '+'))) {
- continue;
- }
- else if(c == '.') {
- if(!decimal && size > 1) {
- decimal = true;
- }
- else {
- // Since we've already seen a decimal, the appearance of
- // another one suggests this is an IP address instead of
- // a number
- return null;
- }
- }
- else if(i == size - 1 && c == 'D' && size > 1) {
- // Respect the convention to coerce numeric strings to
- // Double objects by appending a single 'D' character.
- return Double.valueOf(value.substring(0, i));
- }
- else if((c == 'E' || c == 'e') && i < size - 1) {
- // CO-627: Account for valid representations of scientific
- // notation
- if(!scientific) {
- scientific = true;
- }
- else {
- // Since we've already seen a scientific notation
- // indicator, another one suggests that this is not
- // really a number
- return null;
- }
- }
- else {
- return null;
- }
- }
- }
- try {
- if(decimal || scientific) {
- // Try to return a float (for space compactness) if it is
- // possible to fit the entire decimal without any loss of
- // precision. In order to do this, we have to compare the string
- // output of both the parsed double and the parsed float. This
- // is kind of inefficient, so substitute for a better way if it
- // exists.
- double d = Doubles.tryParse(value);
- float f = Floats.tryParse(value);
- if(String.valueOf(d).equals(String.valueOf(f))) {
- return f;
- }
- else {
- return d;
- }
- }
- else if(value.equals("-")) { // CON-597
- return null;
- }
- else {
- return MoreObjects.firstNonNull(Ints.tryParse(value),
- Longs.tryParse(value));
- }
- }
- catch (NullPointerException e) {
- throw new NumberFormatException(Strings.format(
- "{} appears to be a number but cannot be parsed as such",
- value));
- }
+ return AnyStrings.tryParseNumber(value);
}
/**
@@ -675,16 +381,7 @@ else if(value.equals("-")) { // CON-597
*/
@Nullable
public static Number tryParseNumberStrict(String value) {
- if(value == null || value.length() == 0) {
- return null;
- }
- char last = value.charAt(value.length() - 1);
- if(Character.isDigit(last)) {
- return tryParseNumber(value);
- }
- else {
- return null;
- }
+ return AnyStrings.tryParseNumberStrict(value);
}
/**
@@ -695,15 +392,7 @@ public static Number tryParseNumberStrict(String value) {
* @return a string of length 1 containing the input char
*/
public static String valueOfCached(char c) {
- if(c == '(') {
- return "(";
- }
- else if(c == ')') {
- return ")";
- }
- else {
- return String.valueOf(c);
- }
+ return AnyStrings.valueOfCached(c);
}
private Strings() {/* noop */}
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringsTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/AnyStringsTest.java
similarity index 68%
rename from concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringsTest.java
rename to concourse-driver-java/src/test/java/com/cinchapi/concourse/util/AnyStringsTest.java
index 2561f21def..fb73ff4e05 100644
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringsTest.java
+++ b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/AnyStringsTest.java
@@ -20,6 +20,7 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.test.Variables;
import com.google.common.collect.Lists;
@@ -28,12 +29,16 @@
*
* @author Jeff Nelson
*/
-public class StringsTest {
+public class AnyStringsTest {
+
+ // NOTE: This tests the AnyStrings utility class, which is defined in
+ // accent4j. The test is defined here (instead of that project) because it
+ // depends on some Concourse utilities
@Test
public void testSplitStringByDelimterAndRespectQuotes() {
String string = "Sachin,,M,\"Maths,Science,English\",Need to improve in these subjects.";
- String[] splitted = Strings
+ String[] splitted = AnyStrings
.splitStringByDelimiterButRespectQuotes(string, ",");
Assert.assertEquals(
"[Sachin, , M, \"Maths,Science,English\", Need to improve in these subjects.]",
@@ -43,7 +48,7 @@ public void testSplitStringByDelimterAndRespectQuotes() {
@Test
public void testSplitStringByDelimeterWithTrailiningSpaceAndRespectQuotes() {
String string = "\"New Leaf, Same Page \"";
- String[] splitted = Strings
+ String[] splitted = AnyStrings
.splitStringByDelimiterButRespectQuotes(string, ",");
Assert.assertEquals("[\"New Leaf, Same Page \"]",
Arrays.toString(splitted));
@@ -53,7 +58,7 @@ public void testSplitStringByDelimeterWithTrailiningSpaceAndRespectQuotes() {
@Test
public void testSplitWithSingleQuotes() {
String string = "John said 'hello world'";
- String[] toks = Strings.splitButRespectQuotes(string);
+ String[] toks = AnyStrings.splitButRespectQuotes(string);
Assert.assertEquals(
Lists.newArrayList("John", "said", "\"hello world\""),
Lists.newArrayList(toks));
@@ -66,39 +71,39 @@ public void testTryParseValidNumber() {
if(valid instanceof Double) {
string += "D";
}
- Assert.assertEquals(Strings.tryParseNumber(string), valid);
+ Assert.assertEquals(AnyStrings.tryParseNumber(string), valid);
}
@Test
public void testTryParseInvalidNumber() {
String invalid = Random.getStringNoDigits();
- Assert.assertNull(Strings.tryParseNumber(invalid));
+ Assert.assertNull(AnyStrings.tryParseNumber(invalid));
}
@Test
public void testTryParseCoercedDouble() {
Double d = Variables.register("double", Random.getDouble());
- Assert.assertEquals(d, Strings.tryParseNumber(d + "D"));
+ Assert.assertEquals(d, AnyStrings.tryParseNumber(d + "D"));
}
@Test
public void testSplitCamelCase() {
String str = "getArg1Arg2Arg3ABC";
Assert.assertEquals(Lists.newArrayList("get", "Arg1", "Arg2", "Arg3",
- "A", "B", "C"), Strings.splitCamelCase(str));
+ "A", "B", "C"), AnyStrings.splitCamelCase(str));
str = "testSplitCamelCase";
Assert.assertEquals(
Lists.newArrayList("test", "Split", "Camel", "Case"),
- Strings.splitCamelCase(str));
+ AnyStrings.splitCamelCase(str));
str = "SplitCamelCase";
Assert.assertEquals(Lists.newArrayList("Split", "Camel", "Case"),
- Strings.splitCamelCase(str));
+ AnyStrings.splitCamelCase(str));
str = "Splitcamelcase";
Assert.assertEquals(Lists.newArrayList("Splitcamelcase"),
- Strings.splitCamelCase(str));
+ AnyStrings.splitCamelCase(str));
str = "splitcamelcase";
Assert.assertEquals(Lists.newArrayList("splitcamelcase"),
- Strings.splitCamelCase(str));
+ AnyStrings.splitCamelCase(str));
}
@Test
@@ -109,13 +114,13 @@ public void testFormat() {
Object c = Random.getObject();
String expected = "This is a string " + a + " that needs to have " + b
+ " some random " + c + " substitution";
- String actual = Strings.format(pattern, a, b, c);
+ String actual = AnyStrings.format(pattern, a, b, c);
Assert.assertEquals(expected, actual);
}
@Test
public void testIsSubStringReproA() {
- Assert.assertTrue(Strings.isSubString(
+ Assert.assertTrue(AnyStrings.isSubString(
"qrqq40 078rh2n75kxu4prmgtlehv85iksxgehj5jk2prq66ls9bj2f6g5onx l18sgp7x414cik9tvpfycmhjgwhy9d3yhw4we",
"b6r4e7g8f8sgu1cjfo16rg711cmft76wh83dsf46wwz3fse5j9chut37nhamqm4iw2f37ebl8tqr4fjmx8n6t943s4khdsf1qrqrqq40 078rh2n75kxu4prmgtlehv85iksxgehj5jk2prq66ls9bj2f6g5onx l18sgp7x414cik9tvpfycmhjgwhy9d3yhw4web6r4e7g8f8sgu1cjfo16rg711cmft76wh83dsf46wwz3fse5j9chut37nhamqm4iw2f37ebl8tqr4fjmx8n6t943s4khdsf1qr"));
}
@@ -125,32 +130,13 @@ public void testIsSubString() {
String needle = Variables.register("needle", Random.getString());
String haystack = Variables.register("haystack", Random.getString());
Assert.assertEquals(haystack.contains(needle),
- Strings.isSubString(needle, haystack));
- }
-
- @Test
- public void testIsValidJsonObject() {
- Assert.assertTrue(Strings
- .isValidJson("{\"foo\": 1, \"bar\": \"2\", \"baz\":true}"));
- }
-
- @Test
- public void testIsValidJsonArray() {
- Assert.assertTrue(Strings.isValidJson(
- "[{\"foo\": 1, \"bar\": \"2\", \"baz\":true},{\"foo\": 1, \"bar\": \"2\", \"baz\":true},{\"foo\": 1, \"bar\": \"2\", \"baz\":true}]"));
- }
-
- @Test
- public void testIsValidJsonFalse() {
- Assert.assertFalse(Strings.isValidJson("foo"));
- Assert.assertFalse(
- Strings.isValidJson("{\"foo\": 1, \"bar\": \"2\", \"baz\":}"));
+ AnyStrings.isSubString(needle, haystack));
}
@Test
public void testTryParseFloat() {
float f = 0.3f;
- Object obj = Strings.tryParseNumber("" + f + "");
+ Object obj = AnyStrings.tryParseNumber("" + f + "");
Assert.assertTrue(obj instanceof Float);
Assert.assertEquals(0.3f, obj);
}
@@ -158,7 +144,7 @@ public void testTryParseFloat() {
@Test
public void testTryParseDoubleAsFloat() {
double f = 0.3;
- Object obj = Strings.tryParseNumber("" + f + "");
+ Object obj = AnyStrings.tryParseNumber("" + f + "");
Assert.assertTrue(obj instanceof Float);
Assert.assertEquals(0.3f, obj);
}
@@ -167,60 +153,61 @@ public void testTryParseDoubleAsFloat() {
public void testEscapeInnerDoubleQuote() {
String string = "this has a \"double\" quote and 'single' quote";
String expected = "this has a \\\"double\\\" quote and 'single' quote";
- Assert.assertEquals(expected, Strings.escapeInner(string, '"'));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '"'));
}
@Test
public void testEscapeInnerSingleQuote() {
String string = "this has a 'single' quote and \"double\" quote";
String expected = "this has a \\'single\\' quote and \"double\" quote";
- Assert.assertEquals(expected, Strings.escapeInner(string, '\''));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '\''));
}
@Test
public void testEscapeInnerNothing() {
String string = "this should not be escaped";
String expected = string;
- Assert.assertEquals(expected, Strings.escapeInner(string, '\"'));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '\"'));
}
@Test
public void testEscapeInnerSingleAndDoubleQuotes() {
String string = "this has a \"double\" and 'single' quote";
String expected = "this has a \\\"double\\\" and \\'single\\' quote";
- Assert.assertEquals(expected, Strings.escapeInner(string, '"', '\''));
+ Assert.assertEquals(expected,
+ AnyStrings.escapeInner(string, '"', '\''));
}
@Test
public void testEscapeInnerNothingSkipHeadTail() {
String string = "\"this should not be escaped\"";
String expected = string;
- Assert.assertEquals(expected, Strings.escapeInner(string, '\"'));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '\"'));
}
@Test
public void testEscapeInnerDoubleQuoteSkipHeadTail() {
String string = "\"this has a \"double\" and 'single' quote\"";
String expected = "\"this has a \\\"double\\\" and 'single' quote\"";
- Assert.assertEquals(expected, Strings.escapeInner(string, '\"'));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '\"'));
}
@Test
public void testEscapeInnerLineBreak() {
String string = "\"a\n\nb\"";
String expected = "\"a\\n\\nb\"";
- Assert.assertEquals(expected, Strings.escapeInner(string, '\n'));
+ Assert.assertEquals(expected, AnyStrings.escapeInner(string, '\n'));
}
@Test
public void testDoNotParseStringAsNumberWithLeadingZero() {
- Assert.assertNull(Strings.tryParseNumber("01"));
+ Assert.assertNull(AnyStrings.tryParseNumber("01"));
}
@Test
public void testParseStringAsNumberIfDecimalWithLeadingZero() {
Assert.assertTrue(
- Strings.tryParseNumberStrict("0.0123") instanceof Number);
+ AnyStrings.tryParseNumberStrict("0.0123") instanceof Number);
}
@Test
@@ -228,7 +215,7 @@ public void testEnsureStartsWithAlreadyTrue() {
String prefix = Random.getString();
String string = prefix + Random.getString();
Assert.assertTrue(
- Strings.ensureStartsWith(string, prefix).startsWith(prefix));
+ AnyStrings.ensureStartsWith(string, prefix).startsWith(prefix));
}
@Test
@@ -239,63 +226,63 @@ public void testEnsureStartsWithNotAlreadyTrue() {
string = Random.getString();
}
Assert.assertTrue(
- Strings.ensureStartsWith(string, prefix).startsWith(prefix));
+ AnyStrings.ensureStartsWith(string, prefix).startsWith(prefix));
}
@Test
public void testEnsureWithinQuotesIfNeeded() {
String string = "a b c";
Assert.assertEquals(string,
- Strings.ensureWithinQuotesIfNeeded(string, ','));
+ AnyStrings.ensureWithinQuotesIfNeeded(string, ','));
string = "a, b c";
- Assert.assertEquals(Strings.format("\"{}\"", string),
- Strings.ensureWithinQuotesIfNeeded(string, ','));
+ Assert.assertEquals(AnyStrings.format("\"{}\"", string),
+ AnyStrings.ensureWithinQuotesIfNeeded(string, ','));
string = "a, b \"c";
- Assert.assertEquals(Strings.format("'{}'", string),
- Strings.ensureWithinQuotesIfNeeded(string, ','));
+ Assert.assertEquals(AnyStrings.format("'{}'", string),
+ AnyStrings.ensureWithinQuotesIfNeeded(string, ','));
string = "a, b 'c";
- Assert.assertEquals(Strings.format("\"{}\"", string),
- Strings.ensureWithinQuotesIfNeeded(string, ','));
+ Assert.assertEquals(AnyStrings.format("\"{}\"", string),
+ AnyStrings.ensureWithinQuotesIfNeeded(string, ','));
string = "a, 'b' \"c\"";
Assert.assertEquals("\"a, 'b' \\\"c\\\"\"",
- Strings.ensureWithinQuotesIfNeeded(string, ','));
+ AnyStrings.ensureWithinQuotesIfNeeded(string, ','));
}
@Test
public void testEscapeInnerWhenAlreadyEscaped() {
String string = "this is a \\\"real\\\" \"real\" problem";
- string = Strings.ensureWithinQuotes(string);
+ string = AnyStrings.ensureWithinQuotes(string);
String expected = "\"this is a \\\"real\\\" \\\"real\\\" problem\"";
Assert.assertEquals(expected,
- Strings.escapeInner(string, string.charAt(0)));
+ AnyStrings.escapeInner(string, string.charAt(0)));
}
@Test
public void testTryParseNumberIpAddress() {
- Assert.assertNull(Strings.tryParseNumber("23.229.8.250"));
+ Assert.assertNull(AnyStrings.tryParseNumber("23.229.8.250"));
}
@Test
public void testTryParseNumberPeriod() {
- Assert.assertNull(Strings.tryParseNumber("."));
+ Assert.assertNull(AnyStrings.tryParseNumber("."));
}
@Test
public void testIsWithinQuotesQuotedEmptyString() {
- Assert.assertFalse(Strings.isWithinQuotes("\"\""));
- Assert.assertFalse(Strings.isWithinQuotes("\'\'"));
+ Assert.assertFalse(AnyStrings.isWithinQuotes("\"\""));
+ Assert.assertFalse(AnyStrings.isWithinQuotes("\'\'"));
}
@Test
public void testEnsureWithinQuotesQuotedEmptyString() {
String string = "\"\"";
- Assert.assertEquals("\"\"\"\"", Strings.ensureWithinQuotes(string));
+ Assert.assertEquals("\"\"\"\"", AnyStrings.ensureWithinQuotes(string));
}
@Test
public void testTryParseNumberDash() {
String string = "-";
- Assert.assertNull(Strings.tryParseNumber(string));
+ Assert.assertNull(AnyStrings.tryParseNumber(string));
}
@Test
@@ -304,34 +291,36 @@ public void testTryParseNumberDashes() {
for (int i = 0; i < Random.getScaleCount(); ++i) {
string += "-";
}
- Assert.assertNull(Strings.tryParseNumber(string));
+ Assert.assertNull(AnyStrings.tryParseNumber(string));
}
@Test
public void testReplaceUnicodeConfusables() {
String expected = "\"a\"";
Assert.assertEquals(expected,
- Strings.replaceUnicodeConfusables(expected));
- Assert.assertEquals(expected, Strings.replaceUnicodeConfusables("˝a˝"));
- Assert.assertEquals(expected, Strings.replaceUnicodeConfusables("″a‶"));
+ AnyStrings.replaceUnicodeConfusables(expected));
+ Assert.assertEquals(expected,
+ AnyStrings.replaceUnicodeConfusables("˝a˝"));
+ Assert.assertEquals(expected,
+ AnyStrings.replaceUnicodeConfusables("″a‶"));
}
@Test
public void testTryParseDoubleScientificNotation() {
String value = "5.15501576938E-4";
- Assert.assertNotNull(Strings.tryParseNumber(value));
+ Assert.assertNotNull(AnyStrings.tryParseNumber(value));
}
@Test
public void testTryParseFakeDoubleScientificNotationA() {
String value = "5.1550e1576938E-4";
- Assert.assertNull(Strings.tryParseNumber(value));
+ Assert.assertNull(AnyStrings.tryParseNumber(value));
}
@Test
public void testTryParseFakeDoubleScientificNotationV() {
String value = "5.15501576938E";
- Assert.assertNull(Strings.tryParseNumber(value));
+ Assert.assertNull(AnyStrings.tryParseNumber(value));
}
}
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/ConvertTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/ConvertTest.java
index 81d06ac557..a733947af7 100644
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/ConvertTest.java
+++ b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/ConvertTest.java
@@ -29,6 +29,7 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.Link;
import com.cinchapi.concourse.Tag;
import com.cinchapi.concourse.Timestamp;
@@ -334,7 +335,7 @@ public void testConvertLong() {
public void testConvertResolvableLink() {
String key = Random.getString().replace(" ", "");
String value = Random.getObject().toString().replace(" ", "");
- String ccl = Strings.joinWithSpace(key, "=", value);
+ String ccl = AnyStrings.joinWithSpace(key, "=", value);
ResolvableLink link = (ResolvableLink) Convert
.stringToJava(Convert.stringToResolvableLinkInstruction(ccl));
Assert.assertEquals(ccl, link.getCcl());
@@ -344,7 +345,7 @@ public void testConvertResolvableLink() {
public void testConvertResolvableLinkWithNumbers() {
String key = Random.getNumber().toString();
String value = Random.getNumber().toString();
- String ccl = Strings.joinWithSpace(key, "=", value);
+ String ccl = AnyStrings.joinWithSpace(key, "=", value);
ResolvableLink link = (ResolvableLink) Convert
.stringToJava(Convert.stringToResolvableLinkInstruction(ccl));
Assert.assertEquals(ccl, link.getCcl());
@@ -388,8 +389,8 @@ public void testResolvableLinkKeyRegexWithNumbers() {
public void testTransformValueToResolvableLink() {
String key = Random.getString();
String value = Random.getObject().toString();
- String expected = Strings.joinSimple("@",
- Strings.joinWithSpace(key, "=", value), "@");
+ String expected = AnyStrings.joinSimple("@",
+ AnyStrings.joinWithSpace(key, "=", value), "@");
Assert.assertEquals(expected,
Convert.stringToResolvableLinkSpecification(key, value));
}
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/QuoteAwareStringSplitterTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/QuoteAwareStringSplitterTest.java
deleted file mode 100644
index 5815dc2ce8..0000000000
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/QuoteAwareStringSplitterTest.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2013-2019 Cinchapi Inc.
- *
- * 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 com.cinchapi.concourse.util;
-
-import java.util.List;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-/**
- * Unit tests for the
- * {@link com.cinchapi.concourse.util.QuoteAwareStringSplitter class}.
- *
- * @author Jeff Nelson
- */
-public class QuoteAwareStringSplitterTest {
-
- /**
- * Test logic for ensuring that the quote aware string splitter works.
- *
- * @param string
- * @param delim
- */
- private void doTestSplitWithQuotes(String string, char delim) {
- QuoteAwareStringSplitter it = new QuoteAwareStringSplitter(string,
- delim);
- String[] toks = Strings.splitStringByDelimiterButRespectQuotes(string,
- String.valueOf(delim));
- int i = 0;
- while (it.hasNext()) {
- String tok = toks[i];
- if(!tok.isEmpty()) {
- String next = it.next();
- if(next.startsWith("'") && next.endsWith("'")) {
- // Strings#splitStringByDelimiterButRespectQuotes replaces
- // single quotes with double quotes, so we must do that here
- // in order to do the comparison
- next = "\"" + next.substring(1, next.length() - 1) + "\"";
- }
- Assert.assertEquals(tok, next);
- }
- ++i;
- }
- }
-
- @Test
- public void testSplitWithSingleQuotes() {
- doTestSplitWithQuotes(
- "this string is going to be split by 'space but we are respecting' single quotes",
- ' ');
- }
-
- @Test
- public void testSplitWithDoubleQuotes() {
- doTestSplitWithQuotes(
- "this string is going to be split by \"space but we are respecting\" double quotes",
- ' ');
- }
-
- @Test
- public void testDontSplitOnApostrophe() {
- doTestSplitWithQuotes(
- "don't split the string on the apostrophe 'because it needs to work'",
- ' ');
- }
-
- @Test
- public void testSplitOnNewlineLF() {
- String string = "this\nis a 'quote across\nlines'";
- StringSplitter it = new QuoteAwareStringSplitter(string,
- SplitOption.SPLIT_ON_NEWLINE);
- Assert.assertEquals("this", it.next());
- Assert.assertEquals("is", it.next());
- Assert.assertEquals("a", it.next());
- Assert.assertEquals("'quote across\nlines'", it.next());
- }
-
- @Test
- public void testSplitOnNewlineCR() {
- String string = "this\nis a 'quote across\rlines'";
- StringSplitter it = new QuoteAwareStringSplitter(string,
- SplitOption.SPLIT_ON_NEWLINE);
- Assert.assertEquals("this", it.next());
- Assert.assertEquals("is", it.next());
- Assert.assertEquals("a", it.next());
- Assert.assertEquals("'quote across\rlines'", it.next());
- }
-
- @Test
- public void testSplitOnNewlineCRLF() {
- String string = "this\nis a 'quote across\r\nlines'";
- StringSplitter it = new QuoteAwareStringSplitter(string,
- SplitOption.SPLIT_ON_NEWLINE);
- Assert.assertEquals("this", it.next());
- Assert.assertEquals("is", it.next());
- Assert.assertEquals("a", it.next());
- Assert.assertEquals("'quote across\r\nlines'", it.next());
- }
-
- @Test
- public void testTokenizeParenthesis() {
- String string = "foo(bar) \"but don't (split this)\" but split ( this)";
- StringSplitter it = new QuoteAwareStringSplitter(string,
- SplitOption.TOKENIZE_PARENTHESIS);
- while (it.hasNext()) {
- Assert.assertEquals("foo", it.next());
- Assert.assertEquals("(", it.next());
- Assert.assertEquals("bar", it.next());
- Assert.assertEquals(")", it.next());
- Assert.assertEquals("\"but don't (split this)\"", it.next());
- Assert.assertEquals("but", it.next());
- Assert.assertEquals("split", it.next());
- Assert.assertEquals("(", it.next());
- Assert.assertEquals("this", it.next());
- Assert.assertEquals(")", it.next());
- }
- }
-
- @Test
- public void testDropQuotes() {
- String string = "a,b,\"c,d,efg,h\"";
- QuoteAwareStringSplitter it = new QuoteAwareStringSplitter(string, ',',
- SplitOption.DROP_QUOTES);
- while (it.hasNext()) {
- Assert.assertFalse(Strings.isWithinQuotes(it.next()));
- }
- }
-
- @Test
- public void testHandleEscapedQuotes() {
- String string = "103403,theme_mods_simplemag,\"a:63:{i:0;b:0;s:7:\\\"backups\\\";N;s:9:\\\"smof_init\\\";s:31:\\\"Mon, 26 May 2014 23:29:41 +0000\\\";s:9:\\\"site_logo\\\";s:58:\\\"[site_url]/wp-content/uploads/2014/04/Blavitylogoblack.png\\\";s:12:\\\"site_tagline\\\";s:1:\\\"0\\\";s:12:\\\"site_favicon\\\";s:49:\\\"[site_url]/wp-content/uploads/2014/05/favicon.ico\\\";s:19:\\\"site_retina_favicon\\\";s:0:\\\"\\\";s:14:\\\"site_top_strip\\\";i:1;s:22:\\\"site_sidebar_behaviour\\\";s:1:\\\"1\\\";s:24:\\\"site_wide_excerpt_length\\\";s:2:\\\"24\\\";s:17:\\\"site_wide_excerpt\\\";i:1;s:18:\\\"site_page_comments\\\";i:0;s:16:\\\"site_author_name\\\";i:0;s:14:\\\"copyright_text\\\";s:22:\\\"Copyright Blavity 2014\\\";s:15:\\\"main_site_color\\\";s:7:\\\"#ffffff\\\";s:20:\\\"site_top_strip_color\\\";s:16:\\\"color-site-white\\\";s:15:\\\"main_menu_links\\\";s:4:\\\"14px\\\";s:11:\\\"slider-tint\\\";s:16:\\\"slider-tint-dark\\\";s:20:\\\"slider_tint_strength\\\";s:3:\\\"0.1\\\";s:26:\\\"slider_tint_strength_hover\\\";s:3:\\\"0.7\\\";s:17:\\\"site_footer_color\\\";s:15:\\\"color-site-gray\\\";s:11:\\\"font_titles\\\";s:5:\\\"Bayon\\\";s:9:\\\"font_text\\\";s:4:\\\"Lato\\\";s:21:\\\"single_media_position\\\";s:9:\\\"fullwidth\\\";s:21:\\\"single_featured_image\\\";i:1;s:18:\\\"single_author_name\\\";i:0;s:17:\\\"single_wp_gallery\\\";i:1;s:13:\\\"single_social\\\";i:1;s:13:\\\"single_author\\\";i:1;s:17:\\\"single_nav_arrows\\\";i:1;s:10:\\\"post_score\\\";s:38:\\\"Post Score
\\\";s:19:\\\"single_rating_title\\\";s:10:\\\"Our Rating\\\";s:22:\\\"single_breakdown_title\\\";s:13:\\\"The Breakdown\\\";s:18:\\\"related_posts_info\\\";s:41:\\\"Related Posts
\\\";s:14:\\\"single_related\\\";s:1:\\\"0\\\";s:20:\\\"single_related_title\\\";s:17:\\\"You may also like\\\";s:28:\\\"single_related_posts_to_show\\\";s:1:\\\"2\\\";s:15:\\\"slide_dock_info\\\";s:51:\\\"Random Posts Slide Dock
\\\";s:17:\\\"single_slide_dock\\\";i:1;s:23:\\\"single_slide_dock_title\\\";s:12:\\\"More Stories\\\";s:23:\\\"single_slide_dock_style\\\";i:0;s:19:\\\"top_social_profiles\\\";s:1:\\\"1\\\";s:7:\\\"sp_feed\\\";s:0:\\\"\\\";s:11:\\\"sp_facebook\\\";s:24:\\\"www.facebook.com/Blavity\\\";s:10:\\\"sp_twitter\\\";s:23:\\\"www.Twitter.com/Blavity\\\";s:9:\\\"sp_google\\\";s:36:\\\"https://plus.google.com/+BlavityPage\\\";s:11:\\\"sp_linkedin\\\";s:0:\\\"\\\";s:12:\\\"sp_instagram\\\";s:28:\\\"http://instagram.com/blavity\\\";s:9:\\\"sp_flickr\\\";s:0:\\\"\\\";s:8:\\\"sp_vimeo\\\";s:0:\\\"\\\";s:10:\\\"sp_youtube\\\";s:0:\\\"\\\";s:10:\\\"sp_behance\\\";s:0:\\\"\\\";s:10:\\\"sp_dribble\\\";s:0:\\\"\\\";s:12:\\\"sp_pinterest\\\";s:0:\\\"\\\";s:13:\\\"sp_soundcloud\\\";s:0:\\\"\\\";s:9:\\\"sp_lastfm\\\";s:0:\\\"\\\";s:10:\\\"custom_css\\\";s:35:\\\".single .message { display: none; }\\\";s:16:\\\"custom_js_header\\\";s:0:\\\"\\\";s:16:\\\"custom_js_footer\\\";s:0:\\\"\\\";s:11:\\\"error_title\\\";s:56:\\\"Omph. Our bad. We're rolling our eyes too! Try again. :)\\\";s:11:\\\"error_image\\\";s:60:\\\"[site_url]/wp-content/uploads/2014/05/hangout_snapshot_2.jpg\\\";s:18:\\\"nav_menu_locations\\\";a:2:{s:9:\\\"main_menu\\\";i:2;s:14:\\\"secondary_menu\\\";i:26;}s:16:\\\"sidebars_widgets\\\";a:2:{s:4:\\\"time\\\";i:1407380058;s:4:\\\"data\\\";a:6:{s:19:\\\"wp_inactive_widgets\\\";a:1:{i:0;s:6:\\\"text-2\\\";}s:9:\\\"sidebar-1\\\";a:4:{i:0;s:14:\\\"mc4wp_widget-4\\\";i:1;s:17:\\\"ti_image_banner-2\\\";i:2;s:18:\\\"facebook-likebox-2\\\";i:3;s:14:\\\"recent-posts-2\\\";}s:9:\\\"sidebar-2\\\";a:3:{i:0;s:16:\\\"ti_video_embed-2\\\";i:1;s:17:\\\"ti_latest_posts-2\\\";i:2;s:10:\\\"nav_menu-3\\\";}s:9:\\\"sidebar-3\\\";a:1:{i:0;s:10:\\\"nav_menu-2\\\";}s:9:\\\"sidebar-4\\\";a:1:{i:0;s:14:\\\"mc4wp_widget-5\\\";}s:9:\\\"sidebar-5\\\";a:0:{}}}}\",yes,wp_options";
- QuoteAwareStringSplitter it = new QuoteAwareStringSplitter(string, ',');
- int count = 0;
- while (it.hasNext()) {
- it.next();
- ++count;
- }
- Assert.assertEquals(5, count);
- }
-
- @Test
- public void testHandleLeadingApostrophe() {
- String string = "12 great theme songs every '90s black kid will remember,,inherit,closed,closed,,14321-revision-v1,,,2015-08-17 16:01:05,2015-08-17 20:01:05,,14321,http://staging.blavity.com/14321-revision-v1/,0,revision,,0,wp_posts\n17114,616166,2015-10-07 22:1Exception in thread";
- QuoteAwareStringSplitter it = new QuoteAwareStringSplitter(string, ',');
- String[] toks = string.split(",");
- int count = 0;
- while (it.hasNext()) {
- Assert.assertEquals(toks[count], it.next());
- ++count;
- }
- }
-
- @Test
- public void testHandleLeadingApostropeAndQuotes() {
- String string = "'90s kids are awesome,a,b,\"here,is,a,quote\",c,d,\"and,another,quote\"";
- QuoteAwareStringSplitter it = new QuoteAwareStringSplitter(string, ',');
- int count = 0;
- while (it.hasNext()) {
- it.next();
- ++count;
- }
- Assert.assertEquals(7, count);
- }
-
- @Test
- public void testQuoteAwareTrim() {
- String string = "a, b, \"c, d, e\", f ,g";
- StringSplitter it = new QuoteAwareStringSplitter(string, ',',
- SplitOption.TRIM_WHITESPACE);
- List expected = Lists.newArrayList("a", "b", "\"c, d, e\"", "f",
- "g");
- int index = 0;
- while (it.hasNext()) {
- String next = it.next();
- if(!next.contains("\"")) {
- Assert.assertFalse(next.contains(" "));
- }
- Assert.assertEquals(expected.get(index), next);
- ++index;
- }
-
- }
-
-}
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterPerformanceTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterPerformanceTest.java
index 5c8e6debb5..93570434c4 100644
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterPerformanceTest.java
+++ b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterPerformanceTest.java
@@ -18,6 +18,9 @@
import org.junit.Ignore;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.base.QuoteAwareStringSplitter;
+import com.cinchapi.common.base.StringSplitter;
import com.cinchapi.concourse.test.ConcourseBenchmarkTest;
/**
@@ -29,6 +32,10 @@
@SuppressWarnings("unused")
public class StringSplitterPerformanceTest extends ConcourseBenchmarkTest {
+ // NOTE: This is a unit test for StringSplliter, which is defined in
+ // accent4j. This test depends on ConcourseBenchmarkTest, so it is defined
+ // in this project instead of the same one as the class being tested.
+
@Test
@Ignore
public void testSimpleSplit() {
@@ -74,7 +81,7 @@ public void testQuoteAwareSplit() {
int rounds = 5000;
startBenchmark(builtInBenchmark);
for (int i = 0; i < rounds; ++i) {
- String[] toks = Strings
+ String[] toks = AnyStrings
.splitStringByDelimiterButRespectQuotes(string, ",");
for (String tok : toks) {
continue;
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterTest.java
index 8c17492de4..7c6117dac2 100644
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterTest.java
+++ b/concourse-driver-java/src/test/java/com/cinchapi/concourse/util/StringSplitterTest.java
@@ -22,18 +22,25 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.base.SplitOption;
+import com.cinchapi.common.base.StringSplitter;
import com.cinchapi.concourse.test.ConcourseBaseTest;
import com.cinchapi.concourse.test.Variables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
- * Unit tests for the {@link com.cinchapi.concourse.util.StringSplitter} class.
+ * Unit tests for the {@link StringSplitter} class.
*
* @author Jeff Nelson
*/
public class StringSplitterTest extends ConcourseBaseTest {
+ // NOTE: This is a unit test for StringSplliter, which is defined in
+ // accent4j. This test depends on ConcourseBaseTest, so it is defined in
+ // this project instead of the same one as the class being tested.
+
@Test
public void testStringSplitter() {
String string = Random.getString();
@@ -97,7 +104,7 @@ public void testSplitOnNewlineEnabled() {
@Test
public void testSplitOnNewlineLF() {
Set expected = Sets.newHashSet("line1", "line2", "line3");
- String string = Strings.join('\n', expected.toArray());
+ String string = AnyStrings.join('\n', expected.toArray());
StringSplitter it = new StringSplitter(string,
SplitOption.SPLIT_ON_NEWLINE);
while (it.hasNext()) {
@@ -108,7 +115,7 @@ public void testSplitOnNewlineLF() {
@Test
public void testSplitOnNewlineCR() {
Set expected = Sets.newHashSet("line1", "line2", "line3");
- String string = Strings.join('\r', expected.toArray());
+ String string = AnyStrings.join('\r', expected.toArray());
StringSplitter it = new StringSplitter(string,
SplitOption.SPLIT_ON_NEWLINE);
while (it.hasNext()) {
@@ -119,7 +126,7 @@ public void testSplitOnNewlineCR() {
@Test
public void testSplitOnNewlineCRLF() {
Set expected = Sets.newHashSet("line1", "line2", "line3");
- String string = Strings.join("\r\n", expected.toArray());
+ String string = AnyStrings.join("\r\n", expected.toArray());
StringSplitter it = new StringSplitter(string,
SplitOption.SPLIT_ON_NEWLINE);
while (it.hasNext()) {
diff --git a/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java b/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
index 5767df0b06..4ea893bb79 100644
--- a/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
+++ b/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
@@ -55,6 +55,7 @@
import ch.qos.logback.classic.Level;
import com.cinchapi.ccl.grammar.Symbol;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.ArrayBuilder;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.common.process.Processes;
@@ -73,7 +74,6 @@
import com.cinchapi.concourse.time.Time;
import com.cinchapi.concourse.util.ConcourseServerDownloader;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -638,7 +638,7 @@ public boolean installPlugin(Path bundle) {
return true;
}
}
- throw new RuntimeException(Strings
+ throw new RuntimeException(AnyStrings
.format("Unable to install plugin '{}': {}", bundle, out));
}
diff --git a/concourse-import/src/main/java/com/cinchapi/concourse/importer/LineBasedImporter.java b/concourse-import/src/main/java/com/cinchapi/concourse/importer/LineBasedImporter.java
index 5195cd3498..0f58f67d9f 100644
--- a/concourse-import/src/main/java/com/cinchapi/concourse/importer/LineBasedImporter.java
+++ b/concourse-import/src/main/java/com/cinchapi/concourse/importer/LineBasedImporter.java
@@ -23,13 +23,13 @@
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
+import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.base.QuoteAwareStringSplitter;
import com.cinchapi.concourse.Concourse;
import com.cinchapi.concourse.Constants;
import com.cinchapi.concourse.thrift.Operator;
import com.cinchapi.concourse.util.Convert;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.QuoteAwareStringSplitter;
-import com.cinchapi.concourse.util.Strings;
import com.cinchapi.concourse.util.TLists;
import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
@@ -201,10 +201,10 @@ protected String[] header() {
protected JsonElement transformValue(String key, String value) {
JsonPrimitive element;
Object parsed;
- if((parsed = Strings.tryParseNumberStrict(value)) != null) {
+ if((parsed = AnyStrings.tryParseNumberStrict(value)) != null) {
element = new JsonPrimitive((Number) parsed);
}
- else if((parsed = Strings.tryParseBoolean(value)) != null) {
+ else if((parsed = AnyStrings.tryParseBoolean(value)) != null) {
element = new JsonPrimitive((Boolean) parsed);
}
else {
@@ -245,7 +245,7 @@ private final String[] parseKeys(String line) {
keys = TLists.toArrayCasted(keysList, String.class);
}
else {
- keys = Strings.splitStringByDelimiterButRespectQuotes(line,
+ keys = AnyStrings.splitStringByDelimiterButRespectQuotes(line,
delimiter());
for (int i = 0; i < keys.length; ++i) {
keys[i] = keys[i].trim();
@@ -278,7 +278,7 @@ private final JsonObject parseLine(String line, String... keys) {
toks = TLists.toArrayCasted(toksList, String.class);
}
else {
- toks = Strings.splitStringByDelimiterButRespectQuotes(line,
+ toks = AnyStrings.splitStringByDelimiterButRespectQuotes(line,
delimiter());
}
for (int i = 0; i < Math.min(keys.length, toks.length); ++i) {
diff --git a/concourse-import/src/main/java/com/cinchapi/concourse/importer/cli/ImportCli.java b/concourse-import/src/main/java/com/cinchapi/concourse/importer/cli/ImportCli.java
index d6a8d6b80b..3ee7f6a598 100644
--- a/concourse-import/src/main/java/com/cinchapi/concourse/importer/cli/ImportCli.java
+++ b/concourse-import/src/main/java/com/cinchapi/concourse/importer/cli/ImportCli.java
@@ -42,6 +42,7 @@
import org.reflections.Reflections;
import com.beust.jcommander.Parameter;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.common.groovy.GroovyFiles;
import com.cinchapi.common.io.Files;
@@ -56,7 +57,6 @@
import com.cinchapi.concourse.importer.LegacyCsvImporter;
import com.cinchapi.concourse.importer.debug.ImportDryRunConcourse;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.base.CaseFormat;
import com.google.common.base.Stopwatch;
import com.google.common.base.Throwables;
@@ -150,7 +150,7 @@ public void run() {
if(options.verbose) {
System.out.println(records);
}
- System.out.println(Strings.format(
+ System.out.println(AnyStrings.format(
"Imported data into {} record{}",
records.size(), records.size() > 1 ? "s" : ""));
if(dryRun) {
@@ -287,7 +287,7 @@ public void run() {
if(options.verbose) {
System.out.println(records);
}
- System.out.println(Strings.format(
+ System.out.println(AnyStrings.format(
"Imported data into {} record{} in {} seconds",
records.size(), records.size() > 1 ? "s" : "", seconds));
if(dryRun) {
@@ -343,7 +343,7 @@ private static Constructor extends Importer> getConstructor(String type) {
clz = getCustomImporterClass(type);
}
catch (ClassNotFoundException e) {
- throw new RuntimeException(Strings
+ throw new RuntimeException(AnyStrings
.format("{} is not a valid importer type.", type));
}
}
@@ -440,7 +440,7 @@ else if(path.toString().endsWith(".jar")) {
}
}
else {
- throw new UnsupportedOperationException(Strings.format(
+ throw new UnsupportedOperationException(AnyStrings.format(
"{} is an unsupported file type for custom importers",
path));
}
diff --git a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/InsertTest.java b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/InsertTest.java
index d2e7e8f524..720a23e39a 100644
--- a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/InsertTest.java
+++ b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/InsertTest.java
@@ -22,9 +22,9 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.test.ConcourseIntegrationTest;
import com.cinchapi.concourse.thrift.Operator;
-import com.cinchapi.concourse.util.Strings;
import com.cinchapi.concourse.util.TestData;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Iterables;
@@ -131,7 +131,7 @@ long record = Iterables.getOnlyElement(client.find("foo = 20"));
Assert.assertEquals(
Sets.newHashSet(
Iterables.getOnlyElement(client.find("_id = 1"))),
- client.find(Strings.format("bar lnks2 {}", record)));
+ client.find(AnyStrings.format("bar lnks2 {}", record)));
}
@Test
diff --git a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/importer/ResolveKeyTest.java b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/importer/ResolveKeyTest.java
index ef26c8f298..14579e9297 100644
--- a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/importer/ResolveKeyTest.java
+++ b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/importer/ResolveKeyTest.java
@@ -23,9 +23,9 @@
import org.junit.Ignore;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.util.FileOps;
import com.cinchapi.concourse.util.Resources;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.collect.Iterables;
/**
@@ -57,7 +57,7 @@ public void testResolveKey() {
int i = 0;
for (String line : lines) {
if(i > 0) {
- String[] toks = Strings
+ String[] toks = AnyStrings
.splitStringByDelimiterButRespectQuotes(line, ",");
String ipedsId = toks[0];
Long record = Iterables.get(records, i);
diff --git a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/shell/ConcourseShellTest.java b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/shell/ConcourseShellTest.java
index 50af3095c3..eecf928f8c 100644
--- a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/shell/ConcourseShellTest.java
+++ b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/shell/ConcourseShellTest.java
@@ -21,10 +21,10 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.test.ConcourseIntegrationTest;
import com.cinchapi.concourse.util.Resources;
-import com.cinchapi.concourse.util.Strings;
import com.cinchapi.concourse.util.TestData;
/**
@@ -90,7 +90,7 @@ public void testSecurityChangeCausesCrash() throws Throwable {
public void testImportedClasssesAreAccessible() throws Throwable {
for (Class> clazz : ConcourseShell.IMPORTED_CLASSES) {
String variable = clazz.getSimpleName();
- String expected = Strings.format("Returned 'class {}'",
+ String expected = AnyStrings.format("Returned 'class {}'",
clazz.getName());
String actual = cash.evaluate(variable);
actual = actual.split(" in ")[0];
diff --git a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/MessageQueue.java b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/MessageQueue.java
index 4053ac2490..00db0f171e 100644
--- a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/MessageQueue.java
+++ b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/MessageQueue.java
@@ -33,10 +33,10 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.server.plugin.concurrent.FileLocks;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.collect.Maps;
/**
@@ -172,7 +172,7 @@ public MessageQueue(String file) {
});
acceptor.setDaemon(true);
acceptor.setUncaughtExceptionHandler((t, e) -> {
- RuntimeException ex = new RuntimeException(Strings.format(
+ RuntimeException ex = new RuntimeException(AnyStrings.format(
"Uncaught exception in Thread {}: {}", t, e), e);
ex.printStackTrace();
});
@@ -285,7 +285,7 @@ private void register() {
@Override
public String toString() {
- return Strings.format("MessageQueue[pending = {}]", messages);
+ return AnyStrings.format("MessageQueue[pending = {}]", messages);
}
}
diff --git a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/SharedMemory.java b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/SharedMemory.java
index 893c48770f..e334a71f62 100644
--- a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/SharedMemory.java
+++ b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/io/SharedMemory.java
@@ -32,11 +32,11 @@
import javax.annotation.concurrent.ThreadSafe;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.server.plugin.concurrent.FileLocks;
import com.cinchapi.concourse.util.ByteBuffers;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
@@ -441,7 +441,7 @@ public ByteBuffer read() {
@Override
public String toString() {
- return Strings.format(
+ return AnyStrings.format(
"SharedMemory[path={}, nextRead={}, nextWrite={}]", location,
nextRead.get(), nextWrite.get());
}
diff --git a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/util/Versions.java b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/util/Versions.java
index 0c26c544c0..97b0fdce1a 100644
--- a/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/util/Versions.java
+++ b/concourse-plugin-core/src/main/java/com/cinchapi/concourse/server/plugin/util/Versions.java
@@ -17,7 +17,7 @@
import java.util.Arrays;
-import com.cinchapi.concourse.util.Strings;
+import com.cinchapi.common.base.AnyStrings;
import com.github.zafarkhaja.semver.Version;
/**
@@ -47,7 +47,7 @@ public static Version parseSemanticVersion(String version) {
.append(toks[2]);
toks = toks[3].split("-");
if(toks.length > 1) {
- sb.append('-').append(Strings.join("-",
+ sb.append('-').append(AnyStrings.join("-",
(Object[]) Arrays.copyOfRange(toks, 1, toks.length)));
}
sb.append('+').append(toks[0]);
diff --git a/concourse-plugin-core/src/test/java/com/cinchapi/concourse/server/plugin/util/VersionsTest.java b/concourse-plugin-core/src/test/java/com/cinchapi/concourse/server/plugin/util/VersionsTest.java
index a083bd6656..a1fc3e8e7b 100644
--- a/concourse-plugin-core/src/test/java/com/cinchapi/concourse/server/plugin/util/VersionsTest.java
+++ b/concourse-plugin-core/src/test/java/com/cinchapi/concourse/server/plugin/util/VersionsTest.java
@@ -18,8 +18,8 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.util.Random;
-import com.cinchapi.concourse.util.Strings;
import com.github.zafarkhaja.semver.Version;
/**
@@ -36,8 +36,8 @@ public void testParseCinchapiSemanticVersion() {
int patch = Random.getScaleCount();
int build = Random.getScaleCount();
String snapshot = Random.getBoolean() ? "-SNAPSHOT" : "";
- String cinchapiVersion = Strings.format("{}.{}.{}.{}{}", major, minor,
- patch, build, snapshot);
+ String cinchapiVersion = AnyStrings.format("{}.{}.{}.{}{}", major,
+ minor, patch, build, snapshot);
Version version = Versions.parseSemanticVersion(cinchapiVersion);
Assert.assertEquals(major, version.getMajorVersion());
Assert.assertEquals(minor, version.getMinorVersion());
@@ -52,8 +52,8 @@ public void testParseCinchapiFeatureBranchSemanticVersion() {
int patch = 0;
int build = 26;
String snapshot = "-CON-512";
- String cinchapiVersion = Strings.format("{}.{}.{}.{}{}", major, minor,
- patch, build, snapshot);
+ String cinchapiVersion = AnyStrings.format("{}.{}.{}.{}{}", major,
+ minor, patch, build, snapshot);
Version version = Versions.parseSemanticVersion(cinchapiVersion);
Assert.assertEquals(major, version.getMajorVersion());
Assert.assertEquals(minor, version.getMinorVersion());
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/ConcourseServer.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/ConcourseServer.java
index 76c7d061bc..66cbb458bc 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/ConcourseServer.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/ConcourseServer.java
@@ -49,6 +49,7 @@
import com.cinchapi.ccl.Parser;
import com.cinchapi.ccl.syntax.AbstractSyntaxTree;
import com.cinchapi.ccl.util.NaturalLanguage;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.Constants;
import com.cinchapi.concourse.Link;
@@ -1789,10 +1790,8 @@ long record = Time.now();
return Iterables.getOnlyElement(records);
}
else {
- throw new DuplicateEntryException(
- com.cinchapi.concourse.util.Strings.joinWithSpace("Found",
- records.size(), "records that match", key, "=",
- value));
+ throw new DuplicateEntryException(AnyStrings.joinWithSpace("Found",
+ records.size(), "records that match", key, "=", value));
}
}
@@ -1825,9 +1824,8 @@ public long findOrInsertCclJson(String ccl, String json, AccessToken creds,
return Iterables.getOnlyElement(records);
}
else {
- throw new DuplicateEntryException(
- com.cinchapi.concourse.util.Strings.joinWithSpace("Found",
- records.size(), "records that match", ccl));
+ throw new DuplicateEntryException(AnyStrings.joinWithSpace("Found",
+ records.size(), "records that match", ccl));
}
}
@@ -1852,9 +1850,8 @@ public long findOrInsertCriteriaJson(TCriteria criteria, String json,
return Iterables.getOnlyElement(records);
}
else {
- throw new DuplicateEntryException(
- com.cinchapi.concourse.util.Strings.joinWithSpace("Found",
- records.size(), "records that match", parser));
+ throw new DuplicateEntryException(AnyStrings.joinWithSpace("Found",
+ records.size(), "records that match", parser));
}
}
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/cli/plugin/InstallPluginCli.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/cli/plugin/InstallPluginCli.java
index 2cd55d2401..dd4afc75a4 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/cli/plugin/InstallPluginCli.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/cli/plugin/InstallPluginCli.java
@@ -23,6 +23,7 @@
import org.apache.thrift.TException;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.cli.util.CommandLineInterfaces;
import com.cinchapi.concourse.server.cli.core.CommandLineInterfaceInformation;
import com.cinchapi.concourse.server.concurrent.Threads;
@@ -30,7 +31,6 @@
import com.cinchapi.concourse.server.management.ConcourseManagementService.Client;
import com.cinchapi.concourse.thrift.ManagementException;
import com.cinchapi.concourse.util.FileOps;
-import com.cinchapi.concourse.util.Strings;
/**
* A cli for installing plugins.
@@ -56,7 +56,7 @@ protected void doTask(Client client) {
String path = FileSystem.expandPath(plugin, getLaunchDirectory());
Path path0 = Paths.get(path);
if(Files.isDirectory(path0)) {
- System.out.println(Strings.format(
+ System.out.println(AnyStrings.format(
"Attempting to install plugin bundles from '{}'", path0));
AtomicInteger installed = new AtomicInteger(0);
FileOps.newDirectoryStream(path0).forEach((file) -> {
@@ -72,13 +72,13 @@ protected void doTask(Client client) {
}
}
else {
- System.err.println(Strings.format(
+ System.err.println(AnyStrings.format(
"[WARN] Skipping '{}' because it is a directory",
file));
}
});
- System.out
- .println(Strings.format("Installed a total of {} plugin{}",
+ System.out.println(
+ AnyStrings.format("Installed a total of {} plugin{}",
installed.get(), installed.get() == 1 ? "" : "s"));
}
else if(Files.exists(path0)) {
@@ -90,12 +90,11 @@ else if(Files.exists(path0)) {
}
}
else {
- throw new UnsupportedOperationException(
- com.cinchapi.concourse.util.Strings
- .format("Cannot download plugin bundle '{}'. Please "
- + "manually download the plugin and "
- + "provide its local path to the "
- + "installer", plugin));
+ throw new UnsupportedOperationException(AnyStrings.format(
+ "Cannot download plugin bundle '{}'. Please "
+ + "manually download the plugin and "
+ + "provide its local path to the " + "installer",
+ plugin));
}
}
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/EndpointContainer.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/EndpointContainer.java
index 06051bc2e5..d282ed365a 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/EndpointContainer.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/EndpointContainer.java
@@ -20,10 +20,10 @@
import java.util.List;
import com.cinchapi.common.base.AdHocIterator;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.server.ConcourseServer;
import com.cinchapi.concourse.util.Random;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.CaseFormat;
@@ -133,11 +133,11 @@ private static String getCanonicalNamespace(RoutingKey id) {
namespace = id.cls;
}
else {
- namespace = Strings.join('/', id.module, id.cls);
+ namespace = AnyStrings.join('/', id.module, id.cls);
}
}
else {
- namespace = Strings.join('/', id.group, id.module, id.cls);
+ namespace = AnyStrings.join('/', id.group, id.module, id.cls);
}
namespace = namespace.replace("Router", "");
namespace = namespace.replace("Index", "");
@@ -146,8 +146,8 @@ private static String getCanonicalNamespace(RoutingKey id) {
namespace = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,
namespace);
namespace = namespace.replaceAll("/-", "/");
- namespace = Strings.ensureStartsWith(namespace, "/");
- namespace = Strings.ensureEndsWith(namespace, "/");
+ namespace = AnyStrings.ensureStartsWith(namespace, "/");
+ namespace = AnyStrings.ensureEndsWith(namespace, "/");
return namespace;
}
@@ -237,12 +237,12 @@ protected Endpoint findNext() {
|| name.startsWith("upsert")
|| name.startsWith(
"options"))) {
- List args = Strings
+ List args = AnyStrings
.splitCamelCase(field.getName());
action = args.remove(0);
path = buildSparkPath(args);
}
- path = Strings.joinSimple(namespace, path);
+ path = AnyStrings.joinSimple(namespace, path);
Reflection.set("action", action, callable);
Reflection.set("path", path, callable);
return callable;
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/RoutingKey.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/RoutingKey.java
index 958716c034..3b7b3f367b 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/RoutingKey.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/RoutingKey.java
@@ -17,8 +17,8 @@
import javax.annotation.concurrent.Immutable;
-import com.cinchapi.concourse.util.StringSplitter;
-import com.cinchapi.concourse.util.Strings;
+import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.base.StringSplitter;
/**
* A {@link RoutingKey} contains information to uniquely identify a
@@ -128,7 +128,7 @@ private RoutingKey(String group, String module, String cls) {
@Override
public String toString() {
- return Strings.join(':', group, module, cls);
+ return AnyStrings.join(':', group, module, cls);
}
}
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/webserver/ConcourseHttpHandler.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/webserver/ConcourseHttpHandler.java
index 882ed75715..174470302f 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/http/webserver/ConcourseHttpHandler.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/http/webserver/ConcourseHttpHandler.java
@@ -32,12 +32,12 @@
import spark.webserver.NotConsumedException;
import com.cinchapi.common.base.AnyObjects;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.server.GlobalState;
import com.cinchapi.concourse.server.http.HttpAuthToken;
import com.cinchapi.concourse.server.http.HttpRequests;
-import com.cinchapi.concourse.util.Strings;
/**
* Simple Jetty Handler
@@ -225,7 +225,7 @@ public void doHandle(String target, Request baseRequest,
}
else {
String requestOrigin = request.getHeader("Origin");
- if(Strings.isSubString(requestOrigin,
+ if(AnyStrings.isSubString(requestOrigin,
GlobalState.HTTP_CORS_DEFAULT_ALLOW_ORIGIN)) {
response.addHeader(HEADER_ACCESS_CONTROL_ALLOW_ORIGIN,
requestOrigin);
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/ops/Operations.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/ops/Operations.java
index f52fbb11af..af3b02af0f 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/ops/Operations.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/ops/Operations.java
@@ -23,6 +23,7 @@
import com.cinchapi.ccl.Parser;
import com.cinchapi.ccl.syntax.AbstractSyntaxTree;
+import com.cinchapi.common.base.StringSplitter;
import com.cinchapi.concourse.Constants;
import com.cinchapi.concourse.Link;
import com.cinchapi.concourse.server.ConcourseServer.DeferredWrite;
@@ -44,7 +45,6 @@
import com.cinchapi.concourse.util.LinkNavigation;
import com.cinchapi.concourse.util.Numbers;
import com.cinchapi.concourse.util.Parsers;
-import com.cinchapi.concourse.util.StringSplitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/plugin/PluginManager.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/plugin/PluginManager.java
index a3a6f4797c..f8d1afe0c7 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/plugin/PluginManager.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/plugin/PluginManager.java
@@ -48,6 +48,7 @@
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.server.ConcourseServer;
@@ -68,7 +69,6 @@
import com.cinchapi.concourse.util.MorePaths;
import com.cinchapi.concourse.util.Queues;
import com.cinchapi.concourse.util.Resources;
-import com.cinchapi.concourse.util.Strings;
import com.cinchapi.concourse.util.ZipFiles;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Throwables;
@@ -461,7 +461,7 @@ public ComplexTObject invoke(String plugin, String method,
+ "configured to use the alias '{}' so it is not permitted. "
+ "Please invoke the plugin using its full qualified name"
: "No plugin with id or alias {} exists";
- throw new PluginException(Strings.format(message, clazz));
+ throw new PluginException(AnyStrings.format(message, clazz));
}
RemoteMethodRequest request = new RemoteMethodRequest(method, creds,
transaction, environment, args);
@@ -476,7 +476,7 @@ public ComplexTObject invoke(String plugin, String method,
}
else {
Logger.error("Plugin Exception:", response.error);
- throw new PluginException(Strings.format(
+ throw new PluginException(AnyStrings.format(
"An error occurred when invoking '{}' in '{}': ", method,
clazz, response.error));
}
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Engine.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Engine.java
index d1fa4ba9a6..c9f86724e1 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Engine.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Engine.java
@@ -37,6 +37,7 @@
import javax.annotation.concurrent.ThreadSafe;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.annotate.Authorized;
import com.cinchapi.concourse.annotate.DoNotInvoke;
import com.cinchapi.concourse.annotate.Restricted;
@@ -58,7 +59,6 @@
import com.cinchapi.concourse.thrift.TObject;
import com.cinchapi.concourse.time.Time;
import com.cinchapi.concourse.util.Logger;
-import com.cinchapi.concourse.util.Strings;
import com.google.common.base.MoreObjects;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
@@ -1039,7 +1039,7 @@ private class BufferTransportThread extends Thread {
* Construct a new instance.
*/
public BufferTransportThread() {
- super(Strings.joinSimple("BufferTransport [", environment, "]"));
+ super(AnyStrings.joinSimple("BufferTransport [", environment, "]"));
setDaemon(true);
setPriority(MIN_PRIORITY);
setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Stores.java b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Stores.java
index 2400430bed..2487e43dd8 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Stores.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/server/storage/Stores.java
@@ -17,11 +17,11 @@
import javax.annotation.concurrent.Immutable;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.concourse.Link;
import com.cinchapi.concourse.thrift.Operator;
import com.cinchapi.concourse.thrift.TObject;
import com.cinchapi.concourse.util.Convert;
-import com.cinchapi.concourse.util.Strings;
import com.cinchapi.concourse.util.TStrings;
import com.cinchapi.concourse.validate.Keys;
@@ -103,7 +103,7 @@ public static OperationParameters operationalize(Operator operator,
public static void validateWriteData(String key, TObject value) { // CON-21
if(!Keys.isWritable(key)) {
throw new IllegalArgumentException(
- Strings.joinWithSpace(key, "is not a valid key"));
+ AnyStrings.joinWithSpace(key, "is not a valid key"));
}
else if(value.isBlank()) {
throw new IllegalArgumentException(
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/util/Commands.java b/concourse-server/src/main/java/com/cinchapi/concourse/util/Commands.java
index ba85e01887..0deb9b61ed 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/util/Commands.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/util/Commands.java
@@ -20,6 +20,8 @@
import spark.utils.IOUtils;
import com.cinchapi.common.base.CheckedExceptions;
+import com.cinchapi.common.base.SplitOption;
+import com.cinchapi.common.base.StringSplitter;
/**
* Abstractions for system commands.
diff --git a/concourse-server/src/main/java/com/cinchapi/concourse/util/TStrings.java b/concourse-server/src/main/java/com/cinchapi/concourse/util/TStrings.java
index f001997b9d..e6de08b8f6 100644
--- a/concourse-server/src/main/java/com/cinchapi/concourse/util/TStrings.java
+++ b/concourse-server/src/main/java/com/cinchapi/concourse/util/TStrings.java
@@ -19,6 +19,8 @@
import org.apache.commons.lang.StringUtils;
+import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.base.StringSplitter;
import com.cinchapi.concourse.server.GlobalState;
import com.google.common.collect.Lists;
@@ -79,7 +81,7 @@ public static boolean isInfixSearchMatch(String[] needle,
}
String n = needle[npos];
String h = haystack[hpos];
- if(Strings.isSubString(n, h)) {
+ if(AnyStrings.isSubString(n, h)) {
++npos;
++hpos;
}
diff --git a/concourse-server/src/test/java/com/cinchapi/concourse/server/http/EndpointContainerTest.java b/concourse-server/src/test/java/com/cinchapi/concourse/server/http/EndpointContainerTest.java
index c3a0cb2a1e..78f6ae1210 100644
--- a/concourse-server/src/test/java/com/cinchapi/concourse/server/http/EndpointContainerTest.java
+++ b/concourse-server/src/test/java/com/cinchapi/concourse/server/http/EndpointContainerTest.java
@@ -21,7 +21,7 @@
import org.junit.Assert;
import org.junit.Test;
-import com.cinchapi.concourse.util.Strings;
+import com.cinchapi.common.base.AnyStrings;
/**
* Unit tests for {@link HttpPlugin}.
@@ -67,7 +67,7 @@ public void testGetCanonicalNamespaceAliasModule() {
@Test
public void testBuildSparkPath() {
Assert.assertEquals(":key/:record/audit",
- buildSparkPath(Strings.splitCamelCase("$Key$RecordAudit")));
+ buildSparkPath(AnyStrings.splitCamelCase("$Key$RecordAudit")));
}
}
diff --git a/concourse-server/src/test/java/com/cinchapi/concourse/util/TMapsTest.java b/concourse-server/src/test/java/com/cinchapi/concourse/util/TMapsTest.java
index b8732a275a..fbf4a2f7f8 100644
--- a/concourse-server/src/test/java/com/cinchapi/concourse/util/TMapsTest.java
+++ b/concourse-server/src/test/java/com/cinchapi/concourse/util/TMapsTest.java
@@ -24,6 +24,7 @@
import org.junit.Assert;
import org.junit.Test;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.profile.Benchmark;
import com.cinchapi.concourse.server.plugin.data.TObjectResultDataset;
import com.cinchapi.concourse.thrift.TObject;
@@ -98,12 +99,12 @@ public void action() {
latch.await();
double datasetTimeDigits = Math.ceil(Math.log10(datasetTime.get()));
double mapTimeDigits = Math.ceil(Math.log10(mapTime.get()));
- System.out.println(Strings.format("Dataset = {} {} with {} digits",
+ System.out.println(AnyStrings.format("Dataset = {} {} with {} digits",
datasetTime.get(), unit, datasetTimeDigits));
- System.out.println(Strings.format("Map = {} {} with {} digits",
+ System.out.println(AnyStrings.format("Map = {} {} with {} digits",
mapTime.get(), unit, mapTimeDigits));
Assert.assertTrue(
- Strings.format("Datset took {} {} and Map took {} {}",
+ AnyStrings.format("Datset took {} {} and Map took {} {}",
datasetTime.get(), unit, mapTime.get(), unit),
datasetTimeDigits - mapTimeDigits <= 1);
diff --git a/concourse-shell/src/main/java/com/cinchapi/concourse/shell/ConcourseShell.java b/concourse-shell/src/main/java/com/cinchapi/concourse/shell/ConcourseShell.java
index 2c43b5b30a..9a2ecfd51b 100644
--- a/concourse-shell/src/main/java/com/cinchapi/concourse/shell/ConcourseShell.java
+++ b/concourse-shell/src/main/java/com/cinchapi/concourse/shell/ConcourseShell.java
@@ -46,6 +46,7 @@
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
+import com.cinchapi.common.base.AnyStrings;
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.Concourse;
import com.cinchapi.concourse.Link;
@@ -353,8 +354,7 @@ private static String getHelpText(String topic) {
private static String tryGetCorrectApiMethod(String alias) {
String camel = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,
alias);
- String expanded = com.cinchapi.concourse.util.Strings
- .ensureStartsWith(camel, "concourse.");
+ String expanded = AnyStrings.ensureStartsWith(camel, "concourse.");
return methods.contains(expanded) && !camel.equals(alias) ? camel
: null;
}
From b1f651690a5b9280b93953dee99c241e100b95cd Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 18:11:00 -0500
Subject: [PATCH 02/10] Remove deprecated classes
---
.../util/QuoteAwareStringSplitter.java | 139 ------
.../cinchapi/concourse/util/SplitOption.java | 99 ----
.../concourse/util/StringSplitter.java | 445 ------------------
.../com/cinchapi/concourse/util/Strings.java | 400 ----------------
4 files changed, 1083 deletions(-)
delete mode 100644 concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
delete mode 100644 concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
delete mode 100644 concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
delete mode 100644 concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
deleted file mode 100644
index f41f5bf4b2..0000000000
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/QuoteAwareStringSplitter.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2013-2019 Cinchapi Inc.
- *
- * 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 com.cinchapi.concourse.util;
-
-/**
- * A {@link StringSplitter} that does not split on a delimiter if it falls
- * between single or double quotes
- *
- * @author Jeff Nelson
- * @deprecated use {@link com.cinchapi.common.base.QuoteAwareStringSplitter}
- * instead
- */
-@Deprecated
-public class QuoteAwareStringSplitter extends StringSplitter {
-
- /**
- * A flag that indicates whether the splitter is in the middle of a single
- * quoted token.
- */
- private boolean inSingleQuote = false;
-
- /**
- * A flag that indicates whether the splitter is in the middle of a double
- * quoted token.
- */
- private boolean inDoubleQuote = false;
-
- /**
- * We keep track of the previously seen char so we can determine in the
- * instance of a single quote is really an apostrophe or the beginning of a
- * quoted token.
- */
- private char previousChar = ' ';
-
- /**
- * The position where the most recent single quote character was found. We
- * keep track of this in case the single quote was actually an apostrophe.
- */
- private int singleQuotePos = -1;
-
- /**
- * Construct a new instance.
- *
- * @param string string the string to split
- */
- public QuoteAwareStringSplitter(String string) {
- super(string);
- }
-
- /**
- * Construct a new instance.
- *
- * @param string string the string to split
- * @param options an array of {@link SplitOption options} to supplement the
- * split behaviour
- */
- public QuoteAwareStringSplitter(String string, SplitOption... options) {
- super(string, options);
- }
-
- /**
- * Construct a new instance.
- *
- * @param string string the string to split
- * @param delimiter the delimiter upon which to split
- */
- public QuoteAwareStringSplitter(String string, char delimiter) {
- super(string, delimiter);
- }
-
- /**
- * Construct a new instance.
- *
- * @param string string the string to split
- * @param delimiter the delimiter upon which to split
- * @param options an array of {@link SplitOption options} to supplement the
- * split behaviour
- */
- public QuoteAwareStringSplitter(String string, char delimiter,
- SplitOption... options) {
- super(string, delimiter, options);
- }
-
- @Override
- protected boolean isReadyToSplit() {
- assert (inSingleQuote && inDoubleQuote) == false; // assert that we are
- // never both in the
- // context of having
- // both single and
- // double quotes
- return !inSingleQuote && !inDoubleQuote;
- }
-
- @Override
- protected void updateIsReadyToSplit(char c) {
- if(previousChar != '\\' && c == '\'' && !inDoubleQuote && (inSingleQuote
- || (!inSingleQuote && !Character.isLetter(previousChar)))) {
- // Assumes that occurrence of single quote only means single quote
- // if the previous char was not a letter (in which case we assume
- // the single quote is actually an apostrophe)
- inSingleQuote ^= true;
- singleQuotePos = pos - 1;
- }
- else if(previousChar != '\\' && c == '"' && !inSingleQuote) {
- inDoubleQuote ^= true;
- }
- previousChar = c;
- }
-
- @Override
- public boolean confirmSetNext() {
- if(inSingleQuote) {
- // If an attempt is made to set the next while we are in a single
- // quote we must backtrack because the single quote was actually an
- // apostrophe
- inSingleQuote = false;
- pos = singleQuotePos + 1;
- singleQuotePos = -1;
- return false;
- }
- else {
- return super.confirmSetNext();
- }
- }
-
-}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
deleted file mode 100644
index 20a6e3e43b..0000000000
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/SplitOption.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2013-2019 Cinchapi Inc.
- *
- * 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 com.cinchapi.concourse.util;
-
-/**
- * An option that can be passed to a {@link StringSplitter} to specify
- * additional split behaviour to supplement the delimiter (i.e. always splitting
- * on a newline).
- *
- * @author Jeff Nelson
- */
-@Deprecated
-public enum SplitOption {
- /**
- * Split on a newline character sequence (\n, \r\n, \r) in addition to
- * splitting on the delimiter. This is useful for simulating the reading a
- * string, line by line while also splitting on delimiters within that line
- * without traversing the string multiple times.
- */
- SPLIT_ON_NEWLINE(0),
-
- /**
- * In addition to splitting on the delimiter, split on an any kind of
- * parenthesis and return the same as an individual token.
- */
- TOKENIZE_PARENTHESIS(1),
-
- /**
- * For the {@link QuoteAwareStringSplitter} drop any quotes that surround a
- * quoted sequence that may contain a delimiter.
- */
- DROP_QUOTES(2),
-
- /**
- * Trim any leading and trailing whitespace from each token.
- */
- TRIM_WHITESPACE(3);
-
- /**
- * A constant that signifies no split options should be passed to the
- * {@link StringSplitter}.
- */
- public static SplitOption[] NONE = new SplitOption[] {};
-
- /**
- * The bit mask to use when flipping/checking the appropriate bit to
- * determine if this option is enabled.
- */
- private final int mask;
-
- /**
- * Construct a new instance.
- *
- * @param mask
- */
- private SplitOption(int mask) {
- this.mask = mask;
- }
-
- /**
- * Return the bit mask for this {@link SplitOption}. Always use this as
- * opposed to {@link #ordinal()}.
- *
- * @return the bit mask
- */
- public int mask() {
- return mask;
- }
-
- /**
- * Given a {@link StringSplitter} instance, check to see if this
- * {@link SplitOption option} is enabled. An option can be enabled by
- * passing it to the
- * {@link StringSplitter#StringSplitter(String, char, SplitOption...)
- * constructor}.
- *
- * @param splitter the {@link StringSplitter} to check
- * @return {@code true} if the bit corresponding to this option is set in
- * {@code options}
- */
- public boolean isEnabled(StringSplitter splitter) {
- // splitter.options is the value that results from enabling the
- // appropriate bits for all the enabled values.
- return (splitter.options & (1 << mask)) != 0;
- }
-}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
deleted file mode 100644
index 72b80e1831..0000000000
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/StringSplitter.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (c) 2013-2019 Cinchapi Inc.
- *
- * 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 com.cinchapi.concourse.util;
-
-import static com.cinchapi.concourse.util.SplitOption.*;
-
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import com.google.common.collect.Lists;
-
-/**
- * An in-place utility to traverse and split a string into substring.
- *
- * Unlike the {@link String#split(String)} method, this utility returns tokens
- * as they are split on the fly so the caller can process them in place. The
- * traditional {@link String#split(String)} approach must make at least two
- * passes over the string [O(n^2)] whereas this approach is guarantee to make a
- * single pass [O(n)].
- *
- *
- *
Usage
- *
- *
- * String string = "Please split this string by space";
- * StringSplitter splitter = new StringSplitter(string);
- * while (splitter.hasNext()) {
- * String next = splitter.next();
- * }
- *
- *
- *
- *
- * @author Jeff Nelson
- * @deprecated use {@link com.cinchapi.common.base.StringSplitter} instead
- */
-@Deprecated
-public class StringSplitter {
-
- /**
- * An integer that contains bits representing {@link SplitOption split
- * options} that have been enabled. To check whether an option is enabled do
- *
- *
- * return (options & (1 << option.mask())) != 0;
- *
- */
- protected final int options;
-
- /**
- * The current position of the splitter.
- */
- protected int pos = 0;
-
- /**
- * The char array of the string that is being split.
- */
- private char[] chars;
-
- /**
- * The delimiter to use for splitting.
- */
- private final char delimiter;
-
- /**
- * A flag that controls whether an attempt to split on a newline character
- * sequence should ignore the line feed character ('\n') because the
- * previous character was a carriage return (\r). Typically, a sequence of
- * \r\n is used by Windows to signify a newline.
- *
- *
- * This flag is only relevant if the option to {@link #splitOnNewline()} is
- * enabled.
- *
- */
- private boolean ignoreLF = false;
-
- /**
- * A flag that is set in the {@link #next()} method whenever it grabs a
- * {@link #next} token that was determined to be at the end of line. This
- * means that calls to {@link #atEndOfLine()} will return {@code true} until
- * the next call to {@link #next()}.
- */
- private boolean lastEOL = false;
-
- /**
- * The next string to return.
- */
- private String next = null;
-
- /**
- * A flag that is set in the {@link #findNext()} method whenever it
- * determines that the {@link #next} token to be returned is at the end of
- * line.
- */
- private boolean nextEOL = false;
-
- /**
- * A flag that controls whether we should allow {@link #findNext()} to set
- * {@link #next} to an empty string. Normally, whenever two delimiters
- * appear back to back, the splitter will return an empty string (i.e.
- * "foo,,bar,car" means that there is an empty token in the 2nd column).
- * However, when additional {@link #options} are passed to the splitter, it
- * may be unintuitive to return an empty string when we a character that is
- * relevant for one of the options and the delimiter appear back-to-back.
- */
- private boolean overrideEmptyNext = false;
-
- /**
- * The start of the next token.
- */
- private int start = 0;
-
- /**
- * Construct a new instance.
- *
- * @param string the string to split
- */
- public StringSplitter(String string) {
- this(string, ' ');
- }
-
- /**
- * Construct a new instance.
- *
- * @param string the string to split
- * @param delimiter the delimiter upon which to split
- */
- public StringSplitter(String string, char delimiter) {
- this(string, delimiter, SplitOption.NONE);
- }
-
- /**
- * Construct a new instance.
- *
- * @param string the string to split
- * @param delimiter the delimiter upon which to split
- * @param options an array of {@link SplitOption options} to supplement the
- * split behaviour
- */
- public StringSplitter(String string, char delimiter,
- SplitOption... options) {
- this.chars = string.toCharArray();
- this.delimiter = delimiter;
- int opts = 0;
- for (SplitOption option : options) {
- opts |= 1 << option.mask();
- }
- this.options = opts;
- findNext();
- }
-
- /**
- * Construct a new instance.
- *
- * @param string the string to split
- * @param options an array of {@link SplitOption options} to supplement the
- * split behaviour
- */
- public StringSplitter(String string, SplitOption... options) {
- this(string, ' ', options);
- }
-
- /**
- * Return {@code true} if {@link SplitOption#SPLIT_ON_NEWLINE} is
- * {@link SplitOption#isEnabled(StringSplitter) enabled} and the last token
- * returned by {@link #next()} is followed immediately by a line break.
- * Otherwise, return {@code false}.
- *
- * @return {@code true} if the last token returned was at the end of line
- */
- public boolean atEndOfLine() {
- return lastEOL;
- }
-
- /**
- * Return {@code true} if this splitter has any remaining substrings.
- *
- * @return {@code true} if there is another element
- */
- public boolean hasNext() {
- return next != null;
- }
-
- /**
- * Return the next substring that results from splitting the original source
- * string.
- *
- * @return the new substring
- */
- public String next() {
- if(next == null) {
- throw new NoSuchElementException();
- }
- else {
- String result = next;
- if(lastEOL) {
- lastEOL = false;
- }
- if(nextEOL) {
- lastEOL = true;
- nextEOL = false;
- }
- findNext();
- return result;
- }
- }
-
- /**
- * Reset the splitter.
- */
- public void reset() {
- pos = 0;
- start = 0;
- }
-
- /**
- * Return an array that contains all the tokens after traversing through the
- * entire split process.
- *
- * @return the tokens
- */
- public String[] toArray() {
- List toks = Lists.newArrayList();
- while (hasNext()) {
- toks.add(next());
- }
- return toks.toArray(new String[0]);
- }
-
- /**
- * Before an attempt is made to {@link #setNext() set the next token} do
- * some analysis on the internal state of the splitter to see if its
- * actually appropriate to do so. If the next token should not be set,
- * return {@code false} from this method and also optionally change the
- * {@link #pos} pointer to rewind the splitter.
- *
- * @return {@code true} if the splitter is indeed ready to set the next
- * token
- */
- protected boolean confirmSetNext() {
- return true;
- }
-
- /**
- * Determine, based on state factors that are recorded within the class, if
- * the splitter is actually ready to split the string on an instance of the
- * delimiter. By default, this method always returns {@code true}, but a
- * subclass can use it for awareness of certain conditions that would mean a
- * string should not be split on an instance of the delimiter (i.e. if the
- * delimiter occurs within quotes).
- *
- * @return {@code true} if the splitter is actually ready to perform a split
- */
- protected boolean isReadyToSplit() {
- return true;
- }
-
- /**
- * Given a character {@code c} that is processed by the splitter, update the
- * state that determines whether the splitter would actually be ready to
- * split in the event that it encounters a delimiter character.
- *
- * @param c
- */
- protected void updateIsReadyToSplit(char c) {/* noop */}
-
- /**
- * Find the next element to return.
- */
- private void findNext() {
- nextEOL = false;
- next = null;
- boolean resetOverrideEmptyNext = true;
- boolean processOverrideEmptyNext = true;
- while (pos < chars.length && next == null) {
- boolean resetIgnoreLF = true;
- char c = chars[pos];
- ++pos;
- if(c == delimiter && isReadyToSplit()) {
- setNext();
- }
- else if(SPLIT_ON_NEWLINE.isEnabled(this) && c == '\n'
- && isReadyToSplit()) {
- if(ignoreLF) {
- start = pos;
- }
- else {
- setNext();
- nextEOL = true;
- }
- }
- else if(SPLIT_ON_NEWLINE.isEnabled(this) && c == '\r'
- && isReadyToSplit()) {
- ignoreLF = true;
- resetIgnoreLF = false;
- setNext();
- nextEOL = true;
- }
- else if(TOKENIZE_PARENTHESIS.isEnabled(this)
- && (c == '(' || c == ')') && isReadyToSplit()) {
- setNext();
- if(next.isEmpty()) {
- next = Strings.valueOfCached(c);
- overrideEmptyNext = true;
- processOverrideEmptyNext = false;
- resetOverrideEmptyNext = false;
- }
- else {
- // Need to undo the modifications from #setNext() in order
- // to look at the parenthesis char again so it can be
- // returned as a single token via the if block above
- pos--;
- start = pos;
- }
- }
- // For SPLIT_ON_NEWLINE, we must reset #ignoreLF if the current char
- // is not == '\r'
- ignoreLF = resetIgnoreLF ? false : ignoreLF;
- updateIsReadyToSplit(c);
- }
- if(pos == chars.length && next == null) { // If we reach the end of the
- // string without finding
- // the delimiter, then set
- // next to be all the
- // remaining chars.
- if(confirmSetNext()) {
- int length = pos - start;
- if(length == 0) {
- next = "";
- }
- else {
- length = trim(length);
- next = String.valueOf(chars, start, length);
- }
- ++pos;
- }
- else {
- findNext();
- }
- }
- if(next != null && next.isEmpty()) {
- // For compatibility with String#split, we must detect if an empty
- // token occurs at the end of a string by trying to find the next
- // occurrence of a non delimiter char.
- boolean atEnd = true;
- for (int i = pos; i < chars.length; ++i) {
- if(chars[i] != delimiter) {
- atEnd = false;
- break;
- }
- }
- next = atEnd ? null : next;
- }
- // FOR TOKENIZE_PARENTHESIS, we must #overrideEmptyNext if the last
- // next was a single parenthesis in case the next char is a delimiter.
- // This prevents the appearance of having back-to-back delimiters.
- if(overrideEmptyNext && processOverrideEmptyNext) {
- if(next != null && next.isEmpty()) {
- findNext();
- }
- resetOverrideEmptyNext = true;
- }
- overrideEmptyNext = resetOverrideEmptyNext ? false : overrideEmptyNext;
- if(next != null && DROP_QUOTES.isEnabled(this)
- && Strings.isWithinQuotes(next)
- && this instanceof QuoteAwareStringSplitter) {
- next = next.substring(1, next.length() - 1);
- }
- }
-
- /**
- * Set the {@link #next} element based on the current {@link #pos} and the
- * {@link #start} of the search.
- *
- * The side effects of this method are:
- *
- * - {@code next} is set equal to all the chars from {@link #start} and
- * {@link #pos} - 2
- * - {@code start} is set equal to {@link #pos}
- * The char at {@link #pos} - 1 is "dropped". This character is usually
- * the delimiter, so it is okay to do this, but if there is a corner case,
- * the caller must explicitly handle that character
- *
- *
- */
- private void setNext() {
- if(confirmSetNext()) {
- int length = pos - start - 1;
- if(length == 0) {
- next = "";
- }
- else {
- length = trim(length);
- next = String.valueOf(chars, start, length);
- }
- start = pos;
- }
- else {
- findNext();
- }
- }
-
- /**
- * Given the desired {@code length} for the {@link #next} token, perform any
- * trimming of leading and trailing white space if
- * {@link SplitOption#TRIM_WHITESPACE}
- * {@link SplitOption#isEnabled(StringSplitter) is enabled}.
- *
- * This method will modify the global {@link #start} position for the
- * {@link #next} string. It returns the appropriate length to assign after
- * the trimming has been done.
- *
- *
- * @param length the length of the untrimmed {@link #next} string.
- * @return the appropriate length after the trimming
- */
- private int trim(int length) {
- if(SplitOption.TRIM_WHITESPACE.isEnabled(this)) {
- while (Character.isWhitespace(chars[start]) && length > 1) {
- start++;
- length--;
- }
- while (Character.isWhitespace(chars[(start + length) - 1])
- && length > 1) {
- length--;
- }
- }
- return length;
- }
-
-}
\ No newline at end of file
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
deleted file mode 100644
index e96d03c9f3..0000000000
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Strings.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (c) 2013-2019 Cinchapi Inc.
- *
- * 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 com.cinchapi.concourse.util;
-
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-import com.cinchapi.common.base.AnyStrings;
-import com.google.gson.JsonParseException;
-
-/**
- * Yet another collection of utility functions for Strings that tries to add new
- * functionality or optimize existing ones.
- *
- * @author Jeff Nelson
- * @deprecated in version 0.9.6; use {@link AnyStrings} instead
- */
-@Deprecated
-public final class Strings {
-
- /**
- * Ensure that {@code string} ends with {@code suffix} by appending it to
- * {@code string} if and only if it is not already the last sequence of
- * characters in the string.
- *
- * @param string the {@link String} to that should end with {@code suffix}
- * @param suffix the {@link String} of characters with which {@code string}
- * should end
- * @return {@code string} if it already ends with {@code suffix} or a new
- * {@link String} that contains {@code suffix} appended to
- * {@code string}
- */
- public static String ensureEndsWith(String string, String suffix) {
- return AnyStrings.ensureEndsWith(string, suffix);
- }
-
- /**
- * Ensure that {@code string} starts with {@code prefix} by prepending it to
- * {@code string} if and only if it is not already the first sequence of
- * characters in the string.
- *
- * @param string the {@link String} to that should start with {@code prefix}
- * @param prefix the {@link String} of characters with which {@code string}
- * should start
- * @return {@code string} if it already begins with {@code prefix} or a new
- * {@link String} that contains {@code prefix} prepended to
- * {@code string}
- */
- public static String ensureStartsWith(String string, String prefix) {
- return AnyStrings.ensureStartsWith(string, prefix);
- }
-
- /**
- * Ensure that {@code string} is surrounded by quotes. If that is not the
- * case, alter the string so that it is and return the altered form.
- *
- *
- * Calling {@link Strings#isWithinQuotes(String)} on the result of this
- * method will always return {@code true}.
- *
- *
- * @param string the string that must be quoted
- * @return {@code string} or {@code string} surrounded by quotes if it is
- * not already
- */
- public static String ensureWithinQuotes(String string) {
- return AnyStrings.ensureWithinQuotes(string);
- }
-
- /**
- * Wrap {@code string} within quotes if it is necessary to do so. Otherwise,
- * return the original {@code string}.
- *
- *
- * The original {@code string} will be wrapped in quotes and returned as
- * such if:
- *
- * - it is not already wrapped {@link #isWithinQuotes(String) within
- * quotes}, and
- * - {@code delimiter} appears at least once
- *
- * If those conditions are met, the original string will be wrapped in
- * either
- *
- * - double quotes if a single quote appears in the original string,
- * or
- * - single quotes if a double quote appears in the original string,
- * or
- * - double quotes if both a single and double quote appear in the
- * original string; furthermore, all instances of double quotes within the
- * original string will be escaped
- *
- *
- *
- * @param string the string to potentially quote
- * @param delimiter the delimiter that determines whether quoting should
- * happen
- * @return the original {@code string} or a properly quoted alternative
- */
- public static String ensureWithinQuotesIfNeeded(String string,
- char delimiter) {
- return AnyStrings.ensureWithinQuotesIfNeeded(string, delimiter);
- }
-
- /**
- * Efficiently escape inner occurrences of each of the {@code characters}
- * within the {@code string}, if necessary.
- *
- * Escaped characters are prepended with the backslash ('\') character.
- *
- *
- * An "inner occurrence" for a character is one that is not at the head or
- * tail of the string.
- *
- *
- * @param string the string to escape
- * @param characters the characters to escape within the {@code string}
- * @return the escaped {@code string}
- */
- public static String escapeInner(String string, char... characters) {
- return AnyStrings.escapeInner(string, characters);
- }
-
- /**
- * Replace all instances of "confusable" unicode characters with a
- * canoncial/normalized character.
- *
- * See http://www.unicode.org/Public/security/revision-03/confusablesSummary.
- * txt for a list of characters that are considered to be confusable.
- *
- *
- * @param string the {@link String} in which the replacements should occur
- * @return a {@link String} free of confusable unicode characters
- */
- public static String replaceUnicodeConfusables(String string) {
- return AnyStrings.replaceUnicodeConfusables(string);
- }
-
- /**
- * Perform string substitution and formatting in a manner that is similar to
- * the SLF4J library.
- *
- *
- * Strings#format("Bob is very {} because he has no {}", "brave", "fear") = "Bob is very brave because he has no fear"
- *
- *
- * NOTE: This method is less efficient than using a
- * {@link StringBuilder} and manually appending variable arguments for
- * interpolation. This is provided for convenience, but don't use it for
- * anything that is performance critical.
- *
- *
- * @param pattern the message pattern which will be parsed and formatted
- * @param params an array of arguments to be substituted in place of
- * formatting anchors
- * @return The formatted message
- */
- public static String format(String pattern, Object... params) {
- return AnyStrings.format(pattern, params);
- }
-
- /**
- * Return a set that contains every possible substring of {@code string}
- * excluding pure whitespace strings.
- *
- * @param string the string to divide into substrings
- * @return the set of substrings
- */
- public static Set getAllSubStrings(String string) {
- return AnyStrings.getAllSubStrings(string);
- }
-
- /**
- * An optimized version of {@link String#contains(CharSequence)} to see if
- * {@code needle} is a substring of {@code haystack}.
- *
- * @param needle the substring for which to search
- * @param haystack the string in which to search for the substring
- * @return {@code true} if {@code needle} is a substring
- */
- public static boolean isSubString(String needle, String haystack) {
- return AnyStrings.isSubString(needle, haystack);
- }
-
- /**
- * Return {@code true} if the {@code json} string is valid, otherwise return
- * {@code false}.
- *
- * @param json a json formatted string
- * @return {@code true} if the {@code json} is valid
- * @deprecated in version 0.9.6; use
- * {@link com.cinchapi.concourse.util.DataServices#jsonParser()#parse()}
- */
- @Deprecated
- public static boolean isValidJson(String json) {
- char first = json.charAt(0);
- char last = json.charAt(json.length() - 1);
- if((first == '[' || first == '{') && (last == ']' || last == '}')) {
- try {
- DataServices.jsonParser().parse(json);
- return true;
- }
- catch (JsonParseException e) {
- return false;
- }
- }
- else {
- return false;
- }
- }
-
- /**
- * Return {@code true} if {@code string} both starts and ends with single or
- * double quotes.
- *
- * @param string
- * @return {@code true} if the string is between quotes
- */
- public static boolean isWithinQuotes(String string) {
- return AnyStrings.isWithinQuotes(string);
- }
-
- /**
- * Concatenates the {@link Object#toString string} representation of all the
- * {@code args}, separated by the {@code separator} char in an efficient
- * manner.
- *
- * @param separator the separator to place between each of the {@code args}
- * @param args the args to join
- * @return the resulting String
- */
- public static String join(char separator, Object... args) {
- return AnyStrings.join(separator, args);
- }
-
- /**
- * Concatenates the {@link Object#toString string} representation of all the
- * {@code args}, separated by the {@code separator} string in an efficient
- * manner.
- *
- * @param separator the separator to place between each of the {@code args}
- * @param args the args to join
- * @return the resulting String
- */
- public static String join(String separator, Object... args) {
- return AnyStrings.join(separator, args);
- }
-
- /**
- * Concatenates the toString values of all the {@code args} in an efficient
- * manner.
- *
- * @param args
- * @return the resulting String
- */
- public static String joinSimple(Object... args) {
- return AnyStrings.joinSimple(args);
- }
-
- /**
- * Concatenates the toString values of all the {@code args}, separated by
- * whitespace in an efficient manner.
- *
- * @param args
- * @return the resulting String
- */
- public static String joinWithSpace(Object... args) {
- return AnyStrings.joinWithSpace(args);
- }
-
- /**
- * Split a string, using whitespace as a delimiter, as long as the
- * whitespace is not wrapped in double or single quotes.
- *
- * @param string
- * @return the tokens that result from the split
- * @deprecated in version 0.5.0, use {@link QuoteAwareStringSplitter}
- * instead.
- */
- @Deprecated
- public static String[] splitButRespectQuotes(String string) {
- return AnyStrings.splitButRespectQuotes(string);
- }
-
- /**
- * Split a camel case {@code string} into tokens that represent the distinct
- * words.
- *
- *
Example
- *
- * thisIsACamelCaseSTRING -> [this, Is, A, Camel, Case, S, T, R, I, N, G]
- *
- *
- * ThisIsACamelCaseSTRING -> [This, Is, A, Camel, Case, S, T, R, I, N, G]
- *
- *
- * thisisacamelcasestring -> [thisisacamelcasestring]
- *
- *
- *
- * @param string
- * @return a list of tokens after splitting the string on camel case word
- * boundaries
- */
- public static List splitCamelCase(String string) {
- return AnyStrings.splitCamelCase(string);
- }
-
- /**
- * Split a string on a delimiter as long as that delimiter is not wrapped in
- * double or single quotes.
- *
- * If {@code delimiter} is a single character string, it is more efficient
- * to use a {@link StringSplitter} as opposed to this method.
- *
- *
- * @param string the string to split
- * @param delimiter the delimiting string/regex on which the input
- * {@code string} is split
- * @return the tokens that result from the split
- */
- public static String[] splitStringByDelimiterButRespectQuotes(String string,
- String delimiter) {
- return AnyStrings.splitStringByDelimiterButRespectQuotes(string,
- delimiter);
- }
-
- /**
- * This method efficiently tries to parse {@code value} into a
- * {@link Boolean} object if possible. If the string is not a boolean, then
- * the method returns {@code null} as quickly as possible.
- *
- * @param value
- * @return a Boolean object that represents the string or {@code null} if it
- * is not possible to parse the string into a boolean
- */
- public static Boolean tryParseBoolean(String value) {
- return AnyStrings.tryParseBoolean(value);
- }
-
- /**
- * This method efficiently tries to parse {@code value} into a
- * {@link Number} object if possible. If the string is not a number, then
- * the method returns {@code null} as quickly as possible.
- *
- * @param value
- * @return a Number object that represents the string or {@code null} if it
- * is not possible to parse the string into a number
- */
- @Nullable
- public static Number tryParseNumber(String value) {
- return AnyStrings.tryParseNumber(value);
- }
-
- /**
- * A stricter version of {@link #tryParseNumber(String)} that does not parse
- * strings that masquerade as numbers (i.e. 3.124D). Instead this method
- * will only parse the string into a Number if it contains characters that
- * are either a decimal digit, a decimal separator or a negative sign.
- *
- * @param value
- * @return a Number object that represents the string or {@code null} if it
- * is not possible to parse the string into a number
- */
- @Nullable
- public static Number tryParseNumberStrict(String value) {
- return AnyStrings.tryParseNumberStrict(value);
- }
-
- /**
- * Similar to the {@link String#valueOf(char)} method, but this one will
- * return a cached copy of the string for frequently used characters.
- *
- * @param c the character to convert
- * @return a string of length 1 containing the input char
- */
- public static String valueOfCached(char c) {
- return AnyStrings.valueOfCached(c);
- }
-
- private Strings() {/* noop */}
-
-}
\ No newline at end of file
From c6df784882541c072a1c63fb6a48729aaa17119a Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 18:52:05 -0500
Subject: [PATCH 03/10] upgrade lib-config to fix failing unit tests
---
build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle b/build.gradle
index 1da84dc0d0..01e27b7ca3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -110,7 +110,7 @@ subprojects {
compile 'org.apache.thrift:libthrift:0.9.3'
compile 'commons-configuration:commons-configuration:1.9'
compile group: 'com.cinchapi', name: 'accent4j', version: '1.5.3', changing:true
- compile 'com.cinchapi:lib-config:1.3.1'
+ compile 'com.cinchapi:lib-config:1.5.1'
testCompile 'junit:junit:4.11'
}
From bc58cf54d9cc40160db3fccb2792e0b16e463de0 Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 20:25:31 -0500
Subject: [PATCH 04/10] upgrade bucket module to 1.5.0 to fix unti test failure
---
build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle b/build.gradle
index 01e27b7ca3..0c0dcfb180 100644
--- a/build.gradle
+++ b/build.gradle
@@ -125,7 +125,7 @@ subprojects {
version = globalVersion
// Versions for some shared (but non-global) dependencies
- ext.bucketVersion = '1.4.1'
+ ext.bucketVersion = '1.5.0'
// Drop the build component from version number and use that for
// publishing
From 06e08f4ea3de8413a14180a51464830b0ae64165 Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 21:02:34 -0500
Subject: [PATCH 05/10] CON-635: Add support for Criteria containing all
Unicode quote characters (#357)
* stage changes
* upgrade CCL module to 2.5.2
* javadoc update
* update changelog
---
CHANGELOG.md | 1 +
concourse-driver-java/build.gradle | 2 +-
.../com/cinchapi/concourse/lang/Language.java | 11 ++++-
.../cinchapi/concourse/bugrepro/CON635.java | 46 +++++++++++++++++++
4 files changed, 58 insertions(+), 2 deletions(-)
create mode 100644 concourse-integration-tests/src/test/java/com/cinchapi/concourse/bugrepro/CON635.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c45c09f976..7dab080f1e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@
#### Version 0.9.6 (TBD)
* Fixed a bug that caused a `ParseException` to be thrown when trying to use a `Criteria` object containing a string value wrapped in single or double quotes out of necessity (i.e. because the value contained a keyword). This bug happened because the wrapping quotes were dropped by Concourse Server when parsing the `Criteria`.
+* Fixed a bug where the CCL parser failed to handle some Unicode quote characters.
#### Version 0.9.5 (December 30, 2018)
* Fixed a bug where some of the `ManagedConcourseServer#get` methods in the `concourse-ete-test-core` package called the wrong upstream method of the Concourse Server instance under management. This had the effect of causing a runtime `ClassCastException` when trying to use those methods.
diff --git a/concourse-driver-java/build.gradle b/concourse-driver-java/build.gradle
index 7de10443ed..76ca9b2970 100644
--- a/concourse-driver-java/build.gradle
+++ b/concourse-driver-java/build.gradle
@@ -25,7 +25,7 @@ dependencies {
compile 'org.slf4j:log4j-over-slf4j:1.7.5'
compile 'org.slf4j:jcl-over-slf4j:1.7.5'
compile 'com.google.code.gson:gson:2.5'
- compile group: 'com.cinchapi', name: 'ccl', version:'2.5.1'
+ compile group: 'com.cinchapi', name: 'ccl', version:'2.5.2'
testCompile project(':concourse-unit-test-core')
testCompile 'com.github.marschall:memoryfilesystem:0.9.0'
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
index fc41344e3d..34269c2ad0 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
@@ -26,6 +26,7 @@
import com.cinchapi.ccl.grammar.TimestampSymbol;
import com.cinchapi.ccl.grammar.ValueSymbol;
import com.cinchapi.common.base.AnyStrings;
+import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.thrift.TCriteria;
import com.cinchapi.concourse.thrift.TSymbol;
import com.cinchapi.concourse.thrift.TSymbolType;
@@ -39,6 +40,13 @@
*/
public final class Language {
+ /**
+ * The character that indicates a String should be treated as a
+ * {@link com.cinchapi.concourse.Tag}.
+ */
+ private static final char TAG_MARKER = Reflection.getStatic("TAG_MARKER",
+ Convert.class); // (authorized)
+
/**
* Translate the {@link TSymbol} to its Java analog.
*
@@ -55,7 +63,8 @@ else if(tsymbol.getType() == TSymbolType.KEY) {
else if(tsymbol.getType() == TSymbolType.VALUE) {
Object symbol = Convert.stringToJava(tsymbol.getSymbol());
if(symbol instanceof String && !symbol.equals(tsymbol.getSymbol())
- && AnyStrings.isWithinQuotes(tsymbol.getSymbol())) {
+ && AnyStrings.isWithinQuotes(tsymbol.getSymbol(),
+ TAG_MARKER)) {
// CON-634: This is an obscure corner case where the surrounding
// quotes on the original tsymbol were necessary to escape a
// keyword, but got dropped because of the logic in
diff --git a/concourse-integration-tests/src/test/java/com/cinchapi/concourse/bugrepro/CON635.java b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/bugrepro/CON635.java
new file mode 100644
index 0000000000..836036e406
--- /dev/null
+++ b/concourse-integration-tests/src/test/java/com/cinchapi/concourse/bugrepro/CON635.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2013-2019 Cinchapi Inc.
+ *
+ * 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 com.cinchapi.concourse.bugrepro;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.cinchapi.concourse.lang.Criteria;
+import com.cinchapi.concourse.test.ConcourseIntegrationTest;
+import com.cinchapi.concourse.thrift.Operator;
+
+/**
+ * Repro of http://jira.cinchapi.com/browse/CON-635
+ *
+ * @author Jeff Nelson
+ */
+public class CON635 extends ConcourseIntegrationTest {
+
+ @Test
+ public void repro1() {
+ client.find(Criteria.where().key("foo").operator(Operator.EQUALS)
+ .value("Foo’s"));
+ Assert.assertTrue(true); // lack of Exception means test passes
+ }
+
+ @Test
+ public void repor2() {
+ client.find(Criteria.where().key("foo").operator(Operator.EQUALS)
+ .value("“A and B”"));
+ Assert.assertTrue(true); // lack of Exception means test passes
+ }
+
+}
From fc46a73e60d3bc162144595f3248aba67038d17a Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Sat, 16 Feb 2019 21:16:37 -0500
Subject: [PATCH 06/10] add release date
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7dab080f1e..28819f1ff5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,7 +13,7 @@
* Removed the `Strings` utility class in favor of `AnyStrings` from `accent4j`.
* Removed the `StringSplitter` framework in favor of the same from `accent4j`.
-#### Version 0.9.6 (TBD)
+#### Version 0.9.6 (February 16, 2019)
* Fixed a bug that caused a `ParseException` to be thrown when trying to use a `Criteria` object containing a string value wrapped in single or double quotes out of necessity (i.e. because the value contained a keyword). This bug happened because the wrapping quotes were dropped by Concourse Server when parsing the `Criteria`.
* Fixed a bug where the CCL parser failed to handle some Unicode quote characters.
From a4cc5cb8689b309261a74d6b55b5d09a528c33ba Mon Sep 17 00:00:00 2001
From: Jeff Nelson
Date: Mon, 20 May 2019 12:53:32 -0500
Subject: [PATCH 07/10] Improve handling of implicitly built Criteria (#366)
* Refactor Criteria to be an interface that applies to all buildable states
* Remove driver methods that took a generic Object criteria parameter. These are now unnecessary since the Criteria interface is implemented by BuiildableState
* update changelog
* fix formatting
* Deprecate Criteria#getCclString in favor of Criteria#ccl
* make method final
* Revert "make method final"
This reverts commit 367400ba07f7f31b33f379713bb85b56af8e6a6e.
---
CHANGELOG.md | 2 +
.../com/cinchapi/concourse/Concourse.java | 435 ------------------
.../concourse/ConcourseThriftDriver.java | 152 ------
.../java/com/cinchapi/concourse/Link.java | 2 +-
.../concourse/lang/BuildableStartState.java | 2 +-
.../concourse/lang/BuildableState.java | 28 +-
.../concourse/lang/BuiltCriteria.java | 165 +++++++
.../com/cinchapi/concourse/lang/Criteria.java | 125 +----
.../com/cinchapi/concourse/lang/KeyState.java | 2 +-
.../com/cinchapi/concourse/lang/Language.java | 4 +-
.../concourse/lang/OperatorState.java | 2 +-
.../cinchapi/concourse/lang/StartState.java | 2 +-
.../com/cinchapi/concourse/lang/State.java | 6 +-
.../concourse/lang/TimestampState.java | 2 +-
.../cinchapi/concourse/lang/ValueState.java | 2 +-
.../com/cinchapi/concourse/util/Parsers.java | 10 +-
.../cinchapi/concourse/lang/CriteriaTest.java | 8 +-
.../server/ManagedConcourseServer.java | 83 ----
.../importer/debug/ImportDryRunConcourse.java | 73 ---
.../cinchapi/concourse/FindCriteriaTest.java | 19 +-
.../cinchapi/concourse/lang/ParserTest.java | 58 +--
21 files changed, 268 insertions(+), 914 deletions(-)
create mode 100644 concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuiltCriteria.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 28819f1ff5..65f593a648 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,8 @@
* The `Transform` class contains functions for common data transformations.
* Removed the `Strings` utility class in favor of `AnyStrings` from `accent4j`.
* Removed the `StringSplitter` framework in favor of the same from `accent4j`.
+* Refactored the `Criteria` class into an interface that is implemented by any language symbols that can be immediately transformed to a well-built criteria (e.g. `ValueState` and `TimestampState`). The primary benefit of this change is that methods that took a generic Object parameter and checked whether that object could be built into a `Criteria` have now been removed from the `Concourse` driver since that logic is automatically captured within the new class hiearchy. Another positive side effect of this change is that it is no longer necessary to explicitly build a nested `Criteria` when using the `group` functionality of the `Criteria` builder.
+* Deprecated `Criteria#getCclString` in favor of `Criteria#ccl`.
#### Version 0.9.6 (February 16, 2019)
* Fixed a bug that caused a `ParseException` to be thrown when trying to use a `Criteria` object containing a string value wrapped in single or double quotes out of necessity (i.e. because the value contained a keyword). This bug happened because the wrapping quotes were dropped by Concourse Server when parsing the `Criteria`.
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Concourse.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Concourse.java
index f7ee0309dc..e702336dd2 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Concourse.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Concourse.java
@@ -827,25 +827,6 @@ public abstract Map>> diff(String key,
*/
public abstract Set find(Criteria criteria);
- /**
- * Return the set of records that satisfy the {@code criteria}.
- *
- * This method is syntactic sugar for {@link #find(Criteria)}. The only
- * difference is that this method takes a in-process {@link Criteria}
- * building sequence for convenience.
- *
- *
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired records
- * @return the records that match the {@code criteria}
- */
- public abstract Set find(Object criteria); // this method exists in
- // case the caller
- // forgets
- // to called #build() on
- // the CriteriaBuilder
-
/**
* Return the set of records that satisfy the {@code ccl} filter.
*
@@ -1444,59 +1425,6 @@ public abstract Map get(Collection keys,
public abstract Map get(Collection keys, long record,
Timestamp timestamp);
- /**
- * For each of the {@code keys} in every record that matches the
- * {@code criteria}, return the stored value that was most recently
- * added.
- *
- * This method is syntactic sugar for {@link #get(Collection, Criteria)}.
- * The only difference is that this method takes a in-process
- * {@link Criteria} building sequence for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} to the freshest
- * value in the field
- */
- public abstract Map> get(Collection keys,
- Object criteria);
-
- /**
- * For each of the {@code keys} in every record that matches the
- * {@code criteria}, return the stored value that was most recently
- * added at {@code timestamp}.
- *
- * This method is syntactic sugar for
- * {@link #get(Collection, Criteria, Timestamp)}. The only difference is
- * that this method takes a in-process {@link Criteria} building sequence
- * for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} to the freshest
- * value in the field at {@code timestamp}
- */
- public abstract Map> get(Collection keys,
- Object criteria, Timestamp timestamp);
-
/**
* For each of the {@code keys} in every record that matches the {@code ccl}
* filter, return the stored value that was most recently added.
@@ -1567,43 +1495,6 @@ public abstract Map> get(Collection keys,
public abstract Map> get(Criteria criteria,
Timestamp timestamp);
- /**
- * For every key in every record that matches the {@code criteria}, return
- * the stored value that was most recently added.
- *
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the record's keys to the freshest
- * value in the field
- */
- public abstract Map> get(Object criteria);
-
- /**
- * For every key in every record that matches the {@code criteria}, return
- * the stored value that was most recently added at {@code timestamp}.
- *
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the record's keys to the freshest
- * value in the field at {@code timestamp}
- */
- public abstract Map> get(Object criteria,
- Timestamp timestamp);
-
/**
* For every key in every record that matches the {@code ccl} filter, return
* the stored value that was most recently added.
@@ -1747,55 +1638,6 @@ public final T get(String key, Long record, Timestamp timestamp) {
return get(key, record.longValue(), timestamp);
}
- /**
- * For every record that matches the {@code criteria}, return the stored
- * value in the {@code key} field that was most recently added.
- *
- * This method is syntactic sugar for {@link #get(String, Criteria)}. The
- * only difference is that this method takes a in-process {@link Criteria}
- * building sequence for convenience.
- *
- *
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the record's keys to the freshest
- * value in the field
- */
- public abstract Map get(String key, Object criteria);
-
- /**
- * For every record that matches the {@code criteria}, return the
- * stored value in the {@code key} field that was most recently added at
- * {@code timestamp}.
- *
- * This method is syntactic sugar for
- * {@link #get(String, Criteria, Timestamp)}. The only difference is that
- * this method takes a in-process {@link Criteria} building sequence for
- * convenience.
- *
- *
- * @param key the field name
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to the
- * freshest value in the {@code key} field
- */
- public abstract Map get(String key, Object criteria,
- Timestamp timestamp);
-
/**
* For every record that matches the {@code ccl} filter, return the
* stored value in the {@code key} field that was most recently added.
@@ -2437,68 +2279,6 @@ public abstract Map>> navigate(
public abstract Map>> navigate(
Collection keys, long record, Timestamp timestamp);
- /**
- * Traverse the document-graph along each of the navigation {@code keys},
- * starting at each of the records that match the {@code criteria} and
- * return the data contained at each of the destinations.
- *
- * @param keys a collection of navigation keys
- * @param criteria a {@link Criteria} that contains a well-formed filter for
- * the desired records
- * @return a {@link Map} associating each of the destination {@code records}
- * to another {@link Map} associating each of the destination
- * {@code keys} to a {@link Set} containing all the values stored in
- * the respective fields
- * @see https://docs.cinchapi.com/concourse/guide/glossary/#navigation-key
- */
- public final Map>> navigate(
- Collection keys, Object criteria) {
- if(criteria instanceof BuildableState) {
- return navigate(keys, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the navigate method");
- }
- }
-
- /**
- * Traverse the document-graph at {@code timestamp} along each of the
- * navigation {@code keys}, starting at each of the records that matched the
- * {@code criteria} and return the data contained at each of the
- * destinations at {@code timestamp}.
- *
- * @param keys a collection of navigation keys
- * @param criteria a {@link Criteria} that contains a well-formed filter for
- * the desired records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the destination {@code records}
- * to another {@link Map} associating each of the destination
- * {@code keys} to a {@link Set} containing all the values stored in
- * the respective fields at {@code timestamp}
- * @see https://docs.cinchapi.com/concourse/guide/glossary/#navigation-key
- */
- public final Map>> navigate(
- Collection keys, Object criteria, Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return navigate(keys, ((BuildableState) criteria).build(),
- timestamp);
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the navigate method");
- }
- }
-
/**
* Traverse the document-graph along each of the navigation {@code keys},
* starting at each of the records that match the {@code criteria} and
@@ -2705,68 +2485,6 @@ public final Map> navigate(String key, Long record,
return navigate(key, record.longValue(), timestamp);
}
- /**
- * Return all the values stored for {@code key} in every record that
- * matches the {@link Criteria} filter. Navigates through the key splited
- * with dot(.) operator.
- *
- * Iterates only if the key has a link as value which
- * points to another record.
- *
- *
- * @param key the field name
- * @param ccl a well-formed criteria expressed using the Concourse Criteria
- * Language
- * @return a {@link Map} associating each of the the matching records to a
- * {@link Set} containing all the values stored in the respective
- * field
- */
- public final Map> navigate(String key, Object criteria) {
- if(criteria instanceof BuildableState) {
- return navigate(key, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the navigate method");
- }
- }
-
- /**
- * Return all the values stored for {@code key} in every record that
- * matches the {@link Criteria} filter. Navigates through the key splited
- * with dot(.) operator.
- *
- * Iterates only if the key has a link as value which
- * points to another record.
- *
- *
- * @param key the field name
- * @param ccl a well-formed criteria expressed using the Concourse Criteria
- * Language
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the the matching records to a
- * {@link Set} containing all the values stored in the respective
- * field
- */
- public final Map> navigate(String key, Object criteria,
- Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return navigate(key, ((BuildableState) criteria).build(),
- timestamp);
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the navigate method");
- }
- }
-
/**
* Return all the values stored for {@code key} in every record that
* matches the {@code ccl} filter. Navigates through the key splited
@@ -3113,59 +2831,6 @@ public abstract Map> select(Collection keys,
public abstract Map> select(Collection keys,
long record, Timestamp timestamp);
- /**
- * Return all the values stored for each of the {@code keys} in every record
- * that matches the {@code criteria}.
- *
- * This method is syntactic sugar for {@link #select(Collection, Criteria)}.
- * The only difference is that this method takes a in-process
- * {@link Criteria} building sequence for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} in that record
- * to a {@link Set} containing all the values stored in the
- * respective field
- */
- public abstract Map>> select(
- Collection keys, Object criteria);
-
- /**
- * Return all the values stored for each of the {@code keys} at
- * {@code timestamp} in every record that matches the {@code criteria}.
- *
- * This method is syntactic sugar for
- * {@link #select(Collection, Criteria, Timestamp)}. The only difference is
- * that this method takes a in-process {@link Criteria} building sequence
- * for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} in that record
- * to a {@link Set} containing all the values stored in the
- * respective field at {@code timestamp}
- */
- public abstract Map>> select(
- Collection keys, Object criteria, Timestamp timestamp);
-
/**
* Return all the values stored for each of the {@code keys} in every record
* that matches the {@code ccl} filter.
@@ -3303,56 +2968,6 @@ public final Map> select(Long record,
return select(record.longValue(), timestamp);
}
- /**
- * Return all the data from every record that matches {@code criteria}.
- *
- * This method is syntactic sugar for {@link #select(Criteria)}. The only
- * difference is that this method takes a in-process {@link Criteria}
- * building sequence for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} in that record
- * to a {@link Set} containing all the values stored in the
- * respective field
- */
- public abstract Map>> select(Object criteria);
-
- /**
- * Return all the data at {@code timestamp} from every record that
- * matches the {@code criteria}.
- *
- * This method is syntactic sugar for {@link #select(Criteria, Timestamp)}.
- * The only difference is that this method takes a in-process
- * {@link Criteria} building sequence for convenience.
- *
- *
- * @param keys a collection of field names
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to another
- * {@link Map} associating each of the {@code keys} in that record
- * to a {@link Set} containing all the values stored in the
- * respective field at {@code timestamp}
- */
- public abstract Map>> select(Object criteria,
- Timestamp timestamp);
-
/**
* Return all the data from every record that matches {@code ccl} filter.
*
@@ -3496,56 +3111,6 @@ public final Set select(String key, Long record,
return select(key, record.longValue(), timestamp);
}
- /**
- * Return all the values stored for {@code key} in every record that
- * matches the {@code criteria}.
- *
- * This method is syntactic sugar for {@link #select(String, Criteria)}. The
- * only difference is that this method takes a in-process {@link Criteria}
- * building sequence for convenience.
- *
- *
- * @param key the field name
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @return a {@link Map} associating each of the matching records to a
- * {@link Set} containing all the values stored in the respective
- * field
- */
- public abstract Map> select(String key, Object criteria);
-
- /**
- * Return all the values stored for {@code key} at {@code timestamp} in
- * every record that matches the {@code criteria}.
- *
- * This method is syntactic sugar for
- * {@link #select(String, Criteria, Timestamp)}. The only difference is that
- * this method takes a in-process {@link Criteria} building sequence for
- * convenience.
- *
- *
- * @param key the field name
- * @param criteria an in-process {@link Criteria} building sequence that
- * contains an {@link BuildableState#build() unfinalized},
- * but well-formed filter for the desired
- * records
- * @param timestamp a {@link Timestamp} that represents the historical
- * instant to use in the lookup – created from either a
- * {@link Timestamp#fromString(String) natural language
- * description} of a point in time (i.e. two weeks ago), OR
- * the {@link Timestamp#fromMicros(long) number
- * of microseconds} since the Unix epoch, OR
- * a {@link Timestamp#fromJoda(org.joda.time.DateTime) Joda
- * DateTime} object
- * @return a {@link Map} associating each of the matching records to a
- * {@link Set} containing all the values stored in the respective
- * field at {@code timestamp}
- */
- public abstract Map> select(String key, Object criteria,
- Timestamp timestamp);
-
/**
* Return all the values stored for {@code key} in every record that
* matches the {@code ccl} filter.
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/ConcourseThriftDriver.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/ConcourseThriftDriver.java
index a500bcf3e2..dee609f25a 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/ConcourseThriftDriver.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/ConcourseThriftDriver.java
@@ -36,7 +36,6 @@
import com.cinchapi.common.base.CheckedExceptions;
import com.cinchapi.concourse.config.ConcourseClientPreferences;
-import com.cinchapi.concourse.lang.BuildableState;
import com.cinchapi.concourse.lang.Criteria;
import com.cinchapi.concourse.lang.Language;
import com.cinchapi.concourse.security.ClientSecurity;
@@ -830,17 +829,6 @@ public Set find(Criteria criteria) {
});
}
- @Override
- public Set find(Object criteria) {
- if(criteria instanceof BuildableState) {
- return find(((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the find method");
- }
- }
-
@Override
public Set find(String ccl) {
return execute(() -> {
@@ -1063,30 +1051,6 @@ public Map get(Collection keys, long record,
});
}
- @Override
- public Map> get(Collection keys,
- Object criteria) {
- if(criteria instanceof BuildableState) {
- return get(keys, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
- @Override
- public Map> get(Collection keys,
- Object criteria, Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return get(keys, ((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
@Override
public Map> get(Collection keys,
String ccl) {
@@ -1172,29 +1136,6 @@ public Map> get(Criteria criteria,
});
}
- @Override
- public Map> get(Object criteria) {
- if(criteria instanceof BuildableState) {
- return get(((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
- @Override
- public Map> get(Object criteria,
- Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return get(((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
@Override
public Map> get(String ccl) {
return execute(() -> {
@@ -1324,29 +1265,6 @@ public T get(String key, long record, Timestamp timestamp) {
});
}
- @Override
- public Map get(String key, Object criteria) {
- if(criteria instanceof BuildableState) {
- return get(key, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
- @Override
- public Map get(String key, Object criteria,
- Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return get(key, ((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
@SuppressWarnings("unchecked")
@Override
public Map get(String key, String ccl) {
@@ -2112,30 +2030,6 @@ public Map> select(Collection keys, long record,
});
}
- @Override
- public Map>> select(Collection keys,
- Object criteria) {
- if(criteria instanceof BuildableState) {
- return select(keys, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the select method");
- }
- }
-
- @Override
- public Map>> select(Collection keys,
- Object criteria, Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return select(keys, ((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the select method");
- }
- }
-
@Override
public Map>> select(Collection keys,
String ccl) {
@@ -2266,29 +2160,6 @@ public Map> select(long record, Timestamp timestamp) {
});
}
- @Override
- public Map>> select(Object criteria) {
- if(criteria instanceof BuildableState) {
- return select(((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
- @Override
- public Map>> select(Object criteria,
- Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return select(((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(
- criteria + " is not a valid argument for the get method");
- }
- }
-
@Override
public Map>> select(String ccl) {
return execute(() -> {
@@ -2420,29 +2291,6 @@ public Set select(String key, long record, Timestamp timestamp) {
});
}
- @Override
- public Map> select(String key, Object criteria) {
- if(criteria instanceof BuildableState) {
- return select(key, ((BuildableState) criteria).build());
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the select method");
- }
- }
-
- @Override
- public Map> select(String key, Object criteria,
- Timestamp timestamp) {
- if(criteria instanceof BuildableState) {
- return select(key, ((BuildableState) criteria).build(), timestamp);
- }
- else {
- throw new IllegalArgumentException(criteria
- + " is not a valid argument for the select method");
- }
- }
-
@Override
public Map> select(String key, String ccl) {
return execute(() -> {
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
index 3bdf08261e..52f87280b7 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/Link.java
@@ -118,7 +118,7 @@ public static String toWhere(String ccl) {
* resolvable link instruction}
*/
public static String toWhere(Criteria criteria) {
- return toWhere(criteria.getCclString());
+ return toWhere(criteria.ccl());
}
/**
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableStartState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableStartState.java
index 9e8fa903a9..7351441efc 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableStartState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableStartState.java
@@ -30,7 +30,7 @@ public class BuildableStartState extends BuildableState {
*
* @param criteria
*/
- protected BuildableStartState(Criteria criteria) {
+ protected BuildableStartState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableState.java
index b1d06f0d84..515849a6ee 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuildableState.java
@@ -15,7 +15,11 @@
*/
package com.cinchapi.concourse.lang;
+import java.util.List;
+
import com.cinchapi.ccl.grammar.ConjunctionSymbol;
+import com.cinchapi.ccl.grammar.Symbol;
+import com.cinchapi.concourse.Timestamp;
/**
* The base class for a language state that can be transformed into a complete
@@ -23,14 +27,14 @@
*
* @author Jeff Nelson
*/
-public abstract class BuildableState extends State {
+public abstract class BuildableState extends State implements Criteria {
/**
* Construct a new instance.
*
* @param criteria
*/
- protected BuildableState(Criteria criteria) {
+ protected BuildableState(BuiltCriteria criteria) {
super(criteria);
}
@@ -64,4 +68,24 @@ public StartState or() {
return new StartState(criteria);
}
+ @Override
+ public Criteria at(Timestamp timestamp) {
+ return build().at(timestamp);
+ }
+
+ @Override
+ public final String ccl() {
+ return build().ccl();
+ }
+
+ @Override
+ public final List symbols() {
+ return build().symbols();
+ }
+
+ @Override
+ public final String toString() {
+ return build().toString();
+ }
+
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuiltCriteria.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuiltCriteria.java
new file mode 100644
index 0000000000..8760b660e6
--- /dev/null
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/BuiltCriteria.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2013-2019 Cinchapi Inc.
+ *
+ * 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 com.cinchapi.concourse.lang;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import com.cinchapi.ccl.Parser;
+import com.cinchapi.ccl.Parsing;
+import com.cinchapi.ccl.grammar.Expression;
+import com.cinchapi.ccl.grammar.ParenthesisSymbol;
+import com.cinchapi.ccl.grammar.Symbol;
+import com.cinchapi.ccl.grammar.TimestampSymbol;
+import com.cinchapi.common.reflect.Reflection;
+import com.cinchapi.concourse.Timestamp;
+import com.cinchapi.concourse.util.Parsers;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+
+/**
+ * A {@link Criteria} that has been {@link BuildableState#build()}.
+ *
+ * @author Jeff Nelson
+ */
+public class BuiltCriteria implements Criteria {
+
+ /**
+ * A flag that indicates whether this {@link Criteria} has been built.
+ */
+ private boolean built = false;
+
+ /**
+ * The collection of {@link Symbol}s that make up this {@link Criteria}.
+ */
+ List symbols;
+
+ /**
+ * Construct a new instance.
+ */
+ protected BuiltCriteria() {
+ this.symbols = Lists.newArrayList();
+ }
+
+ /**
+ * Return this {@link Criteria} with each expression (e.g. {key} {operator}
+ * {values}) pinned to the specified {@code timestamp}.
+ *
+ * NOTE: Any timestamps that are pinned to any expressions
+ * within this Criteria will be replaced by the specified {@code timestamp}.
+ *
+ * @param timestamp the {@link Timestamp} to which the returned
+ * {@link Criteria} is pinned
+ *
+ * @return this {@link Criteria} pinned to {@code timestamp}
+ */
+ public Criteria at(Timestamp timestamp) {
+ Parser parser = Parsers.create(ccl());
+ List symbols = Parsing.groupExpressions(parser.tokenize());
+ TimestampSymbol ts = new TimestampSymbol(timestamp.getMicros());
+ symbols.forEach((symbol) -> {
+ if(symbol instanceof Expression) {
+ Expression expression = (Expression) symbol;
+ Reflection.set("timestamp", ts, expression); // (authorized)
+ }
+ });
+ BuiltCriteria criteria = new BuiltCriteria();
+ symbols = Parsing.ungroupExpressions(symbols);
+ criteria.symbols = symbols;
+ return criteria;
+ }
+
+ @Override
+ public String ccl() {
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (Symbol symbol : symbols) {
+ if(!first) {
+ sb.append(" ");
+ }
+ sb.append(symbol);
+ first = false;
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj instanceof Criteria) {
+ return Objects.equals(symbols, ((Criteria) obj).symbols());
+ }
+ else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(symbols);
+ }
+
+ @Override
+ public List symbols() {
+ return Collections.unmodifiableList(symbols);
+ }
+
+ @Override
+ public String toString() {
+ return ccl();
+ }
+
+ /**
+ * Expand any sub/grouped Criteria.
+ *
+ * @param symbols
+ * @param expanded
+ */
+ private void expand(List symbols, List expanded) {
+ for (Symbol symbol : symbols) {
+ if(symbol instanceof Criteria) {
+ expanded.add(ParenthesisSymbol.LEFT);
+ expand(((Criteria) symbol).symbols(), expanded);
+ expanded.add(ParenthesisSymbol.RIGHT);
+ }
+ else {
+ expanded.add(symbol);
+ }
+ }
+ }
+
+ /**
+ * Add a {@link Symbol} to this {@link Criteria}.
+ *
+ * @param symbol
+ */
+ protected void add(Symbol symbol) {
+ Preconditions.checkState(!built,
+ "Cannot add a symbol to a built Criteria");
+ symbols.add(symbol);
+ }
+
+ /**
+ * Mark this {@link Criteria} as {@code built}.
+ */
+ protected void close() {
+ built = !built ? true : built;
+ List expanded = Lists.newArrayList();
+ expand(symbols, expanded);
+ this.symbols = expanded;
+ }
+
+}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Criteria.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Criteria.java
index 00123ab67a..028e5237f4 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Criteria.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Criteria.java
@@ -15,23 +15,15 @@
*/
package com.cinchapi.concourse.lang;
-import java.util.Collections;
import java.util.List;
-import java.util.Objects;
import com.cinchapi.ccl.Parser;
-import com.cinchapi.ccl.Parsing;
import com.cinchapi.ccl.SyntaxException;
-import com.cinchapi.ccl.grammar.Expression;
-import com.cinchapi.ccl.grammar.ParenthesisSymbol;
import com.cinchapi.ccl.grammar.Symbol;
-import com.cinchapi.ccl.grammar.TimestampSymbol;
import com.cinchapi.common.base.CheckedExceptions;
-import com.cinchapi.common.reflect.Reflection;
import com.cinchapi.concourse.ParseException;
import com.cinchapi.concourse.Timestamp;
import com.cinchapi.concourse.util.Parsers;
-import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
/**
@@ -50,7 +42,7 @@
*
* @author Jeff Nelson
*/
-public class Criteria implements Symbol {
+public interface Criteria extends Symbol {
/**
* Return a {@link Criteria} object that expresses the same as the
@@ -61,7 +53,7 @@ public class Criteria implements Symbol {
*/
public static Criteria parse(String ccl) {
Parser parser = Parsers.create(ccl);
- Criteria criteria = new Criteria();
+ BuiltCriteria criteria = new BuiltCriteria();
try {
criteria.symbols = Lists.newArrayList(parser.tokenize());
return criteria;
@@ -87,24 +79,7 @@ public static Criteria parse(String ccl) {
* @return the Criteria builder
*/
public static StartState where() {
- return new StartState(new Criteria());
- }
-
- /**
- * A flag that indicates whether this {@link Criteria} has been built.
- */
- private boolean built = false;
-
- /**
- * The collection of {@link Symbol}s that make up this {@link Criteria}.
- */
- private List symbols;
-
- /**
- * Construct a new instance.
- */
- protected Criteria() {
- this.symbols = Lists.newArrayList();
+ return new StartState(new BuiltCriteria());
}
/**
@@ -119,79 +94,24 @@ protected Criteria() {
*
* @return this {@link Criteria} pinned to {@code timestamp}
*/
- public Criteria at(Timestamp timestamp) {
- Parser parser = Parsers.create(getCclString());
- List symbols = Parsing.groupExpressions(parser.tokenize());
- TimestampSymbol ts = new TimestampSymbol(timestamp.getMicros());
- symbols.forEach((symbol) -> {
- if(symbol instanceof Expression) {
- Expression expression = (Expression) symbol;
- Reflection.set("timestamp", ts, expression); // (authorized)
- }
- });
- Criteria criteria = new Criteria();
- symbols = Parsing.ungroupExpressions(symbols);
- criteria.symbols = symbols;
- return criteria;
- }
-
- @Override
- public boolean equals(Object obj) {
- if(obj instanceof Criteria) {
- return Objects.equals(symbols, ((Criteria) obj).symbols);
- }
- else {
- return false;
- }
- }
+ public Criteria at(Timestamp timestamp);
/**
* Return a CCL string that is equivalent to this object.
*
* @return an equivalent CCL string
*/
- public String getCclString() {
- StringBuilder sb = new StringBuilder();
- boolean first = true;
- for (Symbol symbol : symbols) {
- if(!first) {
- sb.append(" ");
- }
- sb.append(symbol);
- first = false;
- }
- return sb.toString();
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(symbols);
- }
-
- @Override
- public String toString() {
- return getCclString();
- }
+ public String ccl();
/**
- * Add a {@link Symbol} to this {@link Criteria}.
+ * Return a CCL string that is equivalent to this object.
*
- * @param symbol
- */
- protected void add(Symbol symbol) {
- Preconditions.checkState(!built,
- "Cannot add a symbol to a built Criteria");
- symbols.add(symbol);
- }
-
- /**
- * Mark this {@link Criteria} as {@code built}.
+ * @return an equivalent CCL string
+ * @deprecated in favor of {@link #ccl()}
*/
- protected void close() {
- built = !built ? true : built;
- List expanded = Lists.newArrayList();
- expand(symbols, expanded);
- this.symbols = expanded;
+ @Deprecated
+ public default String getCclString() {
+ return ccl();
}
/**
@@ -199,27 +119,6 @@ protected void close() {
*
* @return symbols
*/
- protected List getSymbols() {
- return Collections.unmodifiableList(symbols);
- }
-
- /**
- * Expand any sub/grouped Criteria.
- *
- * @param symbols
- * @param expanded
- */
- private void expand(List symbols, List expanded) {
- for (Symbol symbol : symbols) {
- if(symbol instanceof Criteria) {
- expanded.add(ParenthesisSymbol.LEFT);
- expand(((Criteria) symbol).symbols, expanded);
- expanded.add(ParenthesisSymbol.RIGHT);
- }
- else {
- expanded.add(symbol);
- }
- }
- }
+ public List symbols();
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/KeyState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/KeyState.java
index a7a4fc70d1..c3492d27b4 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/KeyState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/KeyState.java
@@ -31,7 +31,7 @@ public class KeyState extends State {
*
* @param criteria
*/
- protected KeyState(Criteria criteria) {
+ protected KeyState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
index 34269c2ad0..54b6ede121 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/Language.java
@@ -103,7 +103,7 @@ else if(tsymbol.getType() == TSymbolType.TIMESTAMP) {
*/
public static TCriteria translateToThriftCriteria(Criteria criteria) {
List symbols = Lists.newArrayList();
- for (Symbol symbol : criteria.getSymbols()) {
+ for (Symbol symbol : criteria.symbols()) {
symbols.add(translateToThriftSymbol(symbol));
}
return new TCriteria(symbols);
@@ -116,7 +116,7 @@ public static TCriteria translateToThriftCriteria(Criteria criteria) {
* @return the analogous Java {@link Criteria}
*/
public static Criteria translateFromThriftCriteria(TCriteria tcriteria) {
- Criteria criteria = new Criteria();
+ BuiltCriteria criteria = new BuiltCriteria();
for (TSymbol tsymbol : tcriteria.getSymbols()) {
criteria.add(translateFromThriftSymbol(tsymbol));
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/OperatorState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/OperatorState.java
index 1036d61f34..2bee4274c8 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/OperatorState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/OperatorState.java
@@ -29,7 +29,7 @@ public class OperatorState extends State {
*
* @param criteria
*/
- protected OperatorState(Criteria criteria) {
+ protected OperatorState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/StartState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/StartState.java
index 848afae075..6b996e52b0 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/StartState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/StartState.java
@@ -29,7 +29,7 @@ public class StartState extends State {
*
* @param criteria
*/
- public StartState(Criteria criteria) {
+ public StartState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/State.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/State.java
index e867ab5f88..ab5cb17be4 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/State.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/State.java
@@ -30,16 +30,16 @@
public abstract class State {
/**
- * A reference to the {@link Criteria} that is being built.
+ * A reference to the {@link BuiltCriteria} that is being built.
*/
- protected final Criteria criteria;
+ protected final BuiltCriteria criteria;
/**
* Construct a new instance.
*
* @param criteria
*/
- protected State(Criteria criteria) {
+ protected State(BuiltCriteria criteria) {
this.criteria = criteria;
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/TimestampState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/TimestampState.java
index 193e52bbac..c6db8aa777 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/TimestampState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/TimestampState.java
@@ -28,7 +28,7 @@ public class TimestampState extends BuildableState {
*
* @param criteria
*/
- protected TimestampState(Criteria criteria) {
+ protected TimestampState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/ValueState.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/ValueState.java
index c86d8ceb58..fc871d6b46 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/ValueState.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/lang/ValueState.java
@@ -32,7 +32,7 @@ public class ValueState extends BuildableState {
*
* @param criteria
*/
- protected ValueState(Criteria criteria) {
+ protected ValueState(BuiltCriteria criteria) {
super(criteria);
}
diff --git a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Parsers.java b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Parsers.java
index df2ab84b37..11f331b7cd 100644
--- a/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Parsers.java
+++ b/concourse-driver-java/src/main/java/com/cinchapi/concourse/util/Parsers.java
@@ -36,7 +36,7 @@ public final class Parsers {
* @return a {@link Parser}
*/
public static Parser create(Criteria criteria) {
- return create(criteria.getCclString());
+ return create(criteria.ccl());
}
/**
@@ -49,7 +49,7 @@ public static Parser create(Criteria criteria) {
*/
public static Parser create(Criteria criteria,
Multimap data) {
- return create(criteria.getCclString(), data);
+ return create(criteria.ccl(), data);
}
/**
@@ -83,8 +83,7 @@ public static Parser create(String ccl, Multimap data) {
* @return a {@link Parser}
*/
public static Parser create(TCriteria criteria) {
- return create(
- Language.translateFromThriftCriteria(criteria).getCclString());
+ return create(Language.translateFromThriftCriteria(criteria).ccl());
}
/**
@@ -97,8 +96,7 @@ public static Parser create(TCriteria criteria) {
*/
public static Parser create(TCriteria criteria,
Multimap data) {
- return create(
- Language.translateFromThriftCriteria(criteria).getCclString(),
+ return create(Language.translateFromThriftCriteria(criteria).ccl(),
data);
}
diff --git a/concourse-driver-java/src/test/java/com/cinchapi/concourse/lang/CriteriaTest.java b/concourse-driver-java/src/test/java/com/cinchapi/concourse/lang/CriteriaTest.java
index a8b06e4746..cfcc49bd76 100644
--- a/concourse-driver-java/src/test/java/com/cinchapi/concourse/lang/CriteriaTest.java
+++ b/concourse-driver-java/src/test/java/com/cinchapi/concourse/lang/CriteriaTest.java
@@ -42,7 +42,7 @@ public class CriteriaTest {
public void testCannotAddSymbolToBuiltCriteria() {
Criteria criteria = Criteria.where().key("foo")
.operator(Operator.EQUALS).value("bar").build();
- criteria.add(new KeySymbol("baz"));
+ ((BuiltCriteria) criteria).add(new KeySymbol("baz"));
}
@Test
@@ -65,7 +65,7 @@ public void testTimestampPinning() {
.build();
Timestamp timestamp = Timestamp.now();
criteria = criteria.at(timestamp);
- List symbols = Parsing.groupExpressions(criteria.getSymbols());
+ List symbols = Parsing.groupExpressions(criteria.symbols());
symbols.forEach((symbol) -> {
if(symbol instanceof Expression) {
Expression expression = (Expression) symbol;
@@ -86,7 +86,7 @@ public void testTimestampPinningSomeTimestamps() {
.build();
Timestamp timestamp = Timestamp.now();
criteria = criteria.at(timestamp);
- List symbols = Parsing.groupExpressions(criteria.getSymbols());
+ List symbols = Parsing.groupExpressions(criteria.symbols());
symbols.forEach((symbol) -> {
if(symbol instanceof Expression) {
Expression expression = (Expression) symbol;
@@ -101,7 +101,7 @@ public void testParseCcl() {
String ccl = "name = jeff AND (company = Cinchapi at 12345 or company = Blavity)";
Criteria criteria = Criteria.parse(ccl);
Parser parser1 = Parsers.create(ccl);
- Parser parser2 = Parsers.create(criteria.getCclString());
+ Parser parser2 = Parsers.create(criteria.ccl());
Assert.assertEquals(Parsing.groupExpressions(parser1.tokenize()),
Parsing.groupExpressions(parser2.tokenize()));
}
diff --git a/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java b/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
index 4ea893bb79..bad10a7c18 100644
--- a/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
+++ b/concourse-ete-test-core/src/main/java/com/cinchapi/concourse/server/ManagedConcourseServer.java
@@ -1211,11 +1211,6 @@ public Set find(Criteria criteria) {
return invoke("find", Criteria.class).with(criteria);
}
- @Override
- public Set find(Object criteria) {
- return invoke("find", Object.class).with(criteria);
- }
-
@Override
public Set find(String ccl) {
return invoke("find", String.class).with(ccl);
@@ -1349,20 +1344,6 @@ public Map get(Collection keys, long record,
.with(keys, record, timestamp);
}
- @Override
- public Map> get(Collection keys,
- Object criteria) {
- return invoke("get", Collection.class, Object.class).with(keys,
- criteria);
- }
-
- @Override
- public Map> get(Collection keys,
- Object criteria, Timestamp timestamp) {
- return invoke("get", Collection.class, Object.class,
- Timestamp.class).with(keys, criteria, timestamp);
- }
-
@Override
public Map> get(Collection keys,
String ccl) {
@@ -1389,18 +1370,6 @@ public Map> get(Criteria criteria,
timestamp);
}
- @Override
- public Map> get(Object criteria) {
- return invoke("get", Object.class).with(criteria);
- }
-
- @Override
- public Map> get(Object criteria,
- Timestamp timestamp) {
- return invoke("get", Object.class, Timestamp.class).with(criteria,
- timestamp);
- }
-
@Override
public Map> get(String ccl) {
return invoke("get", String.class).with(ccl);
@@ -1443,19 +1412,6 @@ public T get(String key, long record, Timestamp timestamp) {
.with(key, record, timestamp);
}
- @Override
- public Map get(String key, Object criteria) {
- return invoke("get", String.class, Object.class).with(key,
- criteria);
- }
-
- @Override
- public Map get(String key, Object criteria,
- Timestamp timestamp) {
- return invoke("get", String.class, Object.class, Timestamp.class)
- .with(key, criteria, timestamp);
- }
-
@Override
public Map get(String key, String ccl) {
return invoke("get", String.class, String.class).with(key, ccl);
@@ -1816,20 +1772,6 @@ public Map> select(Collection keys,
Timestamp.class).with(keys, record, timestamp);
}
- @Override
- public Map>> select(
- Collection keys, Object criteria) {
- return invoke("select", Collection.class, Object.class).with(keys,
- criteria);
- }
-
- @Override
- public Map>> select(
- Collection keys, Object criteria, Timestamp timestamp) {
- return invoke("select", Collection.class, Object.class,
- Timestamp.class).with(keys, criteria, timestamp);
- }
-
@Override
public Map>> select(
Collection keys, String ccl) {
@@ -1868,18 +1810,6 @@ public Map> select(long record,
timestamp);
}
- @Override
- public Map>> select(Object criteria) {
- return invoke("select", Object.class).with(criteria);
- }
-
- @Override
- public Map>> select(Object criteria,
- Timestamp timestamp) {
- return invoke("select", Object.class, Timestamp.class)
- .with(criteria, timestamp);
- }
-
@Override
public Map>> select(String ccl) {
return invoke("select", String.class).with(ccl);
@@ -1923,19 +1853,6 @@ public Set select(String key, long record, Timestamp timestamp) {
.with(key, record, timestamp);
}
- @Override
- public Map> select(String key, Object criteria) {
- return invoke("select", String.class, Object.class).with(key,
- criteria);
- }
-
- @Override
- public Map> select(String key, Object criteria,
- Timestamp timestamp) {
- return invoke("select", String.class, Object.class, Timestamp.class)
- .with(key, criteria, timestamp);
- }
-
@Override
public Map> select(String key, String ccl) {
return invoke("select", String.class, String.class).with(key, ccl);
diff --git a/concourse-import/src/main/java/com/cinchapi/concourse/importer/debug/ImportDryRunConcourse.java b/concourse-import/src/main/java/com/cinchapi/concourse/importer/debug/ImportDryRunConcourse.java
index 445c9f199a..3a820dbe58 100644
--- a/concourse-import/src/main/java/com/cinchapi/concourse/importer/debug/ImportDryRunConcourse.java
+++ b/concourse-import/src/main/java/com/cinchapi/concourse/importer/debug/ImportDryRunConcourse.java
@@ -304,11 +304,6 @@ public Set find(Criteria criteria) {
throw new UnsupportedOperationException();
}
- @Override
- public Set find(Object criteria) {
- throw new UnsupportedOperationException();
- }
-
@Override
public Set find(String ccl) {
throw new UnsupportedOperationException();
@@ -423,18 +418,6 @@ public Map get(Collection keys, long record,
throw new UnsupportedOperationException();
}
- @Override
- public Map> get(Collection keys,
- Object criteria) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Map> get(Collection keys,
- Object criteria, Timestamp timestamp) {
- throw new UnsupportedOperationException();
- }
-
@Override
public Map> get(Collection keys,
String ccl) {
@@ -458,17 +441,6 @@ public Map> get(Criteria criteria,
throw new UnsupportedOperationException();
}
- @Override
- public Map> get(Object criteria) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Map> get(Object criteria,
- Timestamp timestamp) {
- throw new UnsupportedOperationException();
- }
-
@Override
public Map> get(String ccl) {
throw new UnsupportedOperationException();
@@ -506,17 +478,6 @@ public T get(String key, long record, Timestamp timestamp) {
throw new UnsupportedOperationException();
}
- @Override
- public Map