protected void updateNodeType()

in src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractCreateOperation.java [156:189]


    protected void updateNodeType(
            final ResourceResolver resolver,
            final String path,
            final Map<String, RequestProperty> reqProperties,
            final List<Modification> changes,
            final VersioningConfiguration versioningConfiguration)
            throws PersistenceException {
        final String nodeType = getPrimaryType(reqProperties, path);
        if (nodeType != null) {
            final Resource rsrc = resolver.getResource(path);
            final ModifiableValueMap mvm = rsrc.adaptTo(ModifiableValueMap.class);
            if (mvm != null) {
                final Object node = this.jcrSupport.getNode(rsrc);
                final boolean wasVersionable = (node == null ? false : this.jcrSupport.isVersionable(rsrc));

                if (node != null) {
                    this.jcrSupport.checkoutIfNecessary(rsrc, changes, versioningConfiguration);
                    this.jcrSupport.setPrimaryNodeType(node, nodeType);
                } else {
                    mvm.put(JcrConstants.JCR_PRIMARYTYPE, nodeType);
                }

                if (node != null) {
                    // this is a bit of a cheat; there isn't a formal checkout, but assigning
                    // the mix:versionable mixin does an implicit checkout
                    if (!wasVersionable
                            && versioningConfiguration.isCheckinOnNewVersionableNode()
                            && this.jcrSupport.isVersionable(rsrc)) {
                        changes.add(Modification.onCheckout(path));
                    }
                }
            }
        }
    }