/*******************************************************************************
* Copyright (c) 2010 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.handlers.project;
import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jubula.client.archive.JsonStorage;
import org.eclipse.jubula.client.core.Activator;
import org.eclipse.jubula.client.core.persistence.GeneralStorage;
import org.eclipse.jubula.client.core.persistence.PMException;
import org.eclipse.jubula.client.core.progress.IProgressConsole;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.controllers.PMExceptionHandler;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
import org.eclipse.jubula.tools.internal.exception.ProjectDeletedException;
/**
* @author BREDEX GmbH
* @created Jan 22, 2010
*/
public final class ExportFileOperation implements
IRunnableWithProgress {
/** the filename to use for the exported file */
private final String m_fileName;
/** the console to use to display progress and error messages */
private IProgressConsole m_console;
/**
* @param fileName The filename to use for the exported file.
* @param console
*/
public ExportFileOperation(String fileName, IProgressConsole console) {
m_fileName = fileName;
m_console = console;
}
/**
* {@inheritDoc}
*/
public void run(IProgressMonitor monitor) {
if (m_fileName != null) {
try {
m_console.writeStatus(new Status(IStatus.INFO,
Activator.PLUGIN_ID, Messages
.RefreshProjectOperationRefreshing));
GeneralStorage gstorage = GeneralStorage.getInstance();
gstorage.validateProjectExists(gstorage.getProject());
final AtomicReference<IStatus> statusOfRefresh =
new AtomicReference<IStatus>();
Plugin.getDisplay().syncExec(new Runnable() {
public void run() {
RefreshProjectHandler rph =
new RefreshProjectHandler();
statusOfRefresh.set((IStatus)rph.executeImpl(null));
}
});
// Only proceed with the export if the refresh was
// successful.
if (statusOfRefresh.get() != null
&& statusOfRefresh.get().isOK()) {
m_console.writeStatus(new Status(IStatus.INFO,
Activator.PLUGIN_ID, Messages
.ExportFileActionExporting));
SubMonitor subMonitor = SubMonitor.convert(monitor,
Messages.ExportFileActionExporting, 1);
JsonStorage.save(gstorage.getProject(), m_fileName,
true, subMonitor.newChild(1), m_console);
}
} catch (final PMException e) {
ErrorHandlingUtil.createMessageDialog(e, null, null);
} catch (final ProjectDeletedException e) {
PMExceptionHandler.handleProjectDeletedException();
} finally {
monitor.done();
Plugin.stopLongRunning();
}
} else {
monitor.done();
}
}
}