/* * 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.w3c.dom.Element; import com.iwave.ext.windows.model.wmi.DiskDrive; 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 ListDiskDrivesQuery extends WinRMEnumerateOperation<DiskDrive> { public static final String DISK_URI = WinRMConstants.WMI_BASE_URI + "root/cimv2/Win32_DiskDrive"; private static final XPath XPATH = XmlUtils.createXPath("ns=" + DISK_URI); private static final XPathExpression DISK_DRIVE_EXPR = XmlUtils.compileXPath(XPATH, "ns:Win32_DiskDrive"); private static final XPathExpression NUMBER_EXPR = XmlUtils.compileXPath(XPATH, "ns:Index"); private static final XPathExpression NAME_EXPR = XmlUtils.compileXPath(XPATH, "ns:Name"); private static final XPathExpression CAPTION_EXPR = XmlUtils.compileXPath(XPATH, "ns:Caption"); private static final XPathExpression DEVICE_ID_EXPR = XmlUtils.compileXPath(XPATH, "ns:DeviceID"); private static final XPathExpression PNP_DEVICE_ID_EXPR = XmlUtils.compileXPath(XPATH, "ns:PNPDeviceID"); private static final XPathExpression INTERFACE_TYPE_EXPR = XmlUtils.compileXPath(XPATH, "ns:InterfaceType"); private static final XPathExpression SCSI_BUS_EXPR = XmlUtils.compileXPath(XPATH, "ns:SCSIBus"); private static final XPathExpression SCSI_PORT_EXPR = XmlUtils.compileXPath(XPATH, "ns:SCSIPort"); private static final XPathExpression SCSI_TARGET_EXPR = XmlUtils.compileXPath(XPATH, "ns:SCSITargetId"); private static final XPathExpression SCSI_LUN_EXPR = XmlUtils.compileXPath(XPATH, "ns:SCSILogicalUnit"); private static final XPathExpression SERIAL_NUMBER_EXPR = XmlUtils.compileXPath(XPATH, "ns:SerialNumber"); private static final XPathExpression SIZE_EXPR = XmlUtils.compileXPath(XPATH, "ns:Size"); private static final XPathExpression STATUS_EXPR = XmlUtils.compileXPath(XPATH, "ns:Status"); private static final XPathExpression SIGNATURE_EXPR = XmlUtils.compileXPath(XPATH, "ns:Signature"); public ListDiskDrivesQuery(WinRMTarget target) { super(target, DISK_URI); } @Override protected void processItems(Element items, List<DiskDrive> results) { for (Element item : XmlUtils.selectElements(DISK_DRIVE_EXPR, items)) { int number = getNumber(item); if (number > -1) { DiskDrive diskDrive = new DiskDrive(); diskDrive.setNumber(number); diskDrive.setName(getName(item)); diskDrive.setCaption(getCaption(item)); diskDrive.setDeviceId(getDeviceId(item)); diskDrive.setPnpDeviceId(getPNPDeviceId(item)); diskDrive.setInterfaceType(getInterfaceType(item)); diskDrive.setScsiBus(getScsiBus(item)); diskDrive.setScsiPort(getScsiPort(item)); diskDrive.setScsiTarget(getScsiTarget(item)); diskDrive.setScsiLun(getScsiLun(item)); diskDrive.setSerialNumber(getSerialNumber(item)); diskDrive.setSize(getSize(item)); diskDrive.setStatus(getStatus(item)); diskDrive.setSignature(getSignature(item)); results.add(diskDrive); } } } protected int getNumber(Element item) { Integer number = XmlUtils.selectInteger(NUMBER_EXPR, item); return number != null ? number : -1; } protected String getName(Element item) { return XmlUtils.selectText(NAME_EXPR, item); } protected String getCaption(Element item) { return XmlUtils.selectText(CAPTION_EXPR, item); } protected String getDeviceId(Element item) { return XmlUtils.selectText(DEVICE_ID_EXPR, item); } protected String getPNPDeviceId(Element item) { return XmlUtils.selectText(PNP_DEVICE_ID_EXPR, item); } protected String getInterfaceType(Element item) { return XmlUtils.selectText(INTERFACE_TYPE_EXPR, item); } protected Integer getScsiBus(Element item) { return XmlUtils.selectInteger(SCSI_BUS_EXPR, item); } protected Integer getScsiPort(Element item) { return XmlUtils.selectInteger(SCSI_PORT_EXPR, item); } protected Integer getScsiTarget(Element item) { return XmlUtils.selectInteger(SCSI_TARGET_EXPR, item); } protected Integer getScsiLun(Element item) { return XmlUtils.selectInteger(SCSI_LUN_EXPR, item); } protected String getSerialNumber(Element item) { return XmlUtils.selectText(SERIAL_NUMBER_EXPR, item); } protected String getSignature(Element item) { return XmlUtils.selectText(SIGNATURE_EXPR, item); } protected long getSize(Element item) { Long size = XmlUtils.selectLong(SIZE_EXPR, item); return size != null ? size : -1; } protected String getStatus(Element item) { return XmlUtils.selectText(STATUS_EXPR, item); } }