/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.navigator.handlers;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.inject.Named;
import org.eclipse.core.resources.IProject;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.rf.ide.core.executor.RobotRuntimeEnvironment;
import org.robotframework.ide.eclipse.main.plugin.RedPlugin;
import org.robotframework.ide.eclipse.main.plugin.model.RobotProject;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.navigator.handlers.ReloadPythonModulesHandler.E4ReloadPythonModulesHandler;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotFormEditor;
import org.robotframework.red.commands.DIParameterizedHandler;
import org.robotframework.red.viewers.Selections;
public class ReloadPythonModulesHandler extends DIParameterizedHandler<E4ReloadPythonModulesHandler> {
public ReloadPythonModulesHandler() {
super(E4ReloadPythonModulesHandler.class);
}
public static class E4ReloadPythonModulesHandler {
@Execute
public void reloadProject(final @Named(Selections.SELECTION) IStructuredSelection selection) {
final List<IProject> projects = Selections.getAdaptableElements(selection, IProject.class);
final Set<RobotRuntimeEnvironment> envsToReset = new HashSet<>();
for (final IProject project : projects) {
final RobotProject robotProject = RedPlugin.getModelManager().createProject(project);
if (robotProject.getRuntimeEnvironment() != null) {
envsToReset.add(robotProject.getRuntimeEnvironment());
}
robotProject.clearCachedData();
}
for (final RobotRuntimeEnvironment environment : envsToReset) {
environment.resetCommandExecutors();
}
reparseModelsInOpenedEditors();
}
private void reparseModelsInOpenedEditors() {
// this ensures that models which are currently opened are reparsed in order to
// recreate removed cached data
final List<IEditorReference> editors = new ArrayList<>();
for (final IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
for (final IWorkbenchPage page : window.getPages()) {
for (final IEditorReference editor : page.getEditorReferences()) {
if (RobotFormEditor.ID.equals(editor.getId())) {
editors.add(editor);
}
}
}
}
for (final IEditorReference editorReference : editors) {
final IEditorPart editor = editorReference.getEditor(false);
if (editor != null) {
final RobotFormEditor robotEditor = (RobotFormEditor) editor;
final RobotSuiteFile model = robotEditor.provideSuiteModel();
final String fileContent = robotEditor.getSourceEditor().getDocument().get();
model.reparseEverything(fileContent);
}
}
}
}
}