package org.ovirt.engine.api.restapi.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.ovirt.engine.api.model.CustomProperty;
import org.ovirt.engine.api.model.Properties;
import org.ovirt.engine.api.model.Property;
public class CustomPropertiesParser {
/**
* Format of @str is name=value;name=value;..
*
* @param str - The string to parse
* @param isRegex - defines if CustomProperty is used for regex or value representation
*/
public static List<CustomProperty> parse(String str, boolean isRegex) {
List<CustomProperty> ret = new ArrayList<>();
if (str != null) {
for (String envStr : str.split(";", -1)) {
String[] parts = getKeyValue(envStr);
if (parts.length == 2) {
CustomProperty env = new CustomProperty();
env.setName(parts[0]);
if (isRegex) {
env.setRegexp(parts[1]);
} else {
env.setValue(parts[1]);
}
ret.add(env);
}
}
}
return ret;
}
private static String[] getKeyValue(String str) {
List<String> keyValue = new ArrayList<>();
int index = str.indexOf("=");
if (index != -1) {
String key = str.substring(0, index);
String value = str.substring(index+1);
keyValue.add(key);
keyValue.add(value);
}
return keyValue.toArray(new String[keyValue.size()]);
}
/**
* Converts VmHooksEnv to @str as name=value;name=value;..
*
* @return String representing custom properties
*/
public static String parse(List<CustomProperty> customProperties) {
StringBuilder builder = new StringBuilder();
for (CustomProperty hook : customProperties) {
if (hook.isSetName() && hook.isSetValue()) {
builder.append(hook.getName()).append("=").append(hook.getValue()).append(";");
}
}
return builder.toString();
}
/**
* Get a map containing the key:value pairs from the given Properties object.
*
* @param properties
* The key:value pairs.
* @return A newly-created map containing the key:value pairs.
*/
public static Map<String, String> toMap(Properties properties) {
Map<String, String> res = new HashMap<>();
for (Property property : properties.getProperties()) {
res.put(property.getName(), property.getValue());
}
return res;
}
/**
* Create a Properties object from a map containing key:value pairs.
*
* @param properties
* The map containing key:value pairs.
* @return A newly-created Properties object containing the key:value pairs.
*/
public static Properties fromMap(Map<String, String> properties) {
Properties res = new Properties();
for (Map.Entry<String, String> entry : properties.entrySet()) {
Property property = new Property();
property.setName(entry.getKey());
property.setValue(entry.getValue());
res.getProperties().add(property);
}
return res;
}
}