/* * Copyright (C) 2014 Red Hat, inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ package org.jboss.as.cli.impl; import java.io.InputStream; import java.io.OutputStream; /** * * @author <a href="mailto:ehugonne@redhat.com">Emmanuel Hugonnet</a> (c) 2014 Red Hat, inc. */ public class CommandContextConfiguration { private final String controller; private final String username; private final char[] password; private final String clientBindAddress; private final InputStream consoleInput; private final OutputStream consoleOutput; private final boolean initConsole; private final boolean disableLocalAuth; private final int connectionTimeout; private boolean silent; private Boolean errorOnInteract; private final boolean echoCommand; private final Integer commandTimeout; private CommandContextConfiguration(String controller, String username, char[] password, String clientBindAddress, boolean disableLocalAuth, boolean initConsole, int connectionTimeout, InputStream consoleInput, OutputStream consoleOutput, boolean echoCommand, Integer commandTimeout) { this.controller = controller; this.username = username; this.password = password; this.clientBindAddress = clientBindAddress; this.consoleInput = consoleInput; this.consoleOutput = consoleOutput; this.initConsole = initConsole; this.disableLocalAuth = disableLocalAuth || username != null; this.connectionTimeout = connectionTimeout; this.echoCommand = echoCommand; this.commandTimeout = commandTimeout; } public Integer getCommandTimeout() { return commandTimeout; } public String getController() { return controller; } public String getUsername() { return username; } public char[] getPassword() { return password; } public String getClientBindAddress() { return clientBindAddress; } public InputStream getConsoleInput() { return consoleInput; } public OutputStream getConsoleOutput() { return consoleOutput; } public boolean isInitConsole() { return initConsole; } public int getConnectionTimeout() { return connectionTimeout; } public boolean isDisableLocalAuth() { return disableLocalAuth; } public boolean isSilent() { return silent; } public Boolean isErrorOnInteract() { return errorOnInteract; } public boolean isEchoCommand() { return echoCommand; } public static class Builder { private String controller; private String username; private char[] password; private String clientBindAddress; private InputStream consoleInput; private OutputStream consoleOutput; private boolean initConsole = false; private boolean disableLocalAuth; private int connectionTimeout = -1; private boolean disableLocalAuthUnset = true; private boolean silent; private Boolean errorOnInteract; private boolean echoCommand; private Integer commandTimeout; public Builder() { } public CommandContextConfiguration build() { if(disableLocalAuthUnset) { this.disableLocalAuth = username != null; } final CommandContextConfiguration config = new CommandContextConfiguration(controller, username, password, clientBindAddress, disableLocalAuth, initConsole, connectionTimeout, consoleInput, consoleOutput, echoCommand, commandTimeout); config.silent = silent; config.errorOnInteract = errorOnInteract; return config; } public Builder setCommandTimeout(Integer commandTimeout) { this.commandTimeout = commandTimeout; return this; } public Builder setController(String controller) { this.controller = controller; return this; } public Builder setEchoCommand(boolean echoCommand) { this.echoCommand = echoCommand; return this; } public Builder setUsername(String username) { this.username = username; return this; } public Builder setPassword(char[] password) { this.password = password; return this; } public Builder setClientBindAddress(String clientBindAddress) { this.clientBindAddress = clientBindAddress; return this; } public Builder setConsoleInput(InputStream consoleInput) { this.consoleInput = consoleInput; if(errorOnInteract == null && consoleInput != null) { // if the input is provided, interaction is assumed this.errorOnInteract = false; } return this; } public Builder setConsoleOutput(OutputStream consoleOutput) { this.consoleOutput = consoleOutput; return this; } public Builder setInitConsole(boolean initConsole) { this.initConsole = initConsole; return this; } public Builder setDisableLocalAuth(boolean disableLocalAuth) { this.disableLocalAuth = disableLocalAuth; this.disableLocalAuthUnset = false; return this; } public Builder setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; return this; } public Builder setSilent(boolean silent) { this.silent = silent; return this; } public Builder setErrorOnInteract(boolean errorOnInteract) { this.errorOnInteract = errorOnInteract; return this; } } }