Datatables JPA-vraptor

Olá ^^, estive fazendo alguns projetos, e acabei criando um código para processar a requisição padrão enviada pelo dataTable. Eu utilizo ele junto com o vRaptor, mas ele funciona independente do framework.

eu ainda não tenho muita experiência, o código provavelmente não está tão completo, eu utilizei primeiramente o plugin criado pelo dennysfredericci porém eu não consegui fazer com que ele suprisse todas as minhas necessidades.

por enquanto ele apenas cria uma consulta usando a API Criteria do JPA. e retorna uma List dos resultados.

o exemplo que coloquei no readme usa o vraptor para serializar o resultado.

Espero que ele ajude mais alguém além de mim.

https://github.com/lucao/datatable-vraptor-jpa

comecei a usar o github agora, se alguém puder me enviar alguma fonte para que eu aprenda sobre ele melhor eu fico muito grato também =D

Achei interessante! Eu também tenho algo parecido com isso.

Eu tenho alguns pontos para dividir com você:
1 - Se a pessoa já incluiu os nomes dos campos, para quê ela precisaria incluir item a item nesse for? Que tal se, com reflection, você pegasse o field e já transformasse para String (usando o String.valueOf(value) para evitar NullPointerException)
2 - Essa classe está com muita responsabilidade e com métodos muito grandes. Além de não ter testes de unidade para isso. Ou seja, você vai ter um problemão na manutenção disso.
3 - Essa classe tem muitos atributos e você está serializando ela, pode ser um problema. Talvez uma classe mais ou menos assim resolva:

public class TableResult {
	@SuppressWarnings("unused")
	private final String sEcho;
	private final List<List><String>> aaData = new ArrayList<List><String>>();
	private final long iTotalRecords = 0;
	private final long iTotalDisplayRecords = 0;

	public TableResult(String sEcho, List<List><String>> aaData, long iTotalRecords, long iTotalDisplayRecords) {
		// atribuições
	}

// Não precisa de getters e setters. Ela é imutável.
}

// Ai você pode usar dessa forma tranquilamente:
result.use(json()).withoutRoot().from(dataTable).recursive().serialize();

Por enquanto é só… Eu não li a classe toda, pois é muito grande e difícil de ler. Procure ter métodos com no máximo 15 linhas e com no máximo 3 palavras chaves (for, while, if, else, e outras assim). Se precisar por mais, chame outro método privado com o nome bem definido.

É preferível ter vários métodos menores e específicos à 1 grandão. Além de separar as responsibilidades em classes mais específicas.

Você pode ter uma classe responsável por pegar os dados, outra para consolidar esses dados e gerar o TableResult que eu mostrei acima, e outra para serializar tudo isso.