Search in sources :

Example 6 with VersioningConfiguration

use of org.apache.sling.servlets.post.VersioningConfiguration in project sling by apache.

the class AbstractPostOperation method run.

/**
     * Prepares and finalizes the actual operation. Preparation encompasses
     * getting the absolute path of the item to operate on by calling the
     * {@link #getResourcePath(SlingHttpServletRequest)} method and setting the
     * location and parent location on the response. After the operation has
     * been done in the {@link #doRun(SlingHttpServletRequest, PostResponse, List)}
     * method the session is saved if there are unsaved modifications. In case
     * of errors, the unsaved changes in the session are rolled back.
     *
     * @param request the request to operate on
     * @param response The <code>PostResponse</code> to record execution
     *            progress.
     * @param processors The array of processors
     */
@Override
public void run(final SlingHttpServletRequest request, final PostResponse response, final SlingPostProcessor[] processors) {
    final VersioningConfiguration versionableConfiguration = getVersioningConfiguration(request);
    try {
        // calculate the paths
        String path = this.getResourcePath(request);
        response.setPath(path);
        // location
        response.setLocation(externalizePath(request, path));
        // parent location
        path = ResourceUtil.getParent(path);
        if (path != null) {
            response.setParentLocation(externalizePath(request, path));
        }
        final List<Modification> changes = new ArrayList<>();
        doRun(request, response, changes);
        // invoke processors
        if (processors != null) {
            for (SlingPostProcessor processor : processors) {
                processor.process(request, changes);
            }
        }
        // check modifications for remaining postfix and store the base path
        final Map<String, String> modificationSourcesContainingPostfix = new HashMap<>();
        final Set<String> allModificationSources = new HashSet<>(changes.size());
        for (final Modification modification : changes) {
            final String source = modification.getSource();
            if (source != null) {
                allModificationSources.add(source);
                final int atIndex = source.indexOf('@');
                if (atIndex > 0) {
                    modificationSourcesContainingPostfix.put(source.substring(0, atIndex), source);
                }
            }
        }
        // fail if any of the base paths (before the postfix) which had a postfix are contained in the modification set
        if (modificationSourcesContainingPostfix.size() > 0) {
            for (final Map.Entry<String, String> sourceToCheck : modificationSourcesContainingPostfix.entrySet()) {
                if (allModificationSources.contains(sourceToCheck.getKey())) {
                    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Postfix-containing path " + sourceToCheck.getValue() + " contained in the modification list. Check configuration.");
                    return;
                }
            }
        }
        final Set<String> nodesToCheckin = new LinkedHashSet<>();
        // set changes on html response
        for (Modification change : changes) {
            switch(change.getType()) {
                case MODIFY:
                    response.onModified(change.getSource());
                    break;
                case DELETE:
                    response.onDeleted(change.getSource());
                    break;
                case MOVE:
                    response.onMoved(change.getSource(), change.getDestination());
                    break;
                case COPY:
                    response.onCopied(change.getSource(), change.getDestination());
                    break;
                case CREATE:
                    response.onCreated(change.getSource());
                    if (versionableConfiguration.isCheckinOnNewVersionableNode()) {
                        nodesToCheckin.add(change.getSource());
                    }
                    break;
                case ORDER:
                    response.onChange("ordered", change.getSource(), change.getDestination());
                    break;
                case CHECKOUT:
                    response.onChange("checkout", change.getSource());
                    nodesToCheckin.add(change.getSource());
                    break;
                case CHECKIN:
                    response.onChange("checkin", change.getSource());
                    nodesToCheckin.remove(change.getSource());
                    break;
                case RESTORE:
                    response.onChange("restore", change.getSource());
                    break;
            }
        }
        if (isResourceResolverCommitRequired(request)) {
            request.getResourceResolver().commit();
        }
        if (!isSkipCheckin(request)) {
            // now do the checkins
            for (String checkinPath : nodesToCheckin) {
                if (this.jcrSsupport.checkin(request.getResourceResolver().getResource(checkinPath))) {
                    response.onChange("checkin", checkinPath);
                }
            }
        }
    } catch (Exception e) {
        log.error("Exception during response processing.", e);
        response.setError(e);
    } finally {
        if (isResourceResolverCommitRequired(request)) {
            request.getResourceResolver().revert();
        }
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Modification(org.apache.sling.servlets.post.Modification) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) VersioningConfiguration(org.apache.sling.servlets.post.VersioningConfiguration) NoSuchElementException(java.util.NoSuchElementException) PersistenceException(org.apache.sling.api.resource.PersistenceException) SlingPostProcessor(org.apache.sling.servlets.post.SlingPostProcessor) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 7 with VersioningConfiguration

use of org.apache.sling.servlets.post.VersioningConfiguration in project sling by apache.

the class SlingPostServlet method createRequestVersioningConfiguration.

private VersioningConfiguration createRequestVersioningConfiguration(SlingHttpServletRequest request) {
    VersioningConfiguration cfg = baseVersioningConfiguration.clone();
    String paramValue = request.getParameter(PARAM_CHECKIN_ON_CREATE);
    if (paramValue != null) {
        cfg.setCheckinOnNewVersionableNode(Boolean.parseBoolean(paramValue));
    }
    paramValue = request.getParameter(PARAM_AUTO_CHECKOUT);
    if (paramValue != null) {
        cfg.setAutoCheckout(Boolean.parseBoolean(paramValue));
    }
    paramValue = request.getParameter(PARAM_AUTO_CHECKIN);
    if (paramValue != null) {
        cfg.setAutoCheckin(Boolean.parseBoolean(paramValue));
    }
    return cfg;
}
Also used : VersioningConfiguration(org.apache.sling.servlets.post.VersioningConfiguration)

Example 8 with VersioningConfiguration

use of org.apache.sling.servlets.post.VersioningConfiguration in project sling by apache.

the class SlingPostServlet method createBaseVersioningConfiguration.

private VersioningConfiguration createBaseVersioningConfiguration(Config config) {
    VersioningConfiguration cfg = new VersioningConfiguration();
    cfg.setCheckinOnNewVersionableNode(config.servlet_post_checkinNewVersionableNodes());
    cfg.setAutoCheckout(config.servlet_post_autoCheckout());
    cfg.setAutoCheckin(config.servlet_post_autoCheckin());
    return cfg;
}
Also used : VersioningConfiguration(org.apache.sling.servlets.post.VersioningConfiguration)

Aggregations

VersioningConfiguration (org.apache.sling.servlets.post.VersioningConfiguration)8 Resource (org.apache.sling.api.resource.Resource)3 IOException (java.io.IOException)2 PersistenceException (org.apache.sling.api.resource.PersistenceException)2 Modification (org.apache.sling.servlets.post.Modification)2 SlingPostProcessor (org.apache.sling.servlets.post.SlingPostProcessor)2 RequestProperty (org.apache.sling.servlets.post.impl.helper.RequestProperty)2 InputStream (java.io.InputStream)1 URISyntaxException (java.net.URISyntaxException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedHashSet (java.util.LinkedHashSet)1 Map (java.util.Map)1 NoSuchElementException (java.util.NoSuchElementException)1 Node (javax.jcr.Node)1 RepositoryException (javax.jcr.RepositoryException)1 Session (javax.jcr.Session)1 ServletException (javax.servlet.ServletException)1 RequestParameter (org.apache.sling.api.request.RequestParameter)1