From d571efd22e90b946e18b069fd66a245d3c2eb19d Mon Sep 17 00:00:00 2001 From: ricky barrette Date: Tue, 4 Jan 2011 16:50:45 +0000 Subject: [PATCH] I added a progress bar to the search dialog, and updated comments --- .../java/OrderProcessor/OrderDB.java | 24 ++-- .../java/OrderProcessor/UI/MainWindow.java | 37 ++++-- .../java/OrderProcessor/UI/SearchDialog.java | 119 ++++++++++++------ 3 files changed, 128 insertions(+), 52 deletions(-) diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/OrderDB.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/OrderDB.java index 3bfea64..8451df3 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/OrderDB.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/OrderDB.java @@ -78,12 +78,11 @@ public class OrderDB { try { addOrder(new Order(scan.nextLine())); } catch (OrderExistsException e) { - e.printStackTrace(); +// e.printStackTrace(); } catch (NumberFormatException e1){ - e1.printStackTrace(); +// e1.printStackTrace(); } catch (InvalidDateFormatException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); +// e2.printStackTrace(); } } } @@ -108,9 +107,11 @@ public class OrderDB { */ public ArrayList search(String text) { ArrayList list = new ArrayList(); - for(Order item : array){ - if(item.getItemName().equalsIgnoreCase(text)) - list.add(item); + for(int i = 0; i < array.size(); i++){ + if(array.get(i).getItemName().equalsIgnoreCase(text)){ + list.add(array.get(i)); + mListener.onProgressUpdate(i); + } } return list; } @@ -124,5 +125,14 @@ public class OrderDB { mListener = listener; } + /** + * returns the size of the data base + * @return + * @author ricky barrette + */ + public int getSize() { + return array.size(); + } + } \ No newline at end of file diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java index ce59491..f5018da 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java @@ -37,6 +37,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen private static final long serialVersionUID = 1841715561053331517L; public static final boolean DEBUG = false; private JProgressBar mProgressBar; + private String mCurrentFile; /** * Creates a new MainWindow @@ -91,15 +92,30 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen if (e.getSource() == mSearchButton) { new SearchDialog(); } - + + /** + * Prepares the progress bar, and loads the file using an executer to prevent UI hangups + */ if(e.getSource() == mLoadFileButton){ try { if(fc.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) + db.setOnProgressListerner(this); mProgressBar.setIndeterminate(true); - mProgressBar.setString(fc.getSelectedFile().toString()); + mCurrentFile = fc.getSelectedFile().toString(); + mProgressBar.setString(mCurrentFile); mProgressBar.setStringPainted(true); - mProgressBar.setMaximum(countLines(fc.getSelectedFile())); - db.load(fc.getSelectedFile()); + mProgressBar.setMaximum(countLines(fc.getSelectedFile())+1); + + java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Runnable() { + public void run() { + try { + db.load(fc.getSelectedFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + }); + pack(); } catch (FileNotFoundException e1) { @@ -122,10 +138,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen public int countLines(File file) throws IOException { LineNumberReader reader = new LineNumberReader(new FileReader(file)); int cnt = 0; - String lineRead = ""; - while ((lineRead = reader.readLine()) != null) { - } - + while ((reader.readLine()) != null) ; cnt = reader.getLineNumber(); reader.close(); return cnt; @@ -140,9 +153,13 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen */ @Override public void onProgressUpdate(int progress) { - if(mProgressBar.isIndeterminate()) - mProgressBar.setIndeterminate(false); + progress++; mProgressBar.setValue(progress); + mProgressBar.setString(" "+mCurrentFile + " ~ Parsing Order: "+progress+" of "+mProgressBar.getMaximum()+" "); + if(mProgressBar.isIndeterminate()) { + mProgressBar.setIndeterminate(false); + pack(); + } } } \ No newline at end of file diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java index 8a2da1e..6748a3e 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java @@ -10,11 +10,13 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTextPane; @@ -25,18 +27,22 @@ import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; import com.TwentyCodes.java.OrderProcessor.Order; +import com.TwentyCodes.java.OrderProcessor.ProgressListener; import com.TwentyCodes.java.OrderProcessor.Status; import com.TwentyCodes.java.OrderProcessor.TextStyle; /** * This class will be the dialog that will ask the user for a specific make to show */ -public class SearchDialog extends JFrame implements ActionListener { +public class SearchDialog extends JFrame implements ActionListener, ProgressListener { private static final long serialVersionUID = 1750326106927701404L; - private JButton ok; + private JButton mOkButton; private JTextPane mOutput; - private JTextField textField; + private JTextField mTextField; + private JProgressBar mProgressBar; + private boolean isProcessing = false; + private int mListSize; /** * Creates a new ShowAllMakeDialog @@ -47,23 +53,27 @@ public class SearchDialog extends JFrame implements ActionListener { //create a JPanel to hold the text area and button JPanel panel = new JPanel(); - ok = new JButton("Ok"); + mOkButton = new JButton("Ok"); JLabel label = new JLabel("Enter a Product name:"); - ok.addActionListener(this); + mOkButton.addActionListener(this); //add the JPanel to the frame, and display getContentPane().add(panel, BorderLayout.NORTH); - textField = new JTextField(); - textField.setColumns(10); + mTextField = new JTextField(); + mTextField.setColumns(10); + mTextField.addActionListener(this); panel.add(label); - panel.add(textField); - panel.add(ok); + panel.add(mTextField); + panel.add(mOkButton); JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); + mProgressBar = new JProgressBar(); + getContentPane().add(mProgressBar, BorderLayout.SOUTH); + mOutput = new JTextPane(); mOutput.setEditable(false); scrollPane.setViewportView(mOutput); @@ -78,36 +88,54 @@ public class SearchDialog extends JFrame implements ActionListener { */ @Override public void actionPerformed(ActionEvent e) { - if (e.getSource() == ok) { - mOutput.setText(null); - float possible = 0; - float actual = 0; - int total = 0; - for(Order item : MainWindow.db.search(textField.getText())){ + + java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Runnable() { + public void run() { + mProgressBar.setString("Searching for: "+mTextField.getText()); + mProgressBar.setStringPainted(true); + mProgressBar.setMaximum(MainWindow.db.getSize()); + MainWindow.db.setOnProgressListerner(SearchDialog.this); + mOutput.setText(null); + float possible = 0; + float actual = 0; + int total = 0; + ArrayList list = MainWindow.db.search(mTextField.getText()); + mListSize = list.size(); - switch(item.getFinancialStatus()){ - case CANCELLED: - updateTextPane(item.toString(), TextStyle.RED); - break; - case CANCELLED_BY_GOOGLE: - updateTextPane(item.toString(), TextStyle.RED); - break; - default: - updateTextPane(item.toString(), TextStyle.REGULAR); + mProgressBar.setMaximum(MainWindow.db.getSize() + mListSize); + isProcessing = true; + mProgressBar.setString("Processing Order: "+ 1 +" of "+ mListSize); + pack(); + + for(int i = 0; i < list.size(); i++){ + onProgressUpdate(i); + switch(list.get(i).getFinancialStatus()){ + case CANCELLED: + updateTextPane(list.get(i).toString(), TextStyle.RED); + break; + case CANCELLED_BY_GOOGLE: + updateTextPane(list.get(i).toString(), TextStyle.RED); + break; + default: + updateTextPane(list.get(i).toString(), TextStyle.REGULAR); + } + + possible = possible + list.get(i).getOrderAmount(); + actual = actual + list.get(i).getAmountCharged(); + if(list.get(i).getFulfillmentStatus() == Status.DELIVERED) + total++; } - possible = possible + item.getOrderAmount(); - actual = actual + item.getAmountCharged(); - if(item.getFulfillmentStatus() == Status.DELIVERED) - total++; + updateTextPane("Possible sales: $"+possible, TextStyle.BOLD); + updateTextPane("Actual sales: $"+actual, TextStyle.BOLD); + updateTextPane("Possible sold:"+ list.size(), TextStyle.BOLD); + updateTextPane("Total sold: "+total, TextStyle.BOLD); + isProcessing = false; + + pack(); } - - updateTextPane("Possible sales: $"+possible, TextStyle.BOLD); - updateTextPane("Actual sales: $"+actual, TextStyle.BOLD); - updateTextPane("Total sold: "+total, TextStyle.BOLD); - - pack(); - } + }); + } /** @@ -161,4 +189,25 @@ public class SearchDialog extends JFrame implements ActionListener { StyleConstants.setForeground(s, Color.GREEN); } + + /** + * called by MainWindow.db on progress update, or internally from this window to update the progress bar + * (non-Javadoc) + * @see com.TwentyCodes.java.OrderProcessor.ProgressListener#onProgressUpdate(int) + * @author ricky barrette + */ + @Override + public void onProgressUpdate(int progress) { + progress++; + if(mProgressBar.isIndeterminate()) { + mProgressBar.setIndeterminate(false); + pack(); + } + if(isProcessing){ + mProgressBar.setString("Processing Order: "+ mListSize +" of "+ progress); + mProgressBar.setValue(progress + MainWindow.db.getSize()+1); + } else + mProgressBar.setValue(progress); + } + }