package rocks.inspectit.ui.rcp.repository.service;
import java.util.Objects;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import rocks.inspectit.shared.cs.cmr.service.IBusinessContextManagementService;
import rocks.inspectit.shared.cs.cmr.service.IGlobalDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.cache.CachedDataService;
import rocks.inspectit.ui.rcp.editor.root.IRootEditor;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
/**
* The {@link CachedDataService} to be used on the UI. When refresh of idents is triggered, all
* editors on the given {@link CmrRepositoryDefinition} are refreshed so that correct data is
* displayed.
*
* @author Ivan Senic
*
*/
public class RefreshEditorsCachedDataService extends CachedDataService {
/**
* Repository definition.
*/
private CmrRepositoryDefinition repositoryDefinition;
/**
* @param globalDataAccessService
* {@link IGlobalDataAccessService}
* @param businessContextService
* {@link IBusinessContextManagementService}
* @param repositoryDefinition
* {@link RepositoryDefinition}
*/
public RefreshEditorsCachedDataService(IGlobalDataAccessService globalDataAccessService, IBusinessContextManagementService businessContextService, CmrRepositoryDefinition repositoryDefinition) {
super(globalDataAccessService, businessContextService);
this.repositoryDefinition = repositoryDefinition;
}
/**
* {@inheritDoc}
*/
@Override
protected void postRefreshIdents() {
// execute refresh of all opened editors since data is not valid any more
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorReference[] editors = workbenchWindow.getActivePage().getEditorReferences();
for (IEditorReference editor : editors) {
IEditorPart editorPart = editor.getEditor(false);
if (editorPart instanceof IRootEditor) {
IRootEditor rootEditor = (IRootEditor) editorPart;
if (Objects.equals(rootEditor.getInputDefinition().getRepositoryDefinition(), repositoryDefinition)) {
rootEditor.doRefresh();
}
}
}
}
});
}
}