package org.rhq.enterprise.agent; import java.io.FileReader; import java.io.IOException; import org.rhq.core.system.SystemInfo; import org.rhq.core.system.SystemInfoFactory; import org.rhq.enterprise.agent.i18n.AgentI18NResourceKeys; /** * Uses the SIGAR API when appropriate to read in console input. * This falls back to the Java-only superclass implementation if * the native SIGAR API is not available. * * @author John Mazzitelli */ public class SigarAgentInputReader extends JavaAgentInputReader { private final AgentMain agent; public SigarAgentInputReader(AgentMain agent) throws IOException { super(); this.agent = agent; } public SigarAgentInputReader(AgentMain agent, FileReader fr) throws IOException { super(fr); this.agent = agent; } @Override public String readLine() throws IOException { String input; SystemInfo systemInfo = SystemInfoFactory.createSystemInfo(); if ((systemInfo == null) || !systemInfo.isNative() || !isConsole()) { input = super.readLine(); } else { input = systemInfo.readLineFromConsole(false); } return input; } @Override public String readLineNoEcho() throws IOException { String input = null; SystemInfo systemInfo = SystemInfoFactory.createSystemInfo(); if ((systemInfo == null) || !systemInfo.isNative() || !isConsole()) { input = super.readLine(); } else { while (true) { // get the answer the first time input = systemInfo.readLineFromConsole(true); // get the answer a second time systemInfo.writeLineToConsole(agent.getI18NMsg().getMsg(AgentI18NResourceKeys.PROMPT_CONFIRM)); String confirmation = systemInfo.readLineFromConsole(true); systemInfo.writeLineToConsole("\n"); // make sure the first and second answers match; otherwise, ask again if (input.equals(confirmation)) { break; } systemInfo.writeLineToConsole(agent.getI18NMsg().getMsg(AgentI18NResourceKeys.PROMPT_CONFIRM_FAILED)); } } return input; } }