package hudson.plugins.accurev.parsers.xml; import hudson.plugins.accurev.AccurevLauncher.ICmdOutputXmlParser; import hudson.plugins.accurev.AccurevLauncher.UnhandledAccurevCommandOutput; import hudson.plugins.accurev.AccurevStream; import hudson.plugins.accurev.AccurevStream.StreamType; import hudson.plugins.accurev.ParseChangeLog; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; public final class ParseShowStreams implements ICmdOutputXmlParser<Map<String, AccurevStream>, String> { public Map<String, AccurevStream> parse(XmlPullParser parser, String depot) throws UnhandledAccurevCommandOutput, IOException, XmlPullParserException { final Map<String, AccurevStream> streams = new HashMap<>(); while (parser.next() != XmlPullParser.END_DOCUMENT) { if (parser.getEventType() == XmlPullParser.START_TAG && "stream".equalsIgnoreCase(parser.getName())) { final String streamName = parser.getAttributeValue("", "name"); final String streamNumberStr = parser.getAttributeValue("", "streamNumber"); final String basisStreamName = parser.getAttributeValue("", "basis"); final String basisStreamNumberStr = parser.getAttributeValue("", "basisStreamNumber"); final String streamTypeStr = parser.getAttributeValue("", "type"); final String streamIsDynamic = parser.getAttributeValue("", "isDynamic"); final String streamTimeString = parser.getAttributeValue("", "time"); final Date streamTime = streamTimeString == null ? null : ParseChangeLog.convertAccurevTimestamp(streamTimeString); final String streamStartTimeString = parser.getAttributeValue("", "startTime"); final Date streamStartTime = streamTimeString == null ? null : ParseChangeLog.convertAccurevTimestamp(streamStartTimeString); try { final Long streamNumber = streamNumberStr == null ? null : Long.valueOf(streamNumberStr); final Long basisStreamNumber = basisStreamNumberStr == null ? null : Long.valueOf(basisStreamNumberStr); final StreamType streamType = AccurevStream.StreamType.parseStreamType(streamTypeStr); final boolean isDynamic = streamIsDynamic != null && Boolean.parseBoolean(streamIsDynamic); final AccurevStream stream = new AccurevStream(// streamName, // streamNumber, // depot, // basisStreamName, // basisStreamNumber, // isDynamic, // streamType, // streamTime, // streamStartTime); streams.put(streamName, stream); } catch (NumberFormatException e) { throw new UnhandledAccurevCommandOutput(e); } } } return streams; } }