package org.open2jam.gui; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; import javax.swing.SwingWorker; import org.open2jam.Config; import org.open2jam.parsers.ChartList; import org.open2jam.parsers.ChartParser; import org.open2jam.util.Logger; /** * * @author fox */ public class ChartModelLoader extends SwingWorker<ChartListTableModel,ChartList> { private final ChartListTableModel table_model; private final File dir; public ChartModelLoader(ChartListTableModel table_model, File dir){ this.table_model = table_model; this.dir = dir; } @Override protected ChartListTableModel doInBackground() { try{ table_model.clear(); ArrayList<File> files = new ArrayList<File>(Arrays.asList(dir.listFiles())); double perc = files.size() / 100d; for(int i=0;i<files.size();i++) { ChartList cl = ChartParser.parseFile(files.get(i)); if(cl != null)publish(cl); else if(files.get(i).isDirectory()){ List<File> nl = Arrays.asList(files.get(i).listFiles()); files.addAll(nl); perc = files.size() / 100d; } setProgress((int)(i/perc)); } setProgress(100); return table_model; }catch(Exception e){ Logger.global.log(Level.SEVERE, "Exception in chart loader ! {0} {1}", new Object[]{e.toString(), e.getMessage()}); System.exit(1); return null; } } @Override protected void done() { Config.setCache(dir, table_model.getRawList()); } @Override protected void process(List<ChartList> chunks) { table_model.addRows(chunks); } }