From 7831c63c733c5406cb6961fea25eaa505ead55d1 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Mon, 30 Aug 2021 22:22:24 +0200 Subject: [PATCH 01/20] unicode db names --- docker/start_db_single.sh | 2 +- pom.xml | 6 ++ src/main/java/com/arangodb/ArangoDB.java | 9 +-- .../arangodb/internal/ArangoExecuteable.java | 18 ++---- .../internal/InternalArangoDatabase.java | 4 ++ .../arangodb/internal/util/EncodeUtils.java | 43 +++++++++++++- .../com/arangodb/model/DBCreateOptions.java | 5 ++ src/main/java/com/arangodb/util/DBName.java | 14 +++++ .../com/arangodb/velocystream/Request.java | 4 ++ src/test/java/com/arangodb/ArangoDBTest.java | 5 +- .../internal/util/EncodeUtilsTest.java | 56 +++++++++++++++++++ .../java/com/arangodb/util/TestUtils.java | 35 ++++++++++++ 12 files changed, 177 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/arangodb/util/DBName.java create mode 100644 src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java diff --git a/docker/start_db_single.sh b/docker/start_db_single.sh index 9f8c497c3..b63ace7b6 100755 --- a/docker/start_db_single.sh +++ b/docker/start_db_single.sh @@ -11,7 +11,7 @@ docker pull "$1" docker network create arangodb --subnet 172.28.0.0/16 -docker run -d -e ARANGO_ROOT_PASSWORD=test -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name arangodb "$1" +docker run -d -e ARANGO_ROOT_PASSWORD=test -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name arangodb "$1" --database.extended-names-databases debug_container() { if [ ! "$(docker ps -aqf name="$1")" ]; then diff --git a/pom.xml b/pom.xml index 5cf3580b8..3b2d74d74 100644 --- a/pom.xml +++ b/pom.xml @@ -219,6 +219,12 @@ 0.9.12 test + + org.graalvm.sdk + graal-sdk + 21.2.0 + test + diff --git a/src/main/java/com/arangodb/ArangoDB.java b/src/main/java/com/arangodb/ArangoDB.java index c61e9dc73..c35482612 100644 --- a/src/main/java/com/arangodb/ArangoDB.java +++ b/src/main/java/com/arangodb/ArangoDB.java @@ -50,10 +50,7 @@ import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.util.ArangoCursorInitializer; -import com.arangodb.util.ArangoDeserializer; -import com.arangodb.util.ArangoSerialization; -import com.arangodb.util.ArangoSerializer; +import com.arangodb.util.*; import com.arangodb.velocypack.VPack; import com.arangodb.velocypack.VPackAnnotationFieldFilter; import com.arangodb.velocypack.VPackAnnotationFieldNaming; @@ -676,7 +673,7 @@ public synchronized ArangoDB build() { * @param name Name of the database * @return database handler */ - ArangoDatabase db(String name); + ArangoDatabase db(@DBName String name); /** * Creates a new database with the given name. @@ -687,7 +684,7 @@ public synchronized ArangoDB build() { * @see API * Documentation */ - Boolean createDatabase(String name) throws ArangoDBException; + Boolean createDatabase(@DBName String name) throws ArangoDBException; /** * Creates a new database with the given name. diff --git a/src/main/java/com/arangodb/internal/ArangoExecuteable.java b/src/main/java/com/arangodb/internal/ArangoExecuteable.java index 4644aa288..eec4d04bb 100644 --- a/src/main/java/com/arangodb/internal/ArangoExecuteable.java +++ b/src/main/java/com/arangodb/internal/ArangoExecuteable.java @@ -20,7 +20,6 @@ package com.arangodb.internal; -import com.arangodb.ArangoDBException; import com.arangodb.internal.util.ArangoSerializationFactory; import com.arangodb.internal.util.ArangoSerializationFactory.Serializer; import com.arangodb.internal.util.EncodeUtils; @@ -28,7 +27,6 @@ import com.arangodb.velocystream.Request; import com.arangodb.velocystream.RequestType; -import java.io.UnsupportedEncodingException; import java.util.Map.Entry; /** @@ -75,17 +73,13 @@ protected static String createPath(final String... params) { if (i > 0) { sb.append(SLASH); } - try { - final String param; - if (params[i].contains(SLASH)) { - param = createPath(params[i].split(SLASH)); - } else { - param = EncodeUtils.encodeURL(params[i]); - } - sb.append(param); - } catch (final UnsupportedEncodingException e) { - throw new ArangoDBException(e); + final String param; + if (params[i].contains(SLASH)) { + param = createPath(params[i].split(SLASH)); + } else { + param = EncodeUtils.encodeURIComponent(params[i]); } + sb.append(param); } return sb.toString(); } diff --git a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java index 4cf14c320..24d6876cc 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java @@ -26,12 +26,14 @@ import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.util.ArangoSerializationFactory; import com.arangodb.internal.util.ArangoSerializationFactory.Serializer; +import com.arangodb.internal.util.EncodeUtils; import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; import com.arangodb.model.arangosearch.AnalyzerDeleteOptions; import com.arangodb.model.arangosearch.ArangoSearchCreateOptions; import com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder; import com.arangodb.util.ArangoSerializer; +import com.arangodb.util.DBName; import com.arangodb.velocypack.Type; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.exception.VPackException; @@ -70,6 +72,7 @@ public abstract class InternalArangoDatabaseencodeURIComponent(). + * + * @param value string to encode + * @return encoded string + */ + public static String encodeURIComponent(final String value) { + try { + return URLEncoder.encode(value, StandardCharsets.UTF_8.name()) + .replace("+", "%20") + .replace("%21", "!") + .replace("%27", "'") + .replace("%28", "(") + .replace("%29", ")") + .replace("%7E", "~"); + } catch (UnsupportedEncodingException e) { + throw new ArangoDBException(e); + } + } + + /** + * Normalizes a unicode string according to ArangoDB extended naming convention. + * + * @param value string to normalize + * @return NFC normalized string + */ + public static String normalize(final String value) { + return Normalizer.normalize(value, Normalizer.Form.NFC); } + public static void checkNormalized(final String value) { + if (value != null && !normalize(value).equals(value)) + throw new ArangoDBException("String not properly normalized: " + + "use com.arangodb.internal.util.EncodeUtils.normalize(String) to do it."); + } } diff --git a/src/main/java/com/arangodb/model/DBCreateOptions.java b/src/main/java/com/arangodb/model/DBCreateOptions.java index abd574a95..6bc53b659 100644 --- a/src/main/java/com/arangodb/model/DBCreateOptions.java +++ b/src/main/java/com/arangodb/model/DBCreateOptions.java @@ -20,6 +20,9 @@ package com.arangodb.model; +import com.arangodb.internal.util.EncodeUtils; +import com.arangodb.util.DBName; + import java.util.Collection; /** @@ -28,6 +31,7 @@ public class DBCreateOptions { private Collection users; + @DBName private String name; private DatabaseOptions options; @@ -61,6 +65,7 @@ public String getName() { * @return options */ public DBCreateOptions name(final String name) { + EncodeUtils.checkNormalized(name); this.name = name; return this; } diff --git a/src/main/java/com/arangodb/util/DBName.java b/src/main/java/com/arangodb/util/DBName.java new file mode 100644 index 000000000..9c46f2499 --- /dev/null +++ b/src/main/java/com/arangodb/util/DBName.java @@ -0,0 +1,14 @@ +package com.arangodb.util; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marker annotation for database name string fields or parameters that are sent to the server-side. + */ +@Target(value = {ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.SOURCE) +public @interface DBName { +} diff --git a/src/main/java/com/arangodb/velocystream/Request.java b/src/main/java/com/arangodb/velocystream/Request.java index ab470df77..a9074eb91 100644 --- a/src/main/java/com/arangodb/velocystream/Request.java +++ b/src/main/java/com/arangodb/velocystream/Request.java @@ -20,6 +20,8 @@ package com.arangodb.velocystream; +import com.arangodb.internal.util.EncodeUtils; +import com.arangodb.util.DBName; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.annotations.Expose; @@ -33,6 +35,7 @@ public class Request { private int version = 1; private int type = 1; + @DBName private final String database; private final RequestType requestType; private final String request; @@ -49,6 +52,7 @@ public Request(final String database, final RequestType requestType, final Strin body = null; queryParam = new HashMap<>(); headerParam = new HashMap<>(); + EncodeUtils.checkNormalized(database); } public int getVersion() { diff --git a/src/test/java/com/arangodb/ArangoDBTest.java b/src/test/java/com/arangodb/ArangoDBTest.java index 5b3db075d..5e67b91c7 100644 --- a/src/test/java/com/arangodb/ArangoDBTest.java +++ b/src/test/java/com/arangodb/ArangoDBTest.java @@ -137,8 +137,9 @@ public void getVersion() { @Test public void createAndDeleteDatabase() { - final String dbName = "testDB-" + UUID.randomUUID().toString(); - final Boolean resultCreate = arangoDB.createDatabase(dbName); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20); + final Boolean resultCreate; + resultCreate = arangoDB.createDatabase(dbName); assertThat(resultCreate, is(true)); final Boolean resultDelete = arangoDB.db(dbName).drop(); assertThat(resultDelete, is(true)); diff --git a/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java b/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java new file mode 100644 index 000000000..56aae84df --- /dev/null +++ b/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java @@ -0,0 +1,56 @@ +package com.arangodb.internal.util; + +import com.arangodb.util.TestUtils; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.Assume.assumeTrue; + +public class EncodeUtilsTest { + + private static Context context; + private static Value jsEncoder; + private static Value jsNormalizer; + private static final String encodeFn = "(function encode(x){return encodeURIComponent(x);})"; + private static final String normalizeFn = "(function normalize(x){return x.normalize('NFC');})"; + + @BeforeClass + public static void beforeClass() { + assumeTrue("This test requires GraalVM", org.graalvm.home.Version.getCurrent().isRelease()); + context = Context.create(); + jsEncoder = context.eval("js", encodeFn); + jsNormalizer = context.eval("js", normalizeFn); + } + + @AfterClass + public static void afterClass() { + if (context != null) + context.close(); + } + + @Test + public void normalizeShouldBehaveAsJs() { + for (int i = 0; i < 10_000; i++) { + String value = TestUtils.generateRandomDbName(100); + String jsNormalized = jsNormalizer.execute(value).as(String.class); + String javaNormalized = EncodeUtils.normalize(value); + assertThat(javaNormalized, is(jsNormalized)); + } + } + + @Test + public void encodeURIComponentShouldBehaveAsJs() { + for (int i = 0; i < 10_000; i++) { + String value = TestUtils.generateRandomDbName(100); + String jsEncoded = jsEncoder.execute(value).as(String.class); + String driverJavaEncoded = EncodeUtils.encodeURIComponent(value); + assertThat(driverJavaEncoded, is(jsEncoded)); + } + } + +} \ No newline at end of file diff --git a/src/test/java/com/arangodb/util/TestUtils.java b/src/test/java/com/arangodb/util/TestUtils.java index b9d7e2c68..16bc2bb05 100644 --- a/src/test/java/com/arangodb/util/TestUtils.java +++ b/src/test/java/com/arangodb/util/TestUtils.java @@ -22,11 +22,20 @@ package com.arangodb.util; +import com.arangodb.internal.util.EncodeUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + /** * @author Michele Rastelli */ public final class TestUtils { + private static final String[] allChars = TestUtils.generateAllInputChars(); + private static final Random r = new Random(); + private TestUtils() { } @@ -65,4 +74,30 @@ public static boolean isAtLeastVersion(final String version, final int otherMajo return true; } + private static String[] generateAllInputChars() { + List list = new ArrayList<>(); + for (int codePoint = 0; codePoint < Character.MAX_CODE_POINT + 1; codePoint++) { + String s = new String(Character.toChars(codePoint)); + if (codePoint == 47 || // '/' + codePoint == 58 || // ':' + Character.isISOControl(codePoint) || + Character.isLowSurrogate(s.charAt(0)) || + (Character.isHighSurrogate(s.charAt(0)) && s.length() == 1)) { + continue; + } + list.add(s); + } + return list.toArray(new String[0]); + } + + public static String generateRandomDbName(int length) { + int max = allChars.length; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + String allChar = allChars[r.nextInt(max)]; + sb.append(allChar); + } + return EncodeUtils.normalize(sb.toString()); + } + } From 9b2d968b1fe8feba2b88dfb4721bdb4dfc46a633 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 31 Aug 2021 15:22:41 +0200 Subject: [PATCH 02/20] unicode db names tests --- src/test/java/com/arangodb/ArangoDBTest.java | 63 +++++++++++++------ .../java/com/arangodb/async/ArangoDBTest.java | 23 ++++++- .../java/com/arangodb/async/BaseTest.java | 2 - .../internal/util/EncodeUtilsTest.java | 4 +- .../java/com/arangodb/util/TestUtils.java | 19 +++--- 5 files changed, 79 insertions(+), 32 deletions(-) diff --git a/src/test/java/com/arangodb/ArangoDBTest.java b/src/test/java/com/arangodb/ArangoDBTest.java index 5e67b91c7..b0afd787d 100644 --- a/src/test/java/com/arangodb/ArangoDBTest.java +++ b/src/test/java/com/arangodb/ArangoDBTest.java @@ -82,6 +82,8 @@ public class ArangoDBTest { private final ArangoDatabase db1; private final ArangoDatabase db2; + private static Boolean extendedNames; + @BeforeClass public static void initDB() { ArangoDB arango = BaseTest.arangos.get(0); @@ -127,6 +129,20 @@ private boolean isAtLeastVersion(final int major, final int minor) { return TestUtils.isAtLeastVersion(arangoDB.getVersion().getVersion(), major, minor, 0); } + private boolean supportsExtendedNames() { + if (extendedNames == null) { + try { + ArangoDatabase testDb = arangoDB.db("test-" + TestUtils.generateRandomDbName(20, true)); + testDb.create(); + extendedNames = true; + testDb.drop(); + } catch (ArangoDBException e) { + extendedNames = false; + } + } + return extendedNames; + } + @Test public void getVersion() { final ArangoDBVersion version = arangoDB.getVersion(); @@ -137,7 +153,7 @@ public void getVersion() { @Test public void createAndDeleteDatabase() { - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Boolean resultCreate; resultCreate = arangoDB.createDatabase(dbName); assertThat(resultCreate, is(true)); @@ -145,11 +161,22 @@ public void createAndDeleteDatabase() { assertThat(resultDelete, is(true)); } + @Test + public void createWithInvalidName() { + final String dbName = "testDB-\u006E\u0303\u00f1"; + try { + arangoDB.createDatabase(dbName); + fail(); + } catch (ArangoDBException e) { + assertThat(e.getMessage(), containsString("not properly normalized")); + } + } + @Test public void createDatabaseWithOptions() { assumeTrue(isCluster()); assumeTrue(isAtLeastVersion(3, 6)); - final String dbName = "testDB-" + UUID.randomUUID().toString(); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -171,12 +198,12 @@ public void createDatabaseWithOptions() { } @Test - public void createDatabaseWithOptionsSatellite() { + public void createDatabaseWithOptionsSatellite() { assumeTrue(isCluster()); assumeTrue(isEnterprise()); assumeTrue(isAtLeastVersion(3, 6)); - final String dbName = "testDB-" + UUID.randomUUID().toString(); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -199,7 +226,7 @@ public void createDatabaseWithOptionsSatellite() { @Test public void createDatabaseWithUsers() throws InterruptedException { - final String dbName = "testDB-" + UUID.randomUUID().toString(); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Map extra = Collections.singletonMap("key", "value"); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) @@ -509,7 +536,7 @@ public void getLogsSortDesc() { @Test public void getLogEntries() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); assertThat(logs, is(notNullValue())); assertThat(logs.getTotal(), greaterThan(0L)); @@ -518,7 +545,7 @@ public void getLogEntries() { @Test public void getLogEntriesUpto() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logsUpto = arangoDB.getLogEntries(new LogOptions().upto(LogLevel.WARNING)); assertThat(logsUpto, is(notNullValue())); assertThat( @@ -531,7 +558,7 @@ public void getLogEntriesUpto() { @Test public void getLogEntriesLevel() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logsInfo = arangoDB.getLogEntries(new LogOptions().level(LogLevel.INFO)); assertThat(logsInfo, is(notNullValue())); assertThat( @@ -544,7 +571,7 @@ public void getLogEntriesLevel() { @Test public void getLogEntriesStart() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); final Long firstId = logs.getMessages().get(0).getId(); final LogEntriesEntity logsStart = arangoDB.getLogEntries(new LogOptions().start(firstId + 1)); @@ -559,7 +586,7 @@ public void getLogEntriesStart() { @Test public void getLogEntriesSize() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); int count = logs.getMessages().size(); assertThat(count, greaterThan(0)); @@ -570,7 +597,7 @@ public void getLogEntriesSize() { @Test public void getLogEntriesOffset() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); assertThat(logs.getTotal(), greaterThan(0L)); Long firstId = logs.getMessages().get(0).getId(); @@ -585,7 +612,7 @@ public void getLogEntriesOffset() { @Test public void getLogEntriesSearch() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); final LogEntriesEntity logsSearch = arangoDB.getLogEntries(new LogOptions().search(BaseTest.TEST_DB)); assertThat(logsSearch, is(notNullValue())); @@ -594,7 +621,7 @@ public void getLogEntriesSearch() { @Test public void getLogEntriesSortAsc() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(new LogOptions().sort(SortOrder.asc)); assertThat(logs, is(notNullValue())); long lastId = -1; @@ -609,7 +636,7 @@ public void getLogEntriesSortAsc() { @Test public void getLogEntriesSortDesc() { - assumeTrue(isAtLeastVersion(3,8)); + assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(new LogOptions().sort(SortOrder.desc)); assertThat(logs, is(notNullValue())); long lastId = Long.MAX_VALUE; @@ -675,9 +702,9 @@ public void loadproperties2() { @Test public void accessMultipleDatabases() { - final ArangoDBVersion version1 = db1.getVersion(); - assertThat(version1, is(notNullValue())); - final ArangoDBVersion version2 = db2.getVersion(); - assertThat(version2, is(notNullValue())); + final ArangoDBVersion version1 = db1.getVersion(); + assertThat(version1, is(notNullValue())); + final ArangoDBVersion version2 = db2.getVersion(); + assertThat(version2, is(notNullValue())); } } diff --git a/src/test/java/com/arangodb/async/ArangoDBTest.java b/src/test/java/com/arangodb/async/ArangoDBTest.java index f6e33b7bc..946d33e56 100644 --- a/src/test/java/com/arangodb/async/ArangoDBTest.java +++ b/src/test/java/com/arangodb/async/ArangoDBTest.java @@ -22,6 +22,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDBException; +import com.arangodb.ArangoDatabase; import com.arangodb.entity.DatabaseEntity; import com.arangodb.entity.License; import com.arangodb.entity.LogEntity; @@ -37,6 +38,7 @@ import com.arangodb.model.LogOptions.SortOrder; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; +import com.arangodb.util.TestUtils; import com.arangodb.velocypack.exception.VPackException; import com.arangodb.velocystream.Request; import com.arangodb.velocystream.RequestType; @@ -45,7 +47,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @@ -63,6 +64,7 @@ public class ArangoDBTest { private static final String ROOT = "root"; private static final String USER = "mit dem mund"; private static final String PW = "machts der hund"; + private static Boolean extendedNames; private boolean isEnterprise() { final ArangoDB arangoDB = new ArangoDB.Builder().build(); @@ -79,6 +81,21 @@ private boolean isAtLeastVersion(final int major, final int minor) { return com.arangodb.util.TestUtils.isAtLeastVersion(arangoDB.getVersion().getVersion(), major,minor,0); } + private boolean supportsExtendedNames() { + final ArangoDB arangoDB = new ArangoDB.Builder().build(); + if (extendedNames == null) { + try { + ArangoDatabase testDb = arangoDB.db("test-" + TestUtils.generateRandomDbName(20, true)); + testDb.create(); + extendedNames = true; + testDb.drop(); + } catch (ArangoDBException e) { + extendedNames = false; + } + } + return extendedNames; + } + @Test public void getVersion() throws InterruptedException, ExecutionException { final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); @@ -149,7 +166,7 @@ public void createDatabaseWithOptions() throws ExecutionException, InterruptedEx assumeTrue(isAtLeastVersion(3, 6)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); - final String dbName = "testDB-" + UUID.randomUUID().toString(); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -177,7 +194,7 @@ public void createDatabaseWithOptionsSatellite() throws ExecutionException, Inte assumeTrue(isAtLeastVersion(3, 6)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); - final String dbName = "testDB-" + UUID.randomUUID().toString(); + final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() diff --git a/src/test/java/com/arangodb/async/BaseTest.java b/src/test/java/com/arangodb/async/BaseTest.java index f30438070..a06ade4dc 100644 --- a/src/test/java/com/arangodb/async/BaseTest.java +++ b/src/test/java/com/arangodb/async/BaseTest.java @@ -25,8 +25,6 @@ import com.arangodb.entity.ServerRole; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.rules.TestRule; import java.util.concurrent.ExecutionException; diff --git a/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java b/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java index 56aae84df..03cbbcdc8 100644 --- a/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java +++ b/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java @@ -36,7 +36,7 @@ public static void afterClass() { @Test public void normalizeShouldBehaveAsJs() { for (int i = 0; i < 10_000; i++) { - String value = TestUtils.generateRandomDbName(100); + String value = TestUtils.generateRandomDbName(100, true); String jsNormalized = jsNormalizer.execute(value).as(String.class); String javaNormalized = EncodeUtils.normalize(value); assertThat(javaNormalized, is(jsNormalized)); @@ -46,7 +46,7 @@ public void normalizeShouldBehaveAsJs() { @Test public void encodeURIComponentShouldBehaveAsJs() { for (int i = 0; i < 10_000; i++) { - String value = TestUtils.generateRandomDbName(100); + String value = TestUtils.generateRandomDbName(100, true); String jsEncoded = jsEncoder.execute(value).as(String.class); String driverJavaEncoded = EncodeUtils.encodeURIComponent(value); assertThat(driverJavaEncoded, is(jsEncoded)); diff --git a/src/test/java/com/arangodb/util/TestUtils.java b/src/test/java/com/arangodb/util/TestUtils.java index 16bc2bb05..533cbf251 100644 --- a/src/test/java/com/arangodb/util/TestUtils.java +++ b/src/test/java/com/arangodb/util/TestUtils.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.UUID; /** * @author Michele Rastelli @@ -90,14 +91,18 @@ private static String[] generateAllInputChars() { return list.toArray(new String[0]); } - public static String generateRandomDbName(int length) { - int max = allChars.length; - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - String allChar = allChars[r.nextInt(max)]; - sb.append(allChar); + public static String generateRandomDbName(int length, boolean extendedNames) { + if(extendedNames){ + int max = allChars.length; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + String allChar = allChars[r.nextInt(max)]; + sb.append(allChar); + } + return EncodeUtils.normalize(sb.toString()); + } else { + return UUID.randomUUID().toString(); } - return EncodeUtils.normalize(sb.toString()); } } From 180f71b563b23af1f5c8041afc686afa19f08db7 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 31 Aug 2021 16:34:04 +0200 Subject: [PATCH 03/20] gh actions upd --- .github/workflows/maven.yml | 28 ++++++++++++++++++++-------- docker/start_db_cluster.sh | 14 +++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 317a44113..46f9e0d64 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -4,11 +4,9 @@ on: pull_request: branches: - master - - preview push: branches: - master - - preview jobs: package: @@ -32,12 +30,12 @@ jobs: fail-fast: false matrix: docker-img: - - docker.io/arangodb/arangodb:3.6.13 - - docker.io/arangodb/arangodb:3.7.12 - - arangodb/arangodb-preview:3.8.0-rc.2 - - docker.io/arangodb/enterprise:3.6.13 - - docker.io/arangodb/enterprise:3.7.12 - - arangodb/enterprise-preview:3.8.0-rc.2 + - docker.io/arangodb/arangodb:3.7.14 + - docker.io/arangodb/arangodb:3.8.0 + - docker.io/arangodb/arangodb-test:PR14700 + - docker.io/arangodb/enterprise:3.7.14 + - docker.io/arangodb/enterprise:3.8.0 + - docker.io/arangodb/enterprise-test:PR14700 topology: - single @@ -59,3 +57,17 @@ jobs: - name: Debug containers if: ${{ cancelled() || failure() }} run: ./docker/debug_containers_${{ matrix.topology }}.sh + + # test encodeURIComponent() and normalize('NFC') comparing to Javascript behavior + test-graalvm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: DeLaGuardo/setup-graalvm@4.0 + with: + graalvm: '21.2.0' + - name: Info + run: mvn -version + - name: Test + run: mvn -e --no-transfer-progress test -Dtest=com.arangodb.internal.util.EncodeUtilsTest diff --git a/docker/start_db_cluster.sh b/docker/start_db_cluster.sh index 8dd0fc794..fb644faf5 100755 --- a/docker/start_db_cluster.sh +++ b/docker/start_db_cluster.sh @@ -19,15 +19,15 @@ AUTHORIZATION_HEADER=$(cat "$LOCATION"/jwtHeader) echo "Starting containers..." -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.1 --name agent1 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --auth.jwt-secret /jwtSecret -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.2 --name agent2 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.3 --name agent3 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.1 --name agent1 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.2 --name agent2 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.3 --name agent3 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.1 --name dbserver1 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.2 --name dbserver2 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.1 --name dbserver1 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.2 --name dbserver2 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name coordinator1 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name coordinator2 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name coordinator1 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name coordinator2 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true debug_container() { if [ ! "$(docker ps -aqf name="$1")" ]; then From c4f698d6cd0084e93c9a13d5d7c36a97b3ef7294 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 31 Aug 2021 16:36:38 +0200 Subject: [PATCH 04/20] gh actions upd --- docker/start_db_active-failover.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/start_db_active-failover.sh b/docker/start_db_active-failover.sh index 05653b54a..5303417b4 100755 --- a/docker/start_db_active-failover.sh +++ b/docker/start_db_active-failover.sh @@ -19,9 +19,9 @@ AUTHORIZATION_HEADER=$(cat "$LOCATION"/jwtHeader) echo "Starting containers..." -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name server1 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret' -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name server2 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret' -docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.3 --name server3 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret' +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name server1 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true' +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name server2 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true' +docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.3 --name server3 "$1" sh -c 'arangodb --starter.address=$(hostname -i) --starter.mode=activefailover --starter.join server1,server2,server3 --auth.jwt-secret /jwtSecret --all.database.extended-names-databases true' debug_container() { running=$(docker inspect -f '{{.State.Running}}' "$1") From 3cbad4fbcf7cea13b8ffa425d75a6698595a506f Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Wed, 1 Sep 2021 12:58:04 +0200 Subject: [PATCH 05/20] UnicodeUtils --- .../internal/InternalArangoDatabase.java | 4 +- .../arangodb/internal/util/EncodeUtils.java | 43 +--------------- .../com/arangodb/model/DBCreateOptions.java | 4 +- .../java/com/arangodb/util/UnicodeUtils.java | 51 +++++++++++++++++++ .../com/arangodb/velocystream/Request.java | 4 +- .../java/com/arangodb/util/TestUtils.java | 4 +- .../UnicodeUtilsTest.java} | 8 +-- 7 files changed, 63 insertions(+), 55 deletions(-) create mode 100644 src/main/java/com/arangodb/util/UnicodeUtils.java rename src/test/java/com/arangodb/{internal/util/EncodeUtilsTest.java => util/UnicodeUtilsTest.java} (91%) diff --git a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java index 24d6876cc..afb8c4cd7 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java @@ -26,7 +26,7 @@ import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.util.ArangoSerializationFactory; import com.arangodb.internal.util.ArangoSerializationFactory.Serializer; -import com.arangodb.internal.util.EncodeUtils; +import com.arangodb.util.UnicodeUtils; import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; import com.arangodb.model.arangosearch.AnalyzerDeleteOptions; @@ -80,7 +80,7 @@ protected InternalArangoDatabase(final A arango, final String name) { super(arango.executor, arango.util, arango.context); this.arango = arango; this.name = name; - EncodeUtils.checkNormalized(name); + UnicodeUtils.checkNormalized(name); } public A arango() { diff --git a/src/main/java/com/arangodb/internal/util/EncodeUtils.java b/src/main/java/com/arangodb/internal/util/EncodeUtils.java index 0d387b0ac..6c16af6a3 100644 --- a/src/main/java/com/arangodb/internal/util/EncodeUtils.java +++ b/src/main/java/com/arangodb/internal/util/EncodeUtils.java @@ -1,23 +1,3 @@ -/* - * DISCLAIMER - * - * Copyright 2016 ArangoDB GmbH, Cologne, Germany - * - * 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - package com.arangodb.internal.util; import com.arangodb.ArangoDBException; @@ -25,14 +5,8 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.text.Normalizer; - -/** - * @author Mark Vollmary - * @author Michele Rastelli - */ -public final class EncodeUtils { +public class EncodeUtils { private EncodeUtils() { } @@ -58,19 +32,4 @@ public static String encodeURIComponent(final String value) { } } - /** - * Normalizes a unicode string according to ArangoDB extended naming convention. - * - * @param value string to normalize - * @return NFC normalized string - */ - public static String normalize(final String value) { - return Normalizer.normalize(value, Normalizer.Form.NFC); - } - - public static void checkNormalized(final String value) { - if (value != null && !normalize(value).equals(value)) - throw new ArangoDBException("String not properly normalized: " + - "use com.arangodb.internal.util.EncodeUtils.normalize(String) to do it."); - } } diff --git a/src/main/java/com/arangodb/model/DBCreateOptions.java b/src/main/java/com/arangodb/model/DBCreateOptions.java index 6bc53b659..b45f3e467 100644 --- a/src/main/java/com/arangodb/model/DBCreateOptions.java +++ b/src/main/java/com/arangodb/model/DBCreateOptions.java @@ -20,7 +20,7 @@ package com.arangodb.model; -import com.arangodb.internal.util.EncodeUtils; +import com.arangodb.util.UnicodeUtils; import com.arangodb.util.DBName; import java.util.Collection; @@ -65,7 +65,7 @@ public String getName() { * @return options */ public DBCreateOptions name(final String name) { - EncodeUtils.checkNormalized(name); + UnicodeUtils.checkNormalized(name); this.name = name; return this; } diff --git a/src/main/java/com/arangodb/util/UnicodeUtils.java b/src/main/java/com/arangodb/util/UnicodeUtils.java new file mode 100644 index 000000000..74a9a3280 --- /dev/null +++ b/src/main/java/com/arangodb/util/UnicodeUtils.java @@ -0,0 +1,51 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * 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. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.util; + +import com.arangodb.ArangoDBException; + +import java.text.Normalizer; + +/** + * @author Mark Vollmary + * @author Michele Rastelli + */ +public final class UnicodeUtils { + + private UnicodeUtils() { + } + + /** + * Normalizes a unicode string according to ArangoDB extended naming convention. + * + * @param value string to normalize + * @return NFC normalized string + */ + public static String normalize(final String value) { + return Normalizer.normalize(value, Normalizer.Form.NFC); + } + + public static void checkNormalized(final String value) { + if (value != null && !normalize(value).equals(value)) + throw new ArangoDBException("String not properly normalized: " + + "use com.arangodb.util.EncodeUtils.normalize(String) to do it."); + } +} diff --git a/src/main/java/com/arangodb/velocystream/Request.java b/src/main/java/com/arangodb/velocystream/Request.java index a9074eb91..debc4520d 100644 --- a/src/main/java/com/arangodb/velocystream/Request.java +++ b/src/main/java/com/arangodb/velocystream/Request.java @@ -20,7 +20,7 @@ package com.arangodb.velocystream; -import com.arangodb.internal.util.EncodeUtils; +import com.arangodb.util.UnicodeUtils; import com.arangodb.util.DBName; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.annotations.Expose; @@ -52,7 +52,7 @@ public Request(final String database, final RequestType requestType, final Strin body = null; queryParam = new HashMap<>(); headerParam = new HashMap<>(); - EncodeUtils.checkNormalized(database); + UnicodeUtils.checkNormalized(database); } public int getVersion() { diff --git a/src/test/java/com/arangodb/util/TestUtils.java b/src/test/java/com/arangodb/util/TestUtils.java index 533cbf251..d33c5aa75 100644 --- a/src/test/java/com/arangodb/util/TestUtils.java +++ b/src/test/java/com/arangodb/util/TestUtils.java @@ -22,8 +22,6 @@ package com.arangodb.util; -import com.arangodb.internal.util.EncodeUtils; - import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -99,7 +97,7 @@ public static String generateRandomDbName(int length, boolean extendedNames) { String allChar = allChars[r.nextInt(max)]; sb.append(allChar); } - return EncodeUtils.normalize(sb.toString()); + return UnicodeUtils.normalize(sb.toString()); } else { return UUID.randomUUID().toString(); } diff --git a/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java b/src/test/java/com/arangodb/util/UnicodeUtilsTest.java similarity index 91% rename from src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java rename to src/test/java/com/arangodb/util/UnicodeUtilsTest.java index 03cbbcdc8..42e388837 100644 --- a/src/test/java/com/arangodb/internal/util/EncodeUtilsTest.java +++ b/src/test/java/com/arangodb/util/UnicodeUtilsTest.java @@ -1,6 +1,6 @@ -package com.arangodb.internal.util; +package com.arangodb.util; -import com.arangodb.util.TestUtils; +import com.arangodb.internal.util.EncodeUtils; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.AfterClass; @@ -11,7 +11,7 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assume.assumeTrue; -public class EncodeUtilsTest { +public class UnicodeUtilsTest { private static Context context; private static Value jsEncoder; @@ -38,7 +38,7 @@ public void normalizeShouldBehaveAsJs() { for (int i = 0; i < 10_000; i++) { String value = TestUtils.generateRandomDbName(100, true); String jsNormalized = jsNormalizer.execute(value).as(String.class); - String javaNormalized = EncodeUtils.normalize(value); + String javaNormalized = UnicodeUtils.normalize(value); assertThat(javaNormalized, is(jsNormalized)); } } From 60caf3119d7fb83aa6fbbcb209dcadad76c15647 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 3 Sep 2021 11:10:54 +0200 Subject: [PATCH 06/20] fixed gh actions --- .github/workflows/maven.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 46f9e0d64..1269295a4 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -30,17 +30,11 @@ jobs: fail-fast: false matrix: docker-img: - - docker.io/arangodb/arangodb:3.7.14 - - docker.io/arangodb/arangodb:3.8.0 - docker.io/arangodb/arangodb-test:PR14700 - - docker.io/arangodb/enterprise:3.7.14 - - docker.io/arangodb/enterprise:3.8.0 - docker.io/arangodb/enterprise-test:PR14700 topology: - single - - cluster - - active-failover steps: - uses: actions/checkout@v1 From 5cb3e52456da438caba98fb23a12a1964b695302 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 3 Sep 2021 11:19:51 +0200 Subject: [PATCH 07/20] fixed gh actions --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1269295a4..929036808 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -64,4 +64,4 @@ jobs: - name: Info run: mvn -version - name: Test - run: mvn -e --no-transfer-progress test -Dtest=com.arangodb.internal.util.EncodeUtilsTest + run: mvn -e --no-transfer-progress test -Dtest=com.arangodb.util.UnicodeUtilsTest From 6f5711e3d6b63622bdff5dae64c27882b9119859 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Sat, 4 Sep 2021 14:37:57 +0200 Subject: [PATCH 08/20] initialize by default CursorEntity.extra and CursorEntity.Extras.stats to avoid NPE --- src/main/java/com/arangodb/entity/CursorEntity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/arangodb/entity/CursorEntity.java b/src/main/java/com/arangodb/entity/CursorEntity.java index 78981170b..4bb2a3d26 100644 --- a/src/main/java/com/arangodb/entity/CursorEntity.java +++ b/src/main/java/com/arangodb/entity/CursorEntity.java @@ -23,6 +23,7 @@ import com.arangodb.velocypack.VPackSlice; import java.util.Collection; +import java.util.Collections; import java.util.Map; /** @@ -34,7 +35,7 @@ public class CursorEntity implements Entity, MetaAware { private String id; private Integer count; - private Extras extra; + private Extras extra = new Extras(); private Boolean cached; private Boolean hasMore; private VPackSlice result; @@ -120,7 +121,7 @@ public String getMessage() { public static class Extras { private Stats stats; - private Collection warnings; + private Collection warnings = Collections.emptyList(); public Stats getStats() { return stats; From e25a7663773be7b6b7ea0ef4c09cf4b528f382c0 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 16 Sep 2021 12:30:20 +0200 Subject: [PATCH 09/20] added disclaimer header --- .../arangodb/internal/util/EncodeUtils.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/com/arangodb/internal/util/EncodeUtils.java b/src/main/java/com/arangodb/internal/util/EncodeUtils.java index 6c16af6a3..1472b4301 100644 --- a/src/main/java/com/arangodb/internal/util/EncodeUtils.java +++ b/src/main/java/com/arangodb/internal/util/EncodeUtils.java @@ -1,3 +1,23 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * 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. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + package com.arangodb.internal.util; import com.arangodb.ArangoDBException; From d05854449de0cd703b93d32d0bb0cedced54e9a8 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 16 Sep 2021 14:22:44 +0200 Subject: [PATCH 10/20] DbName --- src/main/java/com/arangodb/entity/DbName.java | 69 +++++++++++++++++++ .../java/com/arangodb/util/UnicodeUtils.java | 7 +- 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/arangodb/entity/DbName.java diff --git a/src/main/java/com/arangodb/entity/DbName.java b/src/main/java/com/arangodb/entity/DbName.java new file mode 100644 index 000000000..bcc561153 --- /dev/null +++ b/src/main/java/com/arangodb/entity/DbName.java @@ -0,0 +1,69 @@ +package com.arangodb.entity; + +import com.arangodb.util.UnicodeUtils; + +import java.util.Objects; + +public class DbName { + + private final String value; + + /** + * Creates a new DbName instance with the provided value. If the provided value is not + * NFC-normalized, throws + * {@link IllegalArgumentException}. No transformation is applied to the provided value. + * Use {@link #normalize(String)} to create a DbName from a non-NFC-normalized value. + * + * @param value desired db name + * @return the created {@link DbName} instance + * @see NFC normalization + * @see NFC normalization + * @see Date: Fri, 17 Sep 2021 09:21:51 +0200 Subject: [PATCH 11/20] deprecated string db names in favour of DbName --- src/main/java/com/arangodb/ArangoDB.java | 41 ++++++++++++++----- src/main/java/com/arangodb/entity/DbName.java | 6 +-- .../com/arangodb/internal/ArangoDBImpl.java | 8 ++-- .../com/arangodb/model/DBCreateOptions.java | 29 +++++++++---- .../com/arangodb/velocystream/Request.java | 27 ++++++++---- 5 files changed, 79 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/arangodb/ArangoDB.java b/src/main/java/com/arangodb/ArangoDB.java index c35482612..240a92358 100644 --- a/src/main/java/com/arangodb/ArangoDB.java +++ b/src/main/java/com/arangodb/ArangoDB.java @@ -20,15 +20,7 @@ package com.arangodb; -import com.arangodb.entity.ArangoDBEngine; -import com.arangodb.entity.ArangoDBVersion; -import com.arangodb.entity.LoadBalancingStrategy; -import com.arangodb.entity.LogEntity; -import com.arangodb.entity.LogEntriesEntity; -import com.arangodb.entity.LogLevelEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.ServerRole; -import com.arangodb.entity.UserEntity; +import com.arangodb.entity.*; import com.arangodb.internal.ArangoContext; import com.arangodb.internal.ArangoDBImpl; import com.arangodb.internal.ArangoDefaults; @@ -672,8 +664,20 @@ public synchronized ArangoDB build() { * * @param name Name of the database * @return database handler + * @deprecated Use {@link #db(DbName)} instead */ - ArangoDatabase db(@DBName String name); + @Deprecated + default ArangoDatabase db(String name) { + return db(DbName.of(name)); + } + + /** + * Returns a {@code ArangoDatabase} instance for the given database name. + * + * @param dbName Name of the database + * @return database handler + */ + ArangoDatabase db(DbName dbName); /** * Creates a new database with the given name. @@ -683,8 +687,23 @@ public synchronized ArangoDB build() { * @throws ArangoDBException * @see API * Documentation + * @deprecated Use {@link #createDatabase(DbName)} instead + */ + @Deprecated + default Boolean createDatabase(String name) throws ArangoDBException { + return createDatabase(DbName.of(name)); + } + + /** + * Creates a new database with the given name. + * + * @param dbName Name of the database to create + * @return true if the database was created successfully. + * @throws ArangoDBException + * @see API + * Documentation */ - Boolean createDatabase(@DBName String name) throws ArangoDBException; + Boolean createDatabase(DbName dbName) throws ArangoDBException; /** * Creates a new database with the given name. diff --git a/src/main/java/com/arangodb/entity/DbName.java b/src/main/java/com/arangodb/entity/DbName.java index bcc561153..1993fe907 100644 --- a/src/main/java/com/arangodb/entity/DbName.java +++ b/src/main/java/com/arangodb/entity/DbName.java @@ -9,7 +9,7 @@ public class DbName { private final String value; /** - * Creates a new DbName instance with the provided value. If the provided value is not + * Creates a new {@link DbName} instance with the provided value. If the provided value is not * NFC-normalized, throws * {@link IllegalArgumentException}. No transformation is applied to the provided value. * Use {@link #normalize(String)} to create a DbName from a non-NFC-normalized value. @@ -26,8 +26,8 @@ public static DbName of(final String value) { } /** - * Creates a new DbName instance with the NFC normal form of the provided value. The created DbName will hold a - * value potentially different from the provided one. + * Creates a new {@link DbName} instance with the NFC normal form of the provided value. + * Note that the created {@link DbName} will hold a value potentially different from the provided one. * * @param value desired db name * @return the created {@link DbName} instance diff --git a/src/main/java/com/arangodb/internal/ArangoDBImpl.java b/src/main/java/com/arangodb/internal/ArangoDBImpl.java index e1fd65318..2c26dd05f 100644 --- a/src/main/java/com/arangodb/internal/ArangoDBImpl.java +++ b/src/main/java/com/arangodb/internal/ArangoDBImpl.java @@ -129,13 +129,13 @@ public ArangoDatabase db() { } @Override - public ArangoDatabase db(final String name) { - return new ArangoDatabaseImpl(this, name).setCursorInitializer(cursorInitializer); + public ArangoDatabase db(final DbName dbName) { + return new ArangoDatabaseImpl(this, dbName.getValue()).setCursorInitializer(cursorInitializer); } @Override - public Boolean createDatabase(final String name) throws ArangoDBException { - return createDatabase(new DBCreateOptions().name(name)); + public Boolean createDatabase(final DbName dbName) throws ArangoDBException { + return createDatabase(new DBCreateOptions().dbName(dbName)); } @Override diff --git a/src/main/java/com/arangodb/model/DBCreateOptions.java b/src/main/java/com/arangodb/model/DBCreateOptions.java index b45f3e467..4562337b6 100644 --- a/src/main/java/com/arangodb/model/DBCreateOptions.java +++ b/src/main/java/com/arangodb/model/DBCreateOptions.java @@ -20,8 +20,7 @@ package com.arangodb.model; -import com.arangodb.util.UnicodeUtils; -import com.arangodb.util.DBName; +import com.arangodb.entity.DbName; import java.util.Collection; @@ -31,8 +30,7 @@ public class DBCreateOptions { private Collection users; - @DBName - private String name; + private DbName dbName; private DatabaseOptions options; public DBCreateOptions() { @@ -56,17 +54,34 @@ public DBCreateOptions users(final Collection users) { return this; } + /** + * @deprecated Use {@link #getDbName()} instead. + */ + @Deprecated public String getName() { - return name; + return dbName.getValue(); } /** * @param name Has to contain a valid database name * @return options + * @deprecated Use {@link #dbName(DbName)} instead. */ + @Deprecated public DBCreateOptions name(final String name) { - UnicodeUtils.checkNormalized(name); - this.name = name; + return dbName(DbName.of(name)); + } + + public DbName getDbName() { + return dbName; + } + + /** + * @param dbName database name + * @return options + */ + public DBCreateOptions dbName(DbName dbName) { + this.dbName = dbName; return this; } diff --git a/src/main/java/com/arangodb/velocystream/Request.java b/src/main/java/com/arangodb/velocystream/Request.java index debc4520d..fd35e6445 100644 --- a/src/main/java/com/arangodb/velocystream/Request.java +++ b/src/main/java/com/arangodb/velocystream/Request.java @@ -20,8 +20,7 @@ package com.arangodb.velocystream; -import com.arangodb.util.UnicodeUtils; -import com.arangodb.util.DBName; +import com.arangodb.entity.DbName; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.annotations.Expose; @@ -35,8 +34,7 @@ public class Request { private int version = 1; private int type = 1; - @DBName - private final String database; + private final DbName dbName; private final RequestType requestType; private final String request; private final Map queryParam; @@ -44,15 +42,22 @@ public class Request { @Expose(serialize = false) private VPackSlice body; + /** + * @deprecated Use {@link #Request(DbName, RequestType, String)} instead + */ + @Deprecated public Request(final String database, final RequestType requestType, final String path) { + this(DbName.of(database), requestType, path); + } + + public Request(final DbName dbName, final RequestType requestType, final String path) { super(); - this.database = database; + this.dbName = dbName; this.requestType = requestType; this.request = path; body = null; queryParam = new HashMap<>(); headerParam = new HashMap<>(); - UnicodeUtils.checkNormalized(database); } public int getVersion() { @@ -73,8 +78,16 @@ public Request setType(final int type) { return this; } + /** + * @deprecated Use {@link #getDbName()} instead + */ + @Deprecated public String getDatabase() { - return database; + return getDbName().getValue(); + } + + public DbName getDbName() { + return dbName; } public RequestType getRequestType() { From 7230ba03e23fa5e4c73ab250327cc3f03ad51a0f Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 17 Sep 2021 11:03:40 +0200 Subject: [PATCH 12/20] refactor internal use of string db names in favour of DbName --- .../java/com/arangodb/ArangoDatabase.java | 13 +- .../com/arangodb/async/ArangoDBAsync.java | 39 ++++-- .../arangodb/async/ArangoDatabaseAsync.java | 13 +- .../async/internal/ArangoDBAsyncImpl.java | 24 ++-- .../internal/ArangoDatabaseAsyncImpl.java | 25 +--- src/main/java/com/arangodb/entity/DbName.java | 7 +- .../com/arangodb/internal/ArangoDBImpl.java | 24 ++-- .../arangodb/internal/ArangoDatabaseImpl.java | 4 +- .../arangodb/internal/ArangoExecuteable.java | 5 +- .../internal/InternalArangoCollection.java | 76 ++++++------ .../arangodb/internal/InternalArangoDB.java | 53 ++++---- .../internal/InternalArangoDatabase.java | 114 +++++++++--------- .../InternalArangoEdgeCollection.java | 10 +- .../internal/InternalArangoGraph.java | 16 +-- .../internal/InternalArangoRoute.java | 2 +- .../internal/InternalArangoSearch.java | 6 +- .../InternalArangoVertexCollection.java | 12 +- .../arangodb/internal/InternalArangoView.java | 6 +- .../internal/http/HttpConnection.java | 2 +- .../internal/net/ExtendedHostResolver.java | 4 +- .../internal/velocypack/VPackSerializers.java | 2 +- .../internal/AuthenticationRequest.java | 3 +- .../com/arangodb/model/DBCreateOptions.java | 20 +-- src/main/java/com/arangodb/util/DBName.java | 14 --- .../java/com/arangodb/util/UnicodeUtils.java | 9 +- src/test/java/com/arangodb/ArangoDBTest.java | 55 ++++----- .../java/com/arangodb/ArangoDatabaseTest.java | 2 +- .../java/com/arangodb/ArangoSearchTest.java | 4 +- src/test/java/com/arangodb/BaseTest.java | 8 +- src/test/java/com/arangodb/UserAuthTest.java | 17 ++- .../java/com/arangodb/async/ArangoDBTest.java | 26 ++-- .../arangodb/async/ArangoDatabaseTest.java | 6 +- .../com/arangodb/async/ArangoSearchTest.java | 4 +- .../java/com/arangodb/async/BaseTest.java | 3 +- .../debug/ConsolidationIntervalMsec.java | 3 +- 35 files changed, 305 insertions(+), 326 deletions(-) delete mode 100644 src/main/java/com/arangodb/util/DBName.java diff --git a/src/main/java/com/arangodb/ArangoDatabase.java b/src/main/java/com/arangodb/ArangoDatabase.java index a8d9bab9c..51a827880 100644 --- a/src/main/java/com/arangodb/ArangoDatabase.java +++ b/src/main/java/com/arangodb/ArangoDatabase.java @@ -52,8 +52,19 @@ public interface ArangoDatabase extends ArangoSerializationAccessor { * Returns the name of the database * * @return database name + * @deprecated Use {@link #dbName()} instead */ - String name(); + @Deprecated + default String name() { + return dbName().getValue(); + } + + /** + * Returns the name of the database + * + * @return database name + */ + DbName dbName(); /** * Returns the server name and version number. diff --git a/src/main/java/com/arangodb/async/ArangoDBAsync.java b/src/main/java/com/arangodb/async/ArangoDBAsync.java index 8c88f04e3..6c265f8b9 100644 --- a/src/main/java/com/arangodb/async/ArangoDBAsync.java +++ b/src/main/java/com/arangodb/async/ArangoDBAsync.java @@ -26,14 +26,7 @@ import com.arangodb.async.internal.ArangoDBAsyncImpl; import com.arangodb.async.internal.velocystream.VstCommunicationAsync; import com.arangodb.async.internal.velocystream.VstConnectionFactoryAsync; -import com.arangodb.entity.ArangoDBVersion; -import com.arangodb.entity.LoadBalancingStrategy; -import com.arangodb.entity.LogEntity; -import com.arangodb.entity.LogEntriesEntity; -import com.arangodb.entity.LogLevelEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.ServerRole; -import com.arangodb.entity.UserEntity; +import com.arangodb.entity.*; import com.arangodb.internal.ArangoContext; import com.arangodb.internal.ArangoDefaults; import com.arangodb.internal.InternalArangoDBBuilder; @@ -104,8 +97,20 @@ public interface ArangoDBAsync extends ArangoSerializationAccessor { * * @param name Name of the database * @return database handler + * @deprecated Use {@link #db(DbName)} instead */ - ArangoDatabaseAsync db(final String name); + @Deprecated + default ArangoDatabaseAsync db(final String name) { + return db(DbName.of(name)); + } + + /** + * Returns a handler of the database by the given name + * + * @param dbName Name of the database + * @return database handler + */ + ArangoDatabaseAsync db(final DbName dbName); /** * Creates a new database @@ -114,8 +119,22 @@ public interface ArangoDBAsync extends ArangoSerializationAccessor { * @return true if the database was created successfully. * @see API * Documentation + * @deprecated Use {@link #createDatabase(DbName)} instead + */ + @Deprecated + default CompletableFuture createDatabase(final String name) { + return createDatabase(DbName.of(name)); + } + + /** + * Creates a new database + * + * @param dbName database name + * @return true if the database was created successfully. + * @see API + * Documentation */ - CompletableFuture createDatabase(final String name); + CompletableFuture createDatabase(final DbName dbName); /** * Creates a new database diff --git a/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java b/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java index c98ba1dd6..ab3fc965c 100644 --- a/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java +++ b/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java @@ -54,8 +54,19 @@ public interface ArangoDatabaseAsync extends ArangoSerializationAccessor { * Returns the name of the database * * @return database name + * @deprecated Use {@link #dbName()} instead */ - String name(); + @Deprecated + default String name() { + return dbName().getValue(); + } + + /** + * Returns the name of the database + * + * @return database name + */ + DbName dbName(); /** * Returns the server name and version number. diff --git a/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java b/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java index 426546c5e..a1b3a5253 100644 --- a/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java +++ b/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java @@ -97,16 +97,16 @@ public void shutdown() throws ArangoDBException { @Override public ArangoDatabaseAsync db() { - return db(ArangoRequestParam.SYSTEM); + return db(DbName.SYSTEM); } @Override - public ArangoDatabaseAsync db(final String name) { + public ArangoDatabaseAsync db(final DbName name) { return new ArangoDatabaseAsyncImpl(this, name); } @Override - public CompletableFuture createDatabase(final String name) { + public CompletableFuture createDatabase(final DbName name) { return createDatabase(new DBCreateOptions().name(name)); } @@ -117,7 +117,7 @@ public CompletableFuture createDatabase(DBCreateOptions options) { @Override public CompletableFuture> getDatabases() { - return executor.execute(getDatabasesRequest(db().name()), getDatabaseResponseDeserializer()); + return executor.execute(getDatabasesRequest(db().dbName()), getDatabaseResponseDeserializer()); } @Override @@ -127,7 +127,7 @@ public CompletableFuture> getAccessibleDatabases() { @Override public CompletableFuture> getAccessibleDatabasesFor(final String user) { - return executor.execute(getAccessibleDatabasesForRequest(db().name(), user), + return executor.execute(getAccessibleDatabasesForRequest(db().dbName(), user), getAccessibleDatabasesForResponseDeserializer()); } @@ -143,7 +143,7 @@ public CompletableFuture getRole() { @Override public CompletableFuture createUser(final String user, final String passwd) { - return executor.execute(createUserRequest(db().name(), user, passwd, new UserCreateOptions()), + return executor.execute(createUserRequest(db().dbName(), user, passwd, new UserCreateOptions()), UserEntity.class); } @@ -152,32 +152,32 @@ public CompletableFuture createUser( final String user, final String passwd, final UserCreateOptions options) { - return executor.execute(createUserRequest(db().name(), user, passwd, options), UserEntity.class); + return executor.execute(createUserRequest(db().dbName(), user, passwd, options), UserEntity.class); } @Override public CompletableFuture deleteUser(final String user) { - return executor.execute(deleteUserRequest(db().name(), user), Void.class); + return executor.execute(deleteUserRequest(db().dbName(), user), Void.class); } @Override public CompletableFuture getUser(final String user) { - return executor.execute(getUserRequest(db().name(), user), UserEntity.class); + return executor.execute(getUserRequest(db().dbName(), user), UserEntity.class); } @Override public CompletableFuture> getUsers() { - return executor.execute(getUsersRequest(db().name()), getUsersResponseDeserializer()); + return executor.execute(getUsersRequest(db().dbName()), getUsersResponseDeserializer()); } @Override public CompletableFuture updateUser(final String user, final UserUpdateOptions options) { - return executor.execute(updateUserRequest(db().name(), user, options), UserEntity.class); + return executor.execute(updateUserRequest(db().dbName(), user, options), UserEntity.class); } @Override public CompletableFuture replaceUser(final String user, final UserUpdateOptions options) { - return executor.execute(replaceUserRequest(db().name(), user, options), UserEntity.class); + return executor.execute(replaceUserRequest(db().dbName(), user, options), UserEntity.class); } @Override diff --git a/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java b/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java index 4c89ccd22..c4e39406a 100644 --- a/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java +++ b/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java @@ -28,26 +28,7 @@ import com.arangodb.async.ArangoRouteAsync; import com.arangodb.async.ArangoSearchAsync; import com.arangodb.async.ArangoViewAsync; -import com.arangodb.entity.AqlExecutionExplainEntity; -import com.arangodb.entity.AqlFunctionEntity; -import com.arangodb.entity.AqlParseEntity; -import com.arangodb.entity.ArangoDBEngine; -import com.arangodb.entity.ArangoDBVersion; -import com.arangodb.entity.CollectionEntity; -import com.arangodb.entity.CursorEntity; -import com.arangodb.entity.DatabaseEntity; -import com.arangodb.entity.EdgeDefinition; -import com.arangodb.entity.GraphEntity; -import com.arangodb.entity.IndexEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.QueryCachePropertiesEntity; -import com.arangodb.entity.QueryEntity; -import com.arangodb.entity.QueryTrackingPropertiesEntity; -import com.arangodb.entity.StreamTransactionEntity; -import com.arangodb.entity.TransactionEntity; -import com.arangodb.entity.TraversalEntity; -import com.arangodb.entity.ViewEntity; -import com.arangodb.entity.ViewType; +import com.arangodb.entity.*; import com.arangodb.entity.arangosearch.AnalyzerEntity; import com.arangodb.entity.arangosearch.analyzer.SearchAnalyzer; import com.arangodb.internal.ArangoCursorExecute; @@ -86,7 +67,7 @@ public class ArangoDatabaseAsyncImpl extends InternalArangoDatabase implements ArangoDatabaseAsync { - ArangoDatabaseAsyncImpl(final ArangoDBAsyncImpl arangoDB, final String name) { + ArangoDatabaseAsyncImpl(final ArangoDBAsyncImpl arangoDB, final DbName name) { super(arangoDB, name); } @@ -168,7 +149,7 @@ public CompletableFuture deleteIndex(final String id) { @Override public CompletableFuture create() { - return arango().createDatabase(name()); + return arango().createDatabase(dbName()); } @Override diff --git a/src/main/java/com/arangodb/entity/DbName.java b/src/main/java/com/arangodb/entity/DbName.java index 1993fe907..bb562c410 100644 --- a/src/main/java/com/arangodb/entity/DbName.java +++ b/src/main/java/com/arangodb/entity/DbName.java @@ -1,11 +1,14 @@ package com.arangodb.entity; +import com.arangodb.internal.ArangoRequestParam; import com.arangodb.util.UnicodeUtils; import java.util.Objects; public class DbName { + public static final DbName SYSTEM = DbName.of(ArangoRequestParam.SYSTEM); + private final String value; /** @@ -62,8 +65,6 @@ public int hashCode() { @Override public String toString() { - return "DbName{" + - "value='" + value + '\'' + - '}'; + return getValue(); } } diff --git a/src/main/java/com/arangodb/internal/ArangoDBImpl.java b/src/main/java/com/arangodb/internal/ArangoDBImpl.java index 2c26dd05f..a445f4610 100644 --- a/src/main/java/com/arangodb/internal/ArangoDBImpl.java +++ b/src/main/java/com/arangodb/internal/ArangoDBImpl.java @@ -125,17 +125,17 @@ public void shutdown() throws ArangoDBException { @Override public ArangoDatabase db() { - return db(ArangoRequestParam.SYSTEM); + return db(DbName.SYSTEM); } @Override public ArangoDatabase db(final DbName dbName) { - return new ArangoDatabaseImpl(this, dbName.getValue()).setCursorInitializer(cursorInitializer); + return new ArangoDatabaseImpl(this, dbName).setCursorInitializer(cursorInitializer); } @Override public Boolean createDatabase(final DbName dbName) throws ArangoDBException { - return createDatabase(new DBCreateOptions().dbName(dbName)); + return createDatabase(new DBCreateOptions().name(dbName)); } @Override @@ -145,7 +145,7 @@ public Boolean createDatabase(DBCreateOptions options) throws ArangoDBException @Override public Collection getDatabases() throws ArangoDBException { - return executor.execute(getDatabasesRequest(db().name()), getDatabaseResponseDeserializer()); + return executor.execute(getDatabasesRequest(db().dbName()), getDatabaseResponseDeserializer()); } @Override @@ -155,7 +155,7 @@ public Collection getAccessibleDatabases() throws ArangoDBException { @Override public Collection getAccessibleDatabasesFor(final String user) throws ArangoDBException { - return executor.execute(getAccessibleDatabasesForRequest(db().name(), user), + return executor.execute(getAccessibleDatabasesForRequest(db().dbName(), user), getAccessibleDatabasesForResponseDeserializer()); } @@ -176,39 +176,39 @@ public ServerRole getRole() throws ArangoDBException { @Override public UserEntity createUser(final String user, final String passwd) throws ArangoDBException { - return executor.execute(createUserRequest(db().name(), user, passwd, new UserCreateOptions()), + return executor.execute(createUserRequest(db().dbName(), user, passwd, new UserCreateOptions()), UserEntity.class); } @Override public UserEntity createUser(final String user, final String passwd, final UserCreateOptions options) throws ArangoDBException { - return executor.execute(createUserRequest(db().name(), user, passwd, options), UserEntity.class); + return executor.execute(createUserRequest(db().dbName(), user, passwd, options), UserEntity.class); } @Override public void deleteUser(final String user) throws ArangoDBException { - executor.execute(deleteUserRequest(db().name(), user), Void.class); + executor.execute(deleteUserRequest(db().dbName(), user), Void.class); } @Override public UserEntity getUser(final String user) throws ArangoDBException { - return executor.execute(getUserRequest(db().name(), user), UserEntity.class); + return executor.execute(getUserRequest(db().dbName(), user), UserEntity.class); } @Override public Collection getUsers() throws ArangoDBException { - return executor.execute(getUsersRequest(db().name()), getUsersResponseDeserializer()); + return executor.execute(getUsersRequest(db().dbName()), getUsersResponseDeserializer()); } @Override public UserEntity updateUser(final String user, final UserUpdateOptions options) throws ArangoDBException { - return executor.execute(updateUserRequest(db().name(), user, options), UserEntity.class); + return executor.execute(updateUserRequest(db().dbName(), user, options), UserEntity.class); } @Override public UserEntity replaceUser(final String user, final UserUpdateOptions options) throws ArangoDBException { - return executor.execute(replaceUserRequest(db().name(), user, options), UserEntity.class); + return executor.execute(replaceUserRequest(db().dbName(), user, options), UserEntity.class); } @Override diff --git a/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java b/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java index bac59b876..6b38136ac 100644 --- a/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java +++ b/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java @@ -47,7 +47,7 @@ public class ArangoDatabaseImpl extends InternalArangoDatabase header : context.getHeaderParam().entrySet()) { request.putHeaderParam(header.getKey(), header.getValue()); } diff --git a/src/main/java/com/arangodb/internal/InternalArangoCollection.java b/src/main/java/com/arangodb/internal/InternalArangoCollection.java index 40b0cb974..31c35e379 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoCollection.java +++ b/src/main/java/com/arangodb/internal/InternalArangoCollection.java @@ -80,7 +80,7 @@ public String name() { } protected Request insertDocumentRequest(final T value, final DocumentCreateOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_DOCUMENT, name); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_DOCUMENT, name); final DocumentCreateOptions params = (options != null ? options : new DocumentCreateOptions()); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); request.putQueryParam(RETURN_NEW, params.getReturnNew()); @@ -121,7 +121,7 @@ protected ResponseDeserializer> insertDocumentRespon } protected Request insertDocumentsRequest(final Collection values, final DocumentCreateOptions params) { - final Request request = request(db.name(), RequestType.POST, PATH_API_DOCUMENT, name); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_DOCUMENT, name); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); request.putQueryParam(RETURN_NEW, params.getReturnNew()); request.putQueryParam(RETURN_OLD, params.getReturnOld()); @@ -191,7 +191,7 @@ protected Request importDocumentsRequest(final Collection values, final Docum protected Request importDocumentsRequest(final DocumentImportOptions options) { final DocumentImportOptions params = options != null ? options : new DocumentImportOptions(); - return request(db.name(), RequestType.POST, PATH_API_IMPORT).putQueryParam(COLLECTION, name) + return request(db.dbName(), RequestType.POST, PATH_API_IMPORT).putQueryParam(COLLECTION, name) .putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()) .putQueryParam("fromPrefix", params.getFromPrefix()).putQueryParam("toPrefix", params.getToPrefix()) .putQueryParam(OVERWRITE, params.getOverwrite()).putQueryParam("onDuplicate", params.getOnDuplicate()) @@ -199,7 +199,7 @@ protected Request importDocumentsRequest(final DocumentImportOptions options) { } protected Request getDocumentRequest(final String key, final DocumentReadOptions options) { - final Request request = request(db.name(), RequestType.GET, PATH_API_DOCUMENT, + final Request request = request(db.dbName(), RequestType.GET, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentReadOptions params = (options != null ? options : new DocumentReadOptions()); request.putHeaderParam(ArangoRequestParam.IF_NONE_MATCH, params.getIfNoneMatch()); @@ -213,7 +213,7 @@ protected Request getDocumentRequest(final String key, final DocumentReadOptions protected Request getDocumentsRequest(final Collection keys, final DocumentReadOptions options) { final DocumentReadOptions params = (options != null ? options : new DocumentReadOptions()); - final Request request = request(db.name(), RequestType.PUT, PATH_API_DOCUMENT, name) + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, name) .putQueryParam("onlyget", true) .putHeaderParam(ArangoRequestParam.IF_NONE_MATCH, params.getIfNoneMatch()) .putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()).setBody(util().serialize(keys)) @@ -253,7 +253,7 @@ protected ResponseDeserializer> getDocumentsResponseD protected Request replaceDocumentRequest( final String key, final T value, final DocumentReplaceOptions options) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_DOCUMENT, + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentReplaceOptions params = (options != null ? options : new DocumentReplaceOptions()); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); @@ -290,7 +290,7 @@ protected ResponseDeserializer> replaceDocumentRespo } protected Request replaceDocumentsRequest(final Collection values, final DocumentReplaceOptions params) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_DOCUMENT, name); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, name); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); @@ -348,7 +348,7 @@ protected ResponseDeserializer>> } protected Request updateDocumentRequest(final String key, final T value, final DocumentUpdateOptions options) { - final Request request = request(db.name(), RequestType.PATCH, PATH_API_DOCUMENT, + final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentUpdateOptions params = (options != null ? options : new DocumentUpdateOptions()); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); @@ -388,7 +388,7 @@ protected ResponseDeserializer> updateDocumentRes } protected Request updateDocumentsRequest(final Collection values, final DocumentUpdateOptions params) { - final Request request = request(db.name(), RequestType.PATCH, PATH_API_DOCUMENT, name); + final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_DOCUMENT, name); final Boolean keepNull = params.getKeepNull(); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -444,7 +444,7 @@ protected ResponseDeserializer>> } protected Request deleteDocumentRequest(final String key, final DocumentDeleteOptions options) { - final Request request = request(db.name(), RequestType.DELETE, PATH_API_DOCUMENT, + final Request request = request(db.dbName(), RequestType.DELETE, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentDeleteOptions params = (options != null ? options : new DocumentDeleteOptions()); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); @@ -469,7 +469,7 @@ protected ResponseDeserializer> deleteDocumentRespon } protected Request deleteDocumentsRequest(final Collection keys, final DocumentDeleteOptions options) { - final Request request = request(db.name(), RequestType.DELETE, PATH_API_DOCUMENT, name); + final Request request = request(db.dbName(), RequestType.DELETE, PATH_API_DOCUMENT, name); final DocumentDeleteOptions params = (options != null ? options : new DocumentDeleteOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); @@ -513,7 +513,7 @@ protected ResponseDeserializer>> } protected Request documentExistsRequest(final String key, final DocumentExistsOptions options) { - final Request request = request(db.name(), RequestType.HEAD, PATH_API_DOCUMENT, + final Request request = request(db.dbName(), RequestType.HEAD, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentExistsOptions params = (options != null ? options : new DocumentExistsOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -523,11 +523,11 @@ protected Request documentExistsRequest(final String key, final DocumentExistsOp } protected Request getIndexRequest(final String id) { - return request(db.name(), RequestType.GET, PATH_API_INDEX, createIndexId(id)); + return request(db.dbName(), RequestType.GET, PATH_API_INDEX, createIndexId(id)); } protected Request deleteIndexRequest(final String id) { - return request(db.name(), RequestType.DELETE, PATH_API_INDEX, createIndexId(id)); + return request(db.dbName(), RequestType.DELETE, PATH_API_INDEX, createIndexId(id)); } protected ResponseDeserializer deleteIndexResponseDeserializer() { @@ -547,7 +547,7 @@ private String createIndexId(final String id) { } protected Request createHashIndexRequest(final Iterable fields, final HashIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new HashIndexOptions(), fields))); @@ -555,7 +555,7 @@ protected Request createHashIndexRequest(final Iterable fields, final Ha } protected Request createSkiplistIndexRequest(final Iterable fields, final SkiplistIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new SkiplistIndexOptions(), fields))); @@ -564,7 +564,7 @@ protected Request createSkiplistIndexRequest(final Iterable fields, fina protected Request createPersistentIndexRequest( final Iterable fields, final PersistentIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody(util().serialize( OptionsBuilder.build(options != null ? options : new PersistentIndexOptions(), fields))); @@ -572,7 +572,7 @@ protected Request createPersistentIndexRequest( } protected Request createGeoIndexRequest(final Iterable fields, final GeoIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new GeoIndexOptions(), fields))); @@ -580,7 +580,7 @@ protected Request createGeoIndexRequest(final Iterable fields, final Geo } protected Request createFulltextIndexRequest(final Iterable fields, final FulltextIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new FulltextIndexOptions(), fields))); @@ -588,7 +588,7 @@ protected Request createFulltextIndexRequest(final Iterable fields, fina } protected Request createTtlIndexRequest(final Iterable fields, final TtlIndexOptions options) { - final Request request = request(db.name(), RequestType.POST, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new TtlIndexOptions(), fields))); @@ -596,7 +596,7 @@ protected Request createTtlIndexRequest(final Iterable fields, final Ttl } protected Request getIndexesRequest() { - final Request request = request(db.name(), RequestType.GET, PATH_API_INDEX); + final Request request = request(db.dbName(), RequestType.GET, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); return request; } @@ -607,74 +607,74 @@ protected ResponseDeserializer> getIndexesResponseDeseri } protected Request truncateRequest(final CollectionTruncateOptions options) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "truncate"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "truncate"); final CollectionTruncateOptions params = (options != null ? options : new CollectionTruncateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); return request; } protected Request countRequest(final CollectionCountOptions options) { - final Request request = request(db.name(), RequestType.GET, PATH_API_COLLECTION, name, "count"); + final Request request = request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "count"); final CollectionCountOptions params = (options != null ? options : new CollectionCountOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); return request; } protected Request dropRequest(final Boolean isSystem) { - return request(db.name(), RequestType.DELETE, PATH_API_COLLECTION, name).putQueryParam("isSystem", isSystem); + return request(db.dbName(), RequestType.DELETE, PATH_API_COLLECTION, name).putQueryParam("isSystem", isSystem); } protected Request loadRequest() { - return request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "load"); + return request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "load"); } protected Request unloadRequest() { - return request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "unload"); + return request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "unload"); } protected Request getInfoRequest() { - return request(db.name(), RequestType.GET, PATH_API_COLLECTION, name); + return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name); } protected Request getPropertiesRequest() { - return request(db.name(), RequestType.GET, PATH_API_COLLECTION, name, "properties"); + return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "properties"); } protected Request changePropertiesRequest(final CollectionPropertiesOptions options) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "properties"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "properties"); request.setBody(util().serialize(options != null ? options : new CollectionPropertiesOptions())); return request; } protected Request renameRequest(final String newName) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "rename"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "rename"); request.setBody(util().serialize(OptionsBuilder.build(new CollectionRenameOptions(), newName))); return request; } protected Request responsibleShardRequest(final T value) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_COLLECTION, name, "responsibleShard"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "responsibleShard"); request.setBody(util(Serializer.CUSTOM).serialize(value)); return request; } protected Request getRevisionRequest() { - return request(db.name(), RequestType.GET, PATH_API_COLLECTION, name, "revision"); + return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "revision"); } protected Request grantAccessRequest(final String user, final Permissions permissions) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, - db.name(), name).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, + db.dbName().getValue(), name).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request resetAccessRequest(final String user) { - return request(ArangoRequestParam.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, - db.name(), name); + return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, + db.dbName().getValue(), name); } protected Request getPermissionsRequest(final String user) { - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, - db.name(), name); + return request(DbName.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, + db.dbName().getValue(), name); } protected ResponseDeserializer getPermissionsResponseDeserialzer() { diff --git a/src/main/java/com/arangodb/internal/InternalArangoDB.java b/src/main/java/com/arangodb/internal/InternalArangoDB.java index 05aec0028..a5de75657 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDB.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDB.java @@ -20,10 +20,7 @@ package com.arangodb.internal; -import com.arangodb.entity.LogLevelEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.ServerRole; -import com.arangodb.entity.UserEntity; +import com.arangodb.entity.*; import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.util.ArangoSerializationFactory; import com.arangodb.model.*; @@ -55,7 +52,7 @@ protected InternalArangoDB(final E executor, final ArangoSerializationFactory ut } protected Request getRoleRequest() { - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_ROLE); + return request(DbName.SYSTEM, RequestType.GET, PATH_API_ROLE); } protected ResponseDeserializer getRoleResponseDeserializer() { @@ -63,7 +60,7 @@ protected ResponseDeserializer getRoleResponseDeserializer() { } protected Request createDatabaseRequest(final DBCreateOptions options) { - final Request request = request(ArangoRequestParam.SYSTEM, RequestType.POST, + final Request request = request(DbName.SYSTEM, RequestType.POST, InternalArangoDatabase.PATH_API_DATABASE); request.setBody(util().serialize(options)); return request; @@ -73,8 +70,8 @@ protected ResponseDeserializer createDatabaseResponseDeserializer() { return response -> response.getBody().get(ArangoResponseField.RESULT).getAsBoolean(); } - protected Request getDatabasesRequest(final String database) { - return request(database, RequestType.GET, InternalArangoDatabase.PATH_API_DATABASE); + protected Request getDatabasesRequest(final DbName dbName) { + return request(dbName, RequestType.GET, InternalArangoDatabase.PATH_API_DATABASE); } protected ResponseDeserializer> getDatabaseResponseDeserializer() { @@ -85,8 +82,8 @@ protected ResponseDeserializer> getDatabaseResponseDeserializ }; } - protected Request getAccessibleDatabasesForRequest(final String database, final String user) { - return request(database, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE); + protected Request getAccessibleDatabasesForRequest(final DbName dbName, final String user) { + return request(dbName, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE); } protected ResponseDeserializer> getAccessibleDatabasesForResponseDeserializer() { @@ -102,27 +99,27 @@ protected ResponseDeserializer> getAccessibleDatabasesForResp } protected Request createUserRequest( - final String database, + final DbName dbName, final String user, final String passwd, final UserCreateOptions options) { final Request request; - request = request(database, RequestType.POST, PATH_API_USER); + request = request(dbName, RequestType.POST, PATH_API_USER); request.setBody( util().serialize(OptionsBuilder.build(options != null ? options : new UserCreateOptions(), user, passwd))); return request; } - protected Request deleteUserRequest(final String database, final String user) { - return request(database, RequestType.DELETE, PATH_API_USER, user); + protected Request deleteUserRequest(final DbName dbName, final String user) { + return request(dbName, RequestType.DELETE, PATH_API_USER, user); } - protected Request getUsersRequest(final String database) { - return request(database, RequestType.GET, PATH_API_USER); + protected Request getUsersRequest(final DbName dbName) { + return request(dbName, RequestType.GET, PATH_API_USER); } - protected Request getUserRequest(final String database, final String user) { - return request(database, RequestType.GET, PATH_API_USER, user); + protected Request getUserRequest(final DbName dbName, final String user) { + return request(dbName, RequestType.GET, PATH_API_USER, user); } protected ResponseDeserializer> getUsersResponseDeserializer() { @@ -133,33 +130,33 @@ protected ResponseDeserializer> getUsersResponseDeseriali }; } - protected Request updateUserRequest(final String database, final String user, final UserUpdateOptions options) { + protected Request updateUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { final Request request; - request = request(database, RequestType.PATCH, PATH_API_USER, user); + request = request(dbName, RequestType.PATCH, PATH_API_USER, user); request.setBody(util().serialize(options != null ? options : new UserUpdateOptions())); return request; } - protected Request replaceUserRequest(final String database, final String user, final UserUpdateOptions options) { + protected Request replaceUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { final Request request; - request = request(database, RequestType.PUT, PATH_API_USER, user); + request = request(dbName, RequestType.PUT, PATH_API_USER, user); request.setBody(util().serialize(options != null ? options : new UserUpdateOptions())); return request; } protected Request updateUserDefaultDatabaseAccessRequest(final String user, final Permissions permissions) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, "*", "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request getLogsRequest(final LogOptions options) { final LogOptions params = options != null ? options : new LogOptions(); - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG) + return request(DbName.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG) .putQueryParam(LogOptions.PROPERTY_UPTO, params.getUpto()) .putQueryParam(LogOptions.PROPERTY_LEVEL, params.getLevel()) .putQueryParam(LogOptions.PROPERTY_START, params.getStart()) @@ -171,7 +168,7 @@ protected Request getLogsRequest(final LogOptions options) { protected Request getLogEntriesRequest(final LogOptions options) { final LogOptions params = options != null ? options : new LogOptions(); - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_ENTRIES) + return request(DbName.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_ENTRIES) .putQueryParam(LogOptions.PROPERTY_UPTO, params.getUpto()) .putQueryParam(LogOptions.PROPERTY_LEVEL, params.getLevel()) .putQueryParam(LogOptions.PROPERTY_START, params.getStart()) @@ -182,11 +179,11 @@ protected Request getLogEntriesRequest(final LogOptions options) { } protected Request getLogLevelRequest() { - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_LEVEL); + return request(DbName.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_LEVEL); } protected Request setLogLevelRequest(final LogLevelEntity entity) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_ADMIN_LOG_LEVEL) + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_ADMIN_LOG_LEVEL) .setBody(util().serialize(entity)); } diff --git a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java index afb8c4cd7..2e40961c8 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java @@ -26,14 +26,12 @@ import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.util.ArangoSerializationFactory; import com.arangodb.internal.util.ArangoSerializationFactory.Serializer; -import com.arangodb.util.UnicodeUtils; import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; import com.arangodb.model.arangosearch.AnalyzerDeleteOptions; import com.arangodb.model.arangosearch.ArangoSearchCreateOptions; import com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder; import com.arangodb.util.ArangoSerializer; -import com.arangodb.util.DBName; import com.arangodb.velocypack.Type; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.exception.VPackException; @@ -72,23 +70,21 @@ public abstract class InternalArangoDatabase> getDatabaseResponseDeserializer() { @@ -96,15 +92,15 @@ protected ResponseDeserializer> getDatabaseResponseDeserializ } protected Request getAccessibleDatabasesRequest() { - return request(name, RequestType.GET, PATH_API_DATABASE, "user"); + return request(dbName, RequestType.GET, PATH_API_DATABASE, "user"); } protected Request getVersionRequest() { - return request(name, RequestType.GET, PATH_API_VERSION); + return request(dbName, RequestType.GET, PATH_API_VERSION); } protected Request getEngineRequest() { - return request(name, RequestType.GET, PATH_API_ENGINE); + return request(dbName, RequestType.GET, PATH_API_ENGINE); } protected Request createCollectionRequest(final String name, final CollectionCreateOptions options) { @@ -112,12 +108,12 @@ protected Request createCollectionRequest(final String name, final CollectionCre VPackSlice body = util() .serialize(OptionsBuilder.build(options != null ? options : new CollectionCreateOptions(), name)); - return request(name(), RequestType.POST, InternalArangoCollection.PATH_API_COLLECTION).setBody(body); + return request(dbName, RequestType.POST, InternalArangoCollection.PATH_API_COLLECTION).setBody(body); } protected Request getCollectionsRequest(final CollectionsReadOptions options) { final Request request; - request = request(name(), RequestType.GET, InternalArangoCollection.PATH_API_COLLECTION); + request = request(dbName, RequestType.GET, InternalArangoCollection.PATH_API_COLLECTION); final CollectionsReadOptions params = (options != null ? options : new CollectionsReadOptions()); request.putQueryParam("excludeSystem", params.getExcludeSystem()); return request; @@ -132,7 +128,7 @@ protected ResponseDeserializer> getCollectionsRespo } protected Request dropRequest() { - return request(ArangoRequestParam.SYSTEM, RequestType.DELETE, PATH_API_DATABASE, name); + return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_DATABASE, dbName.getValue()); } protected ResponseDeserializer createDropResponseDeserializer() { @@ -140,23 +136,23 @@ protected ResponseDeserializer createDropResponseDeserializer() { } protected Request grantAccessRequest(final String user, final Permissions permissions) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, - name).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, + dbName.getValue()).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request resetAccessRequest(final String user) { - return request(ArangoRequestParam.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, - name); + return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, + dbName.getValue()); } protected Request updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { - return request(ArangoRequestParam.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, - name, "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); + return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, + dbName.getValue(), "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request getPermissionsRequest(final String user) { - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, - name); + return request(DbName.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, + dbName.getValue()); } protected ResponseDeserializer getPermissionsResponseDeserialzer() { @@ -175,7 +171,7 @@ protected ResponseDeserializer getPermissionsResponseDeserialzer() protected Request queryRequest( final String query, final Map bindVars, final AqlQueryOptions options) { final AqlQueryOptions opt = options != null ? options : new AqlQueryOptions(); - final Request request = request(name, RequestType.POST, PATH_API_CURSOR) + final Request request = request(dbName, RequestType.POST, PATH_API_CURSOR) .setBody(util().serialize(OptionsBuilder .build(opt, query, bindVars != null ? util(ArangoSerializationFactory.Serializer.CUSTOM).serialize(bindVars, new ArangoSerializer.Options().serializeNullValues(true)) : @@ -189,7 +185,7 @@ protected Request queryRequest( protected Request queryNextRequest(final String id, final AqlQueryOptions options, Map meta) { - final Request request = request(name, RequestType.PUT, PATH_API_CURSOR, id); + final Request request = request(dbName, RequestType.PUT, PATH_API_CURSOR, id); if (meta != null) { request.getHeaderParam().putAll(meta); @@ -206,7 +202,7 @@ protected Request queryNextRequest(final String id, final AqlQueryOptions option protected Request queryCloseRequest(final String id, final AqlQueryOptions options, Map meta) { - final Request request = request(name, RequestType.DELETE, PATH_API_CURSOR, id); + final Request request = request(dbName, RequestType.DELETE, PATH_API_CURSOR, id); if (meta != null) { request.getHeaderParam().putAll(meta); @@ -229,7 +225,7 @@ protected Request explainQueryRequest( final AqlQueryExplainOptions opt = options != null ? options : new AqlQueryExplainOptions(); - return request(name, RequestType.POST, PATH_API_EXPLAIN) + return request(dbName, RequestType.POST, PATH_API_EXPLAIN) .setBody(util().serialize(OptionsBuilder.build( opt, query, @@ -239,54 +235,54 @@ protected Request explainQueryRequest( } protected Request parseQueryRequest(final String query) { - return request(name, RequestType.POST, PATH_API_QUERY) + return request(dbName, RequestType.POST, PATH_API_QUERY) .setBody(util().serialize(OptionsBuilder.build(new AqlQueryParseOptions(), query))); } protected Request clearQueryCacheRequest() { - return request(name, RequestType.DELETE, PATH_API_QUERY_CACHE); + return request(dbName, RequestType.DELETE, PATH_API_QUERY_CACHE); } protected Request getQueryCachePropertiesRequest() { - return request(name, RequestType.GET, PATH_API_QUERY_CACHE_PROPERTIES); + return request(dbName, RequestType.GET, PATH_API_QUERY_CACHE_PROPERTIES); } protected Request setQueryCachePropertiesRequest(final QueryCachePropertiesEntity properties) { - return request(name, RequestType.PUT, PATH_API_QUERY_CACHE_PROPERTIES).setBody(util().serialize(properties)); + return request(dbName, RequestType.PUT, PATH_API_QUERY_CACHE_PROPERTIES).setBody(util().serialize(properties)); } protected Request getQueryTrackingPropertiesRequest() { - return request(name, RequestType.GET, PATH_API_QUERY_PROPERTIES); + return request(dbName, RequestType.GET, PATH_API_QUERY_PROPERTIES); } protected Request setQueryTrackingPropertiesRequest(final QueryTrackingPropertiesEntity properties) { - return request(name, RequestType.PUT, PATH_API_QUERY_PROPERTIES).setBody(util().serialize(properties)); + return request(dbName, RequestType.PUT, PATH_API_QUERY_PROPERTIES).setBody(util().serialize(properties)); } protected Request getCurrentlyRunningQueriesRequest() { - return request(name, RequestType.GET, PATH_API_QUERY_CURRENT); + return request(dbName, RequestType.GET, PATH_API_QUERY_CURRENT); } protected Request getSlowQueriesRequest() { - return request(name, RequestType.GET, PATH_API_QUERY_SLOW); + return request(dbName, RequestType.GET, PATH_API_QUERY_SLOW); } protected Request clearSlowQueriesRequest() { - return request(name, RequestType.DELETE, PATH_API_QUERY_SLOW); + return request(dbName, RequestType.DELETE, PATH_API_QUERY_SLOW); } protected Request killQueryRequest(final String id) { - return request(name, RequestType.DELETE, PATH_API_QUERY, id); + return request(dbName, RequestType.DELETE, PATH_API_QUERY, id); } protected Request createAqlFunctionRequest( final String name, final String code, final AqlFunctionCreateOptions options) { - return request(name(), RequestType.POST, PATH_API_AQLFUNCTION).setBody(util().serialize( + return request(dbName, RequestType.POST, PATH_API_AQLFUNCTION).setBody(util().serialize( OptionsBuilder.build(options != null ? options : new AqlFunctionCreateOptions(), name, code))); } protected Request deleteAqlFunctionRequest(final String name, final AqlFunctionDeleteOptions options) { - final Request request = request(name(), RequestType.DELETE, PATH_API_AQLFUNCTION, name); + final Request request = request(dbName, RequestType.DELETE, PATH_API_AQLFUNCTION, name); final AqlFunctionDeleteOptions params = options != null ? options : new AqlFunctionDeleteOptions(); request.putQueryParam("group", params.getGroup()); return request; @@ -309,7 +305,7 @@ protected ResponseDeserializer deleteAqlFunctionResponseDeserializer() } protected Request getAqlFunctionsRequest(final AqlFunctionGetOptions options) { - final Request request = request(name(), RequestType.GET, PATH_API_AQLFUNCTION); + final Request request = request(dbName, RequestType.GET, PATH_API_AQLFUNCTION); final AqlFunctionGetOptions params = options != null ? options : new AqlFunctionGetOptions(); request.putQueryParam("namespace", params.getNamespace()); return request; @@ -328,7 +324,7 @@ protected ResponseDeserializer> getAqlFunctionsRes protected Request createGraphRequest( final String name, final Collection edgeDefinitions, final GraphCreateOptions options) { - return request(name(), RequestType.POST, InternalArangoGraph.PATH_API_GHARIAL).setBody(util().serialize( + return request(dbName, RequestType.POST, InternalArangoGraph.PATH_API_GHARIAL).setBody(util().serialize( OptionsBuilder.build(options != null ? options : new GraphCreateOptions(), name, edgeDefinitions))); } @@ -337,7 +333,7 @@ protected ResponseDeserializer createGraphResponseDeserializer() { } protected Request getGraphsRequest() { - return request(name, RequestType.GET, InternalArangoGraph.PATH_API_GHARIAL); + return request(dbName, RequestType.GET, InternalArangoGraph.PATH_API_GHARIAL); } protected ResponseDeserializer> getGraphsResponseDeserializer() { @@ -346,7 +342,7 @@ protected ResponseDeserializer> getGraphsResponseDeseria } protected Request transactionRequest(final String action, final TransactionOptions options) { - return request(name, RequestType.POST, PATH_API_TRANSACTION).setBody( + return request(dbName, RequestType.POST, PATH_API_TRANSACTION).setBody( util().serialize(OptionsBuilder.build(options != null ? options : new TransactionOptions(), action))); } @@ -364,20 +360,20 @@ protected ResponseDeserializer transactionResponseDeserializer(final Clas } protected Request beginStreamTransactionRequest(final StreamTransactionOptions options) { - return request(name, RequestType.POST, PATH_API_BEGIN_STREAM_TRANSACTION) + return request(dbName, RequestType.POST, PATH_API_BEGIN_STREAM_TRANSACTION) .setBody(util().serialize(options != null ? options : new StreamTransactionOptions())); } protected Request abortStreamTransactionRequest(String id) { - return request(name, RequestType.DELETE, PATH_API_TRANSACTION, id); + return request(dbName, RequestType.DELETE, PATH_API_TRANSACTION, id); } protected Request getStreamTransactionsRequest() { - return request(name, RequestType.GET, PATH_API_TRANSACTION); + return request(dbName, RequestType.GET, PATH_API_TRANSACTION); } protected Request getStreamTransactionRequest(String id) { - return request(name, RequestType.GET, PATH_API_TRANSACTION, id); + return request(dbName, RequestType.GET, PATH_API_TRANSACTION, id); } protected ResponseDeserializer> transactionsResponseDeserializer() { @@ -389,7 +385,7 @@ protected ResponseDeserializer> transactionsRespon } protected Request commitStreamTransactionRequest(String id) { - return request(name, RequestType.PUT, PATH_API_TRANSACTION, id); + return request(dbName, RequestType.PUT, PATH_API_TRANSACTION, id); } protected ResponseDeserializer streamTransactionResponseDeserializer() { @@ -398,7 +394,7 @@ protected ResponseDeserializer streamTransactionRespons } protected Request getInfoRequest() { - return request(name, RequestType.GET, PATH_API_DATABASE, "current"); + return request(dbName, RequestType.GET, PATH_API_DATABASE, "current"); } protected ResponseDeserializer getInfoResponseDeserializer() { @@ -406,7 +402,7 @@ protected ResponseDeserializer getInfoResponseDeserializer() { } protected Request executeTraversalRequest(final TraversalOptions options) { - return request(name, RequestType.POST, PATH_API_TRAVERSAL) + return request(dbName, RequestType.POST, PATH_API_TRAVERSAL) .setBody(util().serialize(options != null ? options : new TransactionOptions())); } @@ -449,11 +445,11 @@ protected Collection deserializeEdges(final Class edgeClass, final VPa } protected Request reloadRoutingRequest() { - return request(name, RequestType.POST, PATH_API_ADMIN_ROUTING_RELOAD); + return request(dbName, RequestType.POST, PATH_API_ADMIN_ROUTING_RELOAD); } protected Request getViewsRequest() { - return request(name, RequestType.GET, InternalArangoView.PATH_API_VIEW); + return request(dbName, RequestType.GET, InternalArangoView.PATH_API_VIEW); } protected ResponseDeserializer> getViewsResponseDeserializer() { @@ -465,21 +461,21 @@ protected ResponseDeserializer> getViewsResponseDeseriali } protected Request createViewRequest(final String name, final ViewType type) { - return request(name(), RequestType.POST, InternalArangoView.PATH_API_VIEW) + return request(dbName, RequestType.POST, InternalArangoView.PATH_API_VIEW) .setBody(util().serialize(OptionsBuilder.build(new ViewCreateOptions(), name, type))); } protected Request createArangoSearchRequest(final String name, final ArangoSearchCreateOptions options) { - return request(name(), RequestType.POST, InternalArangoView.PATH_API_VIEW).setBody(util().serialize( + return request(dbName, RequestType.POST, InternalArangoView.PATH_API_VIEW).setBody(util().serialize( ArangoSearchOptionsBuilder.build(options != null ? options : new ArangoSearchCreateOptions(), name))); } protected Request getAnalyzerRequest(final String name) { - return request(name(), RequestType.GET, InternalArangoView.PATH_API_ANALYZER, name); + return request(dbName, RequestType.GET, InternalArangoView.PATH_API_ANALYZER, name); } protected Request getAnalyzersRequest() { - return request(name(), RequestType.GET, InternalArangoView.PATH_API_ANALYZER); + return request(dbName, RequestType.GET, InternalArangoView.PATH_API_ANALYZER); } protected ResponseDeserializer> getAnalyzersResponseDeserializer() { @@ -499,17 +495,17 @@ protected ResponseDeserializer> getSearchAnalyzersRes } protected Request createAnalyzerRequest(final AnalyzerEntity options) { - return request(name(), RequestType.POST, InternalArangoView.PATH_API_ANALYZER) + return request(dbName, RequestType.POST, InternalArangoView.PATH_API_ANALYZER) .setBody(util().serialize(options)); } protected Request createAnalyzerRequest(final SearchAnalyzer options) { - return request(name(), RequestType.POST, InternalArangoView.PATH_API_ANALYZER) + return request(dbName, RequestType.POST, InternalArangoView.PATH_API_ANALYZER) .setBody(util().serialize(options)); } protected Request deleteAnalyzerRequest(final String name, final AnalyzerDeleteOptions options) { - Request request = request(name(), RequestType.DELETE, InternalArangoView.PATH_API_ANALYZER, name); + Request request = request(dbName, RequestType.DELETE, InternalArangoView.PATH_API_ANALYZER, name); request.putQueryParam("force", options != null ? options.getForce() : null); return request; } diff --git a/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java b/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java index a901e9f2d..1fc5dfc43 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java +++ b/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java @@ -65,7 +65,7 @@ public String name() { } protected Request insertEdgeRequest(final T value, final EdgeCreateOptions options) { - final Request request = request(graph.db().name(), RequestType.POST, PATH_API_GHARIAL, graph.name(), EDGE, + final Request request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), EDGE, name); final EdgeCreateOptions params = (options != null ? options : new EdgeCreateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -88,7 +88,7 @@ protected ResponseDeserializer insertEdgeResponseDeserializer(fi } protected Request getEdgeRequest(final String key, final GraphDocumentReadOptions options) { - final Request request = request(graph.db().name(), RequestType.GET, PATH_API_GHARIAL, graph.name(), EDGE, + final Request request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), EDGE, DocumentUtil.createDocumentHandle(name, key)); final GraphDocumentReadOptions params = (options != null ? options : new GraphDocumentReadOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -105,7 +105,7 @@ protected ResponseDeserializer getEdgeResponseDeserializer(final Class } protected Request replaceEdgeRequest(final String key, final T value, final EdgeReplaceOptions options) { - final Request request = request(graph.db().name(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), EDGE, + final Request request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), EDGE, DocumentUtil.createDocumentHandle(name, key)); final EdgeReplaceOptions params = (options != null ? options : new EdgeReplaceOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -128,7 +128,7 @@ protected ResponseDeserializer replaceEdgeResponseDeserial protected Request updateEdgeRequest(final String key, final T value, final EdgeUpdateOptions options) { final Request request; - request = request(graph.db().name(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), EDGE, + request = request(graph.db().dbName(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), EDGE, DocumentUtil.createDocumentHandle(name, key)); final EdgeUpdateOptions params = (options != null ? options : new EdgeUpdateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -152,7 +152,7 @@ protected ResponseDeserializer updateEdgeResponseDeseriali } protected Request deleteEdgeRequest(final String key, final EdgeDeleteOptions options) { - final Request request = request(graph.db().name(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), EDGE, + final Request request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), EDGE, DocumentUtil.createDocumentHandle(name, key)); final EdgeDeleteOptions params = (options != null ? options : new EdgeDeleteOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); diff --git a/src/main/java/com/arangodb/internal/InternalArangoGraph.java b/src/main/java/com/arangodb/internal/InternalArangoGraph.java index 59300ef29..5e71cb60c 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoGraph.java +++ b/src/main/java/com/arangodb/internal/InternalArangoGraph.java @@ -64,7 +64,7 @@ protected Request dropRequest() { } protected Request dropRequest(final boolean dropCollections) { - final Request request = request(db.name(), RequestType.DELETE, PATH_API_GHARIAL, name); + final Request request = request(db.dbName(), RequestType.DELETE, PATH_API_GHARIAL, name); if (dropCollections) { request.putQueryParam("dropCollections", true); } @@ -72,7 +72,7 @@ protected Request dropRequest(final boolean dropCollections) { } protected Request getInfoRequest() { - return request(db.name(), RequestType.GET, PATH_API_GHARIAL, name); + return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name); } protected ResponseDeserializer getInfoResponseDeserializer() { @@ -80,7 +80,7 @@ protected ResponseDeserializer getInfoResponseDeserializer() { } protected Request getVertexCollectionsRequest() { - return request(db.name(), RequestType.GET, PATH_API_GHARIAL, name, VERTEX); + return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name, VERTEX); } protected ResponseDeserializer> getVertexCollectionsResponseDeserializer() { @@ -89,7 +89,7 @@ protected ResponseDeserializer> getVertexCollectionsResponseD } protected Request addVertexCollectionRequest(final String name) { - final Request request = request(db.name(), RequestType.POST, PATH_API_GHARIAL, name(), VERTEX); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name(), VERTEX); request.setBody(util().serialize(OptionsBuilder.build(new VertexCollectionCreateOptions(), name))); return request; } @@ -99,7 +99,7 @@ protected ResponseDeserializer addVertexCollectionResponseDeseriali } protected Request getEdgeDefinitionsRequest() { - return request(db.name(), RequestType.GET, PATH_API_GHARIAL, name, EDGE); + return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name, EDGE); } protected ResponseDeserializer> getEdgeDefinitionsDeserializer() { @@ -108,7 +108,7 @@ protected ResponseDeserializer> getEdgeDefinitionsDeserialize } protected Request addEdgeDefinitionRequest(final EdgeDefinition definition) { - final Request request = request(db.name(), RequestType.POST, PATH_API_GHARIAL, name, EDGE); + final Request request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name, EDGE); request.setBody(util().serialize(definition)); return request; } @@ -118,7 +118,7 @@ protected ResponseDeserializer addEdgeDefinitionResponseDeserialize } protected Request replaceEdgeDefinitionRequest(final EdgeDefinition definition) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_GHARIAL, name, EDGE, + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_GHARIAL, name, EDGE, definition.getCollection()); request.setBody(util().serialize(definition)); return request; @@ -129,7 +129,7 @@ protected ResponseDeserializer replaceEdgeDefinitionResponseDeseria } protected Request removeEdgeDefinitionRequest(final String definitionName) { - return request(db.name(), RequestType.DELETE, PATH_API_GHARIAL, name, EDGE, definitionName); + return request(db.dbName(), RequestType.DELETE, PATH_API_GHARIAL, name, EDGE, definitionName); } protected ResponseDeserializer removeEdgeDefinitionResponseDeserializer() { diff --git a/src/main/java/com/arangodb/internal/InternalArangoRoute.java b/src/main/java/com/arangodb/internal/InternalArangoRoute.java index c73bc665a..9c6a4171a 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoRoute.java +++ b/src/main/java/com/arangodb/internal/InternalArangoRoute.java @@ -66,7 +66,7 @@ public void _withBody(final Object body) { } protected Request createRequest(final RequestType requestType) { - final Request request = request(db.name(), requestType, path); + final Request request = request(db.dbName(), requestType, path); for (final Entry param : headerParam.entrySet()) { request.putHeaderParam(param.getKey(), param.getValue()); } diff --git a/src/main/java/com/arangodb/internal/InternalArangoSearch.java b/src/main/java/com/arangodb/internal/InternalArangoSearch.java index 00e7f5c71..dac8d35e8 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoSearch.java +++ b/src/main/java/com/arangodb/internal/InternalArangoSearch.java @@ -35,17 +35,17 @@ protected InternalArangoSearch(final D db, final String name) { } protected Request getPropertiesRequest() { - return request(db.name(), RequestType.GET, PATH_API_VIEW, name, "properties"); + return request(db.dbName(), RequestType.GET, PATH_API_VIEW, name, "properties"); } protected Request replacePropertiesRequest(final ArangoSearchPropertiesOptions options) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_VIEW, name, "properties"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, "properties"); request.setBody(util().serialize(options != null ? options : new ArangoSearchPropertiesOptions())); return request; } protected Request updatePropertiesRequest(final ArangoSearchPropertiesOptions options) { - final Request request = request(db.name(), RequestType.PATCH, PATH_API_VIEW, name, "properties"); + final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_VIEW, name, "properties"); request.setBody(util().serialize(options != null ? options : new ArangoSearchPropertiesOptions())); return request; } diff --git a/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java b/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java index 722afe09c..df12b743c 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java +++ b/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java @@ -65,11 +65,11 @@ public String name() { } protected Request dropRequest() { - return request(graph.db().name(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX, name); + return request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX, name); } protected Request insertVertexRequest(final T value, final VertexCreateOptions options) { - final Request request = request(graph.db().name(), RequestType.POST, PATH_API_GHARIAL, graph.name(), VERTEX, + final Request request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), VERTEX, name); final VertexCreateOptions params = (options != null ? options : new VertexCreateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -92,7 +92,7 @@ protected ResponseDeserializer insertVertexResponseDeserialize } protected Request getVertexRequest(final String key, final GraphDocumentReadOptions options) { - final Request request = request(graph.db().name(), RequestType.GET, PATH_API_GHARIAL, graph.name(), VERTEX, + final Request request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), VERTEX, DocumentUtil.createDocumentHandle(name, key)); final GraphDocumentReadOptions params = (options != null ? options : new GraphDocumentReadOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -109,7 +109,7 @@ protected ResponseDeserializer getVertexResponseDeserializer(final Class< } protected Request replaceVertexRequest(final String key, final T value, final VertexReplaceOptions options) { - final Request request = request(graph.db().name(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), VERTEX, + final Request request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), VERTEX, DocumentUtil.createDocumentHandle(name, key)); final VertexReplaceOptions params = (options != null ? options : new VertexReplaceOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -132,7 +132,7 @@ protected ResponseDeserializer replaceVertexResponseDese protected Request updateVertexRequest(final String key, final T value, final VertexUpdateOptions options) { final Request request; - request = request(graph.db().name(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), VERTEX, + request = request(graph.db().dbName(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), VERTEX, DocumentUtil.createDocumentHandle(name, key)); final VertexUpdateOptions params = (options != null ? options : new VertexUpdateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -156,7 +156,7 @@ protected ResponseDeserializer updateVertexResponseDeser } protected Request deleteVertexRequest(final String key, final VertexDeleteOptions options) { - final Request request = request(graph.db().name(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX, + final Request request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX, DocumentUtil.createDocumentHandle(name, key)); final VertexDeleteOptions params = (options != null ? options : new VertexDeleteOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); diff --git a/src/main/java/com/arangodb/internal/InternalArangoView.java b/src/main/java/com/arangodb/internal/InternalArangoView.java index 0c1e19ed3..1fa76f015 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoView.java +++ b/src/main/java/com/arangodb/internal/InternalArangoView.java @@ -53,17 +53,17 @@ public String name() { } protected Request dropRequest() { - return request(db.name(), RequestType.DELETE, PATH_API_VIEW, name); + return request(db.dbName(), RequestType.DELETE, PATH_API_VIEW, name); } protected Request renameRequest(final String newName) { - final Request request = request(db.name(), RequestType.PUT, PATH_API_VIEW, name, "rename"); + final Request request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, "rename"); request.setBody(util().serialize(OptionsBuilder.build(new ViewRenameOptions(), newName))); return request; } protected Request getInfoRequest() { - return request(db.name(), RequestType.GET, PATH_API_VIEW, name); + return request(db.dbName(), RequestType.GET, PATH_API_VIEW, name); } } diff --git a/src/main/java/com/arangodb/internal/http/HttpConnection.java b/src/main/java/com/arangodb/internal/http/HttpConnection.java index 5a221164c..65708fe98 100644 --- a/src/main/java/com/arangodb/internal/http/HttpConnection.java +++ b/src/main/java/com/arangodb/internal/http/HttpConnection.java @@ -236,7 +236,7 @@ public void close() throws IOException { private static String buildUrl(final String baseUrl, final Request request) { final StringBuilder sb = new StringBuilder().append(baseUrl); - final String database = request.getDatabase(); + final String database = request.getDbName().getValue(); if (database != null && !database.isEmpty()) { sb.append("/_db/").append(database); } diff --git a/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java b/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java index f23e42d66..92f9d349d 100644 --- a/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java +++ b/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java @@ -21,8 +21,8 @@ package com.arangodb.internal.net; import com.arangodb.ArangoDBException; +import com.arangodb.entity.DbName; import com.arangodb.internal.ArangoExecutorSync; -import com.arangodb.internal.ArangoRequestParam; import com.arangodb.internal.util.HostUtils; import com.arangodb.util.ArangoSerialization; import com.arangodb.velocypack.VPackSlice; @@ -125,7 +125,7 @@ private Collection resolveFromServer() throws ArangoDBException { try { response = executor.execute( - new Request(ArangoRequestParam.SYSTEM, RequestType.GET, "/_api/cluster/endpoints"), + new Request(DbName.SYSTEM, RequestType.GET, "/_api/cluster/endpoints"), response1 -> { final VPackSlice field = response1.getBody().get("endpoints"); Collection endpoints; diff --git a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java index 6bacf6b92..bc8076d8a 100644 --- a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java +++ b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java @@ -63,7 +63,7 @@ public class VPackSerializers { builder.add(attribute, ValueType.ARRAY); builder.add(value.getVersion()); builder.add(value.getType()); - builder.add(value.getDatabase()); + builder.add(value.getDbName().getValue()); builder.add(value.getRequestType().getType()); builder.add(value.getRequest()); builder.add(ValueType.OBJECT); diff --git a/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java b/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java index 550329d32..13ae1d16a 100644 --- a/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java +++ b/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java @@ -20,6 +20,7 @@ package com.arangodb.internal.velocystream.internal; +import com.arangodb.entity.DbName; import com.arangodb.velocystream.Request; /** @@ -32,7 +33,7 @@ public class AuthenticationRequest extends Request { private final String encryption;// "plain" public AuthenticationRequest(final String user, final String password, final String encryption) { - super(null, null, null); + super(DbName.of(null), null, null); this.user = user; this.password = password; this.encryption = encryption; diff --git a/src/main/java/com/arangodb/model/DBCreateOptions.java b/src/main/java/com/arangodb/model/DBCreateOptions.java index 4562337b6..5b3568cea 100644 --- a/src/main/java/com/arangodb/model/DBCreateOptions.java +++ b/src/main/java/com/arangodb/model/DBCreateOptions.java @@ -30,7 +30,7 @@ public class DBCreateOptions { private Collection users; - private DbName dbName; + private String name; private DatabaseOptions options; public DBCreateOptions() { @@ -54,34 +54,26 @@ public DBCreateOptions users(final Collection users) { return this; } - /** - * @deprecated Use {@link #getDbName()} instead. - */ - @Deprecated public String getName() { - return dbName.getValue(); + return name; } /** * @param name Has to contain a valid database name * @return options - * @deprecated Use {@link #dbName(DbName)} instead. + * @deprecated Use {@link #name(DbName)} instead. */ @Deprecated public DBCreateOptions name(final String name) { - return dbName(DbName.of(name)); - } - - public DbName getDbName() { - return dbName; + return name(DbName.of(name)); } /** * @param dbName database name * @return options */ - public DBCreateOptions dbName(DbName dbName) { - this.dbName = dbName; + public DBCreateOptions name(final DbName dbName) { + name = dbName.getValue(); return this; } diff --git a/src/main/java/com/arangodb/util/DBName.java b/src/main/java/com/arangodb/util/DBName.java deleted file mode 100644 index 9c46f2499..000000000 --- a/src/main/java/com/arangodb/util/DBName.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.arangodb.util; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marker annotation for database name string fields or parameters that are sent to the server-side. - */ -@Target(value = {ElementType.FIELD, ElementType.PARAMETER}) -@Retention(RetentionPolicy.SOURCE) -public @interface DBName { -} diff --git a/src/main/java/com/arangodb/util/UnicodeUtils.java b/src/main/java/com/arangodb/util/UnicodeUtils.java index 773eda0a6..bb6236ac1 100644 --- a/src/main/java/com/arangodb/util/UnicodeUtils.java +++ b/src/main/java/com/arangodb/util/UnicodeUtils.java @@ -20,10 +20,7 @@ package com.arangodb.util; -import com.arangodb.ArangoDBException; - import java.text.Normalizer; -import java.util.Objects; /** * @author Mark Vollmary @@ -41,12 +38,14 @@ private UnicodeUtils() { * @return NFC normalized string */ public static String normalize(final String value) { + if (value == null) { + return null; + } return Normalizer.normalize(value, Normalizer.Form.NFC); } public static void checkNormalized(final String value) { - Objects.requireNonNull(value); - if (!normalize(value).equals(value)) + if (value != null && !normalize(value).equals(value)) throw new IllegalArgumentException("Unicode String not normalized: NFC normal form is required."); } } diff --git a/src/test/java/com/arangodb/ArangoDBTest.java b/src/test/java/com/arangodb/ArangoDBTest.java index b0afd787d..1d7ba4d4d 100644 --- a/src/test/java/com/arangodb/ArangoDBTest.java +++ b/src/test/java/com/arangodb/ArangoDBTest.java @@ -20,16 +20,7 @@ package com.arangodb; -import com.arangodb.entity.ArangoDBVersion; -import com.arangodb.entity.DatabaseEntity; -import com.arangodb.entity.License; -import com.arangodb.entity.LogEntity; -import com.arangodb.entity.LogEntriesEntity; -import com.arangodb.entity.LogLevel; -import com.arangodb.entity.LogLevelEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.ServerRole; -import com.arangodb.entity.UserEntity; +import com.arangodb.entity.*; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.DatabaseOptions; import com.arangodb.model.DatabaseUsersOptions; @@ -72,8 +63,8 @@ @RunWith(Parameterized.class) public class ArangoDBTest { - private static final String DB1 = "ArangoDBTest_db1"; - private static final String DB2 = "ArangoDBTest_db2"; + private static final DbName DB1 = DbName.of("ArangoDBTest_db1"); + private static final DbName DB2 = DbName.of("ArangoDBTest_db2"); private static final String ROOT = "root"; private static final String PW = "machts der hund"; @@ -87,7 +78,7 @@ public class ArangoDBTest { @BeforeClass public static void initDB() { ArangoDB arango = BaseTest.arangos.get(0); - for (String db : new String[]{DB1, DB2}) { + for (DbName db : new DbName[]{DB1, DB2}) { ArangoDatabase database = arango.db(db); if (!database.exists()) database.create(); @@ -97,7 +88,7 @@ public static void initDB() { @AfterClass public static void shutdown() { ArangoDB arango = BaseTest.arangos.get(0); - for (String db : new String[]{DB1, DB2}) { + for (DbName db : new DbName[]{DB1, DB2}) { ArangoDatabase database = arango.db(db); if (database.exists()) database.drop(); @@ -132,7 +123,7 @@ private boolean isAtLeastVersion(final int major, final int minor) { private boolean supportsExtendedNames() { if (extendedNames == null) { try { - ArangoDatabase testDb = arangoDB.db("test-" + TestUtils.generateRandomDbName(20, true)); + ArangoDatabase testDb = arangoDB.db(DbName.of("test-" + TestUtils.generateRandomDbName(20, true))); testDb.create(); extendedNames = true; testDb.drop(); @@ -153,7 +144,7 @@ public void getVersion() { @Test public void createAndDeleteDatabase() { - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Boolean resultCreate; resultCreate = arangoDB.createDatabase(dbName); assertThat(resultCreate, is(true)); @@ -162,13 +153,19 @@ public void createAndDeleteDatabase() { } @Test - public void createWithInvalidName() { + public void createWithNotNormalizedName() { + assumeTrue(supportsExtendedNames()); + final String dbName = "testDB-\u006E\u0303\u00f1"; + DbName normalized = DbName.normalize(dbName); + arangoDB.createDatabase(normalized); + arangoDB.db(normalized).drop(); + try { - arangoDB.createDatabase(dbName); + DbName.of(dbName); fail(); - } catch (ArangoDBException e) { - assertThat(e.getMessage(), containsString("not properly normalized")); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage(), containsString("not normalized")); } } @@ -176,7 +173,7 @@ public void createWithInvalidName() { public void createDatabaseWithOptions() { assumeTrue(isCluster()); assumeTrue(isAtLeastVersion(3, 6)); - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -203,7 +200,7 @@ public void createDatabaseWithOptionsSatellite() { assumeTrue(isEnterprise()); assumeTrue(isAtLeastVersion(3, 6)); - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -226,7 +223,7 @@ public void createDatabaseWithOptionsSatellite() { @Test public void createDatabaseWithUsers() throws InterruptedException { - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Map extra = Collections.singletonMap("key", "value"); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) @@ -240,7 +237,7 @@ public void createDatabaseWithUsers() throws InterruptedException { assertThat(resultCreate, is(true)); DatabaseEntity info = arangoDB.db(dbName).getInfo(); - assertThat(info.getName(), is(dbName)); + assertThat(info.getName(), is(dbName.getValue())); Optional retrievedUserOptional = arangoDB.getUsers().stream() .filter(it -> it.getUser().equals("testUser")) @@ -274,7 +271,7 @@ public void getDatabases() { assertThat(dbs, is(notNullValue())); assertThat(dbs.size(), is(greaterThan(0))); assertThat(dbs.contains("_system"), is(true)); - assertThat(dbs, hasItem(DB1)); + assertThat(dbs, hasItem(DB1.getValue())); } @Test @@ -438,7 +435,7 @@ public void authenticationFailUser() { @Test public void execute() throws VPackException { - final Response response = arangoDB.execute(new Request("_system", RequestType.GET, "/_api/version")); + final Response response = arangoDB.execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")); assertThat(response.getBody(), is(notNullValue())); assertThat(response.getBody().get("version").isString(), is(true)); } @@ -505,7 +502,7 @@ public void getLogsOffset() { public void getLogsSearch() { assumeTrue(isAtLeastVersion(3, 7)); // it fails in 3.6 active-failover (BTS-362) final LogEntity logs = arangoDB.getLogs(null); - final LogEntity logsSearch = arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB)); + final LogEntity logsSearch = arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())); assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotalAmount(), greaterThan(logsSearch.getTotalAmount())); } @@ -614,7 +611,7 @@ public void getLogEntriesOffset() { public void getLogEntriesSearch() { assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); - final LogEntriesEntity logsSearch = arangoDB.getLogEntries(new LogOptions().search(BaseTest.TEST_DB)); + final LogEntriesEntity logsSearch = arangoDB.getLogEntries(new LogOptions().search(BaseTest.TEST_DB.getValue())); assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotal(), greaterThan(logsSearch.getTotal())); } @@ -675,7 +672,7 @@ public void setLogLevel() { @Test public void arangoDBException() { try { - arangoDB.db("no").getInfo(); + arangoDB.db(DbName.of("no")).getInfo(); fail(); } catch (final ArangoDBException e) { assertThat(e.getResponseCode(), is(404)); diff --git a/src/test/java/com/arangodb/ArangoDatabaseTest.java b/src/test/java/com/arangodb/ArangoDatabaseTest.java index 7a746cf00..7e68ffb57 100644 --- a/src/test/java/com/arangodb/ArangoDatabaseTest.java +++ b/src/test/java/com/arangodb/ArangoDatabaseTest.java @@ -1223,7 +1223,7 @@ public void getInfo() { final DatabaseEntity info = db.getInfo(); assertThat(info, is(notNullValue())); assertThat(info.getId(), is(notNullValue())); - assertThat(info.getName(), is(BaseTest.TEST_DB)); + assertThat(info.getName(), is(BaseTest.TEST_DB.getValue())); assertThat(info.getPath(), is(notNullValue())); assertThat(info.getIsSystem(), is(false)); diff --git a/src/test/java/com/arangodb/ArangoSearchTest.java b/src/test/java/com/arangodb/ArangoSearchTest.java index f5fcdcb57..bc439e016 100644 --- a/src/test/java/com/arangodb/ArangoSearchTest.java +++ b/src/test/java/com/arangodb/ArangoSearchTest.java @@ -293,7 +293,7 @@ public void replaceProperties() { private void createGetAndDeleteAnalyzer(AnalyzerEntity options) { - String fullyQualifiedName = db.name() + "::" + options.getName(); + String fullyQualifiedName = db.dbName().getValue() + "::" + options.getName(); // createAnalyzer AnalyzerEntity createdAnalyzer = db.createAnalyzer(options); @@ -337,7 +337,7 @@ private void createGetAndDeleteAnalyzer(AnalyzerEntity options) { private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) { - String fullyQualifiedName = db.name() + "::" + analyzer.getName(); + String fullyQualifiedName = db.dbName().getValue() + "::" + analyzer.getName(); analyzer.setName(fullyQualifiedName); // createAnalyzer diff --git a/src/test/java/com/arangodb/BaseTest.java b/src/test/java/com/arangodb/BaseTest.java index c09950bc8..2248d600c 100644 --- a/src/test/java/com/arangodb/BaseTest.java +++ b/src/test/java/com/arangodb/BaseTest.java @@ -20,11 +20,7 @@ package com.arangodb; -import com.arangodb.entity.ArangoDBEngine; -import com.arangodb.entity.CollectionType; -import com.arangodb.entity.EdgeDefinition; -import com.arangodb.entity.License; -import com.arangodb.entity.ServerRole; +import com.arangodb.entity.*; import com.arangodb.mapping.ArangoJack; import com.arangodb.model.CollectionCreateOptions; import com.arangodb.model.GraphCreateOptions; @@ -44,7 +40,7 @@ */ public abstract class BaseTest { - static final String TEST_DB = "java_driver_test_db"; + static final DbName TEST_DB = DbName.of("java_driver_test_db"); // TODO: make configurable static final List arangos = Arrays.asList( diff --git a/src/test/java/com/arangodb/UserAuthTest.java b/src/test/java/com/arangodb/UserAuthTest.java index db66bebfc..6d30ed5c9 100644 --- a/src/test/java/com/arangodb/UserAuthTest.java +++ b/src/test/java/com/arangodb/UserAuthTest.java @@ -20,10 +20,7 @@ package com.arangodb; -import com.arangodb.entity.BaseDocument; -import com.arangodb.entity.CollectionEntity; -import com.arangodb.entity.IndexEntity; -import com.arangodb.entity.Permissions; +import com.arangodb.entity.*; import com.arangodb.model.AqlQueryOptions; import com.arangodb.model.CollectionPropertiesOptions; import com.arangodb.model.HashIndexOptions; @@ -52,8 +49,8 @@ @Ignore public class UserAuthTest { - private static final String DB_NAME = "AuthUnitTestDB"; - private static final String DB_NAME_NEW = DB_NAME + "new"; + private static final DbName DB_NAME = DbName.of("AuthUnitTestDB"); + private static final DbName DB_NAME_NEW = DB_NAME.of(DB_NAME.getValue() + "new"); private static final String COLLECTION_NAME = "AuthUnitTestCollection"; private static final String COLLECTION_NAME_NEW = COLLECTION_NAME + "new"; private static final String USER_NAME = "AuthUnitTestUser"; @@ -137,14 +134,14 @@ public void createDatabase() { } catch (final ArangoDBException e) { fail(details); } - assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME_NEW)); + assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME_NEW.getValue())); } else { try { arangoDB.createDatabase(DB_NAME_NEW); fail(details); } catch (final ArangoDBException e) { } - assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME_NEW))); + assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME_NEW.getValue()))); } } finally { try { @@ -164,14 +161,14 @@ public void dropDatabase() { } catch (final ArangoDBException e) { fail(details); } - assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME))); + assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME.getValue()))); } else { try { arangoDB.db(DB_NAME).drop(); fail(details); } catch (final ArangoDBException e) { } - assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME)); + assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME.getValue())); } } finally { try { diff --git a/src/test/java/com/arangodb/async/ArangoDBTest.java b/src/test/java/com/arangodb/async/ArangoDBTest.java index 946d33e56..719952237 100644 --- a/src/test/java/com/arangodb/async/ArangoDBTest.java +++ b/src/test/java/com/arangodb/async/ArangoDBTest.java @@ -23,15 +23,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDBException; import com.arangodb.ArangoDatabase; -import com.arangodb.entity.DatabaseEntity; -import com.arangodb.entity.License; -import com.arangodb.entity.LogEntity; -import com.arangodb.entity.LogEntriesEntity; -import com.arangodb.entity.LogLevel; -import com.arangodb.entity.LogLevelEntity; -import com.arangodb.entity.Permissions; -import com.arangodb.entity.ServerRole; -import com.arangodb.entity.UserEntity; +import com.arangodb.entity.*; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.DatabaseOptions; import com.arangodb.model.LogOptions; @@ -85,7 +77,7 @@ private boolean supportsExtendedNames() { final ArangoDB arangoDB = new ArangoDB.Builder().build(); if (extendedNames == null) { try { - ArangoDatabase testDb = arangoDB.db("test-" + TestUtils.generateRandomDbName(20, true)); + ArangoDatabase testDb = arangoDB.db(DbName.of("test-" + TestUtils.generateRandomDbName(20, true))); testDb.create(); extendedNames = true; testDb.drop(); @@ -166,7 +158,7 @@ public void createDatabaseWithOptions() throws ExecutionException, InterruptedEx assumeTrue(isAtLeastVersion(3, 6)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -194,7 +186,7 @@ public void createDatabaseWithOptionsSatellite() throws ExecutionException, Inte assumeTrue(isAtLeastVersion(3, 6)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); - final String dbName = "testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames()); + final DbName dbName = DbName.of("testDB-" + TestUtils.generateRandomDbName(20, supportsExtendedNames())); final Boolean resultCreate = arangoDB.createDatabase(new DBCreateOptions() .name(dbName) .options(new DatabaseOptions() @@ -237,7 +229,7 @@ public void getDatabases() throws InterruptedException, ExecutionException { dbs = arangoDB.getDatabases().get(); assertThat(dbs.size(), is(greaterThan(dbCount))); assertThat(dbs, hasItem("_system")); - assertThat(dbs, hasItem(BaseTest.TEST_DB)); + assertThat(dbs, hasItem(BaseTest.TEST_DB.getValue())); arangoDB.db(BaseTest.TEST_DB).drop().get(); } @@ -467,7 +459,7 @@ public void authenticationFailUser() throws InterruptedException { public void execute() throws VPackException, InterruptedException, ExecutionException { final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); arangoDB - .execute(new Request("_system", RequestType.GET, "/_api/version")) + .execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")) .whenComplete((response, ex) -> { assertThat(response.getBody(), is(notNullValue())); assertThat(response.getBody().get("version").isString(), is(true)); @@ -479,7 +471,7 @@ public void execute() throws VPackException, InterruptedException, ExecutionExce public void execute_acquireHostList_enabled() throws VPackException, InterruptedException, ExecutionException { final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().acquireHostList(true).build(); arangoDB - .execute(new Request("_system", RequestType.GET, "/_api/version")) + .execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")) .whenComplete((response, ex) -> { assertThat(response.getBody(), is(notNullValue())); assertThat(response.getBody().get("version").isString(), is(true)); @@ -578,7 +570,7 @@ public void getLogsSearch() throws InterruptedException, ExecutionException { assumeTrue(isAtLeastVersion(3, 7)); // it fails in 3.6 active-failover (BTS-362) final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); final LogEntity logs = arangoDB.getLogs(null).get(); - arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB)) + arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())) .whenComplete((logsSearch, ex) -> { assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotalAmount(), greaterThan(logsSearch.getTotalAmount())); @@ -636,7 +628,7 @@ public void getLogEntriesSearch() throws InterruptedException, ExecutionExceptio assumeTrue(isAtLeastVersion(3, 8)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); final LogEntriesEntity logs = arangoDB.getLogEntries(null).get(); - arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB)) + arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())) .whenComplete((logsSearch, ex) -> { assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotal(), greaterThan(logsSearch.getTotalAmount())); diff --git a/src/test/java/com/arangodb/async/ArangoDatabaseTest.java b/src/test/java/com/arangodb/async/ArangoDatabaseTest.java index 067dc9a38..e14642c9b 100644 --- a/src/test/java/com/arangodb/async/ArangoDatabaseTest.java +++ b/src/test/java/com/arangodb/async/ArangoDatabaseTest.java @@ -58,10 +58,10 @@ public class ArangoDatabaseTest extends BaseTest { @Test public void create() throws InterruptedException, ExecutionException { try { - final Boolean result = arangoDB.db(BaseTest.TEST_DB + "_1").create().get(); + final Boolean result = arangoDB.db(DbName.of(BaseTest.TEST_DB.getValue() + "_1")).create().get(); assertThat(result, is(true)); } finally { - arangoDB.db(BaseTest.TEST_DB + "_1").drop().get(); + arangoDB.db(DbName.of(BaseTest.TEST_DB.getValue() + "_1")).drop().get(); } } @@ -86,7 +86,7 @@ public void getEngine() throws ExecutionException, InterruptedException { @Test public void exists() throws InterruptedException, ExecutionException { assertThat(db.exists().get(), is(true)); - assertThat(arangoDB.db("no").exists().get(), is(false)); + assertThat(arangoDB.db(DbName.of("no")).exists().get(), is(false)); } @Test diff --git a/src/test/java/com/arangodb/async/ArangoSearchTest.java b/src/test/java/com/arangodb/async/ArangoSearchTest.java index 765a41e8d..0d2c04c4a 100644 --- a/src/test/java/com/arangodb/async/ArangoSearchTest.java +++ b/src/test/java/com/arangodb/async/ArangoSearchTest.java @@ -228,7 +228,7 @@ public void replaceProperties() throws InterruptedException, ExecutionException private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) throws ExecutionException, InterruptedException { - String fullyQualifiedName = db.name() + "::" + analyzer.getName(); + String fullyQualifiedName = db.dbName().getValue() + "::" + analyzer.getName(); analyzer.setName(fullyQualifiedName); // createAnalyzer @@ -264,7 +264,7 @@ private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) throws Exe private void createGetAndDeleteAnalyzer(AnalyzerEntity options) throws ExecutionException, InterruptedException { - String fullyQualifiedName = db.name() + "::" + options.getName(); + String fullyQualifiedName = db.dbName().getValue() + "::" + options.getName(); // createAnalyzer AnalyzerEntity createdAnalyzer = db.createAnalyzer(options).get(); diff --git a/src/test/java/com/arangodb/async/BaseTest.java b/src/test/java/com/arangodb/async/BaseTest.java index a06ade4dc..89b89f648 100644 --- a/src/test/java/com/arangodb/async/BaseTest.java +++ b/src/test/java/com/arangodb/async/BaseTest.java @@ -21,6 +21,7 @@ package com.arangodb.async; import com.arangodb.entity.ArangoDBEngine; +import com.arangodb.entity.DbName; import com.arangodb.entity.License; import com.arangodb.entity.ServerRole; import org.junit.AfterClass; @@ -34,7 +35,7 @@ */ public abstract class BaseTest { - static final String TEST_DB = "java_driver_test_db"; + static final DbName TEST_DB = DbName.of("java_driver_test_db"); static ArangoDBAsync arangoDB; static ArangoDatabaseAsync db; diff --git a/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java b/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java index 1b0a83b4e..429d3a2fd 100644 --- a/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java +++ b/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java @@ -23,6 +23,7 @@ import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; import com.arangodb.async.BaseTest; +import com.arangodb.entity.DbName; import com.arangodb.entity.ViewEntity; import com.arangodb.entity.ViewType; import com.arangodb.entity.arangosearch.ArangoSearchPropertiesEntity; @@ -53,7 +54,7 @@ public void consolidationIntervalMsec() throws ExecutionException, InterruptedEx .password("test") .build(); - ArangoDatabaseAsync db = arango.db("database_of_things"); + ArangoDatabaseAsync db = arango.db(DbName.of("database_of_things")); if (db.exists().join()) { db.drop().join(); } From 6ee6d8c3952011c4d91acd0d04933d2e52daf819 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 17 Sep 2021 12:32:28 +0200 Subject: [PATCH 13/20] moved DbName --- .../java/com/arangodb/ArangoDatabase.java | 2 +- .../com/arangodb/{entity => }/DbName.java | 19 +++++++++++++++---- .../com/arangodb/async/ArangoDBAsync.java | 1 + .../arangodb/async/ArangoDatabaseAsync.java | 3 ++- .../async/internal/ArangoDBAsyncImpl.java | 1 + .../internal/ArangoDatabaseAsyncImpl.java | 1 + .../com/arangodb/internal/ArangoDBImpl.java | 5 +---- .../arangodb/internal/ArangoExecuteable.java | 2 +- .../internal/InternalArangoCollection.java | 7 ++++--- .../arangodb/internal/InternalArangoDB.java | 1 + .../internal/InternalArangoDatabase.java | 11 ++++++----- .../internal/http/HttpConnection.java | 2 +- .../internal/net/ExtendedHostResolver.java | 2 +- .../internal/velocypack/VPackSerializers.java | 2 +- .../internal/AuthenticationRequest.java | 2 +- .../com/arangodb/model/DBCreateOptions.java | 4 ++-- .../com/arangodb/velocystream/Request.java | 4 ++-- src/test/java/com/arangodb/ArangoDBTest.java | 8 ++++---- .../java/com/arangodb/ArangoDatabaseTest.java | 2 +- .../java/com/arangodb/ArangoSearchTest.java | 4 ++-- src/test/java/com/arangodb/UserAuthTest.java | 10 +++++----- .../java/com/arangodb/async/ArangoDBTest.java | 7 ++++--- .../arangodb/async/ArangoDatabaseTest.java | 5 +++-- .../com/arangodb/async/ArangoSearchTest.java | 4 ++-- .../java/com/arangodb/async/BaseTest.java | 2 +- .../debug/ConsolidationIntervalMsec.java | 2 +- 26 files changed, 65 insertions(+), 48 deletions(-) rename src/main/java/com/arangodb/{entity => }/DbName.java (80%) diff --git a/src/main/java/com/arangodb/ArangoDatabase.java b/src/main/java/com/arangodb/ArangoDatabase.java index 51a827880..f0cfede5f 100644 --- a/src/main/java/com/arangodb/ArangoDatabase.java +++ b/src/main/java/com/arangodb/ArangoDatabase.java @@ -56,7 +56,7 @@ public interface ArangoDatabase extends ArangoSerializationAccessor { */ @Deprecated default String name() { - return dbName().getValue(); + return dbName().get(); } /** diff --git a/src/main/java/com/arangodb/entity/DbName.java b/src/main/java/com/arangodb/DbName.java similarity index 80% rename from src/main/java/com/arangodb/entity/DbName.java rename to src/main/java/com/arangodb/DbName.java index bb562c410..a5f1d6111 100644 --- a/src/main/java/com/arangodb/entity/DbName.java +++ b/src/main/java/com/arangodb/DbName.java @@ -1,12 +1,22 @@ -package com.arangodb.entity; +package com.arangodb; import com.arangodb.internal.ArangoRequestParam; import com.arangodb.util.UnicodeUtils; import java.util.Objects; +import java.util.function.Supplier; -public class DbName { +/** + * Class to represent a NFC-normalized database name (as required by ArangoDB extended naming convention). + * To instantiate use {@link DbName#of(String)} or {@link DbName#normalize(String)}. + * + * @see getPermissionsResponseDeserialzer() { diff --git a/src/main/java/com/arangodb/internal/InternalArangoDB.java b/src/main/java/com/arangodb/internal/InternalArangoDB.java index a5de75657..cb4125eb7 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDB.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDB.java @@ -20,6 +20,7 @@ package com.arangodb.internal; +import com.arangodb.DbName; import com.arangodb.entity.*; import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.util.ArangoSerializationFactory; diff --git a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java index 2e40961c8..179d9073e 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDatabase.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDatabase.java @@ -20,6 +20,7 @@ package com.arangodb.internal; +import com.arangodb.DbName; import com.arangodb.entity.*; import com.arangodb.entity.arangosearch.AnalyzerEntity; import com.arangodb.entity.arangosearch.analyzer.SearchAnalyzer; @@ -128,7 +129,7 @@ protected ResponseDeserializer> getCollectionsRespo } protected Request dropRequest() { - return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_DATABASE, dbName.getValue()); + return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_DATABASE, dbName.get()); } protected ResponseDeserializer createDropResponseDeserializer() { @@ -137,22 +138,22 @@ protected ResponseDeserializer createDropResponseDeserializer() { protected Request grantAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, - dbName.getValue()).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); + dbName.get()).setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request resetAccessRequest(final String user) { return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, - dbName.getValue()); + dbName.get()); } protected Request updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, - dbName.getValue(), "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); + dbName.get(), "*").setBody(util().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } protected Request getPermissionsRequest(final String user) { return request(DbName.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, - dbName.getValue()); + dbName.get()); } protected ResponseDeserializer getPermissionsResponseDeserialzer() { diff --git a/src/main/java/com/arangodb/internal/http/HttpConnection.java b/src/main/java/com/arangodb/internal/http/HttpConnection.java index 65708fe98..c796eef4e 100644 --- a/src/main/java/com/arangodb/internal/http/HttpConnection.java +++ b/src/main/java/com/arangodb/internal/http/HttpConnection.java @@ -236,7 +236,7 @@ public void close() throws IOException { private static String buildUrl(final String baseUrl, final Request request) { final StringBuilder sb = new StringBuilder().append(baseUrl); - final String database = request.getDbName().getValue(); + final String database = request.getDbName().get(); if (database != null && !database.isEmpty()) { sb.append("/_db/").append(database); } diff --git a/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java b/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java index 92f9d349d..eb7dd40e0 100644 --- a/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java +++ b/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java @@ -21,7 +21,7 @@ package com.arangodb.internal.net; import com.arangodb.ArangoDBException; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import com.arangodb.internal.ArangoExecutorSync; import com.arangodb.internal.util.HostUtils; import com.arangodb.util.ArangoSerialization; diff --git a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java index bc8076d8a..fd8545294 100644 --- a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java +++ b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java @@ -63,7 +63,7 @@ public class VPackSerializers { builder.add(attribute, ValueType.ARRAY); builder.add(value.getVersion()); builder.add(value.getType()); - builder.add(value.getDbName().getValue()); + builder.add(value.getDbName().get()); builder.add(value.getRequestType().getType()); builder.add(value.getRequest()); builder.add(ValueType.OBJECT); diff --git a/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java b/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java index 13ae1d16a..9d47bc548 100644 --- a/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java +++ b/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java @@ -20,7 +20,7 @@ package com.arangodb.internal.velocystream.internal; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import com.arangodb.velocystream.Request; /** diff --git a/src/main/java/com/arangodb/model/DBCreateOptions.java b/src/main/java/com/arangodb/model/DBCreateOptions.java index 5b3568cea..23708bb18 100644 --- a/src/main/java/com/arangodb/model/DBCreateOptions.java +++ b/src/main/java/com/arangodb/model/DBCreateOptions.java @@ -20,7 +20,7 @@ package com.arangodb.model; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import java.util.Collection; @@ -73,7 +73,7 @@ public DBCreateOptions name(final String name) { * @return options */ public DBCreateOptions name(final DbName dbName) { - name = dbName.getValue(); + name = dbName.get(); return this; } diff --git a/src/main/java/com/arangodb/velocystream/Request.java b/src/main/java/com/arangodb/velocystream/Request.java index fd35e6445..c57e22a81 100644 --- a/src/main/java/com/arangodb/velocystream/Request.java +++ b/src/main/java/com/arangodb/velocystream/Request.java @@ -20,7 +20,7 @@ package com.arangodb.velocystream; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.annotations.Expose; @@ -83,7 +83,7 @@ public Request setType(final int type) { */ @Deprecated public String getDatabase() { - return getDbName().getValue(); + return getDbName().get(); } public DbName getDbName() { diff --git a/src/test/java/com/arangodb/ArangoDBTest.java b/src/test/java/com/arangodb/ArangoDBTest.java index 1d7ba4d4d..d703d58c1 100644 --- a/src/test/java/com/arangodb/ArangoDBTest.java +++ b/src/test/java/com/arangodb/ArangoDBTest.java @@ -237,7 +237,7 @@ public void createDatabaseWithUsers() throws InterruptedException { assertThat(resultCreate, is(true)); DatabaseEntity info = arangoDB.db(dbName).getInfo(); - assertThat(info.getName(), is(dbName.getValue())); + assertThat(info.getName(), is(dbName.get())); Optional retrievedUserOptional = arangoDB.getUsers().stream() .filter(it -> it.getUser().equals("testUser")) @@ -271,7 +271,7 @@ public void getDatabases() { assertThat(dbs, is(notNullValue())); assertThat(dbs.size(), is(greaterThan(0))); assertThat(dbs.contains("_system"), is(true)); - assertThat(dbs, hasItem(DB1.getValue())); + assertThat(dbs, hasItem(DB1.get())); } @Test @@ -502,7 +502,7 @@ public void getLogsOffset() { public void getLogsSearch() { assumeTrue(isAtLeastVersion(3, 7)); // it fails in 3.6 active-failover (BTS-362) final LogEntity logs = arangoDB.getLogs(null); - final LogEntity logsSearch = arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())); + final LogEntity logsSearch = arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.get())); assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotalAmount(), greaterThan(logsSearch.getTotalAmount())); } @@ -611,7 +611,7 @@ public void getLogEntriesOffset() { public void getLogEntriesSearch() { assumeTrue(isAtLeastVersion(3, 8)); final LogEntriesEntity logs = arangoDB.getLogEntries(null); - final LogEntriesEntity logsSearch = arangoDB.getLogEntries(new LogOptions().search(BaseTest.TEST_DB.getValue())); + final LogEntriesEntity logsSearch = arangoDB.getLogEntries(new LogOptions().search(BaseTest.TEST_DB.get())); assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotal(), greaterThan(logsSearch.getTotal())); } diff --git a/src/test/java/com/arangodb/ArangoDatabaseTest.java b/src/test/java/com/arangodb/ArangoDatabaseTest.java index 7e68ffb57..286f5ca4f 100644 --- a/src/test/java/com/arangodb/ArangoDatabaseTest.java +++ b/src/test/java/com/arangodb/ArangoDatabaseTest.java @@ -1223,7 +1223,7 @@ public void getInfo() { final DatabaseEntity info = db.getInfo(); assertThat(info, is(notNullValue())); assertThat(info.getId(), is(notNullValue())); - assertThat(info.getName(), is(BaseTest.TEST_DB.getValue())); + assertThat(info.getName(), is(BaseTest.TEST_DB.get())); assertThat(info.getPath(), is(notNullValue())); assertThat(info.getIsSystem(), is(false)); diff --git a/src/test/java/com/arangodb/ArangoSearchTest.java b/src/test/java/com/arangodb/ArangoSearchTest.java index bc439e016..acc349ee5 100644 --- a/src/test/java/com/arangodb/ArangoSearchTest.java +++ b/src/test/java/com/arangodb/ArangoSearchTest.java @@ -293,7 +293,7 @@ public void replaceProperties() { private void createGetAndDeleteAnalyzer(AnalyzerEntity options) { - String fullyQualifiedName = db.dbName().getValue() + "::" + options.getName(); + String fullyQualifiedName = db.dbName().get() + "::" + options.getName(); // createAnalyzer AnalyzerEntity createdAnalyzer = db.createAnalyzer(options); @@ -337,7 +337,7 @@ private void createGetAndDeleteAnalyzer(AnalyzerEntity options) { private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) { - String fullyQualifiedName = db.dbName().getValue() + "::" + analyzer.getName(); + String fullyQualifiedName = db.dbName().get() + "::" + analyzer.getName(); analyzer.setName(fullyQualifiedName); // createAnalyzer diff --git a/src/test/java/com/arangodb/UserAuthTest.java b/src/test/java/com/arangodb/UserAuthTest.java index 6d30ed5c9..6b3d604d8 100644 --- a/src/test/java/com/arangodb/UserAuthTest.java +++ b/src/test/java/com/arangodb/UserAuthTest.java @@ -50,7 +50,7 @@ public class UserAuthTest { private static final DbName DB_NAME = DbName.of("AuthUnitTestDB"); - private static final DbName DB_NAME_NEW = DB_NAME.of(DB_NAME.getValue() + "new"); + private static final DbName DB_NAME_NEW = DB_NAME.of(DB_NAME.get() + "new"); private static final String COLLECTION_NAME = "AuthUnitTestCollection"; private static final String COLLECTION_NAME_NEW = COLLECTION_NAME + "new"; private static final String USER_NAME = "AuthUnitTestUser"; @@ -134,14 +134,14 @@ public void createDatabase() { } catch (final ArangoDBException e) { fail(details); } - assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME_NEW.getValue())); + assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME_NEW.get())); } else { try { arangoDB.createDatabase(DB_NAME_NEW); fail(details); } catch (final ArangoDBException e) { } - assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME_NEW.getValue()))); + assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME_NEW.get()))); } } finally { try { @@ -161,14 +161,14 @@ public void dropDatabase() { } catch (final ArangoDBException e) { fail(details); } - assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME.getValue()))); + assertThat(details, arangoDBRoot.getDatabases(), not(hasItem(DB_NAME.get()))); } else { try { arangoDB.db(DB_NAME).drop(); fail(details); } catch (final ArangoDBException e) { } - assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME.getValue())); + assertThat(details, arangoDBRoot.getDatabases(), hasItem(DB_NAME.get())); } } finally { try { diff --git a/src/test/java/com/arangodb/async/ArangoDBTest.java b/src/test/java/com/arangodb/async/ArangoDBTest.java index 719952237..a15827d26 100644 --- a/src/test/java/com/arangodb/async/ArangoDBTest.java +++ b/src/test/java/com/arangodb/async/ArangoDBTest.java @@ -23,6 +23,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDBException; import com.arangodb.ArangoDatabase; +import com.arangodb.DbName; import com.arangodb.entity.*; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.DatabaseOptions; @@ -229,7 +230,7 @@ public void getDatabases() throws InterruptedException, ExecutionException { dbs = arangoDB.getDatabases().get(); assertThat(dbs.size(), is(greaterThan(dbCount))); assertThat(dbs, hasItem("_system")); - assertThat(dbs, hasItem(BaseTest.TEST_DB.getValue())); + assertThat(dbs, hasItem(BaseTest.TEST_DB.get())); arangoDB.db(BaseTest.TEST_DB).drop().get(); } @@ -570,7 +571,7 @@ public void getLogsSearch() throws InterruptedException, ExecutionException { assumeTrue(isAtLeastVersion(3, 7)); // it fails in 3.6 active-failover (BTS-362) final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); final LogEntity logs = arangoDB.getLogs(null).get(); - arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())) + arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.get())) .whenComplete((logsSearch, ex) -> { assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotalAmount(), greaterThan(logsSearch.getTotalAmount())); @@ -628,7 +629,7 @@ public void getLogEntriesSearch() throws InterruptedException, ExecutionExceptio assumeTrue(isAtLeastVersion(3, 8)); final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); final LogEntriesEntity logs = arangoDB.getLogEntries(null).get(); - arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.getValue())) + arangoDB.getLogs(new LogOptions().search(BaseTest.TEST_DB.get())) .whenComplete((logsSearch, ex) -> { assertThat(logsSearch, is(notNullValue())); assertThat(logs.getTotal(), greaterThan(logsSearch.getTotalAmount())); diff --git a/src/test/java/com/arangodb/async/ArangoDatabaseTest.java b/src/test/java/com/arangodb/async/ArangoDatabaseTest.java index e14642c9b..8d9426f62 100644 --- a/src/test/java/com/arangodb/async/ArangoDatabaseTest.java +++ b/src/test/java/com/arangodb/async/ArangoDatabaseTest.java @@ -21,6 +21,7 @@ package com.arangodb.async; import com.arangodb.ArangoDBException; +import com.arangodb.DbName; import com.arangodb.entity.AqlExecutionExplainEntity.ExecutionPlan; import com.arangodb.entity.*; import com.arangodb.entity.AqlParseEntity.AstNode; @@ -58,10 +59,10 @@ public class ArangoDatabaseTest extends BaseTest { @Test public void create() throws InterruptedException, ExecutionException { try { - final Boolean result = arangoDB.db(DbName.of(BaseTest.TEST_DB.getValue() + "_1")).create().get(); + final Boolean result = arangoDB.db(DbName.of(BaseTest.TEST_DB.get() + "_1")).create().get(); assertThat(result, is(true)); } finally { - arangoDB.db(DbName.of(BaseTest.TEST_DB.getValue() + "_1")).drop().get(); + arangoDB.db(DbName.of(BaseTest.TEST_DB.get() + "_1")).drop().get(); } } diff --git a/src/test/java/com/arangodb/async/ArangoSearchTest.java b/src/test/java/com/arangodb/async/ArangoSearchTest.java index 0d2c04c4a..7b336f261 100644 --- a/src/test/java/com/arangodb/async/ArangoSearchTest.java +++ b/src/test/java/com/arangodb/async/ArangoSearchTest.java @@ -228,7 +228,7 @@ public void replaceProperties() throws InterruptedException, ExecutionException private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) throws ExecutionException, InterruptedException { - String fullyQualifiedName = db.dbName().getValue() + "::" + analyzer.getName(); + String fullyQualifiedName = db.dbName().get() + "::" + analyzer.getName(); analyzer.setName(fullyQualifiedName); // createAnalyzer @@ -264,7 +264,7 @@ private void createGetAndDeleteTypedAnalyzer(SearchAnalyzer analyzer) throws Exe private void createGetAndDeleteAnalyzer(AnalyzerEntity options) throws ExecutionException, InterruptedException { - String fullyQualifiedName = db.dbName().getValue() + "::" + options.getName(); + String fullyQualifiedName = db.dbName().get() + "::" + options.getName(); // createAnalyzer AnalyzerEntity createdAnalyzer = db.createAnalyzer(options).get(); diff --git a/src/test/java/com/arangodb/async/BaseTest.java b/src/test/java/com/arangodb/async/BaseTest.java index 89b89f648..13ade24d7 100644 --- a/src/test/java/com/arangodb/async/BaseTest.java +++ b/src/test/java/com/arangodb/async/BaseTest.java @@ -21,7 +21,7 @@ package com.arangodb.async; import com.arangodb.entity.ArangoDBEngine; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import com.arangodb.entity.License; import com.arangodb.entity.ServerRole; import org.junit.AfterClass; diff --git a/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java b/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java index 429d3a2fd..d921a4029 100644 --- a/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java +++ b/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsec.java @@ -23,7 +23,7 @@ import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; import com.arangodb.async.BaseTest; -import com.arangodb.entity.DbName; +import com.arangodb.DbName; import com.arangodb.entity.ViewEntity; import com.arangodb.entity.ViewType; import com.arangodb.entity.arangosearch.ArangoSearchPropertiesEntity; From 2cef26cd3ec244e51cc1a88df9deab7339e18e50 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 17 Sep 2021 14:22:01 +0200 Subject: [PATCH 14/20] fixed links in javadoc --- src/main/java/com/arangodb/DbName.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/arangodb/DbName.java b/src/main/java/com/arangodb/DbName.java index a5f1d6111..7ef66ba36 100644 --- a/src/main/java/com/arangodb/DbName.java +++ b/src/main/java/com/arangodb/DbName.java @@ -10,7 +10,8 @@ * Class to represent a NFC-normalized database name (as required by ArangoDB extended naming convention). * To instantiate use {@link DbName#of(String)} or {@link DbName#normalize(String)}. * - * @see + * API Documentation */ public final class DbName implements Supplier { @@ -30,7 +31,7 @@ public final class DbName implements Supplier { * @param value desired db name * @return the created {@link DbName} instance * @see NFC normalization - * @see * API Documentation */ public static DbName of(final String value) { @@ -45,7 +46,7 @@ public static DbName of(final String value) { * @param value desired db name * @return the created {@link DbName} instance * @see NFC normalization - * @see * API Documentation */ public static DbName normalize(final String value) { From 724057ac4439465b74e576b5f85be4397cd13d14 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Fri, 17 Sep 2021 14:28:31 +0200 Subject: [PATCH 15/20] changelog upd --- ChangeLog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index b7d097e4f..c27fa4612 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] +- added `DbName` class to represent database names in public API parameters, to ease unicode names normalization (#405) + ## [6.13.0] - 2021-08-25 - added support for `fillBlockCache` in AQL query options (ArangoDB v3.8.1) From fcc89de9f1285a28421d74962c5b2654c50d3cae Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 11 Nov 2021 14:23:40 +0100 Subject: [PATCH 16/20] fixed db name for GET /_admin/server/id --- src/main/java/com/arangodb/internal/InternalArangoDB.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/arangodb/internal/InternalArangoDB.java b/src/main/java/com/arangodb/internal/InternalArangoDB.java index 634d9fa1e..017ddab6b 100644 --- a/src/main/java/com/arangodb/internal/InternalArangoDB.java +++ b/src/main/java/com/arangodb/internal/InternalArangoDB.java @@ -58,7 +58,7 @@ protected Request getRoleRequest() { } protected Request getServerIdRequest() { - return request(ArangoRequestParam.SYSTEM, RequestType.GET, PATH_API_SERVER_ID); + return request(DbName.SYSTEM, RequestType.GET, PATH_API_SERVER_ID); } protected ResponseDeserializer getRoleResponseDeserializer() { From 0ab7291ba4c3bb480283cf8880dc6bf95978b296 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Mon, 22 Nov 2021 09:48:00 +0100 Subject: [PATCH 17/20] testing with preview docker images --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 0588219a3..fa44a3a85 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -34,12 +34,12 @@ jobs: user-language: - en include: - - docker-img: docker.io/arangodb/arangodb-test:PR14700 + - docker-img: docker.io/arangodb/arangodb-preview:3.9.0-alpha.1 topology: single db-ext-names: true java-version: 11 user-language: tr - - docker-img: docker.io/arangodb/enterprise-test:PR14700 + - docker-img: docker.io/arangodb/enterprise-preview:3.9.0-alpha.1 topology: cluster db-ext-names: true java-version: 17 From 074eaad02614688be8906a3865c28702febd752e Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 11 Jan 2022 11:01:04 +0100 Subject: [PATCH 18/20] gh actions upd --- .github/workflows/maven.yml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index fa44a3a85..5c08a9f94 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -19,10 +19,12 @@ jobs: fail-fast: false matrix: docker-img: - - docker.io/arangodb/arangodb:3.7.15 - - docker.io/arangodb/arangodb:3.8.2 - - docker.io/arangodb/enterprise:3.7.15 - - docker.io/arangodb/enterprise:3.8.2 + - docker.io/arangodb/arangodb:3.7.16 + - docker.io/arangodb/arangodb:3.8.4 + - docker.io/arangodb/arangodb-preview:3.9.0-beta.1 + - docker.io/arangodb/enterprise:3.7.16 + - docker.io/arangodb/enterprise:3.8.4 + - docker.io/arangodb/enterprise-preview:3.9.0-beta.1 topology: - single - cluster @@ -34,12 +36,12 @@ jobs: user-language: - en include: - - docker-img: docker.io/arangodb/arangodb-preview:3.9.0-alpha.1 + - docker-img: docker.io/arangodb/arangodb:3.8.4 topology: single db-ext-names: true java-version: 11 user-language: tr - - docker-img: docker.io/arangodb/enterprise-preview:3.9.0-alpha.1 + - docker-img: docker.io/arangodb/enterprise:3.8.4 topology: cluster db-ext-names: true java-version: 17 @@ -47,7 +49,7 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 + - name: Set up JDK uses: actions/setup-java@v2 with: java-version: ${{matrix.java-version}} @@ -89,10 +91,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up JDK - uses: DeLaGuardo/setup-graalvm@4.0 + - uses: graalvm/setup-graalvm@v1 with: - graalvm: '21.2.0' + version: 'latest' + java-version: '11' + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Info run: mvn -version - name: Test From 40461299685edf08b27d11dcbb038405783efafd Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 11 Jan 2022 11:08:37 +0100 Subject: [PATCH 19/20] gh actions upd --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 5c08a9f94..659a4beb3 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -36,12 +36,12 @@ jobs: user-language: - en include: - - docker-img: docker.io/arangodb/arangodb:3.8.4 + - docker-img: docker.io/arangodb/arangodb-preview:3.9.0-beta.1 topology: single db-ext-names: true java-version: 11 user-language: tr - - docker-img: docker.io/arangodb/enterprise:3.8.4 + - docker-img: docker.io/arangodb/enterprise-preview:3.9.0-beta.1 topology: cluster db-ext-names: true java-version: 17 From 27b954e9910f74947270dba0583b2b0da6d3c4e7 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 11 Jan 2022 11:23:01 +0100 Subject: [PATCH 20/20] fixed compilation error --- .../velocystream/internal/JwtAuthenticationRequest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java b/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java index 53ab1a58c..c2ccf53b3 100644 --- a/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java +++ b/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java @@ -1,5 +1,6 @@ package com.arangodb.internal.velocystream.internal; +import com.arangodb.DbName; import com.arangodb.velocystream.Request; public class JwtAuthenticationRequest extends Request { @@ -8,7 +9,7 @@ public class JwtAuthenticationRequest extends Request { private final String encryption; // "jwt" public JwtAuthenticationRequest(final String token, final String encryption) { - super(null, null, null); + super(DbName.of(null), null, null); this.token = token; this.encryption = encryption; setType(1000);