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
+
+
+
+
+
+
+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
+
+
+
+
+
+
+
+#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
+
+
+
+
+
+
+## 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
+
+
+