Index: scheduler/src/main/resources/XWiki/SchedulerJobClass =================================================================== --- scheduler/src/main/resources/XWiki/SchedulerJobClass (revision 0) +++ scheduler/src/main/resources/XWiki/SchedulerJobClass (revision 0) @@ -0,0 +1,112 @@ + + + +XWiki +SchedulerJobClass + +en +0 + + +XWiki.Admin + +XWiki.Admin +1190366400000 +1190399853000 +1190399853000 +1.2 + + + + +Updated class property + +XWiki.SchedulerJobClass + + + + + + + + + +cron +4 +Cron Expression +30 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + + +jobClass +2 +Job Class +60 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + +FullyRenderedText + +Text +jobDescription +6 +Job Description +10 +45 + +0 + + +com.xpn.xwiki.objects.classes.TextAreaClass + + + +jobName +1 +Job Name +60 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + + + +status +3 +Status +30 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + + + \ No newline at end of file Index: scheduler/src/main/resources/XWiki/SchedulerJobSheet =================================================================== --- scheduler/src/main/resources/XWiki/SchedulerJobSheet (revision 0) +++ scheduler/src/main/resources/XWiki/SchedulerJobSheet (revision 0) @@ -0,0 +1,75 @@ + + + +XWiki +SchedulerJobSheet + +en +0 + +XWiki.jerome +XWiki.Admin + +XWiki.Admin +1190369203000 +1190401275000 +1190401275000 +1.5 + + + + + + + +XWiki.TagClass + + + + + + + + +0 +input +1 +tags +1 +Tags +1 + + ,| +30 +0 + +com.xpn.xwiki.objects.classes.StaticListClass + + +XWiki.SchedulerJobSheet +0 +XWiki.TagClass + + + + +Name : $doc.display('jobName') + +Description : $doc.display('jobDescription') + +Class : $doc.display('jobClass') + +Cron : $doc.display('cron') + +## We do not want to display the status in inline mode +## As it is supposed to be a "read-only" property +#set($status=$doc.display('status','view')) +#if($status=="") #set($status="None") #end +Status : $status + +Script : $doc.display('script') + +#if($context.action=="view") +[Go back to the list>Scheduler.WebHome] +#end + Index: scheduler/src/main/resources/XWiki/SchedulerJobTemplate =================================================================== --- scheduler/src/main/resources/XWiki/SchedulerJobTemplate (revision 0) +++ scheduler/src/main/resources/XWiki/SchedulerJobTemplate (revision 0) @@ -0,0 +1,168 @@ + + + +XWiki +SchedulerJobTemplate + +en +0 + +XWiki.jerome +XWiki.Admin + +XWiki.jerome +1190368951000 +1190369194000 +1190377428000 +1.1 + + + + + + + +XWiki.SchedulerJobClass + + + + + + + + + +cron +4 +Cron Expression +30 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + + +jobClass +2 +Job Class +60 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + +FullyRenderedText + +Text +jobDescription +6 +Job Description +10 +45 + +0 + + +com.xpn.xwiki.objects.classes.TextAreaClass + + + +jobName +1 +Job Name +60 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + + + +status +3 +Status +30 + +0 + + +com.xpn.xwiki.objects.classes.StringClass + + +XWiki.SchedulerJobTemplate +0 +XWiki.SchedulerJobClass + +0 0 12 * * ? + + +com.xpn.xwiki.plugin.scheduler.GroovyJob + + + + + + + + + + + + + + + + +XWiki.TagClass + + + + + + + + +0 +input +1 +tags +1 +Tags +1 + + ,| +30 +0 + +com.xpn.xwiki.objects.classes.StaticListClass + + +XWiki.SchedulerJobTemplate +0 +XWiki.TagClass + + + + +#includeInContext('XWiki.SchedulerJobSheet') + \ No newline at end of file Index: scheduler/src/main/resources/Scheduler/WebHome =================================================================== --- scheduler/src/main/resources/Scheduler/WebHome (revision 0) +++ scheduler/src/main/resources/Scheduler/WebHome (revision 0) @@ -0,0 +1,176 @@ + + + +Scheduler +WebHome + +en +0 + +XWiki.jerome +XWiki.Admin + +XWiki.Admin +1190368898000 +1190401180000 +1190401180000 +1.22 + + + + + + + +XWiki.TagClass + + + + + + + + +0 +input +1 +tags +1 +Tags +1 + + ,| +30 +0 + +com.xpn.xwiki.objects.classes.StaticListClass + + +Scheduler.WebHome +0 +XWiki.TagClass + + + + +## First, set a shortcut to our Scheduler plugin +## +#set($scheduler=$xwiki.scheduler) +## +## If the sheet is called with an action ($request.do), let us first process this action +## Possible values are : "schedule", "pause", "resume", "unschedule", "delete" +## +#if($request.do!="") + ## + ## Obtain the Job document and object for which the action has been called + ## + #set($tJobHolder=$request.which) + #set($jobDoc=$xwiki.getDocument($tJobHolder)) + #set($jobObj=$jobDoc.getObject('XWiki.SchedulerJobClass')) + #if($request.do=="schedule") + ## + ## Schedule a job + ## + #set($ok=$scheduler.scheduleJob($jobObj)) + #if($ok==false) + #error("$context.get('error')") + #else + #info("Job ~~$jobObj.get('jobName')~~ *scheduled*. Next fire time : *$scheduler.getNextFireTime($jobObj)*") + #end + #elseif($request.do=="pause") + ## + ## Pause a scheduled job + ## + #set($ok=$scheduler.pauseJob($jobObj)) + #if($ok==false) + #error("$context.get('error')") + #else + #info("Job ~~$jobObj.get('jobName')~~ *paused*.") + #end + #elseif($request.do=="resume") + ## + ## Resume a paused job + ## + #set($ok=$scheduler.resumeJob($jobObj)) + #if($ok==false) + #error("$context.get('error')") + #else + #info("Job ~~$jobObj.get('jobName')~~ *resumed*. Next fire time : *$scheduler.getNextFireTime($jobObj)*") + #end + #elseif($request.do=="unschedule") + ## + ## Unschedule a scheduled job (paused or not) + ## + #set($ok=$scheduler.unscheduleJob($jobObj)) + #if($ok==false) + #error("$context.get('error')") + #else + #info("Job ~~$jobObj.get('jobName')~~ *unscheduled*") + #end + #elseif($request.do=="delete") + ## + ## Delete a job + ## First unschedule it (if needed), then delete its document holder + ## + #set($jobName=$jobObj.get('jobName')) + #if($jobObj.get("status")=="Normal"||$jobObj.get('status')=="Paused") + #set($ok=$scheduler.unscheduleJob($jobObj)) + #if($ok==true) + #set($ok=$jobDoc.delete()) + #info("~~$jobName~~ *deleted*") + #else + #error("$context.get('error')") + #end + #else + $jobDoc.delete() + #info("~~$jobName~~ *deleted*") + #end + #end +#end +1 List of existing jobs +## +## Retrieve all scheduler jobs living in this space +## Display their name, status, possible next fire time, and avaible actions +## +{table} +Job Name|Job Status|Next firetime|Actions +#set($hql = ", BaseObject as job where doc.web='Scheduler' and job.name=doc.fullName and job.className='XWiki.SchedulerJobClass' ") +#foreach($docName in $xwiki.searchDocuments($hql)) + #set($jobHolder = $xwiki.getDocument($docName)) + #set($job = $jobHolder.getObject('XWiki.SchedulerJobClass')) + #set($status = "") #set($status = $job.get('status')) #if($status=="") #set($status="None") #end + #set($firetime = "") #if($status!="None") #set($firetime = $scheduler.getNextFireTime($job)) #else #set($firetime="NA") #end + #set($actions="") + #if($status=="None") + #set($scheduleURL = $doc.getURL("view","do=schedule&which=${jobHolder.fullName}")) + #set($actions="<a href=${scheduleURL}>schedule</a>") + #elseif($status=="Normal") + #set($pauseURL = $doc.getURL("view","do=pause&which=${jobHolder.fullName}")) + #set($unscheduleURL = $doc.getURL("view","do=unschedule&which=${jobHolder.fullName}")) + #set($actions="<a href=${pauseURL}>pause</a> <a href=${unscheduleURL}>unschedule</a>") + #elseif($status=="Paused") + #set($resumeURL = $doc.getURL("view","do=resume&which=${jobHolder.fullName}")) + #set($unscheduleURL = $doc.getURL("view","do=unschedule&which=${jobHolder.fullName}")) + #set($actions="<a href=${resumeURL}>resume</a> <a href=${unscheduleURL}>unschedule</a>") + #end + #set($deleteURL = $doc.getURL("view","do=delete&which=${jobHolder.fullName}")) + #set($actions="${actions} <a href=${deleteURL}>delete</a>") +$job.get("jobName")|$status|$firetime| *Infos* : [view>$jobHolder.fullName] <a href=$jobHolder.getURL('inline')>edit</a> *Job* : $actions +#end +{table} + +1.1 Create a new job +## +## Form to create a new Job +## + +<form action="" id="newdoc"> +<input type="hidden" name="parent" value="Scheduler.WebHome" /> +<input type="hidden" name="template" value="XWiki.SchedulerJobTemplate" /> +<input type="hidden" name="sheet" value="1" /> +<input type="hidden" name="webname" value="Scheduler"/> +<input type="hidden" name="name" value=""/> +<input type="text" name="title" value="Job page name" size="30"/> +<input type="button" value="Add" onclick='if (updateName(this.form.title,this.form.name)) { action="../../inline/" + this.form.webname.value + "/" + this.form.name.value; this.form.submit(); }' /> +</form> + \ No newline at end of file Index: scheduler/pom.xml =================================================================== --- scheduler/pom.xml (revision 0) +++ scheduler/pom.xml (revision 0) @@ -0,0 +1,45 @@ + + + + + + 4.0.0 + + com.xpn.xwiki.platform.applications + xwiki-applications + 5-SNAPSHOT + + xwiki-application-scheduler + XWiki Platform - Applications - Scheduler + 1.0-SNAPSHOT + xar + Manages Scheduler Jobs + + + com.xpn.xwiki.platform.plugins + xwiki-plugin-scheduler + 1.0-SNAPSHOT + runtime + + +