[ https://issues.apache.org/jira/browse/SLING-11837?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Robert Munteanu reassigned SLING-11837: --------------------------------------- Assignee: Robert Munteanu > Align index definition generation logic with the one from Oak > ------------------------------------------------------------- > > Key: SLING-11837 > URL: https://issues.apache.org/jira/browse/SLING-11837 > Project: Sling > Issue Type: Improvement > Components: Content-Package to Feature Model Converter > Reporter: Robert Munteanu > Assignee: Robert Munteanu > Priority: Major > Fix For: Content-Package to Feature Model Converter 1.3.2 > > > The logic used to generate the "str:" prefix for string values comes from > here: > https://github.com/apache/sling-org-apache-sling-feature-cpconverter/blob/a98317ba836d9acedb334518a438f4bcc8ce721d/src/main/java/org/apache/sling/feature/cpconverter/index/IndexDefinitionsJsonWriter.java#L108 > For prefixes, we should probably use the logic used in Oak. AFAIK this is > implemented in oak-store-spi, package org.apache.jackrabbit.oak.json, > serialize: > {noformat} > public void serialize(PropertyState property, Type<?> type, int index) { > if (type == BOOLEAN) { > json.value(property.getValue(BOOLEAN, index)); > } else if (type == LONG) { > json.value(property.getValue(LONG, index)); > } else if (type == DOUBLE) { > Double value = property.getValue(DOUBLE, index); > if (value.isNaN() || value.isInfinite()) { > json.value(TypeCodes.encode(type.tag(), value.toString())); > } else { > json.encodedValue(value.toString()); > } > } else if (type == BINARY) { > Blob blob = property.getValue(BINARY, index); > json.value(TypeCodes.encode(type.tag(), blobs.serialize(blob))); > } else { > String value = property.getValue(STRING, index); > if (type != STRING || TypeCodes.split(value) != -1) { > value = TypeCodes.encode(type.tag(), value); > } > json.value(value); > } > } > public static int split(String jsonString) { > if (jsonString.startsWith(":blobId:")) { // See OAK-428 > return 7; > } > else if (jsonString.length() >= 4 && jsonString.charAt(3) == ':') { > return 3; > } > else { > return -1; > } > } > {noformat} > So basically, the logic for String types is: if there is a ':' at position 4, > then the "str:" prefix is needed. Otherwise, not. -- This message was sent by Atlassian Jira (v8.20.10#820010)