@Override public void save(Collection<?> batchToSave, PersistTo persistTo, ReplicateTo replicateTo) { for (Object o : batchToSave) { doPersist(o, persistTo, replicateTo, PersistType.SAVE); } }
@Override public void remove(Collection<?> batchToRemove, PersistTo persistTo, ReplicateTo replicateTo) { for (Object o : batchToRemove) { doRemove(o, persistTo, replicateTo); } }
private void doPersist(Object objectToPersist, final PersistTo persistTo, final ReplicateTo replicateTo, final PersistType persistType) { ensureNotIterable(objectToPersist); final ConvertingPropertyAccessor<Object> accessor = getPropertyAccessor(objectToPersist); final CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(objectToPersist.getClass()); final CouchbasePersistentProperty versionProperty = persistentEntity.getVersionProperty(); final Long version = versionProperty != null ? accessor.getProperty(versionProperty, Long.class) : null; maybeEmitEvent(new BeforeConvertEvent<Object>(objectToPersist)); final CouchbaseDocument converted = new CouchbaseDocument(); converter.write(objectToPersist, converted); maybeEmitEvent(new BeforeSaveEvent<Object>(objectToPersist, converted)); execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() throws InterruptedException, ExecutionException { maybeEmitEvent(new AfterSaveEvent<Object>(objectToPersist, converted));
private void doRemove(final Object objectToRemove, final PersistTo persistTo, final ReplicateTo replicateTo) { ensureNotIterable(objectToRemove); maybeEmitEvent(new BeforeDeleteEvent<Object>(objectToRemove)); if (objectToRemove instanceof String) { execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() throws InterruptedException, ExecutionException { maybeEmitEvent(new AfterDeleteEvent<Object>(objectToRemove)); return; converter.write(objectToRemove, converted); execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() { maybeEmitEvent(new AfterDeleteEvent<Object>(objectToRemove));
@Override public <T> List<T> findByN1QL(N1qlQuery n1ql, Class<T> entityClass) { checkN1ql(); try { N1qlQueryResult queryResult = queryN1QL(n1ql); T decoded = mapToEntity(id, entityDoc, entityClass); result.add(decoded);
@Override public String getGeneratedId(Object entity) { ensureNotIterable(entity); CouchbaseDocument converted = new CouchbaseDocument(); converter.write(entity, converted); return addCommonPrefixAndSuffix(converted.getId()); }
private <T> T mapToEntity(String id, Document<String> data, Class<T> entityClass) { if (data == null) { return null; } final CouchbaseDocument converted = new CouchbaseDocument(id); T readEntity = converter.read(entityClass, (CouchbaseDocument) decodeAndUnwrap(data, converted)); final ConvertingPropertyAccessor<T> accessor = getPropertyAccessor(readEntity); CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(readEntity.getClass()); if (persistentEntity.getVersionProperty() != null) { accessor.setProperty(persistentEntity.getVersionProperty(), data.cas()); } return accessor.getBean(); }
@Override public <T> T findById(final String id, Class<T> entityClass) { final CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(entityClass); RawJsonDocument result = execute(new BucketCallback<RawJsonDocument>() { @Override public RawJsonDocument doInBucket() { if (entity.isTouchOnRead()) { return client.getAndTouch(id, entity.getExpiry(), RawJsonDocument.class); } else { return client.get(id, RawJsonDocument.class); } } }); return mapToEntity(id, result, entityClass); }
/** * Creates a {@link CouchbaseTemplate}. * * This uses {@link #mappingCouchbaseConverter()}, {@link #translationService()} and {@link #getDefaultConsistency()} * for construction. * * Additionally, it will expect injection of a {@link ClusterInfo} and a {@link Bucket} beans from the context (most * probably from another configuration). For a self-sufficient configuration that defines such beans, see * {@link AbstractCouchbaseConfiguration}. * * @throws Exception on Bean construction failure. */ @Bean(name = BeanNames.COUCHBASE_TEMPLATE) public CouchbaseTemplate couchbaseTemplate() throws Exception { CouchbaseTemplate template = new CouchbaseTemplate(couchbaseConfigurer().couchbaseClusterInfo(), couchbaseConfigurer().couchbaseClient(), mappingCouchbaseConverter(), translationService()); template.setDefaultConsistency(getDefaultConsistency()); return template; }
@Override public <T> List<T> findByN1QLProjection(N1qlQuery n1ql, Class<T> entityClass) { checkN1ql(); try { N1qlQueryResult queryResult = queryN1QL(n1ql); if (queryResult.finalSuccess()) { List<N1qlQueryRow> allRows = queryResult.allRows(); List<T> result = new ArrayList<T>(allRows.size()); for (N1qlQueryRow row : allRows) { JsonObject json = row.value(); T decoded = translationService.decodeFragment(json.toString(), entityClass); result.add(decoded); } return result; } else { StringBuilder message = new StringBuilder("Unable to execute query due to the following n1ql errors: "); for (JsonObject error : queryResult.errors()) { message.append('\n').append(error); } throw new CouchbaseQueryExecutionException(message.toString()); } } catch (TranscodingException e) { throw new CouchbaseQueryExecutionException("Unable to execute query", e); } }
@Override public ViewResult queryView(final ViewQuery query) { return execute(new BucketCallback<ViewResult>() { @Override public ViewResult doInBucket() { return client.query(query); } }); }
private void checkN1ql() { if (!getCouchbaseClusterInfo().checkAvailable(CouchbaseFeature.N1QL)) { throw new UnsupportedCouchbaseFeatureException("Detected usage of N1QL in template, which is unsupported on this cluster", CouchbaseFeature.N1QL); } }
private <T> RawJsonDocument toJsonDocument(T object) { ensureNotIterable(object); final CouchbaseDocument converted = new CouchbaseDocument(); converter.write(object, converted); return encodeAndWrap(converted, getVersion(object)); }
return executeAsync(client.async().query(query)) .flatMap(new Func1<AsyncViewResult, Observable<AsyncViewRow>>() { @Override
private void doPersist(Object objectToPersist, final PersistTo persistTo, final ReplicateTo replicateTo, final PersistType persistType) { ensureNotIterable(objectToPersist); final ConvertingPropertyAccessor<Object> accessor = getPropertyAccessor(objectToPersist); final CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(objectToPersist.getClass()); final CouchbasePersistentProperty versionProperty = persistentEntity.getVersionProperty(); final Long version = versionProperty != null ? accessor.getProperty(versionProperty, Long.class) : null; maybeEmitEvent(new BeforeConvertEvent<Object>(objectToPersist)); final CouchbaseDocument converted = new CouchbaseDocument(); converter.write(objectToPersist, converted); maybeEmitEvent(new BeforeSaveEvent<Object>(objectToPersist, converted)); execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() throws InterruptedException, ExecutionException { maybeEmitEvent(new AfterSaveEvent<Object>(objectToPersist, converted));
private void doRemove(final Object objectToRemove, final PersistTo persistTo, final ReplicateTo replicateTo) { ensureNotIterable(objectToRemove); maybeEmitEvent(new BeforeDeleteEvent<Object>(objectToRemove)); if (objectToRemove instanceof String) { execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() throws InterruptedException, ExecutionException { maybeEmitEvent(new AfterDeleteEvent<Object>(objectToRemove)); return; converter.write(objectToRemove, converted); execute(new BucketCallback<Boolean>() { @Override public Boolean doInBucket() { maybeEmitEvent(new AfterDeleteEvent<Object>(objectToRemove));
@Override public <T> List<T> findByN1QL(N1qlQuery n1ql, Class<T> entityClass) { checkN1ql(); try { N1qlQueryResult queryResult = queryN1QL(n1ql); T decoded = mapToEntity(id, entityDoc, entityClass); result.add(decoded);
@Override public String getGeneratedId(Object entity) { ensureNotIterable(entity); CouchbaseDocument converted = new CouchbaseDocument(); converter.write(entity, converted); return addCommonPrefixAndSuffix(converted.getId()); }
private <T> T mapToEntity(String id, Document<String> data, Class<T> entityClass) { if (data == null) { return null; } final CouchbaseDocument converted = new CouchbaseDocument(id); T readEntity = converter.read(entityClass, (CouchbaseDocument) decodeAndUnwrap(data, converted)); final ConvertingPropertyAccessor<T> accessor = getPropertyAccessor(readEntity); CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(readEntity.getClass()); if (persistentEntity.getVersionProperty() != null) { accessor.setProperty(persistentEntity.getVersionProperty(), data.cas()); } return accessor.getBean(); }