diff --git a/Order Processor/.classpath b/Order Processor/.classpath index d0b16d0..10d15a7 100644 --- a/Order Processor/.classpath +++ b/Order Processor/.classpath @@ -1,7 +1,7 @@ - + diff --git a/Order Processor/lib/sqlitejdbc-v056.jar b/Order Processor/lib/sqlitejdbc-v056.jar new file mode 100644 index 0000000..f95d90e Binary files /dev/null and b/Order Processor/lib/sqlitejdbc-v056.jar differ diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java index d8eb8ed..85e5cf1 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java @@ -61,7 +61,7 @@ public class OrderDB { try { stat.executeUpdate(CREATE_TABLE); } catch (SQLException e) { - // TODO Auto-generated catch block + //most likely the table already exist e.printStackTrace(); } conn.close(); @@ -104,14 +104,17 @@ public class OrderDB { */ public ArrayList getAllOrders() throws SQLException, IOException, ClassNotFoundException { + int row = 1; Connection conn = getConnection(); Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("select * from Orders;"); ArrayList list = new ArrayList(); - + ByteArrayInputStream bais; ObjectInputStream ins; while (rs.next()) { + if(mListener != null) + mListener.onProgressUpdate(row++); bais = new ByteArrayInputStream(rs.getBytes("item")); ins = new ObjectInputStream(bais); list.add((Order) ins.readObject()); 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 7e7139c..9a46d49 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java @@ -93,7 +93,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == mShowAllButton){ - new ShowAllDialog(db.toString()); + new ShowAllDialog(); } if (e.getSource() == mSearchButton) { diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java new file mode 100644 index 0000000..7077de6 --- /dev/null +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java @@ -0,0 +1,145 @@ +/** + * OrderPanel.java + * @date Jan 9, 2011 + * @author ricky barrette + * @author Twenty Codes, LLC + */ +package com.TwentyCodes.java.OrderProcessor.UI; + +import java.awt.Color; +import java.util.ArrayList; + +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.text.BadLocationException; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +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; + +/** + * a pane to display orders in color code. + * @author ricky barrette + */ +public class OrderPane extends JScrollPane { + + private static final long serialVersionUID = -8762146025822173375L; + private JTextPane mOutput; + private ProgressListener mListener; + + /** + * Creates a new OrderPanel + * @author ricky barrette + */ + public OrderPane() { + mOutput = new JTextPane(); + mOutput.setEditable(false); + setViewportView(mOutput); + } + + /** + * displays orders + * + * @param list + * of orders to display + * @author ricky barrette + */ + public void displayOrders(ArrayList list) { + mOutput.setText(null); + float possible = 0; + float actual = 0; + int total = 0; + for (int i = 0; i < list.size(); i++) { + if(mListener != null) + mListener.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++; + } + + 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); + } + + /** + * adds the following string to the textpane + * + * @param string + * @author ricky barrette + */ + private void updateTextPane(String string, TextStyle style) { + String[] initString = { "\n" + string }; + String[] initStyles = { style.toString() }; + + StyledDocument doc = mOutput.getStyledDocument(); + addStylesToDocument(doc); + + // Load the text pane with styled text. + try { + for (int i = 0; i < initString.length; i++) { + doc.insertString(doc.getLength(), initString[i], + doc.getStyle(initStyles[i])); + } + } catch (BadLocationException ble) { + System.err.println("Couldn't insert initial text into text pane."); + } + mOutput.setDocument(doc); + + } + + /** + * adds supported styles to the document + * + * @param doc + * @author ricky barrette + */ + protected void addStylesToDocument(StyledDocument doc) { + // Initialize some styles. + Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); + + Style regular = doc.addStyle("REGULAR", def); + StyleConstants.setFontFamily(def, "Arial"); + StyleConstants.setFontSize(def, 14); + + Style s = doc.addStyle("ITALIC", regular); + StyleConstants.setItalic(s, true); + + s = doc.addStyle("BOLD", regular); + StyleConstants.setBold(s, true); + + s = doc.addStyle("RED", regular); + StyleConstants.setForeground(s, Color.RED); + + s = doc.addStyle("GREEN", regular); + StyleConstants.setForeground(s, Color.GREEN); + } + + /** + * sets a listener for db progress updates + * + * @param listener + * @author ricky barrette + */ + public void setOnProgressListerner(ProgressListener listener) { + mListener = listener; + } +} \ 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 52c60ab..2b11315 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java @@ -7,7 +7,6 @@ package com.TwentyCodes.java.OrderProcessor.UI; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; @@ -19,20 +18,11 @@ 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; -import javax.swing.text.BadLocationException; -import javax.swing.text.Style; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyleContext; -import javax.swing.text.StyledDocument; import com.TwentyCodes.java.OrderProcessor.Main; 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 @@ -41,11 +31,11 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList private static final long serialVersionUID = 1750326106927701404L; private JButton mOkButton; - private JTextPane mOutput; private JTextField mTextField; private JProgressBar mProgressBar; private boolean isProcessing = false; private int mListSize; + private OrderPane mOrderPanel; /** * Creates a new ShowAllMakeDialog @@ -63,6 +53,9 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList //add the JPanel to the frame, and display getContentPane().add(panel, BorderLayout.NORTH); + mOrderPanel = new OrderPane(); + this.getContentPane().add(mOrderPanel, BorderLayout.CENTER); + mTextField = new JTextField(); mTextField.setColumns(20); mTextField.addActionListener(this); @@ -71,15 +64,10 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList 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); + pack(); setVisible(true); } @@ -102,10 +90,7 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList e1.printStackTrace(); } MainWindow.db.setOnProgressListerner(SearchDialog.this); - mOutput.setText(null); - float possible = 0; - float actual = 0; - int total = 0; + ArrayList list = null; try { list = MainWindow.db.search(mTextField.getText()); @@ -123,29 +108,10 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList 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++; - } + mOrderPanel.setOnProgressListerner(SearchDialog.this); + mOrderPanel.displayOrders(list); - 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); + //todo updates order panel isProcessing = false; pack(); @@ -154,56 +120,7 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList } - /** - * adds the folloing string to the textpane - * @param string - * @author ricky barrette - */ - private void updateTextPane(String string, TextStyle style) { - String[] initString = {"\n"+ string }; - String[] initStyles = { style.toString() }; - StyledDocument doc = mOutput.getStyledDocument(); - addStylesToDocument(doc); - - // Load the text pane with styled text. - try { - for (int i = 0; i < initString.length; i++) { - doc.insertString(doc.getLength(), initString[i], - doc.getStyle(initStyles[i])); - } - } catch (BadLocationException ble) { - System.err.println("Couldn't insert initial text into text pane."); - } - mOutput.setDocument(doc); - - } - - /** - * adds supported styles to the document - * @param doc - * @author ricky barrette - */ - protected void addStylesToDocument(StyledDocument doc) { - //Initialize some styles. - Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); - - Style regular = doc.addStyle("REGULAR", def); - StyleConstants.setFontFamily(def, "Arial"); - StyleConstants.setFontSize(def, 14); - - Style s = doc.addStyle("ITALIC", regular); - StyleConstants.setItalic(s, true); - - s = doc.addStyle("BOLD", regular); - StyleConstants.setBold(s, true); - - s = doc.addStyle("RED", regular); - StyleConstants.setForeground(s, Color.RED); - - s = doc.addStyle("GREEN", regular); - StyleConstants.setForeground(s, Color.GREEN); - } /** diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java index 68c665e..3aa896b 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java @@ -9,27 +9,67 @@ package com.TwentyCodes.java.OrderProcessor.UI; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.IOException; +import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import com.TwentyCodes.java.OrderProcessor.ProgressListener; + /** * This panel will be used to display all Vehicles in the VechicleDB */ -public class ShowAllDialog extends JFrame implements ActionListener { +public class ShowAllDialog extends JFrame implements ActionListener, ProgressListener { private static final long serialVersionUID = -8416144493079733535L; - + private JProgressBar mProgressBar; + /** * Creates a new ShowAllDialog */ - public ShowAllDialog(final String list){ + public ShowAllDialog(){ super(); setTitle("Show All Orders"); + JButton ok = new JButton("Ok"); + ok.addActionListener(this); + final OrderPane output = new OrderPane(); + mProgressBar = new JProgressBar(); + getContentPane().add(mProgressBar, BorderLayout.SOUTH); + this.getContentPane().add(output, BorderLayout.CENTER); + this.getContentPane().add(ok, BorderLayout.NORTH); + try { + mProgressBar.setMaximum(MainWindow.db.getCount()); + } catch (SQLException e1) { + e1.printStackTrace(); + } + mProgressBar.setString("Loading from Database"); + mProgressBar.setStringPainted(true); + MainWindow.db.setOnProgressListerner(this); - initialize(list); + java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Runnable() { + public void run() { + try { + output.displayOrders(MainWindow.db.getAllOrders()); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }); + + + pack(); + setVisible(true); } /** @@ -39,19 +79,9 @@ public class ShowAllDialog extends JFrame implements ActionListener { super(); setTitle(title); - initialize(body); - } - - /** - * initializes the dialog's components - * @param body - * @author ricky barrette - */ - private void initialize(String body) { JButton ok = new JButton("Ok"); ok.addActionListener(this); - JScrollPane scrollPane = new JScrollPane(); final JTextArea results = new JTextArea(); @@ -65,9 +95,19 @@ public class ShowAllDialog extends JFrame implements ActionListener { pack(); setVisible(true); } + @Override public void actionPerformed(ActionEvent arg0) { setVisible(false); } + + @Override + public void onProgressUpdate(int progress) { + mProgressBar.setValue(progress); + if(progress >= mProgressBar.getMaximum()){ + this.pack(); + mProgressBar.setString("Done"); + } + } }