import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
import org.apache.commons.net.ftp.FTPClient;
/**
*
* @author Dominik Sust
* @creation 11.05.2017 10:38:52
*/
public class UploadWorker extends SwingWorker<Void, Void>
{
private MyTableModel tablemodel;
private String dirName;
private JProgressBar progressbar;
public UploadWorker( MyTableModel tablemodel, String directory, JProgressBar progressbar )
{
this.progressbar = progressbar;
this.tablemodel = tablemodel;
this.dirName = directory;
if ( dirName == null || dirName.isEmpty() )
{
SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmss" );
dirName = sdf.format( new java.util.Date() );
}
progressbar.setMaximum( tablemodel.getRowCount() );
}
@Override
protected Void doInBackground() throws Exception
{
FTPClient client = new FTPClient();
FileInputStream fis = null;
//Status setzen
tablemodel.setStatusForAll( Constants.UPLOAD_QUEUE );
try
{
client.connect( Constants.FTP_URL );
client.login( Constants.FTP_USER, Constants.FTP_PW );
client.makeDirectory( dirName );
client.changeWorkingDirectory( dirName );
for ( int row = 0; row < tablemodel.getRowCount(); row++ )
{
if ( row > 0 )
{
progressbar.setValue( row );
progressbar.setString( Math.round((double)row / (double)tablemodel.getRowCount() * 100) + "%" );
}
Dataset dataset = tablemodel.getDataset( row );
dataset.setStatus( Constants.UPLOAD_IN_PROGRESS);
tablemodel.fireTableRowsUpdated( row, row );
fis = new FileInputStream( dataset.getFile() );
if (client.storeFile( dataset.getFile().getName(), fis))
{
dataset.setStatus( Constants.UPLOAD_SUCCESS);
}
else
{
dataset.setStatus( Constants.UPLOAD_ERROR);
}
tablemodel.fireTableRowsUpdated( row, row );
fis.close();
}
progressbar.setValue( tablemodel.getRowCount() );
progressbar.setString( "100%" );
}
catch ( IOException e )
{
JOptionPane.showMessageDialog( null, "Fehler: \n" + e, "Fehler", JOptionPane.ERROR_MESSAGE );
}
finally
{
client.logout();
client.disconnect();
if ( fis != null )
{
fis.close();
}
}
return null;
}
}