/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.iwave.ext.linux.command.parser; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.common.collect.Lists; import com.iwave.ext.linux.model.PowerPathDevice; import com.iwave.ext.text.TextParser; public class PowerPathInvistaInquiryParser { private static Pattern DEVICE_BLOCK_START_PATTERN = Pattern.compile("Invista\\sDevice\\s+Array\\sSerial\\s#\\s+SP\\s+IP\\s+Address\\s+LUN\\s+WWN\\s+"); private static Pattern DEVICE_PATTERN = Pattern.compile("([\\/\\w]+)\\s+(\\w+)\\s+(\\S*)\\s+(\\w+)\\s+(\\w{32})"); private TextParser deviceBlockParser = new TextParser(); public PowerPathInvistaInquiryParser() { deviceBlockParser.setStartPattern(DEVICE_BLOCK_START_PATTERN); deviceBlockParser.setRepeatPattern(DEVICE_PATTERN); } public List<PowerPathDevice> parseDevices(String output) { List<PowerPathDevice> devices = Lists.newArrayList(); for (String deviceBlock : deviceBlockParser.parseTextBlocks(output)) { devices.add(parseDevice(deviceBlock)); } return devices; } private PowerPathDevice parseDevice(String deviceBlock) { Matcher deviceMatcher = DEVICE_PATTERN.matcher(deviceBlock); if (deviceMatcher.find()) { PowerPathDevice device = new PowerPathDevice(); device.setDevice(deviceMatcher.group(1)); device.setVendor("EMC"); device.setProduct("Invista"); device.setWwn(deviceMatcher.group(5)); return device; } return null; } }