/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.downloadmanager;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.exception.ConnectionException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.List;
import de.cismet.cids.server.search.builtin.CsvExportSearchStatement;
import de.cismet.tools.gui.downloadmanager.AbstractDownload;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public class CsvExportSearchDownload extends AbstractDownload {
//~ Instance fields --------------------------------------------------------
private final CsvExportSearchStatement search;
private final List<String> header;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new CsvExportSearchDownload object.
*
* @param search DOCUMENT ME!
* @param title DOCUMENT ME!
* @param directory DOCUMENT ME!
* @param filename DOCUMENT ME!
* @param header DOCUMENT ME!
*/
public CsvExportSearchDownload(final CsvExportSearchStatement search,
final String title,
final String directory,
final String filename,
final List<String> header) {
this.search = search;
this.title = title;
this.directory = directory;
this.header = header;
status = State.WAITING;
determineDestinationFile(filename, ".csv");
}
//~ Methods ----------------------------------------------------------------
@Override
public void run() {
if (status != State.WAITING) {
return;
}
status = State.RUNNING;
stateChanged();
final Collection<String> csvColl;
try {
csvColl = (Collection)SessionManager.getProxy()
.customServerSearch(SessionManager.getSession().getUser(), search);
} catch (final ConnectionException ex) {
error(ex);
return;
}
if ((csvColl == null) || (csvColl.isEmpty())) {
log.info("Downloaded content seems to be empty..");
if (status == State.RUNNING) {
status = State.COMPLETED;
stateChanged();
}
return;
}
PrintWriter writer = null;
try {
writer = new PrintWriter(fileToSaveTo);
if (header != null) {
final String headerCsv = CsvExportSearchStatement.implode(header.toArray(new String[0]),
CsvExportSearchStatement.CSV_SEPARATOR);
writer.println(headerCsv);
}
for (final String csvLine : csvColl) {
writer.println(csvLine);
}
} catch (final Exception ex) {
log.warn("Couldn't write downloaded content to file '" + fileToSaveTo + "'.", ex);
error(ex);
return;
} finally {
if (writer != null) {
try {
writer.flush();
writer.close();
} catch (Exception e) {
}
}
}
if (status == State.RUNNING) {
status = State.COMPLETED;
stateChanged();
}
}
}