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.Profile;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.ci.form.editor.ProfileEditor;
import rocks.inspectit.ui.rcp.ci.form.input.ProfileEditorInput;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
/**
* Job for loading of the profile from the CMR and opening the profile editor.
*
* @author Ivan Senic
*
*/
public class OpenProfileJob extends Job {
/**
* {@link CmrRepositoryDefinition}.
*/
private CmrRepositoryDefinition cmrRepositoryDefinition;
/**
* Profile id.
*/
private String profileId;
/**
* Page to open editor in.
*/
private IWorkbenchPage page;
/**
* @param cmrRepositoryDefinition
* {@link CmrRepositoryDefinition}
* @param profileId
* Profile id.
* @param page
* Page to open editor in.
*/
public OpenProfileJob(CmrRepositoryDefinition cmrRepositoryDefinition, String profileId, IWorkbenchPage page) {
super("Loading profile..");
this.cmrRepositoryDefinition = cmrRepositoryDefinition;
this.profileId = profileId;
this.page = page;
setUser(true);
}
/**
* {@inheritDoc}
*/
@Override
protected IStatus run(IProgressMonitor monitor) {
if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) {
return Status.CANCEL_STATUS;
}
try {
Profile profile = cmrRepositoryDefinition.getConfigurationInterfaceService().getProfile(profileId);
final ProfileEditorInput profileEditorInput = new ProfileEditorInput(profile, cmrRepositoryDefinition);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
page.openEditor(profileEditorInput, ProfileEditor.ID, true);
} catch (PartInitException e) {
InspectIT.getDefault().createErrorDialog("Exception occurred opening the Profile editor.", e, -1);
}
}
});
return Status.OK_STATUS;
} catch (BusinessException e) {
return new Status(IStatus.OK, InspectIT.ID, "Exception occurred loading the profile from the CMR.", e);
}
}
}