package jetbrains.mps.debugger.java.runtime.engine;
/*Generated by MPS */
import com.intellij.execution.process.ProcessHandler;
import java.util.List;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Key;
import java.util.ArrayList;
import com.intellij.execution.process.ProcessOutputTypes;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.debugger.java.runtime.engine.events.EventsProcessor;
public class SystemMessagesReporter {
private String myName;
private volatile ProcessHandler myProcessHandler;
private final SystemMessagesReporter.MyDebugProcessAdapter myDebugProcessListener = new SystemMessagesReporter.MyDebugProcessAdapter();
private final List<Pair<String, Key>> myPostponedMessages = new ArrayList<Pair<String, Key>>();
public SystemMessagesReporter(DebugProcessMulticaster multicaster) {
multicaster.addListener(myDebugProcessListener);
}
public void setProcessName(String processName) {
myName = processName;
}
public void reportInformation(String message) {
reportOrPostpone(message, ProcessOutputTypes.SYSTEM);
}
public void reportError(String message) {
reportOrPostpone(message, ProcessOutputTypes.STDERR);
}
private synchronized void reportOrPostpone(String message, Key key) {
if (myProcessHandler == null) {
myPostponedMessages.add(new Pair<String, Key>(message, key));
} else {
reportInternal(message, key);
}
}
public synchronized void setProcessHandler(ProcessHandler processHandler) {
myProcessHandler = processHandler;
for (Pair<String, Key> message : myPostponedMessages) {
reportInternal(message.first, message.second);
}
}
private void reportInternal(String message, Key key) {
myProcessHandler.notifyTextAvailable(message + "\n", key);
}
private class MyDebugProcessAdapter extends DebugProcessAdapter {
private MyDebugProcessAdapter() {
}
@Override
public void processAttached(@NotNull EventsProcessor process) {
reportInformation("Connected to the target VM, " + myName);
}
@Override
public void processDetached(@NotNull EventsProcessor process, boolean closedByUser) {
reportInformation("Disconnected from the target VM, " + myName);
}
}
}