/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.linux.command.parser;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import com.google.common.collect.Lists;
import com.iwave.ext.linux.model.IScsiTarget;
import com.iwave.ext.text.TextParser;
public class IScsiTargetParser {
private static Pattern TARGET = Pattern.compile("Target:\\s*(.*)");
private static Pattern PORTAL = Pattern.compile("Portal:\\s*(.*)");
private static Pattern IFACE_NAME = Pattern.compile("Iface Name:\\s*(.*)");
private TextParser parser = new TextParser();
private TextParser portalParser = new TextParser();
public IScsiTargetParser() {
parser.setRepeatPattern(TARGET);
portalParser.setRepeatPattern(PORTAL);
}
public List<IScsiTarget> parseTargets(String output) {
List<IScsiTarget> results = Lists.newArrayList();
for (String textBlock : parser.parseTextBlocks(output)) {
for (IScsiTarget target : parseTargetBlock(textBlock)) {
results.add(target);
}
}
return results;
}
private List<IScsiTarget> parseTargetBlock(String text) {
String iqn = parser.findMatch(TARGET, text);
if (StringUtils.isNotBlank(iqn)) {
List<IScsiTarget> targets = Lists.newArrayList();
for (String textBlock : portalParser.parseTextBlocks(text)) {
String portal = parser.findMatch(PORTAL, textBlock);
String ifaceName = parser.findMatch(IFACE_NAME, textBlock);
targets.add(new IScsiTarget(StringUtils.trim(iqn), StringUtils.trim(portal),
StringUtils.trim(ifaceName)));
}
return targets;
}
else {
return Collections.emptyList();
}
}
}