/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.custom.switchon.wizards; import Sirius.navigator.connection.SessionManager; import org.apache.log4j.Logger; import org.openide.WizardDescriptor; import org.openide.util.Cancellable; import java.awt.Component; import java.awt.EventQueue; import java.io.File; import java.io.FileOutputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.concurrent.Future; import de.cismet.cids.custom.switchon.AbstractWizardPanel; import de.cismet.cids.custom.switchon.StatusPanel; import de.cismet.cids.custom.switchon.concurrent.SwitchonConcurrency; import de.cismet.cids.server.actions.ServerActionParameter; /** * DOCUMENT ME! * * @author martin.scholl@cismet.de * @version $Revision$, $Date$ */ public final class WizardPanelFileExportProgress extends AbstractWizardPanel implements Cancellable { //~ Static fields/initializers --------------------------------------------- private static final transient Logger LOG = Logger.getLogger(WizardPanelFileExportProgress.class); //~ Instance fields -------------------------------------------------------- private final transient Object lock; private transient Future exportTask; //~ Constructors ----------------------------------------------------------- /** * Creates a new TimeSeriesExportWizardPanelConvert object. */ public WizardPanelFileExportProgress() { this.lock = new Object(); } //~ Methods ---------------------------------------------------------------- @Override protected Component createComponent() { return new StatusPanel("CSV Export"); // NOI18N } @Override protected void read(final WizardDescriptor wizard) { synchronized (lock) { final File exportFile = (File)wizard.getProperty(WizardPanelFileExport.PROP_EXPORT_FILE); assert exportFile != null : "export file must not be null"; // NOI18N exportTask = SwitchonConcurrency.getSwitchonGeneralPurposePool().submit(new Runnable() { @Override public void run() { try { setStatusEDT(true, "Exporting content of Meta-Data Repository\n to CSV"); // NOI18N LOG.info("Exporting Meta-Data Repository to file '" + exportFile + "'"); final FileOutputStream fos = new FileOutputStream(exportFile); final ServerActionParameter zipParameter = new ServerActionParameter("zip", true); final Object zipFile = SessionManager.getProxy() .executeTask("csvExportAction", "SWITCHON", null, zipParameter); if (byte[].class.isAssignableFrom(zipFile.getClass()) || Byte[].class.isAssignableFrom(zipFile.getClass())) { LOG.info("Meta-Data Repository successfully exported to file '" + exportFile + "'"); fos.write((byte[])zipFile); fos.close(); setStatusEDT(false, "Meta-Data Repository successfully\n exported to CSV"); // NOI18N } else { final String message = "cannot convert zip object '" + zipFile.getClass() + "' to byte[]!"; throw new Exception(message); } synchronized (lock) { WizardPanelFileExportProgress.this.exportTask = null; } } catch (final Throwable ex) { LOG.error("Could not export Meta-Data Repository to CSV: " + ex.getMessage(), ex); // NOI18N setStatusEDT( false, "Could not export Meta-Data Repository to CSV:\n " + ex.getMessage()); if (ex instanceof Error) { throw (Error)ex; } } finally { changeSupport.fireChange(); } } }); } } @Override protected void store(final WizardDescriptor wizard) { // noop } @Override public boolean cancel() { synchronized (lock) { if (exportTask != null) { if (!exportTask.cancel(true)) { if (exportTask.isDone()) { // noop } else { LOG.warn("export task could not be cancelled"); // NOI18N return false; } } } return true; } } /** * DOCUMENT ME! * * @param busy DOCUMENT ME! * @param message DOCUMENT ME! */ private void setStatusEDT(final boolean busy, final String message) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ((StatusPanel)getComponent()).setBusy(busy); ((StatusPanel)getComponent()).setStatusMessage(message); } }); } }