Skip to content

Commit 7dc0be3

Browse files
authored
Merge pull request #78 from eclipse/fix_couchbase_fiel
Fix couchbase field
2 parents 2322f38 + d6a7e76 commit 7dc0be3

File tree

3 files changed

+115
-23
lines changed

3 files changed

+115
-23
lines changed

couchbase-driver/src/main/java/org/jnosql/diana/couchbase/key/CouchbaseBucketManager.java

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Objects;
3030
import java.util.Optional;
3131

32+
import static java.util.Objects.requireNonNull;
3233
import static java.util.concurrent.TimeUnit.MILLISECONDS;
3334
import static java.util.stream.Collectors.toList;
3435
import static java.util.stream.StreamSupport.stream;
@@ -39,8 +40,6 @@
3940
*/
4041
public class CouchbaseBucketManager implements BucketManager {
4142

42-
private static final String VALUE_FIELD = "value";
43-
4443
private static final Jsonb JSONB = JsonbBuilder.create();
4544

4645
private final Bucket bucket;
@@ -54,57 +53,56 @@ public class CouchbaseBucketManager implements BucketManager {
5453

5554
@Override
5655
public <K, V> void put(K key, V value) throws NullPointerException {
57-
Objects.requireNonNull(key, "key is required");
58-
Objects.requireNonNull(value, "value is required");
59-
JsonObject jsonObject = JsonObject.create()
60-
.put("value", JSONB.toJson(value));
61-
62-
bucket.upsert(JsonDocument.create(key.toString(), jsonObject));
56+
requireNonNull(key, "key is required");
57+
requireNonNull(value, "value is required");
58+
bucket.upsert(JsonDocument.create(key.toString(), JsonObjectCouchbaseUtil.toJson(JSONB, value)));
6359
}
6460

6561
@Override
6662
public <K> void put(KeyValueEntity<K> entity) throws NullPointerException {
67-
Objects.requireNonNull(entity, "entity is required");
63+
requireNonNull(entity, "entity is required");
6864
put(entity.getKey(), convert(entity.getValue()));
6965
}
7066

7167
@Override
7268
public <K> void put(KeyValueEntity<K> entity, Duration ttl) throws NullPointerException, UnsupportedOperationException {
73-
Objects.requireNonNull(entity, "entity is required");
74-
Objects.requireNonNull(ttl, "ttl is required");
75-
JsonObject jsonObject = JsonObject.create()
76-
.put(VALUE_FIELD, entity.getValue().get());
69+
requireNonNull(entity, "entity is required");
70+
requireNonNull(ttl, "ttl is required");
71+
72+
73+
JsonObject jsonObject = JsonObjectCouchbaseUtil.toJson(JSONB, entity.get());
7774

78-
bucket.upsert(JsonDocument.create(entity.getKey().toString(), jsonObject), ttl.toMillis(), MILLISECONDS);
75+
JsonDocument jsonDocument = JsonDocument.create(entity.getKey().toString(), (int) ttl.getSeconds(), jsonObject);
76+
bucket.upsert(jsonDocument, ttl.toMillis(), MILLISECONDS);
7977
}
8078

8179
@Override
8280
public <K> void put(Iterable<KeyValueEntity<K>> keyValueEntities) throws NullPointerException {
83-
Objects.requireNonNull(keyValueEntities, "keyValueEntities is required");
81+
requireNonNull(keyValueEntities, "keyValueEntities is required");
8482
keyValueEntities.forEach(this::put);
8583
}
8684

8785
@Override
8886
public <K> void put(Iterable<KeyValueEntity<K>> keyValueEntities, Duration ttl) throws NullPointerException, UnsupportedOperationException {
89-
Objects.requireNonNull(keyValueEntities, "keyValueEntities is required");
90-
Objects.requireNonNull(ttl, "ttl is required");
87+
requireNonNull(keyValueEntities, "keyValueEntities is required");
88+
requireNonNull(ttl, "ttl is required");
9189
keyValueEntities.forEach(k -> this.put(k, ttl));
9290
}
9391

9492
@Override
9593
public <K> Optional<Value> get(K key) throws NullPointerException {
96-
Objects.requireNonNull(key, "key is required");
94+
requireNonNull(key, "key is required");
9795
JsonDocument jsonDocument = bucket.get(key.toString());
9896
if (Objects.isNull(jsonDocument)) {
9997
return Optional.empty();
10098
}
101-
Object value = jsonDocument.content().get(VALUE_FIELD);
99+
Object value = jsonDocument.content();
102100
return Optional.of(ValueJSON.of(value.toString()));
103101
}
104102

105103
@Override
106104
public <K> Iterable<Value> get(Iterable<K> keys) throws NullPointerException {
107-
Objects.requireNonNull(keys, "keys is required");
105+
requireNonNull(keys, "keys is required");
108106
return stream(keys.spliterator(), false)
109107
.map(this::get)
110108
.filter(Optional::isPresent)
@@ -114,13 +112,13 @@ public <K> Iterable<Value> get(Iterable<K> keys) throws NullPointerException {
114112

115113
@Override
116114
public <K> void remove(K key) throws NullPointerException {
117-
Objects.requireNonNull(key, "key is required");
115+
requireNonNull(key, "key is required");
118116
bucket.remove(key.toString());
119117
}
120118

121119
@Override
122120
public <K> void remove(Iterable<K> keys) throws NullPointerException {
123-
Objects.requireNonNull(keys, "keys is required");
121+
requireNonNull(keys, "keys is required");
124122
keys.forEach(this::remove);
125123
}
126124

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (c) 2017 Otávio Santana and others
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* and Apache License v2.0 which accompanies this distribution.
6+
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
7+
* and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php.
8+
*
9+
* You may elect to redistribute this code under either of these licenses.
10+
*
11+
* Contributors:
12+
*
13+
* Otavio Santana
14+
*/
15+
package org.jnosql.diana.couchbase.key;
16+
17+
import com.couchbase.client.java.document.json.JsonObject;
18+
19+
import javax.json.bind.Jsonb;
20+
import java.io.ByteArrayInputStream;
21+
import java.io.ByteArrayOutputStream;
22+
import java.io.InputStream;
23+
import java.lang.reflect.Type;
24+
import java.util.HashMap;
25+
import java.util.Map;
26+
27+
final class JsonObjectCouchbaseUtil {
28+
29+
private static final Type TYPE = new HashMap<String, Object>() {
30+
}.getClass().getGenericSuperclass();
31+
32+
private JsonObjectCouchbaseUtil() {
33+
}
34+
35+
static JsonObject toJson(Jsonb jsonb, Object value) {
36+
37+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
38+
jsonb.toJson(value, stream);
39+
InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
40+
Map<String, ?> map = jsonb.fromJson(inputStream, TYPE);
41+
42+
return JsonObject.from(map);
43+
44+
}
45+
}

couchbase-driver/src/test/java/org/jnosql/diana/couchbase/key/CouchbaseBucketManagerTest.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,23 @@
2121
import org.jnosql.diana.couchbase.CouchbaseUtil;
2222
import org.junit.jupiter.api.AfterAll;
2323
import org.junit.jupiter.api.BeforeEach;
24+
import org.junit.jupiter.api.Disabled;
2425
import org.junit.jupiter.api.Test;
2526

27+
import java.time.Duration;
2628
import java.util.List;
2729
import java.util.Optional;
2830
import java.util.stream.Collectors;
2931
import java.util.stream.StreamSupport;
3032

3133
import static java.util.Arrays.asList;
34+
import static java.util.Collections.singleton;
3235
import static org.hamcrest.MatcherAssert.assertThat;
3336
import static org.hamcrest.Matchers.containsInAnyOrder;
34-
import static org.junit.jupiter.api.Assertions.*;
37+
import static org.junit.jupiter.api.Assertions.assertEquals;
38+
import static org.junit.jupiter.api.Assertions.assertFalse;
39+
import static org.junit.jupiter.api.Assertions.assertNotNull;
40+
import static org.junit.jupiter.api.Assertions.assertTrue;
3541

3642
public class CouchbaseBucketManagerTest {
3743

@@ -73,6 +79,49 @@ public void shouldPutValue() {
7379
assertEquals(userOtavio, otavio.get().get(User.class));
7480
}
7581

82+
@Test
83+
public void shouldPutValues() {
84+
85+
List<KeyValueEntity<String>> entities = asList(KeyValueEntity.of(KEY_OTAVIO, userOtavio),
86+
KeyValueEntity.of(KEY_SORO, userSoro));
87+
88+
keyValueEntityManager.put(entities);
89+
Optional<Value> otavio = keyValueEntityManager.get(KEY_OTAVIO);
90+
assertTrue(otavio.isPresent());
91+
assertEquals(userOtavio, otavio.get().get(User.class));
92+
93+
Optional<Value> soro = keyValueEntityManager.get(KEY_SORO);
94+
assertTrue(soro.isPresent());
95+
assertEquals(userSoro, soro.get().get(User.class));
96+
}
97+
98+
@Test
99+
@Disabled
100+
public void shouldPutValueTtl() throws InterruptedException {
101+
102+
keyValueEntityManager.put(KeyValueEntity.of(KEY_OTAVIO, userOtavio), Duration.ofSeconds(1L));
103+
104+
Optional<Value> otavio = keyValueEntityManager.get(KEY_OTAVIO);
105+
assertTrue(otavio.isPresent());
106+
Thread.sleep(5_000);
107+
otavio = keyValueEntityManager.get(KEY_OTAVIO);
108+
assertFalse(otavio.isPresent());
109+
}
110+
111+
@Test
112+
@Disabled
113+
public void shouldPutValuesTtl() throws InterruptedException {
114+
115+
keyValueEntityManager.put(singleton(KeyValueEntity.of(KEY_OTAVIO, userOtavio)), Duration.ofSeconds(1L));
116+
Optional<Value> otavio = keyValueEntityManager.get(KEY_OTAVIO);
117+
assertTrue(otavio.isPresent());
118+
Thread.sleep(5_000);
119+
otavio = keyValueEntityManager.get(KEY_OTAVIO);
120+
assertFalse(otavio.isPresent());
121+
}
122+
123+
124+
76125
@Test
77126
public void shouldPutKeyValue() {
78127
keyValueEntityManager.put(entityOtavio);

0 commit comments

Comments
 (0)