/*
* 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.tableeditor;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.project.build.RobotArtifactsValidator;
import org.robotframework.ide.eclipse.main.plugin.project.build.RobotArtifactsValidator.ModelUnitValidatorConfig;
import org.robotframework.ide.eclipse.main.plugin.project.build.RobotArtifactsValidator.ModelUnitValidatorConfigFactory;
class RobotFormEditorPartListener implements IPartListener {
private static final int REVALIDATE_JOB_DELAY = 2000;
private Job validationJob;
@Override
public void partOpened(final IWorkbenchPart part) {
// nothing to do
}
@Override
public void partDeactivated(final IWorkbenchPart part) {
if (part instanceof RobotFormEditor) {
cancelValidationJobIfScheduled();
}
}
@Override
public void partClosed(final IWorkbenchPart part) {
// nothing to do
}
@Override
public void partBroughtToTop(final IWorkbenchPart part) {
if (part instanceof RobotFormEditor) {
final IWorkbenchWindow window = part.getSite().getWorkbenchWindow();
final IPerspectiveDescriptor perspective = window.getActivePage().getPerspective();
if (IDebugUIConstants.ID_DEBUG_PERSPECTIVE.equals(perspective.getId())) {
RobotFormEditor.activateSourcePageInActiveEditor(window);
}
}
}
@Override
public void partActivated(final IWorkbenchPart part) {
if (part instanceof RobotFormEditor) {
final RobotFormEditor editor = (RobotFormEditor) part;
final RobotSuiteFile suiteModel = editor.provideSuiteModel();
if (suiteModel.getParent() != null) {
cancelValidationJobIfScheduled();
scheduleValidationJob(suiteModel);
}
}
}
private void cancelValidationJobIfScheduled() {
if (validationJob != null && validationJob.getState() == Job.SLEEPING) {
validationJob.cancel();
validationJob = null;
}
}
private void scheduleValidationJob(final RobotSuiteFile suiteModel) {
final IProject project = suiteModel.getProject().getProject();
final List<RobotSuiteFile> suiteModels = Collections.singletonList(suiteModel);
final ModelUnitValidatorConfig validatorConfig = ModelUnitValidatorConfigFactory.create(suiteModels);
validationJob = RobotArtifactsValidator.createValidationJob(project, validatorConfig);
validationJob.schedule(REVALIDATE_JOB_DELAY);
}
}