package model.progressbar; import java.awt.Dimension; import java.awt.Point; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Timer; import java.util.TimerTask; import java.util.regex.Pattern; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import net.miginfocom.swing.MigLayout; import model.progressbar.interfaces.MP3GainThread; import model.regex.Regex; import model.util.WindowUtils; public class AnalyseAlbumGainProgressBar extends MP3GainThread { /** * the given inputstream */ private InputStream is; /** * max number of files */ private int files; /** * close delay */ private int delay; /** * used regex for the inputstream lines */ private Regex r; /** * Constructor * * @param files * number of files * @param delay * closing delay */ public AnalyseAlbumGainProgressBar(int files, int delay) { super(); this.files = files; this.delay = delay; if (files == 1) { // 92% of 8346050 bytes analyzed r = new Regex("((\\d*)%.*)", Pattern.DOTALL); } else { // [2/2] 92% of 8346050 bytes analyzed r = new Regex("\\[(\\d*)/\\d*\\] (\\d*)%.*", Pattern.DOTALL); } } /* * (non-Javadoc) * * @see java.lang.Thread#run() */ @Override public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(this.is)); String line = br.readLine(); line = br.readLine(); // 2nd line is null or empty -> nothing to analyse -> dont create // window if (line == null || line.trim().length() == 0) return; // generate window JProgressBar pb = new JProgressBar(0, files * 100); final JFrame frame = new JFrame(); JLabel statusJL = mls.generateJLabel("statusJL"); JLabel progressJL = mls.generateJLabel("progressJL"); frame.setPreferredSize(new Dimension(350, 140)); frame.setLayout(new MigLayout("insets 5", "[grow][shrink]", "[shrink][grow][shrink]")); frame.add(progressJL, "span 2, wrap"); frame.add(pb, "grow"); frame.add(cancelB, "gapleft 5, grow, wrap"); frame.add(statusJL, "span 2"); frame.pack(); pb.setStringPainted(true); frame.setVisible(true); Point p = WindowUtils.getCenteredWindowCoordinates(frame); frame.setLocation(p); int currFile = 0; pb.setValue(0); while ((line = br.readLine()) != null) { if (r.matches(line.trim())) { if (this.files > 1) { currFile = Integer.parseInt(r.getGroup(1)) - 1; pb.setValue(Integer.parseInt(r.getGroup(2)) + currFile * 100); statusJL.setText(line.trim()); } else { pb.setValue(Integer.parseInt(r.getGroup(2))); statusJL.setText(line.trim()); } } } pb.setValue(files * 100); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { frame.dispose(); } }, delay); } catch (IOException e1) { e1.printStackTrace(); } } /* * (non-Javadoc) * * @see * model.progressbar.interfaces.MP3GainThread#setInputStream(java.io.InputStream * ) */ @Override public void setInputStream(InputStream is) { // unused; } /* * (non-Javadoc) * * @see * model.progressbar.interfaces.MP3GainThread#setErrorStream(java.io.InputStream * ) */ @Override public void setErrorStream(InputStream es) { this.is = es; } /* * (non-Javadoc) * * @see model.progressbar.interfaces.IProgressBar#stopBar() */ @Override public void stopBar() { } /* * (non-Javadoc) * * @see model.progressbar.interfaces.IProgressBar#nextStep() */ @Override public void nextStep() { } /* * (non-Javadoc) * * @see model.progressbar.interfaces.IProgressBar#setMax(int) */ @Override public void setMax(int max) { } /* * (non-Javadoc) * * @see model.progressbar.interfaces.MP3GainThread#reset() */ @Override public void reset() { } /* * (non-Javadoc) * * @see model.progressbar.interfaces.MP3GainThread#isRunning() */ @Override public boolean isRunning() { return false; } }