Skip to content

Commit

Permalink
XWIKI-8798: Introduce shcheduler to automatically update imported ext…
Browse files Browse the repository at this point in the history
…ensions

XWIKI-8740: Don't allow modifying fields that will get overwritten by the next sync
  • Loading branch information
tmortagne committed Feb 8, 2013
1 parent c59fc74 commit e950504
Show file tree
Hide file tree
Showing 5 changed files with 199 additions and 14 deletions.
Expand Up @@ -684,6 +684,7 @@ public DocumentReference importExtension(String extensionId, ExtensionRepository
BaseObject extensionProxyObject = document.getXObject(XWikiRepositoryModel.EXTENSIONPROXY_CLASSREFERENCE);
if (extensionProxyObject == null) {
extensionProxyObject = document.newXObject(XWikiRepositoryModel.EXTENSIONPROXY_CLASSREFERENCE, xcontext);
extensionProxyObject.setIntValue(XWikiRepositoryModel.PROP_PROXY_AUTOUPDATE, 1);
needSave = true;
}

Expand Down
Expand Up @@ -95,6 +95,8 @@ public interface XWikiRepositoryModel

String PROP_PROXY_REPOSITORYURI = "repositoryURI";

String PROP_PROXY_AUTOUPDATE = "autoUpdate";

String PROP_CONFIGURATION_DEFAULTIDPREFIX = "defaultIdPrefix";

String PROP_CONFIGURATION_VALIDTYPEs = "validTypes";
Expand Down
Expand Up @@ -6,14 +6,14 @@
<language/>
<defaultLanguage/>
<translation>0</translation>
<parent>WebHome</parent>
<parent>ExtensionClass</parent>
<creator>xwiki:XWiki.Admin</creator>
<author>xwiki:XWiki.Admin</author>
<customClass/>
<contentAuthor>xwiki:XWiki.Admin</contentAuthor>
<creationDate>1329839678000</creationDate>
<date>1329839946000</date>
<contentUpdateDate>1329839946000</contentUpdateDate>
<date>1359109365000</date>
<contentUpdateDate>1359109365000</contentUpdateDate>
<version>1.1</version>
<title/>
<template/>
Expand All @@ -22,7 +22,7 @@
<comment/>
<minorEdit>false</minorEdit>
<syntaxId>xwiki/2.1</syntaxId>
<hidden>true</hidden>
<hidden>false</hidden>
<class>
<name>ExtensionCode.ExtensionProxyClass</name>
<customClass/>
Expand All @@ -32,6 +32,20 @@
<defaultWeb/>
<nameField/>
<validationScript/>
<autoUpdate>
<customDisplay/>
<defaultValue>1</defaultValue>
<disabled>0</disabled>
<displayFormType>checkbox</displayFormType>
<displayType/>
<name>autoUpdate</name>
<number>4</number>
<prettyName>Auto update</prettyName>
<unmodifiable>0</unmodifiable>
<validationMessage/>
<validationRegExp/>
<classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
</autoUpdate>
<repositoryId>
<customDisplay/>
<disabled>0</disabled>
Expand Down
Expand Up @@ -12,8 +12,8 @@
<customClass/>
<contentAuthor>xwiki:XWiki.Admin</contentAuthor>
<creationDate>1312816151000</creationDate>
<date>1355825293000</date>
<contentUpdateDate>1355824968000</contentUpdateDate>
<date>1359110702000</date>
<contentUpdateDate>1359110702000</contentUpdateDate>
<version>1.1</version>
<title>#if($doc.getObject('ExtensionCode.ExtensionClass'))$doc.getObject('ExtensionCode.ExtensionClass').getProperty('name').value#{else}Extension sheet#end</title>
<template/>
Expand Down Expand Up @@ -184,6 +184,8 @@
#end
#end
#end

#set($proxyExtensionObject = $doc.getObject('ExtensionCode.ExtensionProxyClass'))
{{/velocity}}

{{velocity}}
Expand All @@ -203,7 +205,6 @@
##
{{box cssClass="floatinginfobox"}}
#if ($hasEdit)
#set($proxyExtensionObject = $doc.getObject('ExtensionCode.ExtensionProxyClass'))
#if ($proxyExtensionObject)
#set($repositoryId = $proxyExtensionObject.getProperty('repositoryId').value)
#set($repositoryURI = $proxyExtensionObject.getProperty('repositoryURI').value)
Expand Down Expand Up @@ -309,11 +310,19 @@

Here are some rules to follow when contributing an extension:
* Use a short summary. It's going to be displayed in the Extension livetable and ideally shouldn't take more than 1 line in that table.
#if($proxyExtensionObject)
* When en extension is imported everything from the source has priority over what's in that page so make sure you properly set the pom.xml or any other format you are importing from or disable auto update so that you can choose when to update and modify imported informations
#end

#foreach($sheetExtension in $sheetExtensions)
$doc.display('documentation', 'view', $sheetExtension)
#end

#if($proxyExtensionObject)
; Automatically synchronize the extension informations
: $proxyExtensionObject.autoUpdate
#end

= Summary =
#if ($doc.isNew())
#if ($request.name)
Expand All @@ -328,16 +337,17 @@
#end

(% class="extension" %)
|Name|$doc.display('name')
|Type|$doc.display('type')
|Summary|$doc.display('summary')
|Authors|$doc.display('authors')
|License|$doc.display('licenseName')
|Name|#if($proxyExtensionObject)$doc.display('name', 'view')#else$doc.display('name')#end~
|Type|#if($proxyExtensionObject)$doc.display('type', 'view')#else$doc.display('type')#end~
|Summary|#if($proxyExtensionObject)$doc.display('summary', 'view')#else$doc.display('summary')#end~
## FIXME: there seems to be a bug with custom displayer where they don't take into account the mode passed to display
|Authors|#if($proxyExtensionObject)$doc.getValue('authors')#else$doc.display('authors')#end~
|License|#if($proxyExtensionObject)$doc.display('licenseName', 'view')#else$doc.display('licenseName')#end~
|Source|$doc.display('source')
|Display Icon Location
(Syntax: #set($comment = '##')${comment}icon:{{html}}&lt;a href="http://www.famfamfam.com/lab/icons/silk/previews/index_abc.png" target="_blank"&gt;icon name&lt;/a&gt;{{/html}}${comment})|$doc.display("icon")
#if (!$doc.isNew())
|Features (a list of virtual ids, e.g. an old id for an extension which changed its id)|$doc.display('features')
|Features (a list of virtual ids, e.g. an old id for an extension which changed its id)|#if($proxyExtensionObject)$doc.display('features', 'view')#else$doc.display('features')#end~
#end

#foreach($sheetExtension in $sheetExtensions)
Expand Down Expand Up @@ -424,7 +434,7 @@
#end
#end

#if ($isEditMode)
#if ($isEditMode &amp;&amp; !$proxyExtensionObject)
= Add/Edit Downloads =
#if ($doc.isNew())
{{info}}In order to add Download information for this extension, save this page first and edit it again.{{/info}}
Expand Down
@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8"?>

<xwikidoc>
<web>Scheduler</web>
<name>BatchImporterScheduler</name>
<language/>
<defaultLanguage/>
<translation>0</translation>
<parent>Scheduler.WebHome</parent>
<creator>xwiki:XWiki.Admin</creator>
<author>xwiki:XWiki.Admin</author>
<customClass/>
<contentAuthor>xwiki:XWiki.Admin</contentAuthor>
<creationDate>1359103531000</creationDate>
<date>1360061093000</date>
<contentUpdateDate>1360061093000</contentUpdateDate>
<version>1.1</version>
<title>BatchImporterScheduler</title>
<template/>
<defaultTemplate/>
<validationScript/>
<comment/>
<minorEdit>false</minorEdit>
<syntaxId>xwiki/2.0</syntaxId>
<hidden>false</hidden>
<object>
<class>
<name>XWiki.SchedulerJobClass</name>
<customClass/>
<customMapping/>
<defaultViewSheet/>
<defaultEditSheet/>
<defaultWeb/>
<nameField/>
<validationScript/>
<contextDatabase>
<disabled>0</disabled>
<name>contextDatabase</name>
<number>9</number>
<prettyName>Job execution context database</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</contextDatabase>
<contextLang>
<disabled>0</disabled>
<name>contextLang</name>
<number>8</number>
<prettyName>Job execution context lang</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</contextLang>
<contextUser>
<disabled>0</disabled>
<name>contextUser</name>
<number>7</number>
<prettyName>Job execution context user</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</contextUser>
<cron>
<disabled>0</disabled>
<name>cron</name>
<number>5</number>
<prettyName>Cron Expression</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</cron>
<jobClass>
<disabled>0</disabled>
<name>jobClass</name>
<number>3</number>
<prettyName>Job Class</prettyName>
<size>60</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</jobClass>
<jobDescription>
<disabled>0</disabled>
<name>jobDescription</name>
<number>2</number>
<prettyName>Job Description</prettyName>
<rows>10</rows>
<size>45</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
</jobDescription>
<jobName>
<disabled>0</disabled>
<name>jobName</name>
<number>1</number>
<prettyName>Job Name</prettyName>
<size>60</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</jobName>
<script>
<disabled>0</disabled>
<editor>PureText</editor>
<name>script</name>
<number>6</number>
<prettyName>Job Script</prettyName>
<rows>10</rows>
<size>60</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
</script>
<status>
<disabled>0</disabled>
<name>status</name>
<number>4</number>
<prettyName>Status</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</status>
</class>
<name>Scheduler.BatchImporterScheduler</name>
<number>0</number>
<className>XWiki.SchedulerJobClass</className>
<guid>6daedd85-5214-471c-8bc0-11db8c0079d0</guid>
<property>
<contextDatabase>extensions</contextDatabase>
</property>
<property>
<contextLang>en</contextLang>
</property>
<property>
<contextUser>xwiki:XWiki.ThomasMortagne</contextUser>
</property>
<property>
<cron>0 0 0 * * ?</cron>
</property>
<property>
<jobClass>com.xpn.xwiki.plugin.scheduler.GroovyJob</jobClass>
</property>
<property>
<jobDescription>Update all existing imported extensions</jobDescription>
</property>
<property>
<jobName>Batch importer scheduler</jobName>
</property>
<property>
<script>def extensions = services.query.xwql("select extension.id, proxy.repositoryId, proxy.autoUpdate from Document doc, doc.object(ExtensionCode.ExtensionProxyClass) as proxy, doc.object(ExtensionCode.ExtensionClass) as extension where proxy.autoUpdate=1").execute()
for (extension in extensions)
{
services.repository.importExtension(extension[0], extension[1])
}</script>
</property>
<property>
<status>None</status>
</property>
</object>
<content>{{include document="XWiki.SchedulerJobSheet"/}}</content>
</xwikidoc>

0 comments on commit e950504

Please sign in to comment.