package com.datascience.core.commands; import com.datascience.datastoring.jobs.JobCommand; import com.google.common.base.Joiner; import org.joda.time.DateTime; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; import java.util.Map; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * User: artur */ public class PredictionCommands { static public abstract class AbstractGetPredictionZip<T> extends JobCommand<String, T> { private String path; private Map<String, GetStatistics> statisticsFilesMap; public AbstractGetPredictionZip(String path){ super(false); this.path = path; } public void setStatisticsFilesMap(Map<String, GetStatistics> statisticsMap){ this.statisticsFilesMap = statisticsMap; } public abstract class GetStatistics { public List<List<Object>> call() { return null; } public void generateToStream(List<List<Object>> data, String separator, OutputStream os) throws IOException { Joiner j = Joiner.on(separator); for (List<Object> lo : data){ os.write((j.join(lo) + "\n").getBytes()); } } } @Override protected void realExecute(){ String fileName = ""; try{ fileName = DateTime.now() + "_" + ".zip"; //append job id in the future FileOutputStream fos = new FileOutputStream(path + fileName); ZipOutputStream zos = new ZipOutputStream(fos); for(Map.Entry<String, GetStatistics> e : statisticsFilesMap.entrySet()){ ZipEntry ze= new ZipEntry(e.getKey()); zos.putNextEntry(ze); e.getValue().generateToStream(e.getValue().call(), "\t", zos); } zos.closeEntry(); zos.close(); } catch (FileNotFoundException e) { Logger.getAnonymousLogger().warning(e.getLocalizedMessage()); e.printStackTrace(); } catch (IOException e) { Logger.getAnonymousLogger().warning(e.getLocalizedMessage()); e.printStackTrace(); } setResult("/media/downloads/"+fileName); } } }