/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.iwave.ext.windows.winrm.wmi; import java.util.List; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpression; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Element; import com.iwave.ext.windows.model.wmi.NetworkAdapter; import com.iwave.ext.windows.winrm.WinRMConstants; import com.iwave.ext.windows.winrm.WinRMEnumerateOperation; import com.iwave.ext.windows.winrm.WinRMTarget; import com.iwave.ext.xml.XmlUtils; public class ListNetworkAdaptersQuery extends WinRMEnumerateOperation<NetworkAdapter> { public static final String NETWORK_ADAPTER_CONFIGURATION_URI = WinRMConstants.WMI_BASE_URI + "root/cimv2/Win32_NetworkAdapterConfiguration"; private static final XPath XPATH = XmlUtils.createXPath(String.format("ns=%s", NETWORK_ADAPTER_CONFIGURATION_URI)); private static final XPathExpression NETWORK_ADAPTERS_EXPR = XmlUtils.compileXPath(XPATH, "ns:Win32_NetworkAdapterConfiguration"); private static final XPathExpression NAME_EXPR = XmlUtils.compileXPath(XPATH, "ns:Index"); private static final XPathExpression IP_ADDRESS_EXPR = XmlUtils.compileXPath(XPATH, "ns:IPAddress"); private static final XPathExpression SUBNET_MASK_EXPR = XmlUtils.compileXPath(XPATH, "ns:IPSubnet"); private static final XPathExpression MAC_ADDRESS_EXPR = XmlUtils.compileXPath(XPATH, "ns:MACAddress"); public ListNetworkAdaptersQuery(WinRMTarget target) { super(target, NETWORK_ADAPTER_CONFIGURATION_URI); } @Override protected void processItems(Element items, List<NetworkAdapter> results) { for (Element e : XmlUtils.selectElements(NETWORK_ADAPTERS_EXPR, items)) { // Only consider network adapters with IP addresses String ipAddress = getIpAddress(e); if (StringUtils.isNotBlank(ipAddress)) { NetworkAdapter networkAdapter = new NetworkAdapter(); networkAdapter.setIpAddress(ipAddress); networkAdapter.setIp6Address(getIp6Address(e)); networkAdapter.setName(getName(e)); networkAdapter.setSubnetMask(getSubnetMask(e)); networkAdapter.setMacAddress(getMacAddress(e)); results.add(networkAdapter); } } } protected String getIpAddress(Element parent) { for (Element e : XmlUtils.selectElements(IP_ADDRESS_EXPR, parent)) { String ipAddress = XmlUtils.getText(e); if (StringUtils.contains(ipAddress, ".")) { return ipAddress; } } return null; } protected String getIp6Address(Element parent) { for (Element e : XmlUtils.selectElements(IP_ADDRESS_EXPR, parent)) { String ipAddress = XmlUtils.getText(e); if (StringUtils.contains(ipAddress, ":")) { return ipAddress; } } return null; } protected Integer getName(Element parent) { return XmlUtils.selectInteger(NAME_EXPR, parent); } protected String getSubnetMask(Element parent) { return XmlUtils.selectText(SUBNET_MASK_EXPR, parent); } protected String getMacAddress(Element parent) { return XmlUtils.selectText(MAC_ADDRESS_EXPR, parent); } }