ExtractionManager.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package org.django.acquabooks;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.FileWriter;
  5. import java.text.DateFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Collection;
  8. import java.util.Date;
  9. import java.util.List;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.apache.poi.ss.usermodel.Cell;
  13. import org.apache.poi.ss.usermodel.Row;
  14. import org.apache.poi.ss.usermodel.Sheet;
  15. import org.django.acquabooks.io.Console;
  16. import org.django.acquabooks.pojos.Libro;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import com.google.gson.Gson;
  20. import com.google.gson.GsonBuilder;
  21. import com.google.gson.reflect.TypeToken;
  22. import com.google.gson.stream.JsonWriter;
  23. /**
  24. * Created by conte on 25/08/15.
  25. */
  26. public class ExtractionManager {
  27. /*
  28. extract all books
  29. */
  30. public static final String TYPE_ALL = "T";
  31. public static final String TYPE_BY_PUBLISHER = "E";
  32. public static final String TYPE_VENDUTO_BY_PUBLISHER = "VE";
  33. public static final String COMMAND_PARAMETERS_SEPARATOR = ",";
  34. public static final String COMMAND_PARAMETERS_ASSIGNATION = ":";
  35. public static final String JSON_EXTRACTION_TYPE = "json";
  36. public static final String EXCEL_EXTRACTION_TYPE = "excel";
  37. public static int CONSOLE_ROW_LENGHT = 80;
  38. private static final Logger logger = LoggerFactory
  39. .getLogger(CommandLineLauncher.class);
  40. private ElasticRESTClient elclient;
  41. private String commandString;
  42. public ExtractionManager(ElasticRESTClient elclient, String command) {
  43. this.elclient = elclient;
  44. this.commandString = command;
  45. }
  46. public ExtractionManager(ElasticRESTClient elclient) {
  47. this.elclient = elclient;
  48. this.commandString = ExtractionManager.TYPE_ALL;
  49. }
  50. public boolean run(){
  51. DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
  52. String filename = "";
  53. List<Libro> r = null;
  54. File fout = null;
  55. JsonWriter writer = null;
  56. try {
  57. if(commandString.startsWith(TYPE_ALL)){
  58. r = elclient.getAll();
  59. filename += TYPE_ALL + "_";
  60. }else if(commandString.startsWith(TYPE_BY_PUBLISHER)){
  61. r = elclient.getByPublisher(getPublisher());
  62. filename += TYPE_BY_PUBLISHER + "_" + getPublisher() + "_";
  63. }else if(commandString.startsWith(TYPE_VENDUTO_BY_PUBLISHER)){
  64. r = elclient.getVendutoByPublisher(getPublisher());
  65. filename += TYPE_VENDUTO_BY_PUBLISHER + "_" + getPublisher() + "_";
  66. }
  67. filename += df.format(new Date());
  68. if(isJsonExtraction()){
  69. filename += ".json";
  70. fout = new File(filename);
  71. fout.createNewFile();
  72. writer = new JsonWriter(new FileWriter(fout));
  73. writer.setIndent(" ");
  74. Gson g = new GsonBuilder().setPrettyPrinting().create();
  75. g.toJson(r,new TypeToken<Collection<Libro>>(){}.getType(),writer);
  76. logger.info("Created file: " + filename);
  77. } else if(isExcelExtraction()){
  78. filename += ".xls";
  79. fout = new File(filename);
  80. fout.createNewFile();
  81. manageExcelExtraction(fout, r);
  82. }
  83. Console.genericWarn("Creato file: "+fout.getAbsolutePath());
  84. } catch (Throwable e) {
  85. logger.error("Error on extracting data: " + e.getMessage());
  86. e.printStackTrace();
  87. } finally {
  88. if(writer !=null){
  89. try {
  90. writer.flush();
  91. writer.close();
  92. } catch(Exception e){
  93. e.printStackTrace();
  94. }
  95. }
  96. }
  97. return true;
  98. }
  99. private void manageExcelExtraction(File fout, List<Libro> r) {
  100. FileOutputStream fileOut = null;
  101. try{
  102. HSSFWorkbook wb = new HSSFWorkbook();
  103. fileOut = new FileOutputStream(fout);
  104. Sheet sheet = wb.createSheet("Estrazione");
  105. int rowCount = 0;
  106. //headers
  107. Row row = sheet.createRow(rowCount++);
  108. Cell c = row.createCell(0);
  109. c.setCellValue("ISBN");
  110. c = row.createCell(1);
  111. c.setCellValue("EDITORE");
  112. c = row.createCell(2);
  113. c.setCellValue("AUTORE");
  114. c = row.createCell(3);
  115. c.setCellValue("TITOLO");
  116. c = row.createCell(4);
  117. c.setCellValue("PREZZO");
  118. c = row.createCell(5);
  119. c.setCellValue("PERCENTUALE");
  120. c = row.createCell(6);
  121. c.setCellValue("Qta stock");
  122. c = row.createCell(7);
  123. c.setCellValue("Qta venduta");
  124. c = row.createCell(8);
  125. c.setCellValue("TAG");
  126. c = row.createCell(9);
  127. c.setCellValue("DA VERSARE");
  128. for (Libro l: r) {
  129. row = sheet.createRow(rowCount++);
  130. c = row.createCell(0);
  131. c.setCellValue(l.getBarcode());
  132. c = row.createCell(1);
  133. c.setCellValue(l.getEditore());
  134. c = row.createCell(2);
  135. c.setCellValue(l.getAutore());
  136. c = row.createCell(3);
  137. c.setCellValue(l.getTitolo());
  138. c = row.createCell(4);
  139. c.setCellValue(l.getPrezzo());
  140. c = row.createCell(5);
  141. c.setCellValue(l.getPercentuale());
  142. c = row.createCell(6);
  143. c.setCellValue(l.getQa()-l.getQv());
  144. c = row.createCell(7);
  145. c.setCellValue(l.getQv());
  146. c = row.createCell(8);
  147. c.setCellValue(l.getTag());
  148. c = row.createCell(9);
  149. c.setCellFormula("H" + rowCount + "*(E" + rowCount +"-(E" + rowCount + "*F" + rowCount + "))");
  150. }
  151. row = sheet.createRow(rowCount++);
  152. row = sheet.createRow(rowCount++);
  153. c = row.createCell(8);
  154. c.setCellValue("TOTALE: ");
  155. c = row.createCell(9);
  156. // c.setCellFormula("SUM(J2:J+" + (rowCount-2) + ")");
  157. wb.write(fileOut);
  158. }catch(Exception e) {
  159. e.printStackTrace();
  160. }finally{
  161. try {
  162. fileOut.close();
  163. } catch(Exception e){
  164. e.printStackTrace();
  165. }
  166. }
  167. }
  168. private boolean isExcelExtraction(){
  169. if(!StringUtils.isEmpty(commandString)){
  170. String[] parts = commandString.split(COMMAND_PARAMETERS_SEPARATOR);
  171. return parts[parts.length-1].equals(EXCEL_EXTRACTION_TYPE);
  172. }
  173. return false;
  174. }
  175. private boolean isJsonExtraction(){
  176. if(!StringUtils.isEmpty(commandString)){
  177. String[] parts = commandString.split(COMMAND_PARAMETERS_SEPARATOR);
  178. return parts[parts.length-1].equals(JSON_EXTRACTION_TYPE);
  179. }
  180. return false;
  181. }
  182. private String getPublisher(){
  183. if(!StringUtils.isEmpty(commandString)){
  184. String[] parts = commandString.split(COMMAND_PARAMETERS_SEPARATOR);
  185. return parts[1];
  186. }
  187. return null;
  188. }
  189. }