in src/main/java/org/apache/sling/feature/io/json/ManifestUtils.java [137:240]
public static List<ParsedHeaderClause> normalizeCapabilityClauses(
List<ParsedHeaderClause> clauses, String mv)
throws BundleException
{
if (!mv.equals("2") && !clauses.isEmpty())
{
// Should we error here if we are not an R4 bundle?
}
// Convert attributes into specified types.
for (ParsedHeaderClause clause : clauses)
{
for (Entry<String, String> entry : clause.m_types.entrySet())
{
String type = entry.getValue();
if (!type.equals("String"))
{
if (type.equals("Double"))
{
clause.m_attrs.put(
entry.getKey(),
new Double(clause.m_attrs.get(entry.getKey()).toString().trim()));
}
else if (type.equals("Version"))
{
clause.m_attrs.put(
entry.getKey(),
new Version(clause.m_attrs.get(entry.getKey()).toString().trim()));
}
else if (type.equals("Long"))
{
clause.m_attrs.put(
entry.getKey(),
new Long(clause.m_attrs.get(entry.getKey()).toString().trim()));
}
else if (type.startsWith("List"))
{
int startIdx = type.indexOf('<');
int endIdx = type.indexOf('>');
if (((startIdx > 0) && (endIdx <= startIdx))
|| ((startIdx < 0) && (endIdx > 0)))
{
throw new BundleException(
"Invalid Provide-Capability attribute list type for '"
+ entry.getKey()
+ "' : "
+ type);
}
String listType = "String";
if (endIdx > startIdx)
{
listType = type.substring(startIdx + 1, endIdx).trim();
}
List<String> tokens = parseDelimitedString(
clause.m_attrs.get(entry.getKey()).toString(), ",", false);
List<Object> values = new ArrayList<>(tokens.size());
for (String token : tokens)
{
if (listType.equals("String"))
{
values.add(token);
}
else if (listType.equals("Double"))
{
values.add(new Double(token.trim()));
}
else if (listType.equals("Version"))
{
values.add(new Version(token.trim()));
}
else if (listType.equals("Long"))
{
values.add(new Long(token.trim()));
}
else
{
throw new BundleException(
"Unknown Provide-Capability attribute list type for '"
+ entry.getKey()
+ "' : "
+ type);
}
}
clause.m_attrs.put(
entry.getKey(),
values);
}
else
{
throw new BundleException(
"Unknown Provide-Capability attribute type for '"
+ entry.getKey()
+ "' : "
+ type);
}
}
}
}
return clauses;
}