From 13f3e726e47bba3867b5182dcb92e2780e0eba35 Mon Sep 17 00:00:00 2001 From: ricky barrette Date: Sat, 15 Jan 2011 15:50:29 +0000 Subject: [PATCH] created a single window with a tabbed layout for a more fluid experience. added an overwrite file dialog. added the customer country to the order object. updated .CSV export --- Order Processor/images/process.png | Bin 0 -> 2633 bytes .../java/OrderProcessor/DB/OrderDB.java | 4 +- .../TwentyCodes/java/OrderProcessor/Main.java | 1 + .../java/OrderProcessor/Order.java | 88 +++++++++------ .../OrderProcessor/UI/ExceptionReportGUI.java | 60 ++++++++++ .../java/OrderProcessor/UI/MainWindow.java | 101 +++++++++-------- .../{SearchDialog.java => SearchPanel.java} | 106 ++++++++++-------- .../{ShowAllDialog.java => ShowAllPanel.java} | 70 ++++-------- .../UncaughtExceptionHandler.java | 4 +- Order Processor/version infomation/changelog | 10 ++ Order Processor/version infomation/version | 2 +- 11 files changed, 268 insertions(+), 178 deletions(-) create mode 100644 Order Processor/images/process.png create mode 100644 Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ExceptionReportGUI.java rename Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/{SearchDialog.java => SearchPanel.java} (78%) rename Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/{ShowAllDialog.java => ShowAllPanel.java} (58%) diff --git a/Order Processor/images/process.png b/Order Processor/images/process.png new file mode 100644 index 0000000000000000000000000000000000000000..7b99879b4cf00df71f04536a6408b12b6e952bcd GIT binary patch literal 2633 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 literal 0 HcmV?d00001 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 e554709..ba4cee3 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/DB/OrderDB.java @@ -277,8 +277,8 @@ public class OrderDB { } else if (order.getItemName().equalsIgnoreCase(parts[i]) || (orderNumber > 0) && (order.getGoogleOrderNumber() == orderNumber) - || order.getCustomerName().toLowerCase(Locale.ENGLISH) - .contains(parts[i].toLowerCase(Locale.ENGLISH))) + || order.getCustomerName().toLowerCase(Locale.ENGLISH).contains(parts[i].toLowerCase(Locale.ENGLISH)) + || order.getCustomerContry().toLowerCase(Locale.ENGLISH).contains(parts[i].toLowerCase(Locale.ENGLISH))) list.add(order); } ins.close(); diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Main.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Main.java index 59a4d34..7d87a97 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Main.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Main.java @@ -23,6 +23,7 @@ public class Main { * @author ricky barrette */ public static void main(String[] args) { + new MainWindow(); } diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Order.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Order.java index 75ad287..3c10544 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Order.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/Order.java @@ -6,11 +6,7 @@ package com.TwentyCodes.java.OrderProcessor; -import java.io.IOException; import java.io.Serializable; -import java.io.StringReader; - -import com.Ostermiller.util.CSVParser; /** @@ -29,35 +25,36 @@ public class Order implements Comparable, Serializable{ private Status mFulfillmentStatus; private String mCustomerEmail; private String mCustomerName; + private String mCustomerContry; - /** - * Creates a new Order from a comma separated line from a *.csv file. - * - * Order ID,Merchant Order Number,Order Creation Date,Currency of Transaction,Order Amount,Amount Charged,Financial Status,Fulfillment Status,Link to Order,Total Tax,Total Shipping,Amount Refunded,Amount Charged Back,Chargeback Protection,Shipping Method,Email Marketing,Buyer Email Address,Buyer Name,Buyer Address 1,Buyer Address 2,Buyer City,Buyer State,Buyer Postal Code,Buyer Country,Buyer Phone Number,Tracking Data,Item 1 ID,Item 1 Name,Item 1 Description,Item 1 Price,Item 1 Quantity - * - * @param order - * @author ricky barrette - * @throws InvalidDateFormatException - * @throws IOException - */ - public Order(String order) throws NumberFormatException, InvalidDateFormatException, IOException{ - if(Main.DEBUG) - System.out.println("parsing in order: "+ order); - - CSVParser parsedOrder = new CSVParser(new StringReader(order)); - String[] lineParts = parsedOrder.getLine(); - parsedOrder.close(); - - this.mGoogleOrderNumber = Long.parseLong(lineParts[0].split(" ")[1]); - this.mOrderCreationDate = new Date(lineParts[2]); - this.mOrderAmount = Float.parseFloat(lineParts[4]); - this.mAmountCharged = Float.parseFloat(lineParts[5]); - this.mFinancialStatus = Status.parseStatus(lineParts[6]); - this.mFulfillmentStatus = Status.parseStatus(lineParts[7]); - this.mCustomerEmail = lineParts[16]; - this.mCustomerName = lineParts[17]; - this.mItemName = lineParts[27]; - +// /** +// * Creates a new Order from a comma separated line from a *.csv file. +// * +// * Order ID,Merchant Order Number,Order Creation Date,Currency of Transaction,Order Amount,Amount Charged,Financial Status,Fulfillment Status,Link to Order,Total Tax,Total Shipping,Amount Refunded,Amount Charged Back,Chargeback Protection,Shipping Method,Email Marketing,Buyer Email Address,Buyer Name,Buyer Address 1,Buyer Address 2,Buyer City,Buyer State,Buyer Postal Code,Buyer Country,Buyer Phone Number,Tracking Data,Item 1 ID,Item 1 Name,Item 1 Description,Item 1 Price,Item 1 Quantity +// * +// * @param order +// * @author ricky barrette +// * @throws InvalidDateFormatException +// * @throws IOException +// */ +// public Order(String order) throws NumberFormatException, InvalidDateFormatException, IOException{ +// if(Main.DEBUG) +// System.out.println("parsing in order: "+ order); +// +// CSVParser parsedOrder = new CSVParser(new StringReader(order)); +// String[] lineParts = parsedOrder.getLine(); +// parsedOrder.close(); +// +// this.mGoogleOrderNumber = Long.parseLong(lineParts[0].split(" ")[1]); +// this.mOrderCreationDate = new Date(lineParts[2]); +// this.mOrderAmount = Float.parseFloat(lineParts[4]); +// this.mAmountCharged = Float.parseFloat(lineParts[5]); +// this.mFinancialStatus = Status.parseStatus(lineParts[6]); +// this.mFulfillmentStatus = Status.parseStatus(lineParts[7]); +// this.mCustomerEmail = lineParts[16]; +// this.mCustomerName = lineParts[17]; +// this.mItemName = lineParts[27]; +// // String [] lineParts; // lineParts = order.split(","); // System.out.println(lineParts[0].split(" ")[1]); @@ -70,10 +67,10 @@ public class Order implements Comparable, Serializable{ // this.mCustomerEmail = removeFistAndLastChar(lineParts[16]); // this.mCustomerName = removeFistAndLastChar(lineParts[17]); // this.mItemName = removeFistAndLastChar(lineParts[27]); - - if (Main.DEBUG) - System.out.println(this.toString()); - } +// +// if (Main.DEBUG) +// System.out.println(this.toString()); +// } // /** // * removes the last char from a string @@ -106,6 +103,7 @@ public class Order implements Comparable, Serializable{ this.mCustomerEmail = lineParts[16]; this.mCustomerName = lineParts[17]; this.mItemName = lineParts[27]; + this.mCustomerContry = lineParts[23]; } /** @@ -116,7 +114,7 @@ public class Order implements Comparable, Serializable{ */ @Override public String toString(){ - return this.mGoogleOrderNumber +", "+ this.mOrderCreationDate.toString() +", "+ this.mItemName +", "+ this.mOrderAmount +", "+ this.mAmountCharged +", "+ this.mFinancialStatus +", "+ this.mFulfillmentStatus +", "+ this.mCustomerName +", "+ this.mCustomerEmail; + return this.mGoogleOrderNumber +", "+ this.mOrderCreationDate.toString() +", "+ this.mItemName +", "+ this.mOrderAmount +", "+ this.mAmountCharged +", "+ this.mFinancialStatus +", "+ this.mFulfillmentStatus +", "+ this.mCustomerName +", "+ this.mCustomerEmail +", "+ this.mCustomerContry; } /** @@ -292,4 +290,20 @@ public class Order implements Comparable, Serializable{ return mCustomerName; } + /** + * @param customerContry the mCustomerContry to set + * @author ricky barrette + */ + public void setCustomerContry(String customerContry) { + this.mCustomerContry = customerContry; + } + + /** + * @return the mCustomerContry + * @author ricky barrette + */ + public String getCustomerContry() { + return mCustomerContry; + } + } \ No newline at end of file diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ExceptionReportGUI.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ExceptionReportGUI.java new file mode 100644 index 0000000..48132a1 --- /dev/null +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ExceptionReportGUI.java @@ -0,0 +1,60 @@ +/** + * ExceptionReportGUI.java + * @date Jan 15, 2011 + * @author ricky barrette + * @author Twenty Codes, LLC + */ +package com.TwentyCodes.java.OrderProcessor.UI; + +import java.awt.BorderLayout; +import java.awt.HeadlessException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +/** + * this simple frame will be used to display exception reports to the user + * @author ricky barrette + */ +public class ExceptionReportGUI extends JFrame implements ActionListener { + + private static final long serialVersionUID = -4203182071311606914L; + + /** + * Creates a new ExceptionReportGUI + * @throws HeadlessException + * @author ricky barrette + */ + public ExceptionReportGUI(String report) { + super(); + setTitle("We're Sorry...."); + setIconImage(new ImageIcon(getClass().getResource("/info.png")).getImage()); + + JButton ok = new JButton("Ok", new ImageIcon(getClass().getResource("/accept.png"))); + ok.addActionListener(this); + + JScrollPane scrollPane = new JScrollPane(); + + final JTextArea results = new JTextArea(); + scrollPane.setViewportView(results); + + results.setEditable(false); + results.setText(report); + + this.getContentPane().add(scrollPane, BorderLayout.CENTER); + this.getContentPane().add(ok, BorderLayout.SOUTH); + pack(); + setVisible(true); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + this.dispose(); + } + +} \ 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 83299e2..e983609 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/MainWindow.java @@ -1,5 +1,5 @@ /** - * @author Twenty Codes, LLC + * @author ricky barrette * @date Dec 18, 2010 */ @@ -17,8 +17,10 @@ import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; +import javax.swing.JTabbedPane; import com.TwentyCodes.java.OrderProcessor.FileFilter; import com.TwentyCodes.java.OrderProcessor.ProgressListener; @@ -30,8 +32,6 @@ import com.TwentyCodes.java.OrderProcessor.DB.OrderDB; */ public class MainWindow extends JFrame implements ActionListener, ProgressListener{ - private JButton mSearchButton; - private JButton mShowAllButton; private JButton mLoadFileButton; private JFileChooser fc; public static OrderDB db; @@ -39,6 +39,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen private JProgressBar mProgressBar; private String mCurrentFile; private UncaughtExceptionHandler mExceptionReport = new UncaughtExceptionHandler(this.getClass()); + private JLabel orderCountLabel; /** * Creates a new MainWindow @@ -49,48 +50,64 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen Thread.setDefaultUncaughtExceptionHandler(mExceptionReport); this.setDefaultCloseOperation(EXIT_ON_CLOSE); + try { + db = new OrderDB(); + } catch (Exception e) { + e.printStackTrace(); + } + + fc = new JFileChooser(); + fc.setFileFilter(new FileFilter()); + + JTabbedPane tabbedPane = new JTabbedPane(); + + tabbedPane.addTab("Main", initializeMainPanel()); + tabbedPane.addTab("Search Orders", new SearchPanel(this)); + tabbedPane.addTab("Show All Orders", new ShowAllPanel(this)); + + this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + + this.setVisible(true); + this.pack(); + } + + /** + * initializes the main layout + * + * @author ricky barrette + */ + private JPanel initializeMainPanel() { setTitle("Twenty Codes, LLC Order Database"); setIconImage(new ImageIcon(getClass().getResource("/database.png")).getImage()); + JPanel mainPanel = new JPanel(new BorderLayout()); JPanel panel = new JPanel(); + mainPanel.add(panel); - getContentPane().add(panel); - - //Search buttom - mSearchButton = new JButton("Search", new ImageIcon(getClass().getResource("/database_search.png"))); - mSearchButton.addActionListener(this); - panel.add(mSearchButton); - - //show all button - mShowAllButton = new JButton("Show All Orders", new ImageIcon(getClass().getResource("/database.png"))); - mShowAllButton.addActionListener(this); - panel.add(mShowAllButton); //load button mLoadFileButton = new JButton("Load File", new ImageIcon(getClass().getResource("/database_add.png"))); mLoadFileButton.addActionListener(this); + + //order count labels + try { + panel.add(new JLabel("Total Orders in the database:")); + orderCountLabel = new JLabel(db.getCount()+""); + panel.add(orderCountLabel); + } catch (SQLException e) { + e.printStackTrace(); + } + panel.add(mLoadFileButton); //progress bar mProgressBar = new JProgressBar(); mProgressBar.setStringPainted(true); - getContentPane().add(mProgressBar, BorderLayout.SOUTH); - - setVisible(true); - pack(); - - try { - db = new OrderDB(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - fc = new JFileChooser(); - fc.setFileFilter(new FileFilter()); + mainPanel.add(mProgressBar, BorderLayout.SOUTH); + + return mainPanel; } - + /** * called when a button is clicked * (non-Javadoc) @@ -98,13 +115,6 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen */ @Override public void actionPerformed(ActionEvent e) { - if(e.getSource() == mShowAllButton){ - new ShowAllDialog(); - } - - if (e.getSource() == mSearchButton) { - new SearchDialog(); - } /** * Prepares the progress bar, and loads the file using an executer to prevent UI hangups @@ -121,6 +131,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen public void run() { try { db.load(fc.getSelectedFile()); + } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { @@ -129,7 +140,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); - } + } } }); @@ -140,9 +151,6 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen } } - - - /** * called then the progress of the order db is updated * (non-Javadoc) @@ -151,16 +159,21 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen */ @Override public void onProgressUpdate(int progress, int max) { -// progress++; mProgressBar.setMaximum(max); mProgressBar.setValue(progress); - mProgressBar.setString(" "+mCurrentFile + " ~ Parsing Order: "+ progress +" of "+mProgressBar.getMaximum()+" "); + mProgressBar.setString(mCurrentFile + " ~ Parsing Order: "+ progress +" of "+mProgressBar.getMaximum()); if(mProgressBar.isIndeterminate()) { mProgressBar.setIndeterminate(false); pack(); } - if(progress >= mProgressBar.getMaximum()) + if(progress >= mProgressBar.getMaximum()){ mLoadFileButton.setEnabled(true); + try { + orderCountLabel.setText(db.getCount()+""); + } catch (SQLException e) { + e.printStackTrace(); + } + } } } \ 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/SearchPanel.java similarity index 78% rename from Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java rename to Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchPanel.java index abdde45..79d751a 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchPanel.java @@ -24,6 +24,7 @@ import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTextField; @@ -40,7 +41,7 @@ import com.TwentyCodes.java.OrderProcessor.ProgressListener; * This class will be the dialog that will ask the user for a specific make to show * @author ricky barrette */ -public class SearchDialog extends JFrame implements ActionListener, ProgressListener, MouseListener, DatePickerListener { +public class SearchPanel extends JPanel implements ActionListener, ProgressListener, MouseListener, DatePickerListener { private static final long serialVersionUID = 1750326106927701404L; private static final int END_DATE_RESULT = 1; @@ -57,21 +58,24 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList private JButton mExportButton; private JFileChooser fc; private JCheckBox fcCheckBox; + private JFrame mFrame; /** * Creates a new ShowAllMakeDialog + * @param frame */ - public SearchDialog() { - super(); + public SearchPanel(JFrame frame) { + super(new BorderLayout()); + mFrame = frame; - setTitle("Search"); - setIconImage(new ImageIcon(getClass().getResource("/database_search.png")).getImage()); +// mFrame.setTitle("Search"); +// mFrame.setIconImage(new ImageIcon(getClass().getResource("/database_search.png")).getImage()); //create a JPanel to hold the text area and button JPanel panel = new JPanel(); //add the JPanel to the frame, and display - getContentPane().add(panel, BorderLayout.NORTH); + add(panel, BorderLayout.NORTH); //search string panel.add(new JLabel("Enter a Product name, Customer Name, or Google Order Number:")); @@ -108,14 +112,13 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList panel.add(mExportButton); mExportButton.addActionListener(this); - //progress bar - mProgressBar = new JProgressBar(); - getContentPane().add(mProgressBar, BorderLayout.SOUTH); - //output orderpane mOrderPanel = new OrderPane(); - this.getContentPane().add(mOrderPanel, BorderLayout.CENTER); + add(mOrderPanel, BorderLayout.CENTER); + //progress bar + mProgressBar = new JProgressBar(); + add(mProgressBar, BorderLayout.SOUTH); //file chooser fc = new JFileChooser(); fc.setFileFilter(new FileFilter()); @@ -123,7 +126,6 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList fcCheckBox.setSelected(true); fc.setAccessory(fcCheckBox); - pack(); setVisible(true); } @@ -154,36 +156,50 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList * @author ricky barrette */ private boolean exportToCSV() { - if(fc.showDialog(SearchDialog.this, "Export") == JFileChooser.APPROVE_OPTION){ - //prep the data for proper csv format - StringBuffer sb = new StringBuffer("Order Number,Time & date,Product Name,Order Amount,Amount Charged,Financial Status,Fulfillment Status,Customer Name,Customer Email"); - Scanner scan = new Scanner(mOrderPanel.getText()); - String[] parts; - String line; - while(scan.hasNext()){ - line = scan.nextLine(); - parts = line.split(", "); - try { - sb.append(parts[0]+","+parts[1]+","+parts[2]+","+parts[3]+","+parts[4]+","+parts[5]+","+parts[6]+","+parts[7]+","+parts[8]+"\n"); - } catch (Exception e) { - sb.append(line+"\n"); + if(fc.showDialog(SearchPanel.this, "Export") == JFileChooser.APPROVE_OPTION){ + int write = 0; + + //file exists dialog + if(fc.getSelectedFile().exists()){ + //default icon, custom title + write = JOptionPane.showConfirmDialog( + mFrame, + "Do you want to overwrite"+ fc.getSelectedFile().toString(), + "Overwrite?", + JOptionPane.YES_NO_OPTION); + } + + if(write == 0){ + //prep the data for proper csv format + StringBuffer sb = new StringBuffer("Order Number,Time & date,Product Name,Order Amount,Amount Charged,Financial Status,Fulfillment Status,Customer Name,Customer Email,Customer Country"); + Scanner scan = new Scanner(mOrderPanel.getText()); + String[] parts; + String line; + while(scan.hasNext()){ + line = scan.nextLine(); + parts = line.split(", "); + try { + sb.append(parts[0]+","+parts[1]+","+parts[2]+","+parts[3]+","+parts[4]+","+parts[5]+","+parts[6]+","+parts[7]+","+parts[8]+","+parts[9]+"\n"); + } catch (Exception e) { + sb.append(line+"\n"); + } } + //write to the selceted file + try { + FileOutputStream theFile; + if (fcCheckBox.isSelected()) + theFile = new FileOutputStream(new File(fc.getSelectedFile().toString()+".csv")); + else + theFile = new FileOutputStream(fc.getSelectedFile()); + theFile.write(sb.toString().getBytes()); + theFile.flush(); + theFile.close(); + } catch(IOException e) { + e.printStackTrace(); + return false; + } + return true; } - //write to the selceted file - try { - FileOutputStream theFile; - if (fcCheckBox.isSelected()) - theFile = new FileOutputStream(new File(fc.getSelectedFile().toString()+".csv")); - else - theFile = new FileOutputStream(fc.getSelectedFile()); - theFile.write(sb.toString().getBytes()); - theFile.flush(); - theFile.close(); - } catch(IOException e) { - e.printStackTrace(); - return false; - } - return true; } return false; } @@ -200,7 +216,7 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList public void run() { mProgressBar.setString("Searching for: "+search); mProgressBar.setStringPainted(true); - MainWindow.db.setOnProgressListerner(SearchDialog.this); + MainWindow.db.setOnProgressListerner(SearchPanel.this); ArrayList list = null; try { @@ -222,14 +238,14 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList mProgressBar.setMaximum(mProgressBar.getMaximum() + mListSize); isProcessing = true; mProgressBar.setString("Processing Order: "+ 1 +" of "+ mListSize); - pack(); + mFrame.pack(); - mOrderPanel.setOnProgressListerner(SearchDialog.this); + mOrderPanel.setOnProgressListerner(SearchPanel.this); mOrderPanel.displayOrders(list); isProcessing = false; - pack(); + mFrame.pack(); } }); } @@ -248,7 +264,7 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList progress++; if(mProgressBar.isIndeterminate()) { mProgressBar.setIndeterminate(false); - pack(); + mFrame.pack(); } if(isProcessing){ mProgressBar.setString("Processing Order: "+ mListSize +" of "+ progress); diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllPanel.java similarity index 58% rename from Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java rename to Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllPanel.java index 549edc6..e9f0773 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/ShowAllPanel.java @@ -15,41 +15,50 @@ import java.sql.SQLException; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JPanel; 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, ProgressListener { +public class ShowAllPanel extends JPanel implements ActionListener, ProgressListener { private static final long serialVersionUID = -8416144493079733535L; private JProgressBar mProgressBar; private OrderPane mOutput; + private JFrame mFrame; /** * Creates a new ShowAllDialog */ - public ShowAllDialog(){ - super(); - setTitle("Show All Orders"); - setIconImage(new ImageIcon(getClass().getResource("/database.png")).getImage()); + public ShowAllPanel(final JFrame frame){ + super(new BorderLayout()); + mFrame = frame; - JButton ok = new JButton("Ok", new ImageIcon(getClass().getResource("/accept.png"))); +// setTitle("Show All Orders"); +// setIconImage(new ImageIcon(getClass().getResource("/database.png")).getImage()); + + JButton ok = new JButton("Refresh", new ImageIcon(getClass().getResource("/process.png"))); ok.addActionListener(this); mOutput = new OrderPane(); mProgressBar = new JProgressBar(); - getContentPane().add(mProgressBar, BorderLayout.SOUTH); - this.getContentPane().add(mOutput, BorderLayout.CENTER); - this.getContentPane().add(ok, BorderLayout.NORTH); + add(mProgressBar, BorderLayout.SOUTH); + add(mOutput, BorderLayout.CENTER); + add(ok, BorderLayout.NORTH); mProgressBar.setString("Loading from Database"); mProgressBar.setStringPainted(true); MainWindow.db.setOnProgressListerner(this); - pack(); + frame.pack(); + + + setVisible(true); + } + + @Override + public void actionPerformed(ActionEvent arg0) { java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Runnable() { public void run() { try { @@ -64,42 +73,9 @@ public class ShowAllDialog extends JFrame implements ActionListener, ProgressLis // TODO Auto-generated catch block e.printStackTrace(); } - pack(); + mFrame.pack(); } }); - - setVisible(true); - } - - /** - * Creates a new ShowAllDialog - */ - public ShowAllDialog(String title, String body){ - super(); - setTitle(title); - setIconImage(new ImageIcon(getClass().getResource("/info.png")).getImage()); - - JButton ok = new JButton("Ok", new ImageIcon(getClass().getResource("/accept.png"))); - ok.addActionListener(this); - - JScrollPane scrollPane = new JScrollPane(); - - final JTextArea results = new JTextArea(); - scrollPane.setViewportView(results); - - results.setEditable(false); - results.setText(body); - - this.getContentPane().add(scrollPane, BorderLayout.CENTER); - this.getContentPane().add(ok, BorderLayout.SOUTH); - pack(); - setVisible(true); - } - - - @Override - public void actionPerformed(ActionEvent arg0) { - this.dispose(); } @Override @@ -107,7 +83,7 @@ public class ShowAllDialog extends JFrame implements ActionListener, ProgressLis mProgressBar.setMaximum(max); mProgressBar.setValue(progress); if(progress >= mProgressBar.getMaximum()){ - this.pack(); + mFrame.pack(); mProgressBar.setString("Done"); } } diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UncaughtExceptionHandler.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UncaughtExceptionHandler.java index 07eeb4e..c05aead 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UncaughtExceptionHandler.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UncaughtExceptionHandler.java @@ -6,7 +6,7 @@ */ package com.TwentyCodes.java.OrderProcessor; -import com.TwentyCodes.java.OrderProcessor.UI.ShowAllDialog; +import com.TwentyCodes.java.OrderProcessor.UI.ExceptionReportGUI; /** * An exception handler used to help report bugs in our applications @@ -37,7 +37,7 @@ public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExcept */ @Override public void uncaughtException(Thread t, Throwable e) { - new ShowAllDialog("We're Sorry....", getDebugReport(e)); + new ExceptionReportGUI(getDebugReport(e)); mDefaultUEH.uncaughtException(t,e); } diff --git a/Order Processor/version infomation/changelog b/Order Processor/version infomation/changelog index e69de29..5e0b45b 100644 --- a/Order Processor/version infomation/changelog +++ b/Order Processor/version infomation/changelog @@ -0,0 +1,10 @@ +1.0.0 b 28 + +fixed the .CSV file parsing with an external lib. + +1.0.1 b 29 + +created a single window with a tabbed layout for a more fluid experience. +added an overwrite file dialog. +added the customer country to the order object. +updated .CSV export diff --git a/Order Processor/version infomation/version b/Order Processor/version infomation/version index 073ca47..e29e26a 100644 --- a/Order Processor/version infomation/version +++ b/Order Processor/version infomation/version @@ -1 +1 @@ -0.12.0 b 27 \ No newline at end of file +1.0.0 b 29 \ No newline at end of file