private void processDeletes()

in src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java [306:342]


    private void processDeletes(
            final ResourceResolver resolver,
            final Map<String, RequestProperty> reqProperties,
            final List<Modification> changes,
            final VersioningConfiguration versioningConfiguration)
            throws PersistenceException {

        for (final RequestProperty property : reqProperties.values()) {

            if (property.isDelete()) {
                final Resource parent = resolver.getResource(property.getParentPath());
                if (parent == null) {
                    continue;
                }
                this.jcrSupport.checkoutIfNecessary(parent, changes, versioningConfiguration);

                final ValueMap vm = parent.adaptTo(ModifiableValueMap.class);
                if (vm == null) {
                    throw new PersistenceException("Resource '" + parent.getPath() + "' is not modifiable.");
                }
                if (vm.containsKey(property.getName())) {
                    if (JcrConstants.JCR_MIXINTYPES.equals(property.getName())) {
                        vm.put(JcrConstants.JCR_MIXINTYPES, new String[0]);
                    } else {
                        vm.remove(property.getName());
                    }
                } else {
                    final Resource childRsrc = resolver.getResource(parent.getPath() + '/' + property.getName());
                    if (childRsrc != null) {
                        resolver.delete(childRsrc);
                    }
                }

                changes.add(Modification.onDeleted(property.getPath()));
            }
        }
    }