Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
992c3ca
preview CI
rashtao Mar 19, 2020
0b4f404
Insert-Update (#336)
rashtao Mar 24, 2020
4f0a9e1
satellite graphs (#337)
rashtao Mar 24, 2020
ba7a162
schema validation (#339)
rashtao Mar 24, 2020
8e61624
added peakMemoryUsage aql stats
rashtao Mar 20, 2020
4c76631
v6.7.0_PREVIEW_3.7.0-alpha.2_0
rashtao Mar 24, 2020
597b007
Merge branch 'master' into preview
rashtao Apr 2, 2020
74c7561
renamed collection validation to schema
rashtao Apr 16, 2020
8f74095
bugfix validation error response code
rashtao Apr 17, 2020
4b507ce
Merge branch 'master' into preview
rashtao May 19, 2020
d7bf6dc
overwriteMode conflict and ignore
rashtao May 19, 2020
262568f
primarySortCompression
rashtao May 19, 2020
99c3c9a
ArangoSearchProperties storedValues
rashtao May 19, 2020
f7adff3
check db version in ArangoSearchTest
rashtao May 19, 2020
b007c94
added keepNull & mergeObjects parameters for insert-update document
rashtao May 20, 2020
b33f14f
disjoint smart graphs
rashtao May 20, 2020
489accd
docker images matrix upd
rashtao May 20, 2020
599fdd3
bugfix getAndClearSlowQueries test
rashtao May 20, 2020
15f0181
Revert "added keepNull & mergeObjects parameters for insert-update do…
rashtao May 22, 2020
9f2420c
ChangeLog.md upd
rashtao May 22, 2020
d7714a9
ChangeLog.md upd
rashtao May 22, 2020
f2f26d9
added mergeObjects parameters for insert-update document
rashtao May 22, 2020
40693f6
v6.7.0_PREVIEW_3.7.1-alpha.1
rashtao May 22, 2020
b40b24a
gh actions debug containers on tests failure
rashtao May 25, 2020
c57080b
fixed async tests
rashtao Jun 29, 2020
1285877
Merge branch 'master' into preview
rashtao Jun 30, 2020
b36e0ef
javadoc upd
rashtao Jun 30, 2020
c3bf2d5
javadoc upd
rashtao Jun 30, 2020
04578bb
test matrix upd
rashtao Jun 30, 2020
e97d2f5
Merge branch 'master' into preview
rashtao Jul 1, 2020
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
schema validation (#339)
  • Loading branch information
rashtao authored Mar 24, 2020
commit ba7a162e25e7531f1ee72788763759f3a41c14f6
7 changes: 7 additions & 0 deletions src/main/java/com/arangodb/entity/CollectionEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

package com.arangodb.entity;

import com.arangodb.model.CollectionValidation;

/**
* @author Mark Vollmary
* @see <a href="https://www.arangodb.com/docs/stable/http/collection-creating.html">API Documentation</a>
Expand All @@ -33,6 +35,7 @@ public class CollectionEntity implements Entity {
private Boolean isSystem;
private CollectionStatus status;
private CollectionType type;
private CollectionValidation validation;

public CollectionEntity() {
super();
Expand Down Expand Up @@ -66,4 +69,8 @@ public CollectionType getType() {
return type;
}

public CollectionValidation getValidation() {
return validation;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
import com.arangodb.entity.*;
import com.arangodb.entity.arangosearch.*;
import com.arangodb.entity.arangosearch.analyzer.*;
import com.arangodb.model.CollectionValidation;
import com.arangodb.velocypack.VPackDeserializer;
import com.arangodb.velocypack.VPackParser;
import com.arangodb.velocypack.VPackSlice;
import com.arangodb.velocystream.Response;
import org.slf4j.Logger;
Expand Down Expand Up @@ -258,4 +260,13 @@ protected static FieldLink deserializeField(final Entry<String, VPackSlice> fiel
return null;
};

public static final VPackDeserializer<CollectionValidation> COLLECTION_VALIDATION = (parent, vpack, context) -> {
VPackParser parser = new VPackParser.Builder().build();
CollectionValidation collectionValidation = new CollectionValidation();
collectionValidation.setLevel(CollectionValidation.Level.of(vpack.get("level").getAsString()));
collectionValidation.setRule(parser.toJson(vpack.get("rule"), true));
collectionValidation.setMessage(vpack.get("message").getAsString());
return collectionValidation;
};

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.arangodb.entity.arangosearch.ConsolidationType;
import com.arangodb.entity.arangosearch.analyzer.SearchAnalyzer;
import com.arangodb.internal.velocystream.internal.AuthenticationRequest;
import com.arangodb.model.CollectionValidation;
import com.arangodb.model.TraversalOptions;
import com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions;
import com.arangodb.velocypack.VPackModule;
Expand Down Expand Up @@ -66,6 +67,7 @@ public <C extends VPackSetupContext<C>> void setup(final C context) {
context.registerSerializer(ArangoSearchPropertiesOptions.class, VPackSerializers.ARANGO_SEARCH_PROPERTIES_OPTIONS);
context.registerSerializer(ArangoSearchProperties.class, VPackSerializers.ARANGO_SEARCH_PROPERTIES);
context.registerSerializer(ConsolidationType.class, VPackSerializers.CONSOLIDATE_TYPE);
context.registerSerializer(CollectionValidation.class, VPackSerializers.COLLECTION_VALIDATION);

context.registerDeserializer(Response.class, VPackDeserializers.RESPONSE);
context.registerDeserializer(CollectionType.class, VPackDeserializers.COLLECTION_TYPE);
Expand All @@ -84,6 +86,7 @@ public <C extends VPackSetupContext<C>> void setup(final C context) {
context.registerDeserializer(ArangoSearchProperties.class, VPackDeserializers.ARANGO_SEARCH_PROPERTIES);
context.registerDeserializer(ArangoSearchPropertiesEntity.class, VPackDeserializers.ARANGO_SEARCH_PROPERTIES_ENTITY);
context.registerDeserializer(ConsolidationPolicy.class, VPackDeserializers.CONSOLIDATE);
context.registerDeserializer(CollectionValidation.class, VPackDeserializers.COLLECTION_VALIDATION);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,11 @@
import com.arangodb.entity.*;
import com.arangodb.entity.arangosearch.*;
import com.arangodb.internal.velocystream.internal.AuthenticationRequest;
import com.arangodb.model.CollectionValidation;
import com.arangodb.model.TraversalOptions;
import com.arangodb.model.TraversalOptions.Order;
import com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions;
import com.arangodb.velocypack.VPackBuilder;
import com.arangodb.velocypack.VPackSerializer;
import com.arangodb.velocypack.ValueType;
import com.arangodb.velocypack.*;
import com.arangodb.velocystream.Request;

import java.util.Collection;
Expand Down Expand Up @@ -224,4 +223,14 @@ private static void serializeFieldLinks(final VPackBuilder builder, final Collec

public static final VPackSerializer<ConsolidationType> CONSOLIDATE_TYPE = (builder, attribute, value, context) -> builder.add(attribute, value.toString().toLowerCase());

public static final VPackSerializer<CollectionValidation> COLLECTION_VALIDATION = (builder, attribute, value, context) -> {
VPackParser parser = new VPackParser.Builder().build();
VPackSlice rule = parser.fromJson(value.getRule(), true);
final Map<String, Object> doc = new HashMap<>();
doc.put("message", value.getMessage());
doc.put("level", value.getLevel().getValue());
doc.put("rule", rule);
context.serialize(builder, attribute, doc);
};

}
11 changes: 11 additions & 0 deletions src/main/java/com/arangodb/model/CollectionCreateOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public class CollectionCreateOptions {
private String shardingStrategy; // cluster option
private String smartJoinAttribute; // enterprise option

private CollectionValidation validation;

public CollectionCreateOptions() {
super();
replicationFactor = new ReplicationFactor();
Expand Down Expand Up @@ -323,4 +325,13 @@ public CollectionCreateOptions distributeShardsLike(final String distributeShard
return this;
}

public CollectionValidation getValidation() {
return validation;
}

public CollectionCreateOptions setValidation(final CollectionValidation validation) {
this.validation = validation;
return this;
}

}
86 changes: 86 additions & 0 deletions src/main/java/com/arangodb/model/CollectionValidation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* 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.model;


/**
* @author Michele Rastelli
*/
public class CollectionValidation {
private String rule;
private Level level;
private String message;

public String getRule() {
return rule;
}

public CollectionValidation setRule(String rule) {
this.rule = rule;
return this;
}

public Level getLevel() {
return level;
}

public CollectionValidation setLevel(Level level) {
this.level = level;
return this;
}

public String getMessage() {
return message;
}

public CollectionValidation setMessage(String message) {
this.message = message;
return this;
}

public enum Level {
NONE("none"),
NEW("new"),
MODERATE("moderate"),
STRICT("strict");

private final String value;

public static Level of(String label) {
for (Level e : values()) {
if (e.value.equals(label)) {
return e;
}
}
return null;
}

Level(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}

}
48 changes: 48 additions & 0 deletions src/test/java/com/arangodb/ArangoDatabaseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,54 @@ public void createCollectionWithKeyTypeUuid() {
createCollectionWithKeyType(KeyType.uuid);
}

@Test
public void createCollectionWithJsonSchema() {
assumeTrue(isAtLeastVersion(3, 7));
String name = "collection-" + rnd();
String rule = ("{ " +
" \"properties\": {" +
" \"number\": {" +
" \"type\": \"number\"" +
" }" +
" }" +
" }")
.replaceAll("\\s", "");
String message = "The document has problems!";

final CollectionEntity result = db
.createCollection(name, new CollectionCreateOptions()
.setValidation(
new CollectionValidation()
.setLevel(CollectionValidation.Level.NEW)
.setMessage(message)
.setRule(rule)
)
);
assertThat(result.getValidation().getLevel(), is(CollectionValidation.Level.NEW));
assertThat(result.getValidation().getRule(), is(rule));
assertThat(result.getValidation().getMessage(), is(message));

CollectionPropertiesEntity props = db.collection(name).getProperties();
assertThat(props.getValidation().getLevel(), is(CollectionValidation.Level.NEW));
assertThat(props.getValidation().getRule(), is(rule));
assertThat(props.getValidation().getMessage(), is(message));

BaseDocument doc = new BaseDocument();
doc.addAttribute("number", 33);
db.collection(name).insertDocument(doc);

try {
BaseDocument wrongDoc = new BaseDocument();
doc.addAttribute("number", "notANumber");
db.collection(name).insertDocument(doc);
fail();
} catch (ArangoDBException e) {
assertThat(e.getMessage(), containsString(message));
assertThat(e.getResponseCode(), is(500));
assertThat(e.getErrorNum(), is(1620));
}
}

@Test(expected = ArangoDBException.class)
public void deleteCollection() {
String name = "collection-" + rnd();
Expand Down