/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.iwave.ext.linux.command; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import com.google.common.collect.Sets; public class ListWWNsCommand extends LinuxResultsCommand<Set<String>> { private static final Pattern WWN_PATTERN = Pattern.compile("\\b0x([0-9a-fA-F]*)\\b"); public ListWWNsCommand() { setCommand("cat"); addArgument("/sys/class/fc_host/host*/port_name"); } @Override public void parseOutput() { results = Sets.newLinkedHashSet(); Matcher wwnMatcher = WWN_PATTERN.matcher(getOutput().getStdout()); while (wwnMatcher.find()) { String wwn = normalizeWWN(wwnMatcher.group(1)); results.add(wwn); } } private static String normalizeWWN(String unpaddedWWN) { // The regex can match less than 16 characters. Pad the first ones with zeros String wwn = StringUtils.leftPad(unpaddedWWN, 16, '0'); StringBuilder sb = new StringBuilder(); for (int i = 0; i < wwn.length(); i += 2) { String slice = StringUtils.substring(wwn, i, i + 2); if (sb.length() > 0) { sb.append(':'); } sb.append(slice); } return sb.toString(); } }