Guest User

Untitled

a guest
Dec 11th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. package dao;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. import annotation.Query;
  13. import banco.Postgre;
  14.  
  15. import com.vividsolutions.jts.geom.Geometry;
  16. import com.vividsolutions.jts.io.ParseException;
  17. import com.vividsolutions.jts.io.WKTReader;
  18.  
  19. public class DAO <T>{
  20. String classe;
  21.  
  22. public DAO(String classe){
  23. this.classe = classe;
  24. }
  25.  
  26. @SuppressWarnings("unchecked")
  27. public List<T> get() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParseException{
  28. ArrayList<T> lista = new ArrayList<T>();
  29.  
  30. // Reflection: recupera a classe a partir do seu nome
  31. Class<?> classReflection = Class.forName(this.classe);
  32.  
  33. // Recupera a annotation definida na classe que está sendo gerenciada pela instância do DAO
  34. Query annotation = classReflection.getAnnotation(Query.class);
  35.  
  36. PreparedStatement pst = Postgre.get().prepareStatement(annotation.selectAll());
  37. ResultSet rs = pst.executeQuery();
  38.  
  39. T obj;
  40. while (rs.next()){
  41. // instancia um novo objeto do tipo que está sendo gerenciado pela instância do DAO
  42. obj = (T) classReflection.newInstance();
  43.  
  44. int i = 1;
  45. // percorre todos os atributos (field) do objeto
  46. for (Field atributo: obj.getClass().getDeclaredFields()){ // recupera os atributos
  47. // percorre os métodos do objeto
  48. for (Method m: obj.getClass().getMethods()){
  49. // verifica se o método corresponde ao atributo e chama o respectivo (de acordo com o tipo)
  50. if (("set" + atributo.getName()).equalsIgnoreCase(m.getName())){
  51. if (atributo.getType().equals(String.class)) m.invoke(obj, rs.getString(i++));
  52. else if (atributo.getType().equals(Geometry.class)) m.invoke(obj, new WKTReader().read(rs.getString(i++)));
  53. else m.invoke(obj, rs.getInt(i++));
  54. }
  55. }
  56. }
  57. lista.add(obj);
  58. }
  59. return lista;
  60. }
  61.  
  62. @SuppressWarnings("unchecked")
  63. public List<T> get(String nome) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParseException{
  64.  
  65. System.out.println("entrando");
  66. ArrayList<T> lista = new ArrayList<T>();
  67. System.out.println("entrando no for name");
  68. Class<?> classReflection = Class.forName(this.classe);
  69. System.out.println("foi");
  70. Query annotation = classReflection.getAnnotation(Query.class);
  71. System.out.println(annotation.select().toString());
  72. PreparedStatement pst = Postgre.get().prepareStatement(annotation.select());
  73. System.out.println(nome);
  74. pst.setString(1, nome);
  75. ResultSet rs = pst.executeQuery();
  76.  
  77. T obj;
  78. while (rs.next()){
  79. obj = (T) classReflection.newInstance();
  80.  
  81. int i = 1;
  82. for (Field atributo: obj.getClass().getDeclaredFields()){
  83. for (Method m: obj.getClass().getMethods()){
  84. if (("set" + atributo.getName()).equalsIgnoreCase(m.getName())){
  85. if (atributo.getType().equals(String.class)) m.invoke(obj, rs.getString(i++));
  86. else if (atributo.getType().equals(Geometry.class)) m.invoke(obj, new WKTReader().read(rs.getString(i++)));
  87. else m.invoke(obj, rs.getInt(i++));
  88. }
  89. }
  90. }
  91. lista.add(obj);
  92. }
  93. return lista;
  94. }
  95. }
  96.  
  97.  
  98. package entidade;
  99.  
  100. import com.vividsolutions.jts.geom.Geometry;
  101. import annotation.Query;
  102.  
  103.  
  104.  
  105. public class Regiao {
  106. private String nome;
  107. private String codigo;
  108. private Geometry geom;
  109.  
  110. @Query(select = "select codigo, nome, astext(the_geom) from regiao where codigo like ?",
  111. selectAll = "select nome, codigo, astext(the_geom) from regiao")
  112. public Regiao(){}
  113.  
  114. public Regiao(String nome, Geometry geom, String codigo) {
  115. super();
  116. this.nome = nome;
  117. this.codigo = codigo;
  118.  
  119. this.geom = geom;
  120. }
  121.  
  122. public String getNome() {
  123. return nome;
  124. }
  125.  
  126. public void setNome(String nome) {
  127. this.nome = nome;
  128. }
  129.  
  130. public String getCodigo() {
  131. return codigo;
  132. }
  133.  
  134. public void setCodigo(String codigo) {
  135. this.codigo = codigo;
  136. }
  137.  
  138. public Geometry getGeom() {
  139. return geom;
  140. }
  141.  
  142. public void setGeom(Geometry geom) {
  143. this.geom = geom;
  144. }
  145.  
  146. public String toString(){
  147. return this.nome;
  148. }
  149.  
  150. }
Add Comment
Please, Sign In to add comment