public ExecutionResult execute()

in src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java [383:449]


    public ExecutionResult execute(ResourceResolver resolver, Pipe pipe, Map additionalBindings, OutputWriter writer, boolean save) {
        checkPermissions(resolver, configuration.executionPermissionResource());
        boolean success = false;
        PipeMonitor monitor = null;
        ExecutionResult result = null;
        long start = System.currentTimeMillis();
        try {
            boolean readOnly = false;
            if (additionalBindings != null){
                pipe.getBindings().addBindings(additionalBindings);
                readOnly = (Boolean)additionalBindings.getOrDefault(BasePipe.READ_ONLY, false);
            }

            if (! pipe.isDryRun() && readOnly && pipe.modifiesContent()) {
                throw new IllegalArgumentException("This pipe modifies content, you should use a POST request");
            }
            log.debug("[{}] before execution hook is called", pipe);
            pipe.before();
            log.info("[{}] execution starts, save ({})", pipe, save);
            Resource confResource = pipe.getResource();
            writer.setPipe(pipe);
            if (isRunning(confResource)){
                throw new IllegalStateException("Pipe is already running");
            }
            monitor = monitoredPipes.get(confResource.getPath());
            writeStatus(pipe, STATUS_STARTED, null);
            resolver.commit();
            if (monitor != null){
                monitor.starts();
            }
            result = internalExecute(resolver, writer, pipe);
            if (save && pipe.modifiesContent()) {
                persist(resolver, pipe, result, null);
            }
            if (writer.autoClose()) {
                writer.ends();
            }
            if (monitor != null){
                monitor.ends();
                monitor.setLastResult(result);
            }
            success = true;
            return result;
        } catch (PersistenceException e) {
            throw new IllegalStateException("persistence error while executing pipe", e);
        } catch (InterruptedException ie) {
            log.error("execution interrupted", ie);
            Thread.currentThread().interrupt();
        } finally {
            try {
                writeStatus(pipe, STATUS_FINISHED, result);
                resolver.commit();
            } catch (PersistenceException e) {
                log.error("unable to make final save", e);
            }
            long length = System.currentTimeMillis() - start;
            String time = length < 1000 ? length + "ms" : (length / 1000) + "s";
            log.info("[{}] done executing in {}.", pipe.getName(), time);
            log.debug("[{}] after execution hook is called", pipe);
            pipe.after();
            if (!success && monitor != null){
                monitor.failed();
            }
        }
        //returning void result if we get there
        return new ExecutionResult(writer);
    }