package rocks.inspectit.ui.rcp.ci.job;
import java.util.Collection;
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.Environment;
import rocks.inspectit.shared.cs.ci.Profile;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.ci.form.editor.EnvironmentEditor;
import rocks.inspectit.ui.rcp.ci.form.input.EnvironmentEditorInput;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
/**
* Job for loading of the environment from the CMR and opening the environment editor.
*
* @author Ivan Senic
*
*/
public class OpenEnvironmentJob extends Job {
/**
* {@link CmrRepositoryDefinition}.
*/
private CmrRepositoryDefinition cmrRepositoryDefinition;
/**
* Environment id.
*/
private String environmentId;
/**
* Page to open editor in.
*/
private IWorkbenchPage page;
/**
* @param cmrRepositoryDefinition
* {@link CmrRepositoryDefinition}
* @param environmentId
* Profile id.
* @param page
* Page to open editor in.
*/
public OpenEnvironmentJob(CmrRepositoryDefinition cmrRepositoryDefinition, String environmentId, IWorkbenchPage page) {
super("Loading environment..");
this.cmrRepositoryDefinition = cmrRepositoryDefinition;
this.environmentId = environmentId;
this.page = page;
setUser(true);
}
/**
* {@inheritDoc}
*/
@Override
protected IStatus run(IProgressMonitor monitor) {
if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) {
return Status.CANCEL_STATUS;
}
try {
Environment environment = cmrRepositoryDefinition.getConfigurationInterfaceService().getEnvironment(environmentId);
Collection<Profile> profiles = cmrRepositoryDefinition.getConfigurationInterfaceService().getAllProfiles();
final EnvironmentEditorInput environmentEditorInput = new EnvironmentEditorInput(environment, profiles, cmrRepositoryDefinition);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
page.openEditor(environmentEditorInput, EnvironmentEditor.ID, true);
} catch (PartInitException e) {
InspectIT.getDefault().createErrorDialog("Exception occurred opening the Environment editor.", e, -1);
}
}
});
return Status.OK_STATUS;
} catch (BusinessException e) {
return new Status(IStatus.ERROR, InspectIT.ID, "Exception occurred loading the environment from the CMR.", e);
}
}
}