package hudson.plugins.accurev.parsers.output; import hudson.plugins.accurev.AccurevLauncher.ICmdOutputParser; import hudson.plugins.accurev.AccurevLauncher.UnhandledAccurevCommandOutput; import java.io.*; import java.nio.charset.Charset; public final class ParseInfoToLoginName implements ICmdOutputParser<String, Void> { public String parse(InputStream cmdOutput, Void context) throws UnhandledAccurevCommandOutput, IOException { final String usernameHeading = "Principal:"; final String controlCharsOrSpaceRegex = "[ \\x00-\\x1F\\x7F]+"; final Reader stringReader = new InputStreamReader(cmdOutput, Charset.defaultCharset()); try (BufferedReader reader = new BufferedReader(stringReader)) { String line; while ((line = reader.readLine()) != null) { if (line.contains("not logged in")) return null; final String[] parts = line.split(controlCharsOrSpaceRegex); for (int i = 0; i < parts.length; i++) { final String part = parts[i]; if (usernameHeading.equals(part)) { if ((i + 1) < parts.length) { return parts[i + 1]; // returns username } } } } } throw new UnhandledAccurevCommandOutput("Output did not contain " + usernameHeading + " " + controlCharsOrSpaceRegex + " <username>"); } }