/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.util; import java.util.List; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.text.StrBuilder; import com.google.common.collect.Lists; public class SanUtils { private static Pattern LOOSE_WWN_PATTERN = Pattern.compile("[0-9a-f:]+"); public static String normalizeWWN(long wwn) { return normalizeWWN(Long.toHexString(wwn)); } public static String getPortName(String wwn) { String nodeName = StringUtils.substring(cleanWWN(wwn), 16); return formatWWN(nodeName); } public static String getNodeName(String wwn) { String portName = StringUtils.substring(cleanWWN(wwn), 0, 16); return formatWWN(portName); } public static String cleanWWN(String wwn) { if (StringUtils.isBlank(wwn)) { return null; } wwn = StringUtils.lowerCase(StringUtils.trim(wwn)); if (!LOOSE_WWN_PATTERN.matcher(wwn).matches()) { return null; } wwn = StringUtils.replace(wwn, ":", ""); return wwn; } private static String formatWWN(String wwn) { if (StringUtils.isBlank(wwn)) { return null; } // Left pad with zeros to make 16 chars, trim any excess wwn = StringUtils.substring(StringUtils.leftPad(wwn, 16, '0'), 0, 16); StrBuilder sb = new StrBuilder(); for (int i = 0; i < wwn.length(); i += 2) { sb.appendSeparator(':'); sb.append(StringUtils.substring(wwn, i, i + 2)); } return sb.toString(); } public static String normalizeWWN(String wwn) { return formatWWN(cleanWWN(wwn)); } public static List<String> normalizeWWNs(List<String> wwns) { List<String> normalized = Lists.newArrayList(); for (String wwn : wwns) { normalized.add(normalizeWWN(wwn)); } return normalized; } }