public Node addNode()

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;
    }