General Actions:
Log-in
Register
Wiki:
games
▼
:
Document Index
»
Space:
XWiki
▼
:
Document Index
»
Page:
ExtensionManager
Search
en
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Wiki Home
»
XWiki Space
»
XWiki Preferences
»
AdminSheet
»
Extension Manager
Wiki source code of
Extension Manager
Last modified by
Administrator
on 2011/11/06 20:09
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(1)
·
History
·
Information
Show line numbers
{{warning}} This application is experimental, use it at your own risk. {{/warning}} {{velocity output="false"}} #set($extensionManager = $services.extension) #set($versionManager = $extensionManager.versionManager) #if ($request.extensionwiki && $request.extensionwiki.trim() != '') #set($extensionwiki = $request.extensionwiki) #end #macro(printThrowable $throwable) $throwable.class: #if(!$throwable.message)null#else$throwable.message#end #foreach($stackTraceElement in $throwable.stackTrace) ~ at $stackTraceElement #end #if ($throwable.cause) Caused by: #printThrowable($throwable.cause) #end #end #macro(printJobLog $job) #foreach($log in $installJob.status.log) #set($logLevel = $log.level.toString().toLowerCase()) {{$logLevel}} $log.formattedMessage #if ($log.throwable) #printThrowable($log.throwable) #end {{/$logLevel}} #end #end {{/velocity}} {{velocity}} {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half"> <dl> <dt> <label for="extensionsearchpattern">Search pattern <span class="xRequired">(Required)</span></label> <span class="xHint">The string to search in repositories</span> </dt> <dd> <input id="extensionsearchpattern" name="extensionsearchpattern" type="text" class="" #if($request.extensionsearchpattern)value="${escapetool.xml($request.extensionsearchpattern)}"#end /> </dd> </dl> <p> <span class="buttonwrapper"><input type="submit" value="Search" name="actionsearch" class="button"/></span> </p> </form> {{/html}} {{/velocity}} {{velocity}} #if ($request.actionsearch) #set($extensions = $extensionManager.search($request.extensionsearchpattern, 0, -1)) #foreach($extension in $extensions) * [[$extension.id>>?actionsearch&extensionid=${escapetool.url($extension.id.id)}&extensionversion=${escapetool.url($extension.id.version)}&extensionsearchpattern=${escapetool.url($request.extensionsearchpattern)}]] #end #end {{/velocity}} {{velocity}} {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half"> <dl> <dt> <label for="extensionid">Extension identifier <span class="xRequired">(Required)</span></label> <span class="xHint"><groupid>:<artefactid> for a maven extension</span> </dt> <dd> <input id="extensionid" name="extensionid" type="text" class="" #if($request.extensionid)value="${escapetool.xml($request.extensionid)}"#end /> </dd> </dl> <dl> <dt> <label for="extensionversion">Extension version <span class="xRequired">(Required)</span></label> </dt> <dd> <input id="extensionversion" name="extensionversion" type="text" #if($request.extensionversion)value="${escapetool.xml($request.extensionversion)}"#end /> </dd> </dl> #if ($xwiki.isVirtualMode()) <dl> <dt> <label for="extensionwiki">Extension wiki</label> <span class="xHint">Leave empty to install on all wikis</span> </dt> <dd> <input id="extensionwiki" name="extensionwiki" type="text" title="Extension wiki" #if($extensionwiki)value="${escapetool.xml($extensionwiki)}"#end /> </dd> </dl> #end <p> <span class="buttonwrapper"><input type="submit" value="Resolve" name="actionresolve" class="button"/></span> #if ($hasProgramming) <span class="buttonwrapper"><input type="submit" value="Install" name="actioninstall" class="button"/></span> #end </p> </form> {{/html}} {{/velocity}} {{velocity}} #if ($request.actionresolve) = Resolve #if (!$request.extensionid || $request.extensionid == '' || !$request.extensionversion || $request.extensionversion == '') {{error}}You have to provide both extension id and version.{{/error}} #else #set($extension = $extensionManager.resolve($request.extensionid, $request.extensionversion)) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}} Can't resolve extension with id $request.extensionid and version $request.extensionversion: #printThrowable($lasterror) {{/error}} #else ; Id : {{{$extension.id.id}}} ; Version : {{{$extension.id.version}}} ; Type : {{{$extension.type}}} ; Features : #if (!$extension.features.empty){{{$extension.features}}}#else//No feature//#end ; Name : #if ($extension.name){{{$!extension.name}}}#else{{{$extension.id.id}}}#end ; Description : #if ($extension.description){{{$extension.description}}}#else//No description//#end ; Website : #if ($extension.website)$extension.website#else//No website//#end ; Licenses : #if (!$extension.licenses.empty){{{$extension.licenses}}}#else//No license//#end ; Authors : #if (!$extension.authors.empty){{{$extension.authors}}}#else//No author//#end ; Repository : $extension.repository.id.id#if($extension.repository.id.uRI) ([[$extension.repository.id.uRI]])#end #foreach($propertyEntry in $extension.properties.entrySet()) ; $propertyEntry.key : $propertyEntry.value #end ; Dependencies: #macro(resolveExtension $extensionid $extensionversion $extensionlevel) #set($extension = $extensionManager.resolve($extensionid, $extensionversion)) #if (!$extension) #set($lasterror = $extensionManager.lastError) {{error}} Failed to resolve extension with id $extensionid and version $extensionversion: #printThrowable($lasterror) {{/error}} #else #set($extensionclass = "${extension.class}") #foreach($index in [1..$extensionlevel])*#end ## #if ($extensionclass.endsWith('CoreExtension')) **C** ## #set($continueResolve = false) #elseif ($extensionclass.endsWith('LocalExtension')) #if ($extension.isInstalled($extensionwiki)) **I** ## #set($continueResolve = false) #else **L** ## #set($continueResolve = true) #end #else **R** ## #set($continueResolve = true) #end $extension.id.id ($extension.type) ($extension.id.version#if($extensionversion != $extension.id.version) was $extensionversion#end) #if ($continueResolve) #resolveExtensionDependencies($extension) #end #end #end #macro(resolveExtensionDependencies $extension $extensionlevel) #set($extensionlevel = $extensionlevel + 1) #foreach ($dependency in $extension.dependencies) #resolveExtension($dependency.id, $dependency.version, $extensionlevel) #end #set($extensionlevel = $extensionlevel - 1) #end #resolveExtensionDependencies($extension, 0) **C**: core extension **L**: not installed local extension **I**: installed extension **R**: remote extension #end #end #elseif($request.actioninstall) = Install #if (!$request.extensionid || !$request.extensionversion) {{error}}You have to provide both extension id and version.{{/error}} #elseif ($request.confirm) #set($installJob = $extensionManager.install($request.extensionid, $request.extensionversion, $extensionwiki)) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}} Failed to install extension with id $request.extensionid and version $request.extensionversion#if($extensionwiki) on wiki $extensionwiki#end: #printThrowable($lasterror) {{/error}} #else {{box}} #printJobLog($installJob) {{/box}} #end #else #macro(prepareInstall $extensionid $extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) #set($extension = $extensionManager.resolve($extensionid, $extensionversion)) #set($extensionclass = "${extension.class}") #if (!$extensionclass.endsWith('CoreExtension')) #if (!$extension.isInstalled($extensionwiki)) #set($installedExtension = $extensionManager.getInstalledExtension($extensionid, $extensionwiki)) #if ($installedExtension && $versionManager.compareVersions($installedExtension.id.version, $extensionversion) > 0) #set($extensionsToUpgrade[$extension.id] = $extension) #else #set($extensionsToInstall[$extension.id] = $extension) #end #prepareInstallDependencies($extension, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested) #end #elseif ($versionManager.compareVersions($extensionversion, $extension.id.version) > 0) #set($coreExtensionsConflicts[$extension.id] = [$extension, $extensionversion]) #end #end #macro(prepareInstallDependencies $extension $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) #foreach ($dependency in $extension.dependencies) #prepareInstall($dependency.id, $dependency.version, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested) #end #end #set($extensionsToInstall = {}) #set($extensionsToUpgrade = {}) #set($extensionsSuggested = {}) #set($coreExtensionsConflicts = {}) #prepareInstall($request.extensionid $request.extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}}Can't resolve extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}} #elseif ($extensionsToInstall.isEmpty() && $extensionsToUpgrade.isEmpty()) Already installed #else #if (!$extensionsToInstall.isEmpty()) The following new extensions will be installed: #foreach ($extension in $extensionsToInstall.values()) * $extension.id.id ($extension.id.version) #end #end #if (!$extensionsToUpgrade.isEmpty()) The following extensions will be upgraded: #foreach ($extension in $extensionsToUpgrade.values()) * $extension.id.id ($extension.id.version) #end #end #if (!$extensionsSuggested.isEmpty()) Suggested: #foreach ($extension in $extensionsSuggested.values()) * $extension.id.id ($extension.id.version) #end #end #if (!$coreExtensionsConflicts.isEmpty()) {{error}} Conflict with core extensions: #foreach ($conflict in $coreExtensionsConflicts.values()) * extension **$conflict.get(0).id.id** is needed in version **$conflict.get(1)** but core extension has version **$conflict.get(0).id.version** #end {{/error}} #end #if ($coreExtensionsConflicts.isEmpty()) {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> <div> <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> #if ($extensionwiki) <input name="extensionwiki" value="$extensionwiki" type="hidden" /> #end <input name="actioninstall" type="hidden" /> <p> <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span> </p> </div> </form> {{/html}} #end #end #end #elseif($request.actionuninstall) = Uninstall #if (!$request.extensionid || !$request.extensionversion) {{error}}You have to provide both extension id and version.{{/error}} #elseif($request.confirm) #set($uninstallJob = $extensionManager.uninstall($request.extensionid, $request.extensionversion)) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}} Failed to uninstall extension with id $request.extensionid and version $request.extensionversion: #printThrowable($lasterror) {{/error}} #else {{box}} #printJobLog($uninstallJob) {{/box}} #end #else #macro(prepareUninstall $extensionid $extensionversion $extensionsToUninstall) #set($void = $extensionsToUninstall.add("${extensionid}-${extensionversion}")) #set($backwardDependencies = $extensionManager.getBackwardDependencies($extensionid, $extensionversion)) #prepareUninstallBackwardDependencies($backwardDependencies, $extensionsToUninstall) #end #macro(prepareUninstallBackwardDependencies $backwardDependencies $extensionsToUninstall) #foreach ($backwardDependencyMap in $backwardDependencies.values()) #foreach ($backwardDependency in $backwardDependencyMap) #prepareUninstall($backwardDependency.id.id, $backwardDependency.id.version, $extensionsToUninstall) #end #end #end #set($extensionsToUninstall = []) #prepareUninstall($request.extensionid $request.extensionversion $extensionsToUninstall) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}}Failed to prepare uninstalling extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}} #elseif ($extensionsToUninstall.empty) Extension does not exists #else The following extensions will be removed: #foreach ($extensionid in $extensionsToUninstall) * $extensionid #end {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> <div> <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> <input name="actionuninstall" type="hidden" /> <p> <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span> </p> </div> </form> {{/html}} #end #end #end {{/velocity}} {{velocity}} = Installed extensions #set($extensions = $extensionManager.getInstalledExtensions()) #if ($extensions.isEmpty()) {{info}}No extension installed.{{/info}}## #else |=Id|=Version|=Type|=Dependency#if($xwiki.isVirtualMode())|=Wikis#end#if ($hasProgramming)|=Actions#end #foreach($extension in $extensions) |$extension.id.id|$extension.id.version|$extension.type|$extension.dependency#if ($xwiki.isVirtualMode()) |#if($extension.namespaces) $extension.namespaces## #else All wikis## #end #end #if ($hasProgramming) |{{html clean="false"}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post"> <fieldset> <input name="extensionid" value="${escapetool.xml($extension.id.id)}" type="hidden" /> <input name="extensionversion" value="${escapetool.xml($extension.id.version)}" type="hidden" /> <span class="buttonwrapper"><input type="submit" value="Uninstall" name="actionuninstall" class="button"/></span> </fieldset> </form> {{/html}}## #end #end #end {{/velocity}} {{velocity}} = Local extensions #set($extensions = $extensionManager.getLocalExtensions()) #if ($extensions.isEmpty()) {{info}}No extension in the local repository.{{/info}}## #else |=Id|=Version|=Type #foreach($extension in $extensions) |(%title="$extension.file.absolutePath"%)$extension.id.id|$extension.id.version|$extension.type #end #end {{/velocity}} {{velocity}} = Core extensions #set($extensions = $extensionManager.coreExtensions) == XWiki extensions |=Id|=Version|=Type #foreach($extension in $extensions) #if ($extension.id.id.startsWith("org.xwiki") || $extension.id.id.startsWith("com.xpn")) |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type #end #end == Third party core extensions |=Id|=Version|=Type #foreach($extension in $extensions) #if (!$extension.guessed && !$extension.id.id.startsWith("org.xwiki") && !$extension.id.id.startsWith("com.xpn")) |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type #end #end == Guessed third party core extensions |=Id|=Version|=Type #foreach($extension in $extensions) #if ($extension.guessed) |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type #end #end {{/velocity}}