blob: 937092276c768a4adc537da563be698c2a5ead44 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.event.jobs.consumer;
import org.osgi.annotation.versioning.ProviderType;
/**
*
* @since 1.1
*/
@ProviderType
public interface JobExecutionContext {
/**
* Report an async result.
* @param result Tje job execution result
* @throws IllegalStateException If the job is not processed asynchronously
* or if this method has already been called.
*/
void asyncProcessingFinished(JobExecutionResult result);
/**
* If a job is stoppable, it should periodically check this method
* and stop processing if the method return <code>true</code>.
* If a job is stopped and the job executor detects this, its up
* to the implementation to decide the result of such a state.
* There might be use cases where the job returns {@link JobExecutionResult#succeeded()}
* although it didn't process everything, or {@link JobExecutionResult#failed()}
* to retry later on or {@link JobExecutionResult#cancelled()}.
*
* @return Whether this job has been stopped from the outside.
*/
boolean isStopped();
/**
* Indicate that the job executor is able to report the progress.
* The progress can either be reported by a step count,
* assuming that all steps take roughly the same amount of time.
* Or the progress can be reported by an ETA containing the number
* of seconds the job needs to finish.
* This method should only be called once, consecutive calls
* have no effect.
* By using a step count of 100, the progress can be displayed
* in percentage.
* @param steps Number of total steps or -1 if the number of
* steps is unknown.
* @param eta Number of seconds the process should take or
* -1 of it's not known now.
*/
void initProgress(int steps, long eta);
/**
* Update the progress by additionally marking the provided
* number of steps as finished. If the total number of finished
* steps is equal or higher to the initial number of steps
* reported in {@link #initProgress(int, long)}, then the
* job progress is assumed to be 100%.
* This method has only effect if {@link #initProgress(int, long)}
* has been called first with a positive number for steps
* @param steps The number of finished steps since the last call.
*/
void incrementProgressCount(int steps);
/**
* Update the progress to the new ETA.
* This method has only effect if {@link #initProgress(int, long)}
* has been called first.
* @param eta The new ETA
*/
void updateProgress(long eta);
/**
* Log a message.
* A job consumer can use this method during job processing to add additional information
* about the current state of job processing.
* As calling this method adds a significant overhead it should only
* be used to log a few statements per job processing. If a consumer wants
* to output detailed information about the processing it should persists it
* by itself and not use this method for it.
* The message and the arguments are passed to the {@link java.text.MessageFormat}
* class.
* @param message A message
* @param args Additional arguments
*/
void log(String message, Object...args);
/**
* Build a result for the processing.
* @return The build for the result
*/
ResultBuilder result();
public interface ResultBuilder {
/**
* Add an optional processing message.
* This message can be viewed using {@link org.apache.sling.event.jobs.Job#getResultMessage()}.
* @param message The message
* @return The builder to continue building the result.
*/
ResultBuilder message(String message);
/**
* The job processing finished successfully.
* @return The job execution result.
*/
JobExecutionResult succeeded();
/**
* The job processing failed and might be retried.
* @return The job execution result.
*/
JobExecutionResult failed();
/**
* The job processing failed and might be retried.
* @param retryDelayInMs The new retry delay in ms.
* @return The job execution result
*/
JobExecutionResult failed(long retryDelayInMs);
/**
* The job processing failed permanently.
* @return The job execution result
*/
JobExecutionResult cancelled();
}
}