001/*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005package org.anarres.qemu.exec;
006
007import java.util.List;
008import javax.annotation.Nonnull;
009import org.anarres.qemu.exec.recipe.QEmuMonitorRecipe;
010import org.anarres.qemu.exec.recipe.QEmuVirtioSerialRecipe;
011
012/**
013 * A character device backend, usually paired with a {@link QEmuDeviceOption} frontend.
014 *
015 * @see QEmuVirtioSerialRecipe
016 * @see QEmuMonitorRecipe
017 * @see QEmuDeviceOption
018 * @author shevek
019 */
020public class QEmuMonitorOption extends AbstractQEmuOption {
021
022    public static enum Mode {
023
024        readline, control;
025    }
026    public final String chardev;
027    private Mode mode = Mode.control;
028    private boolean startup = true;
029
030    public QEmuMonitorOption(@Nonnull String chardev) {
031        this.chardev = chardev;
032    }
033
034    public QEmuMonitorOption(@Nonnull QEmuChardevOption option) {
035        this(option.id);
036    }
037
038    @Nonnull
039    public QEmuMonitorOption withMode(Mode mode) {
040        this.mode = mode;
041        return this;
042    }
043
044    @Nonnull
045    public QEmuMonitorOption withStartup(boolean startup) {
046        this.startup = startup;
047        return this;
048    }
049
050    @Override
051    public void appendTo(List<? super String> line) {
052        StringBuilder buf = new StringBuilder(chardev);
053        appendTo(buf, "mode", mode);
054        add(line, "-mon", buf);
055        if (!startup)
056            add(line, "-S");
057    }
058}