blob: 710e730116dce7471067360338b6dc81623ccb5e [file] [log] [blame]
/*
1 * 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;
import java.util.Calendar;
import java.util.Set;
import org.osgi.annotation.versioning.ProviderType;
/**
* A job
*
*
* Property Types
*
* In general all scalar types and all serializable classes are supported as
* property types. However, in order for deseralizing classes these must be
* exported. Serializable classes are not searchable in the query either.
* Due to the above mentioned potential problems, it is advisable to not use
* custom classes as job properties, but rather use out of the box supported
* types in combination with collections.
*
* A resource provider might convert numbers to a different type, JCR is well-known
* for this behavior as it only supports long but neither integer nor short.
* Therefore if you are dealing with numbers, use the {@link #getProperty(String, Class)}
* method to get the correct type instead of directly casting it.
*
* @since 1.2
*/
@ProviderType
public interface Job {
/**
* The name of the job queue processing this job.
* This property is set by the job handling when the job is processed.
* If this property is set by the client creating the job it's value is ignored
*/
String PROPERTY_JOB_QUEUE_NAME = "event.job.queuename";
/**
* The property to track the retry count for jobs. Value is of type Integer.
* On first execution the value of this property is zero.
* This property is managed by the job handling.
* If this property is set by the client creating the job it's value is ignored
*/
String PROPERTY_JOB_RETRY_COUNT = "event.job.retrycount";
/**
* The property to track the retry maximum retry count for jobs. Value is of type Integer.
* This property is managed by the job handling.
* If this property is set by the client creating the job it's value is ignored
*/
String PROPERTY_JOB_RETRIES = "event.job.retries";
/**
* This property is set by the job handling and contains a calendar object
* specifying the date and time when this job has been created.
* If this property is set by the client creating the job it's value is ignored
*/
String PROPERTY_JOB_CREATED = "slingevent:created";
/**
* This property is set by the job handling and contains the Sling instance ID
* of the instance where this job has been created.
*/
String PROPERTY_JOB_CREATED_INSTANCE = "slingevent:application";
/**
* This property is set by the job handling and contains the Sling instance ID
* of the instance where this job should be processed.
*/
String PROPERTY_JOB_TARGET_INSTANCE = "event.job.application";
/**
* This property is set by the job handling and contains a calendar object
* specifying the date and time when this job has been started.
* This property is only set if the job is currently in processing
* If this property is set by the client creating the job it's value is ignored
*/
String PROPERTY_JOB_STARTED_TIME = "event.job.started.time";
/**
* The property to set a retry delay. Value is of type Long and specifies milliseconds.
* This property can be used to override the retry delay from the queue configuration.
* But it should only be used very rarely as the queue configuration should be the one
* in charge.
*/
String PROPERTY_JOB_RETRY_DELAY = "event.job.retrydelay";
/**
* This property contains the optional output log of a job consumer.
* The value of this property is a string array.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_JOB_PROGRESS_LOG = "slingevent:progressLog";
/**
* This property contains the optional ETA for a job.
* The value of this property is a {@link Calendar} object.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_JOB_PROGRESS_ETA = "slingevent:progressETA";
/**
* This property contains optional progress information about a job,
* the number of steps the job consumer will perform. Each step is
* assumed to consume roughly the same amount if time.
* The value of this property is an integer.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_JOB_PROGRESS_STEPS = "slingevent:progressSteps";
/**
* This property contains optional progress information about a job,
* the number of completed steps.
* The value of this property is an integer.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_JOB_PROGRESS_STEP = "slingevent:progressStep";
/**
* This property contains the optional result message of a job consumer.
* The value of this property is a string.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_RESULT_MESSAGE = "slingevent:resultMessage";
/**
* This property contains the finished date once a job is marked as finished.
* The value of this property is a {@link Calendar} object.
* This property is read-only and can't be specified when the job is created.
* @since 1.3
*/
String PROPERTY_FINISHED_DATE = "slingevent:finishedDate";
/**
* This is an optional property containing a human readable title for
* the job
* @since 1.3
*/
String PROPERTY_JOB_TITLE = "slingevent:jobTitle";
/**
* This is an optional property containing a human readable description for
* the job
* @since 1.3
*/
String PROPERTY_JOB_DESCRIPTION = "slingevent:jobDescription";
/**
* The current job state.
* @since 1.3
*/
enum JobState {
QUEUED, // waiting in queue after adding or for restart after failing
ACTIVE, // job is currently in processing
SUCCEEDED, // processing finished successfully
STOPPED, // processing was stopped by a user
GIVEN_UP, // number of retries reached
ERROR, // processing signaled CANCELLED or throw an exception
DROPPED // dropped jobs
};
/**
* The job topic.
* @return The job topic
*/
String getTopic();
/**
* Unique job ID.
* @return The unique job ID.
*/
String getId();
/**
* Get the value of a property.
* @param name The property name
* @return The value of the property or <code>null</code>
*/
Object getProperty(String name);
/**
* Get all property names.
* @return A set of property names.
*/
Set<String> getPropertyNames();
/**
* Get a named property and convert it into the given type.
* This method does not support conversion into a primitive type or an
* array of a primitive type. It should return <code>null</code> in this
* case.
*
* @param name The name of the property
* @param type The class of the type
* @param <T> The class of the type
* @return Return named value converted to type T or <code>null</code> if
* non existing or can't be converted.
*/
<T> T getProperty(String name, Class<T> type);
/**
* Get a named property and convert it into the given type.
* This method does not support conversion into a primitive type or an
* array of a primitive type. It should return the default value in this
* case.
*
* @param name The name of the property
* @param defaultValue The default value to use if the named property does
* not exist or cannot be converted to the requested type. The
* default value is also used to define the type to convert the
* value to. If this is <code>null</code> any existing property is
* not converted.
* @param <T> The class of the type
* @return Return named value converted to type T or the default value if
* non existing or can't be converted.
*/
<T> T getProperty(String name, T defaultValue);
/**
* On first execution the value of this property is zero.
* This property is managed by the job handling.
* @return The retry count.
*/
int getRetryCount();
/**
* The property to track the retry maximum retry count for jobs.
* This property is managed by the job handling.
* @return The number of retries.
*/
int getNumberOfRetries();
/**
* The name of the job queue processing this job.
* This property is set by the job handling when the job is processed.
* @return The queue name or <code>null</code>
*/
String getQueueName();
/**
* This property is set by the job handling and contains the Sling instance ID
* of the instance where this job should be processed.
* @return The sling ID or <code>null</code>
*/
String getTargetInstance();
/**
* This property is set by the job handling and contains a calendar object
* specifying the date and time when this job has been started.
* This property is only set if the job is currently in processing
* @return The time the processing started or {@code null}.
*/
Calendar getProcessingStarted();
/**
* This property is set by the job handling and contains a calendar object
* specifying the date and time when this job has been created.
* @return The time the job was created.
*/
Calendar getCreated();
/**
* This property is set by the job handling and contains the Sling instance ID
* of the instance where this job has been created.
* @return The instance id the job was created on
*/
String getCreatedInstance();
/**
* Get the job state
* @return The job state.
* @since 1.3
*/
JobState getJobState();
/**
* If the job is cancelled or succeeded, this method will return the finish date.
* @return The finish date or <code>null</code>
* @since 1.3
*/
Calendar getFinishedDate();
/**
* This method returns the message from the last job processing, regardless
* whether the processing failed, succeeded or was cancelled. The message
* is optional and can be set by a job consumer.
* @return The result message or <code>null</code>
* @since 1.3
*/
String getResultMessage();
/**
* This method returns the optional progress log from the last job
* processing. The log is optional and can be set by a job consumer.
* @return The log or <code>null</code>
* @since 1.3
*/
String[] getProgressLog();
/**
* If the job is in processing, return the optional progress step
* count if available. The progress information is optional and
* can be set by a job consumer.
* @return The progress step count or <code>-1</code>.
* @since 1.3
*/
int getProgressStepCount();
/**
* If the job is in processing, return the optional information
* about the finished steps. This progress information is optional
* and can be set by a job consumer.
* In combination with {@link #getProgressStepCount()} this can
* be used to calculate a progress bar.
* @return The number of the finished progress step or <code>0</code>
* @since 1.3
*/
int getFinishedProgressStep();
/**
* If the job is in processing, return the optional ETA for this job.
* The progress information is optional and can be set by a job consumer.
* @since 1.3
* @return The estimated ETA or <code>null</code>
*/
Calendar getProgressETA();
}