+ if (!propertiesAsElements) {
+ Map<String, String> attrs = new TreeMap<>();
+ PropertyIterator pit = node.getProperties();
+ properties: while (pit.hasNext()) {
+ Property p = pit.nextProperty();
+ if (!p.isMultiple()) {
+ String pName = p.getName();
+ if (!withMetadata && (pName.equals(Jcr.JCR_PRIMARY_TYPE) || pName.equals(Jcr.JCR_UUID)
+ || pName.equals(Jcr.JCR_CREATED) || pName.equals(Jcr.JCR_CREATED_BY)
+ || pName.equals(Jcr.JCR_LAST_MODIFIED) || pName.equals(Jcr.JCR_LAST_MODIFIED_BY)))
+ continue properties;
+ attrs.put(withPrefix(p.getName(), withPrefix), p.getString());
+ }
+ }
+ if (withMetadata && node.hasProperty(Property.JCR_UUID))
+ attrs.put("id", "urn:uuid:" + node.getProperty(Property.JCR_UUID).getString());
+ attrs.put(withPrefix ? Jcr.JCR_NAME : "name", node.getName());
+ writeStart(writer, withPrefix(node.getPrimaryNodeType().getName(), withPrefix), attrs, node.hasNodes());
+ } else {
+ if (withMetadata && node.hasProperty(Property.JCR_UUID)) {
+ writeStart(writer, withPrefix(node.getPrimaryNodeType().getName(), withPrefix), "id",
+ "urn:uuid:" + node.getProperty(Property.JCR_UUID).getString());
+ } else {
+ writeStart(writer, withPrefix(node.getPrimaryNodeType().getName(), withPrefix));
+ }
+ // name
+ writeStart(writer, withPrefix ? Jcr.JCR_NAME : "name");
+ writer.append(node.getName());
+ writeEnd(writer, withPrefix ? Jcr.JCR_NAME : "name");
+ }