packagecom.test.util;importjava.awt.Component;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjavax.swing.JFileChooser;importjavax.swing.JOptionPane;importjavax.swing.JTable;importjavax.swing.filechooser.FileFilter;importjavax.swing.table.TableModel;importjxl.Workbook;importjxl.WorkbookSettings;importjxl.write.Label;importjxl.write.WritableCellFormat;importjxl.write.WritableFont;importjxl.write.WritableSheet;importjxl.write.WritableWorkbook;publicclassJTableExportCommand{privateJTable table=null;privateComponent parentComp=null;publicJTableExportCommand( JTable table, Component parentComp ){this.table=table;this.parentComp=parentComp;
}publicbooleanexecute(){if( table==null){returnfalse;
}
File file=showSaveDialog();if( file!=null){if( file.exists() ){if( JOptionPane.showConfirmDialog( table,"The file already exists, do you want to replace it?")!=JOptionPane.YES_OPTION ){returnfalse;
}
}if( getExtension( file ).equalsIgnoreCase("csv") ){returnCSVFileWriter.writeTableModel( table, file );
}else{returnXMLFileWriter.writeTableModel( table, file );
}
}returnfalse;
}privateFile showSaveDialog(){
JFileChooser chooser=newJFileChooser();
chooser.removeChoosableFileFilter( chooser.getAcceptAllFileFilter() );
chooser.addChoosableFileFilter(newCSVFileFilter() );
chooser.addChoosableFileFilter(newXMLFileFilter() );
chooser.setFileSelectionMode( JFileChooser.FILES_ONLY );intret=chooser.showSaveDialog( parentComp );if( ret==JFileChooser.APPROVE_OPTION ){
File f=chooser.getSelectedFile();
FileFilter filter=chooser.getFileFilter();if( filterinstanceofCSVFileFilter ){
String extension=getExtension( f );if( extension==null||!extension.equalsIgnoreCase( ( (CSVFileFilter)filter ).getExtension() ) ){returnnewFile( f.getAbsolutePath()+"."+( (CSVFileFilter)filter ).getExtension() );
}
}else{
String extension=getExtension( f );if( extension==null||!extension.equalsIgnoreCase( ( (XMLFileFilter)filter ).getExtension() ) ){returnnewFile( f.getAbsolutePath()+"."+( (XMLFileFilter)filter ).getExtension() );
}
}returnf;
}returnnull;
}staticclassCSVFileFilterextendsFileFilter{publicbooleanaccept( File f ){if( f!=null){if( f.isDirectory() ){returntrue;
}if( getExtension().equalsIgnoreCase( JTableExportCommand.getExtension( f ) ) ){returntrue;
}
}returnfalse;
}publicString getDescription(){return"csv format";
}publicString getExtension(){return"csv";
}
}staticclassCSVFileWriter{publicstaticbooleanwriteTableModel( JTable fTable, File file ){if( fTable==null){returnfalse;
}
TableModel tableModel=fTable.getModel();
StringBuffer fileBuf=newStringBuffer("");introwCount=tableModel.getRowCount();intcolumnCount=tableModel.getColumnCount();for(intcol=0; col
fileBuf.append( tableModel.getColumnName( col ) );
fileBuf.append(",");
}
fileBuf.append("\n");for(introw=0; row
fileBuf.append( tableModel.getValueAt( row, col ).toString() );if( col!=columnCount-1){
fileBuf.append(",");
}
}
fileBuf.append("\n");
}try{
FileWriter writer=newFileWriter( file );
writer.write( fileBuf.toString() );
writer.close();returntrue;
}catch(IOException e){
e.printStackTrace( System.err );returnfalse;
}
}
}staticclassXMLFileFilterextendsFileFilter{publicbooleanaccept( File f ){if( f!=null){if( f.isDirectory() ){returntrue;
}if( getExtension().equalsIgnoreCase( JTableExportCommand.getExtension( f ) ) ){returntrue;
}
}returnfalse;
}publicString getDescription(){return"xls format";
}publicString getExtension(){return"xls";
}
}staticclassXMLFileWriter{publicstaticbooleanwriteTableModel( JTable fTable, File file ){if( fTable==null){returnfalse;
}
TableModel tableModel=fTable.getModel();introwCount=tableModel.getRowCount();intcolumnCount=tableModel.getColumnCount();
WorkbookSettings ws=newWorkbookSettings();try{
WritableWorkbook workbook=Workbook.createWorkbook( file, ws );
String name=fTable.getName()!=null?fTable.getName() :"sheet1";
WritableSheet sheet=workbook.createSheet( name,0);//header format.WritableFont arial10ptBold=newWritableFont( WritableFont.ARIAL,10, WritableFont.BOLD );
WritableCellFormat headerFormat=newWritableCellFormat( arial10ptBold );//WritableCellFormat wrappedformat=newWritableCellFormat( WritableWorkbook.ARIAL_10_PT );
wrappedformat.setWrap(true);//write the table headerfor(intcol=0; col
sheet.addCell(newLabel( col,0, tableModel.getColumnName( col ), headerFormat ) );
}//write the data.for(introw=0; row
sheet.addCell(newLabel( col, row+1, tableModel.getValueAt( row, col ).toString(), wrappedformat ) );
}
}
workbook.write();
workbook.close();
}catch(Exception ioe){
ioe.printStackTrace();returnfalse;
}returntrue;
}
}publicstaticString getExtension( File f ){
String ext=null;
String s=f.getName();inti=s.lastIndexOf('.');if( i>0&&i
ext=s.substring( i+1).toLowerCase();
}returnext;
}
}