use of org.jnosql.diana.api.column.ColumnQuery in project jnosql-artemis by eclipse.
the class AbstractColumnRepositoryAsyncProxy method invoke.
@Override
public Object invoke(Object instance, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
ColumnRepositoryType type = ColumnRepositoryType.of(method, args);
switch(type) {
case DEFAULT:
return method.invoke(getRepository(), args);
case FIND_BY:
ColumnQuery query = getQueryParser().parse(methodName, args, getClassRepresentation(), getConverters());
return executeQuery(getCallBack(args), query);
case FIND_ALL:
return executeQuery(getCallBack(args), select().from(getClassRepresentation().getName()).build());
case DELETE_BY:
ColumnDeleteQuery deleteQuery = getDeleteParser().parse(methodName, args, getClassRepresentation(), getConverters());
return executeDelete(getCallBack(args), deleteQuery);
case QUERY:
ColumnQuery columnQuery = ColumnRepositoryType.getQuery(args).get();
return executeQuery(getCallBack(args), columnQuery);
case QUERY_DELETE:
return executeDelete(args, ColumnRepositoryType.getDeleteQuery(args).get());
case OBJECT_METHOD:
return method.invoke(this, args);
default:
return Void.class;
}
}
use of org.jnosql.diana.api.column.ColumnQuery in project jnosql-artemis by eclipse.
the class AbstractColumnRepositoryProxy method invoke.
@Override
public Object invoke(Object instance, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
ColumnRepositoryType type = ColumnRepositoryType.of(method, args);
Class<?> typeClass = getClassRepresentation().getClassInstance();
switch(type) {
case DEFAULT:
return method.invoke(getRepository(), args);
case FIND_BY:
ColumnQuery query = getQueryParser().parse(methodName, args, getClassRepresentation(), getConverters());
return returnObject(query, getTemplate(), typeClass, method);
case FIND_ALL:
return returnObject(select().from(getClassRepresentation().getName()).build(), getTemplate(), typeClass, method);
case DELETE_BY:
ColumnDeleteQuery deleteQuery = getDeleteParser().parse(methodName, args, getClassRepresentation(), getConverters());
getTemplate().delete(deleteQuery);
return Void.class;
case QUERY:
ColumnQuery columnQuery = getQuery(args).get();
return returnObject(columnQuery, getTemplate(), typeClass, method);
case QUERY_DELETE:
ColumnDeleteQuery columnDeleteQuery = getDeleteQuery(args).get();
getTemplate().delete(columnDeleteQuery);
return Void.class;
case OBJECT_METHOD:
return method.invoke(this, args);
default:
return Void.class;
}
}
use of org.jnosql.diana.api.column.ColumnQuery in project jnosql-artemis by eclipse.
the class AbstractColumnTemplate method find.
@Override
public <T, ID> Optional<T> find(Class<T> entityClass, ID id) {
requireNonNull(entityClass, "entityClass is required");
requireNonNull(id, "id is required");
ClassRepresentation classRepresentation = getClassRepresentations().get(entityClass);
FieldRepresentation idField = classRepresentation.getId().orElseThrow(() -> IdNotFoundException.newInstance(entityClass));
Object value = ConverterUtil.getValue(id, classRepresentation, idField.getFieldName(), getConverters());
ColumnQuery query = ColumnQueryBuilder.select().from(classRepresentation.getName()).where(idField.getName()).eq(value).build();
return singleResult(query);
}
use of org.jnosql.diana.api.column.ColumnQuery in project jnosql-artemis by eclipse.
the class DefaultColumnTemplateAsyncTest method shouldReturnErrorFindByIdReturnMoreThanOne.
@Test
public void shouldReturnErrorFindByIdReturnMoreThanOne() {
assertThrows(NonUniqueResultException.class, () -> {
ArgumentCaptor<Consumer<List<ColumnEntity>>> dianaCallbackCaptor = ArgumentCaptor.forClass(Consumer.class);
ArgumentCaptor<ColumnQuery> queryCaptor = ArgumentCaptor.forClass(ColumnQuery.class);
AtomicBoolean condition = new AtomicBoolean(false);
AtomicReference<Person> atomicReference = new AtomicReference<>();
Consumer<Optional<Person>> callback = p -> {
condition.set(true);
p.ifPresent(atomicReference::set);
};
subject.find(Person.class, 10L, callback);
verify(managerMock).select(queryCaptor.capture(), dianaCallbackCaptor.capture());
Consumer<List<ColumnEntity>> dianaCallBack = dianaCallbackCaptor.getValue();
dianaCallBack.accept(asList(ColumnEntity.of("Person", asList(columns)), ColumnEntity.of("Person", asList(columns))));
});
}
use of org.jnosql.diana.api.column.ColumnQuery in project jnosql-artemis by eclipse.
the class DefaultColumnTemplateAsyncTest method shouldReturnEmptySingleResult.
@Test
public void shouldReturnEmptySingleResult() {
ArgumentCaptor<Consumer<List<ColumnEntity>>> dianaCallbackCaptor = ArgumentCaptor.forClass(Consumer.class);
ColumnQuery query = ColumnQueryBuilder.select().from("Person").build();
AtomicBoolean condition = new AtomicBoolean(false);
AtomicReference<Person> atomicReference = new AtomicReference<>();
Consumer<Optional<Person>> callback = p -> {
condition.set(true);
p.ifPresent(atomicReference::set);
};
subject.singleResult(query, callback);
verify(managerMock).select(Mockito.any(ColumnQuery.class), dianaCallbackCaptor.capture());
Consumer<List<ColumnEntity>> dianaCallBack = dianaCallbackCaptor.getValue();
dianaCallBack.accept(emptyList());
verify(managerMock).select(Mockito.eq(query), Mockito.any());
await().untilTrue(condition);
assertNull(atomicReference.get());
}
Aggregations