/Prototipo/PrototipoMemoria/src/java/memoria/dataAccess/RepositoriesManager.java

http://prototipomemoria.googlecode.com/ · Java · 128 lines · 83 code · 23 blank · 22 comment · 9 complexity · 45aef8346ae9d1d41480668833d92a7d MD5 · raw file

  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package memoria.dataAccess;
  6. import java.io.BufferedReader;
  7. import java.io.DataInputStream;
  8. import java.io.File;
  9. import java.io.FileInputStream;
  10. import java.io.InputStreamReader;
  11. import memoria.dataAccess.dao.ExcelDao;
  12. import memoria.commons.dataAccess.query.QueryParams;
  13. import java.util.ArrayList;
  14. import java.util.Date;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import memoria.commons.dataAccess.RepoConfig;
  18. import memoria.commons.dataAccess.RepositoriesMetadata;
  19. import memoria.commons.dataAccess.query.VisualQuery;
  20. import memoria.commons.entities.Escuela;
  21. import memoria.commons.structures.GeoReferenced;
  22. import memoria.commons.xml.XStreamInstance;
  23. import memoria.dataAccess.dao.CsvDao;
  24. import memoria.dataAccess.dao.ShapeFileDao;
  25. /**
  26. *
  27. * @author diego
  28. */
  29. public class RepositoriesManager {
  30. //Patron Singleton
  31. private static RepositoriesManager instance;
  32. public static RepositoriesManager getInstance() {
  33. if (instance == null) {
  34. instance = new RepositoriesManager();
  35. }
  36. return instance;
  37. }
  38. private List<IRepositoryDao> repositories = new ArrayList<IRepositoryDao>();
  39. private HashMap<String,List<IRepositoryDao>> entitiesLocationMap = new HashMap<String, List<IRepositoryDao>>();
  40. public RepositoriesManager() {
  41. loadRepoConfig();
  42. // entitiesLocationMap = new HashMap<String,List<IRepositoryDao>>();
  43. // List<IRepositoryDao> repositoriosDeEscuela = new ArrayList<IRepositoryDao>();
  44. // repositoriosDeEscuela.add(ExcelDao.getInstance());
  45. // repositoriosDeEscuela.add(CsvDao.getInstance());
  46. // repositoriosDeEscuela.add(ShapeFileDao.getInstance());
  47. // entitiesLocationMap.put(Escuela.class.getSimpleName(),repositoriosDeEscuela);
  48. }
  49. public List<GeoReferenced> getData(VisualQuery params){
  50. //Voy a buscar en que repositorios encuentro la data
  51. long startMilis = new Date().getTime();
  52. String capa = params.getCapa();
  53. List<IRepositoryDao> daos = entitiesLocationMap.get(capa);
  54. List<GeoReferenced> results = new ArrayList<GeoReferenced>();
  55. for (IRepositoryDao iRepositoryDao : daos) {
  56. results.addAll(iRepositoryDao.getData(params));
  57. }
  58. long endMilis = new Date().getTime();
  59. System.out.println("Tiempo de ejecuci?n en transformador: "+(endMilis - startMilis));
  60. return results;
  61. }
  62. public List<IRepositoryDao> getRepositories() {
  63. return repositories;
  64. }
  65. public void setRepositories(List<IRepositoryDao> repositories) {
  66. this.repositories = repositories;
  67. }
  68. private void loadRepoConfig(){
  69. try{
  70. // Open the file that is the first
  71. // command line parameter
  72. File file = new File(this.getClass().getResource("/memoria/resources/repoConfig.xml").getPath());
  73. FileInputStream fstream = new FileInputStream(file);
  74. // Get the object of DataInputStream
  75. DataInputStream in = new DataInputStream(fstream);
  76. BufferedReader br = new BufferedReader(new InputStreamReader(in));
  77. String strLine, xmlLine = "";
  78. //Read File Line By Line
  79. while ((strLine = br.readLine()) != null) {
  80. // Print the content on the console
  81. xmlLine += strLine.trim();
  82. }
  83. //Close the input stream
  84. in.close();
  85. List<RepositoriesMetadata> metadata = (List<RepositoriesMetadata>)XStreamInstance.toObject(xmlLine);
  86. for (RepositoriesMetadata repositoriesMetadata : metadata) {
  87. String entity = repositoriesMetadata.getEntity();
  88. List<IRepositoryDao> repositoriosDeEntity = new ArrayList<IRepositoryDao>();
  89. for (RepoConfig config: repositoriesMetadata.getRepositories()){
  90. Class daoClass = Class.forName(config.getRepoDaoClass());
  91. IRepositoryDao dao = (IRepositoryDao) daoClass.newInstance();
  92. dao.setInitParams(config.getAttributes());
  93. this.repositories.add(dao);
  94. repositoriosDeEntity.add(dao);
  95. }
  96. List<IRepositoryDao> repos = this.entitiesLocationMap.get(entity);
  97. if (repos != null)
  98. repositoriosDeEntity.addAll(repos);
  99. this.entitiesLocationMap.put(entity, repositoriosDeEntity);
  100. }
  101. }catch (Exception e){//Catch exception if any
  102. System.err.println("Error: " + e.getMessage());
  103. }
  104. }
  105. }