/*
* 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.XPathExpression;
import org.apache.commons.lang.math.NumberUtils;
import org.w3c.dom.Element;
import com.google.common.collect.Lists;
import com.iwave.ext.windows.model.wmi.RegistryValueDef;
import com.iwave.ext.windows.model.wmi.RegistryValueType;
import com.iwave.ext.windows.winrm.WinRMTarget;
import com.iwave.ext.xml.XmlStringBuilder;
import com.iwave.ext.xml.XmlUtils;
public class EnumerateRegistryValuesMethod extends AbstractRegistryMethod<List<RegistryValueDef>> {
private static final String ENUM_VALUES = "EnumValues";
private static final XPathExpression NAMES_EXPR = XmlUtils.compileXPath(XPATH, "ns:sNames");
private static final XPathExpression TYPES_EXPR = XmlUtils.compileXPath(XPATH, "ns:Types");
private long registryTree;
private String subKeyName;
public EnumerateRegistryValuesMethod(WinRMTarget target) {
super(target, ENUM_VALUES);
}
public EnumerateRegistryValuesMethod(WinRMTarget target, String subKeyName) {
this(target);
this.subKeyName = subKeyName;
}
public void setRegistryTree(long registryTree) {
this.registryTree = registryTree;
}
public void setSubKeyName(String subKeyName) {
this.subKeyName = subKeyName;
}
@Override
protected void buildInput(XmlStringBuilder xml) {
if (registryTree != 0) {
xml.element("hDefKey", registryTree);
}
xml.element("sSubKeyName", subKeyName);
}
@Override
protected List<RegistryValueDef> processOutput(Element output) {
List<RegistryValueDef> results = Lists.newArrayList();
List<Element> names = XmlUtils.selectElements(NAMES_EXPR, output);
List<Element> types = XmlUtils.selectElements(TYPES_EXPR, output);
for (int i = 0; i < names.size() && i < types.size(); i++) {
String name = XmlUtils.getText(names.get(i));
int type = NumberUtils.toInt(XmlUtils.getText(types.get(i)));
RegistryValueType valueType = RegistryValueType.fromValue(type);
results.add(new RegistryValueDef(name, valueType));
}
return results;
}
}