Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package dao;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import annotation.Query;
- import banco.Postgre;
- import com.vividsolutions.jts.geom.Geometry;
- import com.vividsolutions.jts.io.ParseException;
- import com.vividsolutions.jts.io.WKTReader;
- public class DAO <T>{
- String classe;
- public DAO(String classe){
- this.classe = classe;
- }
- @SuppressWarnings("unchecked")
- public List<T> get() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParseException{
- ArrayList<T> lista = new ArrayList<T>();
- // Reflection: recupera a classe a partir do seu nome
- Class<?> classReflection = Class.forName(this.classe);
- // Recupera a annotation definida na classe que está sendo gerenciada pela instância do DAO
- Query annotation = classReflection.getAnnotation(Query.class);
- PreparedStatement pst = Postgre.get().prepareStatement(annotation.selectAll());
- ResultSet rs = pst.executeQuery();
- T obj;
- while (rs.next()){
- // instancia um novo objeto do tipo que está sendo gerenciado pela instância do DAO
- obj = (T) classReflection.newInstance();
- int i = 1;
- // percorre todos os atributos (field) do objeto
- for (Field atributo: obj.getClass().getDeclaredFields()){ // recupera os atributos
- // percorre os métodos do objeto
- for (Method m: obj.getClass().getMethods()){
- // verifica se o método corresponde ao atributo e chama o respectivo (de acordo com o tipo)
- if (("set" + atributo.getName()).equalsIgnoreCase(m.getName())){
- if (atributo.getType().equals(String.class)) m.invoke(obj, rs.getString(i++));
- else if (atributo.getType().equals(Geometry.class)) m.invoke(obj, new WKTReader().read(rs.getString(i++)));
- else m.invoke(obj, rs.getInt(i++));
- }
- }
- }
- lista.add(obj);
- }
- return lista;
- }
- @SuppressWarnings("unchecked")
- public List<T> get(String nome) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParseException{
- System.out.println("entrando");
- ArrayList<T> lista = new ArrayList<T>();
- System.out.println("entrando no for name");
- Class<?> classReflection = Class.forName(this.classe);
- System.out.println("foi");
- Query annotation = classReflection.getAnnotation(Query.class);
- System.out.println(annotation.select().toString());
- PreparedStatement pst = Postgre.get().prepareStatement(annotation.select());
- System.out.println(nome);
- pst.setString(1, nome);
- ResultSet rs = pst.executeQuery();
- T obj;
- while (rs.next()){
- obj = (T) classReflection.newInstance();
- int i = 1;
- for (Field atributo: obj.getClass().getDeclaredFields()){
- for (Method m: obj.getClass().getMethods()){
- if (("set" + atributo.getName()).equalsIgnoreCase(m.getName())){
- if (atributo.getType().equals(String.class)) m.invoke(obj, rs.getString(i++));
- else if (atributo.getType().equals(Geometry.class)) m.invoke(obj, new WKTReader().read(rs.getString(i++)));
- else m.invoke(obj, rs.getInt(i++));
- }
- }
- }
- lista.add(obj);
- }
- return lista;
- }
- }
- package entidade;
- import com.vividsolutions.jts.geom.Geometry;
- import annotation.Query;
- public class Regiao {
- private String nome;
- private String codigo;
- private Geometry geom;
- @Query(select = "select codigo, nome, astext(the_geom) from regiao where codigo like ?",
- selectAll = "select nome, codigo, astext(the_geom) from regiao")
- public Regiao(){}
- public Regiao(String nome, Geometry geom, String codigo) {
- super();
- this.nome = nome;
- this.codigo = codigo;
- this.geom = geom;
- }
- public String getNome() {
- return nome;
- }
- public void setNome(String nome) {
- this.nome = nome;
- }
- public String getCodigo() {
- return codigo;
- }
- public void setCodigo(String codigo) {
- this.codigo = codigo;
- }
- public Geometry getGeom() {
- return geom;
- }
- public void setGeom(Geometry geom) {
- this.geom = geom;
- }
- public String toString(){
- return this.nome;
- }
- }
Add Comment
Please, Sign In to add comment