blob: 0a458abc524d96d2c6c8fd1713a08c09cf8e9fc4 [file] [log] [blame]
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.ui.playback;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.registry.Registry;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.Set;
public abstract class PlaybackContext {
private PlaybackRunner.StatusCallback myCallback;
private int myCurrentLine;
private Robot myRobot;
private boolean myUseDirectActionCall;
private PlaybackCommand myCurrentCmd;
private File myBaseDir;
private Set<Class> myCallClasses;
private PlaybackRunner myRunner;
private boolean myUseTypingTargets;
public PlaybackContext(PlaybackRunner runner, PlaybackRunner.StatusCallback callback, int currentLine, Robot robot, boolean useDriectActionCall, boolean useTypingTargets, PlaybackCommand currentCmd, File baseDir, Set<Class> callClasses) {
myRunner = runner;
myCallback = callback;
myCurrentLine = currentLine;
myRobot = robot;
myUseDirectActionCall = useDriectActionCall;
myUseTypingTargets = useTypingTargets;
myCurrentCmd = currentCmd;
myBaseDir = baseDir;
myCallClasses = callClasses;
}
public PlaybackRunner.StatusCallback getCallback() {
return myCallback;
}
public int getCurrentLine() {
return myCurrentLine;
}
public Robot getRobot() {
return myRobot;
}
public boolean isUseDirectActionCall() {
return myUseDirectActionCall;
}
public boolean isUseTypingTargets() {
return myUseTypingTargets;
}
public PlaybackCommand getCurrentCmd() {
return myCurrentCmd;
}
public File getBaseDir() {
return myBaseDir != null ? myBaseDir : new File(System.getProperty("user.dir"));
}
public PathMacro getPathMacro() {
return new PathMacro().setScriptDir(getCurrentCmd().getScriptDir()).setBaseDir(getBaseDir());
}
public void setBaseDir(File dir) {
myBaseDir = dir;
}
public Set<Class> getCallClasses() {
return myCallClasses;
}
public void flushAwtAndRunInEdt(final Runnable runnable) {
if (EventQueue.isDispatchThread()) {
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
@Override
public void run() {
getRobot().waitForIdle();
SwingUtilities.invokeLater(runnable);
}
});
} else {
getRobot().waitForIdle();
SwingUtilities.invokeLater(runnable);
}
}
public void delayAndRunInEdt(final Runnable runnable, final long delay) {
runPooledThread(new Runnable() {
@Override
public void run() {
try {
Thread.currentThread().sleep(delay);
}
catch (InterruptedException e) {
}
SwingUtilities.invokeLater(runnable);
}
});
}
public void runPooledThread(Runnable runnable) {
ApplicationManager.getApplication().executeOnPooledThread(runnable);
}
public void error(String text, int currentLine) {
getCallback().message(this, text, PlaybackRunner.StatusCallback.Type.error);
}
public void message(String text, int currentLine) {
getCallback().message(this, text, PlaybackRunner.StatusCallback.Type.message);
}
public void test(String text, int currentLine) {
getCallback().message(this, text, PlaybackRunner.StatusCallback.Type.test);
}
public void code(String text, int currentLine) {
getCallback().message(this, text, PlaybackRunner.StatusCallback.Type.code);
}
public abstract void pushStage(StageInfo info);
public abstract StageInfo popStage();
public abstract int getCurrentStageDepth();
public abstract void addPassed(StageInfo stage);
public abstract boolean isDisposed();
public abstract void storeRegistryValue(String key);
}