Allow for configurable entry tag name
This commit is contained in:
parent
47af6fbb9f
commit
144efb5610
@ -357,7 +357,7 @@ public class OpenRocketSaver extends RocketSaver {
|
||||
if (config != null) {
|
||||
for (String key : config.keySet()) {
|
||||
Object value = config.get(key, null);
|
||||
writeEntry(key, value);
|
||||
writeEntry("entry", key, value, false);
|
||||
}
|
||||
}
|
||||
indent--;
|
||||
@ -427,38 +427,60 @@ public class OpenRocketSaver extends RocketSaver {
|
||||
indent--;
|
||||
writeln("</photostudio>");
|
||||
}
|
||||
|
||||
|
||||
private void writeEntry(String key, Object value) throws IOException {
|
||||
|
||||
|
||||
/**
|
||||
* Write an entry element, which has a key and type attribute, and a value, to the output.
|
||||
* For example: <entry key="key" type="string">value</entry>
|
||||
* @param tagName The tag name (e.g. 'entry')
|
||||
* @param key The key attribute value
|
||||
* @param value The value to store
|
||||
* @param saveNumbersWithExplicitType If true, numbers will be stored with an explicit type attribute ('integer' or 'double'),
|
||||
* if false, save simply as 'number'
|
||||
* @throws IOException
|
||||
*/
|
||||
private void writeEntry(String tagName, String key, Object value, boolean saveNumbersWithExplicitType) throws IOException {
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
String keyAttr;
|
||||
|
||||
|
||||
if (key != null) {
|
||||
keyAttr = "key=\"" + key + "\" ";
|
||||
} else {
|
||||
keyAttr = "";
|
||||
}
|
||||
|
||||
|
||||
final String openTag = "<" + tagName + " ";
|
||||
final String closeTag = "</" + tagName + ">";
|
||||
if (value instanceof Boolean) {
|
||||
writeln("<entry " + keyAttr + "type=\"boolean\">" + value + "</entry>");
|
||||
writeln(openTag + keyAttr + "type=\"boolean\">" + value + closeTag);
|
||||
} else if (value instanceof Number) {
|
||||
writeln("<entry " + keyAttr + "type=\"number\">" + value + "</entry>");
|
||||
if (saveNumbersWithExplicitType) {
|
||||
if (value instanceof Integer) {
|
||||
writeln(openTag + keyAttr + "type=\"integer\">" + value + closeTag);
|
||||
} else if (value instanceof Double) {
|
||||
writeln(openTag + keyAttr + "type=\"double\">" + value + closeTag);
|
||||
} else {
|
||||
writeln(openTag + keyAttr + "type=\"number\">" + value + closeTag);
|
||||
}
|
||||
} else {
|
||||
writeln(openTag + keyAttr + "type=\"number\">" + value + closeTag);
|
||||
}
|
||||
} else if (value instanceof String) {
|
||||
writeln("<entry " + keyAttr + "type=\"string\">" + TextUtil.escapeXML((String) value) + "</entry>");
|
||||
} else if (value instanceof List) {
|
||||
List<?> list = (List<?>) value;
|
||||
writeln("<entry " + keyAttr + "type=\"list\">");
|
||||
writeln(openTag + keyAttr + "type=\"string\">" + TextUtil.escapeXML(value) + closeTag);
|
||||
} else if (value instanceof List<?> list) {
|
||||
// Nested element
|
||||
writeln(openTag + keyAttr + "type=\"list\">");
|
||||
indent++;
|
||||
for (Object o : list) {
|
||||
writeEntry(null, o);
|
||||
writeEntry(tagName, null, o, saveNumbersWithExplicitType);
|
||||
}
|
||||
indent--;
|
||||
writeln("</entry>");
|
||||
writeln(closeTag);
|
||||
} else {
|
||||
// Unknown type
|
||||
log.error("Unknown configuration value type " + value.getClass() + " value=" + value);
|
||||
log.error("Unknown configuration value type {} value={}", value.getClass(), value);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user