in repository/service/src/main/java/org/apache/karaf/cave/repository/service/bundlerepository/StaxParser.java [121:180]
private static void writeClause(XMLStreamWriter writer, String element, String namespace, Map<String, String> directives, Map<String, Object> attributes) throws XMLStreamException {
writer.writeStartElement(REPOSITORY_NAMESPACE, element);
writer.writeAttribute(NAMESPACE, namespace);
for (Map.Entry<String, String> dir : directives.entrySet()) {
writer.writeStartElement(REPOSITORY_NAMESPACE, DIRECTIVE);
writer.writeAttribute(NAME, dir.getKey());
writer.writeAttribute(VALUE, dir.getValue());
writer.writeEndElement();
}
for (Map.Entry<String, Object> att : attributes.entrySet()) {
String key = att.getKey();
Object val = att.getValue();
writer.writeStartElement(REPOSITORY_NAMESPACE, ATTRIBUTE);
writer.writeAttribute(NAME, key);
if (val instanceof Version) {
writer.writeAttribute(TYPE, "Version");
} else if (val instanceof Long) {
writer.writeAttribute(TYPE, "Long");
} else if (val instanceof Double) {
writer.writeAttribute(TYPE, "Double");
} else if (val instanceof Iterable) {
Iterable it = (Iterable) att.getValue();
String scalar = null;
for (Object o : it) {
String ts;
if (o instanceof String) {
ts = "String";
} else if (o instanceof Long) {
ts = "Long";
} else if (o instanceof Double) {
ts = "Double";
} else if (o instanceof Version) {
ts = "Version";
} else {
throw new IllegalArgumentException("Unsupported scalar type: " + o);
}
if (scalar == null) {
scalar = ts;
} else if (!scalar.equals(ts)) {
throw new IllegalArgumentException("Unconsistent list type for attribute " + key);
}
}
writer.writeAttribute(TYPE, "List<" + scalar + ">");
StringBuilder sb = new StringBuilder();
boolean first = true;
for (Object o : it) {
if (first) {
first = false;
} else {
sb.append(",");
}
sb.append(o.toString().replace(",", "\\,"));
}
val = sb.toString();
}
writer.writeAttribute(VALUE, val.toString());
writer.writeEndElement();
}
writer.writeEndElement();
}