in src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java [79:121]
public Node addNode(final String relPath, final String primaryNodeTypeName) throws RepositoryException {
String path = makeAbsolutePath(relPath);
NodeType nodeType = getSession().getWorkspace().getNodeTypeManager().getNodeType(primaryNodeTypeName);
ItemData itemData = ItemData.newNode(path, nodeType);
Node node = new MockNode(itemData, getSession());
getMockedSession().addItem(itemData);
node.setProperty(JcrConstants.JCR_PRIMARYTYPE, primaryNodeTypeName);
if (((MockNodeTypeManager)getSession().getWorkspace().getNodeTypeManager()).isMode(ResolveMode.ONLY_REGISTERED)) {
// auto-add any autocreated children
NodeDefinition[] childNodeDefinitions = nodeType.getChildNodeDefinitions();
for (NodeDefinition nodeDefinition : childNodeDefinitions) {
if (nodeDefinition.isAutoCreated()) {
String defaultPrimaryTypeName = nodeDefinition.getDefaultPrimaryTypeName();
node.addNode(nodeDefinition.getName(), defaultPrimaryTypeName);
}
}
// auto-add any autocreated properties
PropertyDefinition[] propDefinitions = nodeType.getPropertyDefinitions();
for (PropertyDefinition propDefinition : propDefinitions) {
if (propDefinition.isAutoCreated()) {
Value[] defaultValues = propDefinition.getDefaultValues();
if (propDefinition.isMultiple()) {
node.setProperty(propDefinition.getName(), defaultValues);
} else if (defaultValues.length > 0) {
node.setProperty(propDefinition.getName(), defaultValues[0]);
} else {
// compute system generated property values
maybeSetGeneratedPropertyValue(node, propDefinition);
}
}
}
}
// special handling for some node types
if (StringUtils.equals(primaryNodeTypeName, JcrConstants.NT_FILE)) {
node.setProperty(JcrConstants.JCR_CREATED, Calendar.getInstance());
node.setProperty(JCR_CREATEDBY, getMockedSession().getUserID());
}
return node;
}