package rocks.inspectit.ui.rcp.ci.job;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.ci.form.editor.ApplicationDefinitionEditor;
import rocks.inspectit.ui.rcp.ci.form.input.ApplicationDefinitionEditorInput;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
/**
* This Job opens the {@link ApplicationDefinitionEditor} for the selected application definition.
*
* @author Alexander Wert
*
*/
public class OpenApplicationDefinitionJob extends Job {
/**
* {@link CmrRepositoryDefinition} the target {@link ApplicationDefinition} is defined in.
*/
private final CmrRepositoryDefinition cmrRepositoryDefinition;
/**
* Application id.
*/
private final int applicationId;
/**
* {@link IWorkbenchPage} to open editor in.
*/
private final IWorkbenchPage page;
/**
* Default constructor.
*
* @param cmrRepositoryDefinition
* {@link CmrRepositoryDefinition} the target {@link ApplicationDefinition} is
* defined in.
* @param applicationId
* the id of the {@link ApplicationDefinition} to open the editor for.
* @param page
* {@link IWorkbenchPage} to open editor in.
*/
public OpenApplicationDefinitionJob(CmrRepositoryDefinition cmrRepositoryDefinition, int applicationId, IWorkbenchPage page) {
super("Loading application..");
this.cmrRepositoryDefinition = cmrRepositoryDefinition;
this.applicationId = applicationId;
this.page = page;
setUser(true);
}
/**
* {@inheritDoc}
*/
@Override
protected IStatus run(IProgressMonitor monitor) {
if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) {
return Status.CANCEL_STATUS;
}
ApplicationDefinition application;
try {
application = cmrRepositoryDefinition.getConfigurationInterfaceService().getApplicationDefinition(applicationId);
} catch (BusinessException e) {
return new Status(IStatus.ERROR, InspectIT.ID, "Exception occurred loading the application from the CMR.", e);
}
final ApplicationDefinitionEditorInput applicationDefinitionEditorInput = new ApplicationDefinitionEditorInput(application, cmrRepositoryDefinition);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
page.openEditor(applicationDefinitionEditorInput, ApplicationDefinitionEditor.ID, true);
} catch (PartInitException e) {
InspectIT.getDefault().createErrorDialog("Exception occurred opening the Application Definition editor.", e, -1);
}
}
});
return Status.OK_STATUS;
}
}