From 239218f6d4f1eb3646f7d1dd106d7e237984bb00 Mon Sep 17 00:00:00 2001 From: ricky barrette Date: Thu, 13 Jan 2011 17:19:36 +0000 Subject: [PATCH] added export feature to search, so we can save *.cvs files to be used as reports --- Order Processor/images/floppy_disc.png | Bin 0 -> 1378 bytes .../java/OrderProcessor/UI/OrderPane.java | 4 + .../java/OrderProcessor/UI/SearchDialog.java | 110 +++++++++++++----- 3 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 Order Processor/images/floppy_disc.png diff --git a/Order Processor/images/floppy_disc.png b/Order Processor/images/floppy_disc.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0447c9703d2a29bbb280378883e54b70c2798d GIT binary patch literal 1378 zcmV-o1)chdP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ==t)FDRCwB~m&=PBRTRd5_ulHq^kkAz8Bt?INz{eL5HT1P715oz5p^es2yO&H z-RM7{TUWXhUFb$c6x{j5g=C>dd<4ydOvYp;$vo_t?y9c3=NuPRUELGoXtWR9zTLN~ z`h530-#O=&yZ))yU$|@EP0vlW8$C0OSTxB89lSG~M}aFk&Bol0j#D!#lWJ^f4&1^@ zf6xEu?{C*r7ZD=;>Tj1f_ zuHo^6d-yN*+9yBp?JBebs42JZZr%LO7r%Uvgz(7zJy$O!sv6ICQ@%glF9DoggA-?9 zY8qN?*3EPG&TU&d`RwP@96!5GBRKLX?B8`6ckH^IcGEoD;(F`8%JTCE&glc$N76{&L3E=%>DIXtMV>)rHZ)7~bFRKAGf~Ogv z860>JQ9eJq!adi`9em~OFP=#ZL)5@I@UEOM(WY7rW;$&;!GRjBM!1L|92f-eC`9@4 z=rY}bs5cv`$yMWjn6tlGcfjaca1Ifph$@KzqLcBzMK<6ZxQbl|cn{v=5;MvWOv;&a zwIiy1=VCYmQ$a;>fE7w1s)>P#S$U`ZSEmqMxwl>}^z&F>J9&PC-xdWQ93}#)V1|nY ztoDn^yGH*pCt1C?X7zxX%6{ew78 zEvIysdeHQc6}wFkFT}4NNQK5vI4p%q-qPR5-bov9?}7u9cG^;PLNTD;&}CcdK3QTy^A} zF(4%aW?G5QnS%4A{S;y(i^}{;N*qW<`!HQcYOb9Qb)*+tt3=ptj-KDdfRr~HAX&x} zJ017!o@2E)AkDYo|5bmmP1CqFg6Hu33a@^33JI-E>0Z@=l0Gq*(Tr#By@ji;*ik3p zB<#^UBOm>^$PecQ0yPt5DV7m^35KbV53+wuze}o=Kq~~$qU^du4d}2Cnc{Jr>t^)R zoY|?yL;;v{b@dz9L4uiy2o7aqpe%PYOobTZL;>LaDE8(yi%>*CjMHl=J}PQT5pxQ$ ziM3;r>X4!aVO)e&V^~WIdcB+-7%ECpMB)Si`0)~4r}0=Cp6zC!imU2(EUE%EApqsM z^1=!Vi37T6K{w6oJQfj(LMH|QY;>@-p$5t@Bxc6S#sG~{y-FCWN{mWWCI&!~WJLW~ zHYB+y>;1f5bWTxKiWree0;t=vm7RB}fjp}9v!Y(dmkfvsGO-94(j03@>P8yKqiPYQ zj7wD@M3rc9vH(OjXTXqwUY4thmWiTPGZ1yc08}cLH=Vj%k`40IM}bBtHRwFktw0hT zViS5%FlD+G2;Nsh_vN|6Y>-go@9E;ny-ZE-LoM%nX}$TW+ujP;1YZ|uBunnp!kIq3 kqDSVNOhE&Hw-a literal 0 HcmV?d00001 diff --git a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java index 6adb181..e37df88 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/OrderPane.java @@ -79,6 +79,10 @@ public class OrderPane extends JScrollPane { updateTextPane("Possible sold:" + list.size(), TextStyle.BOLD); updateTextPane("Total sold: " + total, TextStyle.BOLD); } + + public String getText(){ + return mOutput.getText(); + } /** * adds the following string to the textpane 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 009fef3..4d5812a 100644 --- a/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java +++ b/Order Processor/src/com/TwentyCodes/java/OrderProcessor/UI/SearchDialog.java @@ -9,10 +9,10 @@ package com.TwentyCodes.java.OrderProcessor.UI; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; @@ -20,6 +20,7 @@ import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; @@ -28,6 +29,7 @@ import javax.swing.JTextField; import com.TwentyCodes.java.OrderProcessor.Date; import com.TwentyCodes.java.OrderProcessor.DatePickerListener; +import com.TwentyCodes.java.OrderProcessor.FileFilter; import com.TwentyCodes.java.OrderProcessor.InvalidDateFormatException; import com.TwentyCodes.java.OrderProcessor.Main; import com.TwentyCodes.java.OrderProcessor.Order; @@ -37,7 +39,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, ItemListener { +public class SearchDialog extends JFrame implements ActionListener, ProgressListener, MouseListener, DatePickerListener { private static final long serialVersionUID = 1750326106927701404L; private static final int END_DATE_RESULT = 1; @@ -50,8 +52,10 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList private OrderPane mOrderPanel; private JTextField mStartDateField; private JTextField mEndDateField; - private boolean isExclusive = false; private JCheckBox mExclusiveCheckBox; + private JButton mExportButton; + private JFileChooser fc; + private JCheckBox fcCheckBox; /** * Creates a new ShowAllMakeDialog @@ -77,7 +81,6 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList //exclusive check box mExclusiveCheckBox = new JCheckBox("Exclusive Search"); - mExclusiveCheckBox.addItemListener(this); panel.add(mExclusiveCheckBox); //start date @@ -99,6 +102,11 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList mOkButton.addActionListener(this); panel.add(mOkButton); + //export button + mExportButton = new JButton("Export", new ImageIcon(getClass().getResource("/floppy_disc.png"))); + panel.add(mExportButton); + mExportButton.addActionListener(this); + //progress bar mProgressBar = new JProgressBar(); getContentPane().add(mProgressBar, BorderLayout.SOUTH); @@ -107,6 +115,13 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList mOrderPanel = new OrderPane(); this.getContentPane().add(mOrderPanel, BorderLayout.CENTER); + //file chooser + fc = new JFileChooser(); + fc.setFileFilter(new FileFilter()); + fcCheckBox = new JCheckBox("Automatically append extention"); + fcCheckBox.setSelected(true); + fc.setAccessory(fcCheckBox); + pack(); setVisible(true); } @@ -119,16 +134,54 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList */ @Override public void actionPerformed(ActionEvent e) { - if(! mStartDateField.getText().isEmpty() && !mEndDateField.getText().isEmpty()) - try { - preformSearch(mTextField.getText(), new Date(mStartDateField.getText()), new Date(mEndDateField.getText())); - } catch (InvalidDateFormatException e1) { - e1.printStackTrace(); - } + if(e.getSource() == mExportButton) + exportToCSV(); else - preformSearch(mTextField.getText(), null, null); + if(! mStartDateField.getText().isEmpty() && !mEndDateField.getText().isEmpty()) + try { + preformSearch(mTextField.getText(), new Date(mStartDateField.getText()), new Date(mEndDateField.getText())); + } catch (InvalidDateFormatException e1) { + e1.printStackTrace(); + } + else + preformSearch(mTextField.getText(), null, null); } + /** + * displays a JFileChooser dialog, and saves the current search results to an *.CSV file + * @return true is save was successfull + * @author ricky barrette + */ + private boolean exportToCSV() { + if(fc.showDialog(SearchDialog.this, "Export") == JFileChooser.APPROVE_OPTION){ + StringBuffer sb = new StringBuffer("Order Number, Time & date, Product Name, Order Amount, Amount Charged, Financial Status, Fulfillment Status, Customer Name, Customer Email"); + sb.append(mOrderPanel.getText()); + + 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; + } + + /** + * executes a concurrent database search + * @param search string + * @param start date + * @param end date + * @author ricky barrette + */ private void preformSearch(final String search, final Date start, final Date end) { java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Runnable() { public void run() { @@ -139,9 +192,9 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList ArrayList list = null; try { if((start != null) && (end != null)){ - list = MainWindow.db.search(search, start, end, isExclusive); + list = MainWindow.db.search(search, start, end, mExclusiveCheckBox.isSelected()); } else{ - list = MainWindow.db.search(search, isExclusive); + list = MainWindow.db.search(search, mExclusiveCheckBox.isSelected()); } } catch (SQLException e) { @@ -180,8 +233,6 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList if(Main.DEBUG) System.out.println("search progress = "+ progress); - - progress++; if(mProgressBar.isIndeterminate()) { mProgressBar.setIndeterminate(false); @@ -200,7 +251,12 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList } } - + /** + * called when either of the date fields are clicked + * (non-Javadoc) + * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) + * @author ricky barrette + */ @Override public void mouseClicked(MouseEvent e) { if(e.getSource() == mEndDateField){ @@ -240,6 +296,12 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList } + /** + * called when the date picker returns a vaid date + * (non-Javadoc) + * @see com.TwentyCodes.java.OrderProcessor.DatePickerListener#onDatePicked(int, com.TwentyCodes.java.OrderProcessor.Date) + * @author ricky barrette + */ @Override public void onDatePicked(int resultCode, Date date) { switch(resultCode){ @@ -252,16 +314,4 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList } } - - - @Override - public void itemStateChanged(ItemEvent e) { - if(e.getSource() == mExclusiveCheckBox) - if(e.getStateChange() == java.awt.event.ItemEvent.SELECTED) - isExclusive = true; - if(e.getStateChange() == java.awt.event.ItemEvent.DESELECTED) - isExclusive = false; - - } - -} +} \ No newline at end of file