in vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JcrSysViewTransformer.java [192:262]
public void startNode(DocViewNode2 ni) throws RepositoryException {
currentSubPath.add(ni.getName());
if (ignoreLevel > 0) {
DocViewSAXHandler.log.trace("ignoring child node of excluded node: {}", ni.getName());
ignoreLevel++;
return;
}
if (excludedNodeNames.contains(ni.getName())) {
DocViewSAXHandler.log.trace("Ignoring excluded node {}", ni.getName());
ignoreLevel = 1;
return;
}
DocViewSAXHandler.log.trace("Transforming element to sysview {}", ni.getName());
try {
AttributesImpl attrs = new AttributesImpl();
// use qualified name due to https://issues.apache.org/jira/browse/OAK-9586
attrs.addAttribute(Name.NS_SV_URI, "name", "sv:name", "CDATA", resolver.getJCRName(ni.getName()));
handler.startElement(Name.NS_SV_URI, "node", "sv:node", attrs);
// add the properties
for (DocViewProperty2 p: ni.getProperties()) {
if (p.getStringValue().isPresent()) {
attrs = new AttributesImpl();
// use qualified name due to https://issues.apache.org/jira/browse/OAK-9586
attrs.addAttribute(Name.NS_SV_URI, "name", "sv:name", "CDATA", resolver.getJCRName(p.getName()));
attrs.addAttribute(Name.NS_SV_URI, "type", "sv:type", "CDATA", PropertyType.nameFromValue(p.getType()));
if (p.isMultiValue()) {
attrs.addAttribute(Name.NS_SV_URI, "multiple", "sv:multiple", "CDATA", "true");
}
handler.startElement(Name.NS_SV_URI, "property", "sv:property", attrs);
// serialize binary reference properties as empty and remember them for later
if (PropertyType.BINARY == p.getType() && p.isReferenceProperty()) {
String path = parent.getPath();
for (Name n : currentSubPath) {
path += "/" + resolver.getJCRName(n);
}
List<DocViewProperty2> skipped = skippedProps.get(path);
if (skipped == null) {
skipped = new ArrayList<>();
skippedProps.put(path, skipped);
}
skipped.add(p);
DocViewSAXHandler.log.trace("On node '{}': '{}' is a binary reference property (not supported by sysview import)",
path, resolver.getJCRName(ni.getName()), resolver.getJCRName(p.getName()));
handler.startElement(Name.NS_SV_URI, "value", "sv:value", DocViewSAXHandler.EMPTY_ATTRIBUTES);
handler.characters(new char[0], 0, 0);
handler.endElement(Name.NS_SV_URI, "value", "sv:value");
} else {
for (String v: p.getStringValues()) {
handler.startElement(Name.NS_SV_URI, "value", "sv:value", DocViewSAXHandler.EMPTY_ATTRIBUTES);
handler.characters(v.toCharArray(), 0, v.length());
handler.endElement(Name.NS_SV_URI, "value", "sv:value");
}
}
handler.endElement(Name.NS_SV_URI, "property", "sv:property");
}
}
} catch (SAXException e) {
throw new InvalidSerializedDataException("Invalid sysview", e);
}
if (rootName == null) {
rootName = ni.getName();
}
}