package rocks.inspectit.ui.rcp.wizard;
import java.io.IOException;
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.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.IProgressConstants;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.all.serializer.SerializationException;
import rocks.inspectit.shared.all.util.ObjectUtils;
import rocks.inspectit.shared.cs.storage.IStorageData;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.InspectITImages;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.storage.InspectITStorageManager;
import rocks.inspectit.ui.rcp.view.impl.StorageManagerView;
import rocks.inspectit.ui.rcp.wizard.page.ImportStorageInfoPage;
import rocks.inspectit.ui.rcp.wizard.page.ImportStorageSelectPage;
/**
* Wizard for importing the storages.
*
* @author Ivan Senic
*
*/
public class ImportStorageWizard extends Wizard implements INewWizard {
/**
* {@link ImportStorageSelectPage}.
*/
private ImportStorageSelectPage importStorageSelectPage;
/**
* {@link ImportStorageInfoPage}.
*/
private ImportStorageInfoPage importStorageInfoPage;
/**
* Default constructor.
*/
public ImportStorageWizard() {
this.setWindowTitle("Import Storage");
this.setDefaultPageImageDescriptor(InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_WIZBAN_IMPORT));
}
/**
* {@inheritDoc}
*/
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
}
/**
* {@inheritDoc}
*/
@Override
public void addPages() {
importStorageSelectPage = new ImportStorageSelectPage();
addPage(importStorageSelectPage);
importStorageInfoPage = new ImportStorageInfoPage();
addPage(importStorageInfoPage);
}
/**
* {@inheritDoc}
*/
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (ObjectUtils.equals(page, importStorageSelectPage)) {
importStorageInfoPage.setFileName(importStorageSelectPage.getFileName());
importStorageInfoPage.setImportLocally(importStorageSelectPage.isImportLocally());
importStorageInfoPage.setCmrRepositoryDefinition(importStorageSelectPage.getCmrRepositoryDefinition());
importStorageInfoPage.update();
}
return super.getNextPage(page);
}
/**
* {@inheritDoc}
*/
@Override
public IWizardPage getPreviousPage(IWizardPage page) {
if (ObjectUtils.equals(page, importStorageInfoPage)) {
importStorageInfoPage.reset();
}
return super.getPreviousPage(page);
}
/**
* {@inheritDoc}
*/
@Override
public boolean canFinish() {
if (getContainer().getCurrentPage().equals(importStorageSelectPage)) {
return false;
} else {
if (!importStorageSelectPage.isPageComplete()) {
return false;
}
if (!importStorageInfoPage.isPageComplete()) {
return false;
}
}
return true;
}
/**
* {@inheritDoc}
*/
@Override
public boolean performFinish() {
final String fileName = importStorageSelectPage.getFileName();
final CmrRepositoryDefinition cmrRepositoryDefinition = importStorageSelectPage.getCmrRepositoryDefinition();
boolean importLocally = importStorageSelectPage.isImportLocally();
if (importLocally) {
Job importStorageJob = new Job("Import Storage") {
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Importing data..", IProgressMonitor.UNKNOWN);
try {
InspectIT.getDefault().getInspectITStorageManager().unzipStorageData(fileName);
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart storageManagerView = activePage.findView(StorageManagerView.VIEW_ID);
if (storageManagerView instanceof StorageManagerView) {
((StorageManagerView) storageManagerView).refreshWithoutCmrCall();
}
InspectIT.getDefault().createInfoDialog("Storage successfully imported.", -1);
}
});
} catch (BusinessException | SerializationException | IOException e) {
return new Status(IStatus.ERROR, InspectIT.ID, "Exception occurred trying to import the storage via file.", e);
}
monitor.done();
return Status.OK_STATUS;
}
};
importStorageJob.setUser(true);
importStorageJob.setProperty(IProgressConstants.ICON_PROPERTY, InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_IMPORT));
importStorageJob.schedule();
} else {
Job importStorageJob = new Job("Import Storage") {
@Override
protected IStatus run(IProgressMonitor monitor) {
SubMonitor subMonitor = SubMonitor.convert(monitor);
subMonitor.setWorkRemaining(10); // 9 units for uploading, 1 for unpacking
InspectITStorageManager storageManager = InspectIT.getDefault().getInspectITStorageManager();
try {
storageManager.uploadZippedStorage(fileName, cmrRepositoryDefinition, subMonitor.newChild(9));
} catch (final Exception e) {
return new Status(IStatus.ERROR, InspectIT.ID, "Storage data was not successfully uploaded to the CMR. Import failed.", e);
}
IProgressMonitor unpackMonitor = subMonitor.newChild(1);
unpackMonitor.setTaskName("Unpacking data..");
try {
IStorageData storageData = storageManager.getStorageDataFromZip(fileName);
cmrRepositoryDefinition.getStorageService().unpackUploadedStorage(storageData);
} catch (final BusinessException e) {
return new Status(IStatus.ERROR, InspectIT.ID, "Storage data was not successfully unpacked on the CMR. Import failed.", e);
}
unpackMonitor.done();
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart storageManagerView = activePage.findView(StorageManagerView.VIEW_ID);
if (storageManagerView instanceof StorageManagerView) {
((StorageManagerView) storageManagerView).refresh(cmrRepositoryDefinition);
}
InspectIT.getDefault().createInfoDialog("Storage data was successfully imported to the CMR.", -1);
}
});
monitor.done();
return Status.OK_STATUS;
}
};
importStorageJob.setUser(true);
importStorageJob.setProperty(IProgressConstants.ICON_PROPERTY, InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_IMPORT));
importStorageJob.schedule();
}
return true;
}
}