36 lines
1.1 KiB
Java
36 lines
1.1 KiB
Java
package net.rubygrapefruit.platform.internal;
|
|
|
|
import net.rubygrapefruit.platform.Terminal;
|
|
import net.rubygrapefruit.platform.Terminals;
|
|
|
|
public abstract class AbstractTerminals implements Terminals {
|
|
private final Object lock = new Object();
|
|
private Output currentlyOpen;
|
|
private AbstractTerminal current;
|
|
|
|
public Terminal getTerminal(Output output) {
|
|
synchronized (lock) {
|
|
if (currentlyOpen != null && currentlyOpen != output) {
|
|
throw new UnsupportedOperationException("Currently only one output can be used as a terminal.");
|
|
}
|
|
|
|
if (current == null) {
|
|
final AbstractTerminal terminal = createTerminal(output);
|
|
terminal.init();
|
|
Runtime.getRuntime().addShutdownHook(new Thread(){
|
|
@Override
|
|
public void run() {
|
|
terminal.reset();
|
|
}
|
|
});
|
|
currentlyOpen = output;
|
|
current = terminal;
|
|
}
|
|
|
|
return current;
|
|
}
|
|
}
|
|
|
|
protected abstract AbstractTerminal createTerminal(Output output);
|
|
}
|