Skip to content

Commit 66b4333

Browse files
committed
defines couchbase default implementation
1 parent 9c9bdc1 commit 66b4333

File tree

2 files changed

+139
-123
lines changed

2 files changed

+139
-123
lines changed

couchbase-driver/src/main/java/org/jnosql/diana/couchbase/document/CouchbaseDocumentCollectionManager.java

Lines changed: 5 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -15,109 +15,18 @@
1515
package org.jnosql.diana.couchbase.document;
1616

1717

18-
import com.couchbase.client.java.Bucket;
19-
import com.couchbase.client.java.document.JsonDocument;
2018
import com.couchbase.client.java.document.json.JsonObject;
21-
import com.couchbase.client.java.query.N1qlQuery;
22-
import com.couchbase.client.java.query.N1qlQueryResult;
23-
import com.couchbase.client.java.query.ParameterizedN1qlQuery;
2419
import com.couchbase.client.java.query.Statement;
25-
import org.jnosql.diana.api.document.Document;
2620
import org.jnosql.diana.api.document.DocumentCollectionManager;
27-
import org.jnosql.diana.api.document.DocumentDeleteQuery;
2821
import org.jnosql.diana.api.document.DocumentEntity;
29-
import org.jnosql.diana.api.document.DocumentQuery;
3022

31-
import java.time.Duration;
32-
import java.util.ArrayList;
3323
import java.util.List;
34-
import java.util.Objects;
35-
36-
import static java.util.Objects.nonNull;
37-
import static java.util.Objects.requireNonNull;
38-
import static java.util.concurrent.TimeUnit.MILLISECONDS;
39-
import static org.jnosql.diana.couchbase.document.EntityConverter.ID_FIELD;
40-
import static org.jnosql.diana.couchbase.document.EntityConverter.convert;
41-
import static org.jnosql.diana.couchbase.document.EntityConverter.getPrefix;
4224

4325
/**
4426
* The couchbase implementation of {@link DocumentCollectionManager}
4527
*/
46-
public class CouchbaseDocumentCollectionManager implements DocumentCollectionManager {
47-
48-
private final Bucket bucket;
49-
private final String database;
50-
51-
CouchbaseDocumentCollectionManager(Bucket bucket, String database) {
52-
this.bucket = bucket;
53-
this.database = database;
54-
}
55-
56-
@Override
57-
public DocumentEntity insert(DocumentEntity entity) throws NullPointerException {
58-
Objects.requireNonNull(entity, "entity is required");
59-
JsonObject jsonObject = convert(entity);
60-
Document id = entity.find(ID_FIELD)
61-
.orElseThrow(() -> new CouchbaseNoKeyFoundException(entity.toString()));
62-
63-
String prefix = getPrefix(id, entity.getName());
64-
jsonObject.put(ID_FIELD, prefix);
65-
bucket.upsert(JsonDocument.create(prefix, jsonObject));
66-
entity.remove(ID_FIELD);
67-
entity.add(Document.of(ID_FIELD, prefix));
68-
return entity;
69-
}
70-
71-
@Override
72-
public DocumentEntity insert(DocumentEntity entity, Duration ttl) {
73-
Objects.requireNonNull(entity, "entity is required");
74-
requireNonNull(ttl, "ttl is required");
75-
JsonObject jsonObject = convert(entity);
76-
Document id = entity.find(ID_FIELD)
77-
.orElseThrow(() -> new CouchbaseNoKeyFoundException(entity.toString()));
78-
79-
String prefix = getPrefix(id, entity.getName());
80-
bucket.upsert(JsonDocument.create(prefix, jsonObject), ttl.toMillis(), MILLISECONDS);
81-
return entity;
82-
}
28+
public interface CouchbaseDocumentCollectionManager extends DocumentCollectionManager {
8329

84-
@Override
85-
public DocumentEntity update(DocumentEntity entity) {
86-
return insert(entity);
87-
}
88-
89-
@Override
90-
public void delete(DocumentDeleteQuery query) {
91-
QueryConverter.QueryConverterResult delete = QueryConverter.delete(query, database);
92-
if (nonNull(delete.getStatement())) {
93-
ParameterizedN1qlQuery n1qlQuery = N1qlQuery.parameterized(delete.getStatement(), delete.getParams());
94-
N1qlQueryResult result = bucket.query(n1qlQuery);
95-
}
96-
if (!delete.getIds().isEmpty()) {
97-
delete.getIds()
98-
.stream()
99-
.map(s -> getPrefix(query.getCollection(), s))
100-
.forEach(bucket::remove);
101-
}
102-
103-
}
104-
105-
@Override
106-
public List<DocumentEntity> select(DocumentQuery query) throws NullPointerException {
107-
108-
QueryConverter.QueryConverterResult select = QueryConverter.select(query, database);
109-
List<DocumentEntity> entities = new ArrayList<>();
110-
if (nonNull(select.getStatement())) {
111-
ParameterizedN1qlQuery n1qlQuery = N1qlQuery.parameterized(select.getStatement(), select.getParams());
112-
N1qlQueryResult result = bucket.query(n1qlQuery);
113-
entities.addAll(convert(result, database));
114-
}
115-
if (!select.getIds().isEmpty()) {
116-
entities.addAll(convert(select.getIds(), query.getCollection(), bucket));
117-
}
118-
119-
return entities;
120-
}
12130

12231

12332
/**
@@ -128,12 +37,7 @@ public List<DocumentEntity> select(DocumentQuery query) throws NullPointerExcept
12837
* @return the query result
12938
* @throws NullPointerException when either n1qlQuery or params are null
13039
*/
131-
public List<DocumentEntity> n1qlQuery(String n1qlQuery, JsonObject params) throws NullPointerException {
132-
requireNonNull(n1qlQuery, "n1qlQuery is required");
133-
requireNonNull(params, "params is required");
134-
N1qlQueryResult result = bucket.query(N1qlQuery.parameterized(n1qlQuery, params));
135-
return convert(result, database);
136-
}
40+
List<DocumentEntity> n1qlQuery(String n1qlQuery, JsonObject params) throws NullPointerException;
13741

13842
/**
13943
* Executes the n1qlquery with params and then result que result
@@ -143,12 +47,7 @@ public List<DocumentEntity> n1qlQuery(String n1qlQuery, JsonObject params) throw
14347
* @return the query result
14448
* @throws NullPointerException when either n1qlQuery or params are null
14549
*/
146-
public List<DocumentEntity> n1qlQuery(Statement n1qlQuery, JsonObject params) throws NullPointerException {
147-
requireNonNull(n1qlQuery, "n1qlQuery is required");
148-
requireNonNull(params, "params is required");
149-
N1qlQueryResult result = bucket.query(N1qlQuery.parameterized(n1qlQuery, params));
150-
return convert(result, database);
151-
}
50+
List<DocumentEntity> n1qlQuery(Statement n1qlQuery, JsonObject params) throws NullPointerException;
15251

15352
/**
15453
* Executes the n1qlquery plain query and then result que result
@@ -157,11 +56,7 @@ public List<DocumentEntity> n1qlQuery(Statement n1qlQuery, JsonObject params) th
15756
* @return the query result
15857
* @throws NullPointerException when either n1qlQuery or params are null
15958
*/
160-
public List<DocumentEntity> n1qlQuery(String n1qlQuery) throws NullPointerException {
161-
requireNonNull(n1qlQuery, "n1qlQuery is required");
162-
N1qlQueryResult result = bucket.query(N1qlQuery.simple(n1qlQuery));
163-
return convert(result, database);
164-
}
59+
List<DocumentEntity> n1qlQuery(String n1qlQuery) throws NullPointerException;
16560

16661
/**
16762
* Executes the n1qlquery plain query and then result que result
@@ -170,15 +65,6 @@ public List<DocumentEntity> n1qlQuery(String n1qlQuery) throws NullPointerExcept
17065
* @return the query result
17166
* @throws NullPointerException when either n1qlQuery or params are null
17267
*/
173-
public List<DocumentEntity> n1qlQuery(Statement n1qlQuery) throws NullPointerException {
174-
requireNonNull(n1qlQuery, "n1qlQuery is required");
175-
N1qlQueryResult result = bucket.query(N1qlQuery.simple(n1qlQuery));
176-
return convert(result, database);
177-
}
178-
179-
@Override
180-
public void close() {
181-
bucket.close();
182-
}
68+
List<DocumentEntity> n1qlQuery(Statement n1qlQuery) throws NullPointerException;
18369

18470
}
Lines changed: 134 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,137 @@
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+
*/
115
package org.jnosql.diana.couchbase.document;
216

3-
/**
4-
* Created by otaviojava on 6/23/17.
5-
*/
6-
public class Default {
17+
18+
import com.couchbase.client.java.document.json.JsonObject;
19+
import com.couchbase.client.java.query.Statement;
20+
import org.jnosql.diana.api.ExecuteAsyncQueryException;
21+
import org.jnosql.diana.api.document.DocumentDeleteQuery;
22+
import org.jnosql.diana.api.document.DocumentEntity;
23+
import org.jnosql.diana.api.document.DocumentQuery;
24+
import rx.functions.Action1;
25+
26+
import java.time.Duration;
27+
import java.util.List;
28+
import java.util.function.Consumer;
29+
30+
import static java.util.Objects.requireNonNull;
31+
import static rx.Observable.just;
32+
33+
class DefaultCouchbaseDocumentCollectionManagerAsync implements CouchbaseDocumentCollectionManagerAsync {
34+
35+
private static final Consumer<DocumentEntity> NOOP = d -> {
36+
};
37+
private static final Action1<Throwable> ERROR_SAVE = a -> new ExecuteAsyncQueryException("On error when try to execute couchbase save method");
38+
private static final Action1<Throwable> ERROR_FIND = a -> new ExecuteAsyncQueryException("On error when try to execute couchbase find method");
39+
private static final Action1<Throwable> ERROR_DELETE = a -> new ExecuteAsyncQueryException("On error when try to execute couchbase delete method");
40+
private static final Action1<Throwable> ERROR_N1QLQUERY = a -> new ExecuteAsyncQueryException("On error when try to execute couchbase n1qlQuery method");
41+
42+
private final CouchbaseDocumentCollectionManager manager;
43+
44+
DefaultCouchbaseDocumentCollectionManagerAsync(CouchbaseDocumentCollectionManager manager) {
45+
this.manager = manager;
46+
}
47+
48+
49+
@Override
50+
public void insert(DocumentEntity entity) throws ExecuteAsyncQueryException, UnsupportedOperationException {
51+
insert(entity, NOOP);
52+
}
53+
54+
@Override
55+
public void insert(DocumentEntity entity, Duration ttl) throws ExecuteAsyncQueryException, UnsupportedOperationException {
56+
insert(entity, ttl, NOOP);
57+
}
58+
59+
@Override
60+
public void insert(DocumentEntity entity, Consumer<DocumentEntity> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException {
61+
requireNonNull(callBack, "callBack is required");
62+
just(entity)
63+
.map(manager::insert)
64+
.subscribe(callBack::accept, ERROR_SAVE);
65+
}
66+
67+
@Override
68+
public void insert(DocumentEntity entity, Duration ttl, Consumer<DocumentEntity> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException {
69+
requireNonNull(callBack, "callBack is required");
70+
just(entity)
71+
.map(e -> manager.insert(e, ttl))
72+
.subscribe(callBack::accept, ERROR_SAVE);
73+
}
74+
75+
@Override
76+
public void update(DocumentEntity entity) throws ExecuteAsyncQueryException, UnsupportedOperationException {
77+
insert(entity);
78+
}
79+
80+
@Override
81+
public void update(DocumentEntity entity, Consumer<DocumentEntity> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException {
82+
insert(entity, callBack);
83+
}
84+
85+
@Override
86+
public void delete(DocumentDeleteQuery query) throws ExecuteAsyncQueryException, UnsupportedOperationException {
87+
delete(query, v -> {
88+
});
89+
}
90+
91+
@Override
92+
public void delete(DocumentDeleteQuery query, Consumer<Void> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException {
93+
requireNonNull(query, "query is required");
94+
requireNonNull(callBack, "callBack is required");
95+
just(query).map(q -> {
96+
manager.delete(q);
97+
return true;
98+
}).subscribe(a -> callBack.accept(null), ERROR_DELETE);
99+
}
100+
101+
@Override
102+
public void select(DocumentQuery query, Consumer<List<DocumentEntity>> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException {
103+
just(query).map(manager::select).subscribe(callBack::accept, ERROR_FIND);
104+
}
105+
106+
107+
@Override
108+
public void n1qlQuery(String n1qlQuery, JsonObject params, Consumer<List<DocumentEntity>> callback) throws NullPointerException, ExecuteAsyncQueryException {
109+
requireNonNull(callback, "callback is required");
110+
just(n1qlQuery).map(n -> manager.n1qlQuery(n, params))
111+
.subscribe(callback::accept, ERROR_N1QLQUERY);
112+
}
113+
114+
@Override
115+
public void n1qlQuery(Statement n1qlQuery, JsonObject params, Consumer<List<DocumentEntity>> callback) throws NullPointerException, ExecuteAsyncQueryException {
116+
requireNonNull(callback, "callback is required");
117+
just(n1qlQuery).map(n -> manager.n1qlQuery(n, params))
118+
.subscribe(callback::accept, ERROR_N1QLQUERY);
119+
}
120+
121+
@Override
122+
public void n1qlQuery(String n1qlQuery, Consumer<List<DocumentEntity>> callback) throws NullPointerException, ExecuteAsyncQueryException {
123+
requireNonNull(callback, "callback is required");
124+
just(n1qlQuery).map(manager::n1qlQuery).subscribe(callback::accept, ERROR_N1QLQUERY);
125+
}
126+
127+
@Override
128+
public void n1qlQuery(Statement n1qlQuery, Consumer<List<DocumentEntity>> callback) throws NullPointerException, ExecuteAsyncQueryException {
129+
requireNonNull(callback, "callback is required");
130+
just(n1qlQuery).map(manager::n1qlQuery).subscribe(callback::accept, ERROR_N1QLQUERY);
131+
}
132+
133+
@Override
134+
public void close() {
135+
manager.close();
136+
}
7137
}

0 commit comments

Comments
 (0)