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
Hide line numbers
1: {{warning}} 2: This application is experimental, use it at your own risk. 3: {{/warning}} 4: 5: {{velocity output="false"}} 6: #set($extensionManager = $services.extension) 7: #set($versionManager = $extensionManager.versionManager) 8: #if ($request.extensionwiki && $request.extensionwiki.trim() != '') 9: #set($extensionwiki = $request.extensionwiki) 10: #end 11: 12: #macro(printThrowable $throwable) 13: $throwable.class: #if(!$throwable.message)null#else$throwable.message#end 14: 15: #foreach($stackTraceElement in $throwable.stackTrace) 16: ~ at $stackTraceElement 17: #end 18: #if ($throwable.cause) 19: Caused by: #printThrowable($throwable.cause) 20: #end 21: #end 22: 23: #macro(printJobLog $job) 24: #foreach($log in $installJob.status.log) 25: #set($logLevel = $log.level.toString().toLowerCase()) 26: {{$logLevel}} 27: $log.formattedMessage 28: #if ($log.throwable) 29: #printThrowable($log.throwable) 30: #end 31: {{/$logLevel}} 32: #end 33: #end 34: {{/velocity}} 35: 36: {{velocity}} 37: {{html}} 38: <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half"> 39: <dl> 40: <dt> 41: <label for="extensionsearchpattern">Search pattern <span class="xRequired">(Required)</span></label> 42: <span class="xHint">The string to search in repositories</span> 43: </dt> 44: <dd> 45: <input id="extensionsearchpattern" name="extensionsearchpattern" type="text" class="" #if($request.extensionsearchpattern)value="${escapetool.xml($request.extensionsearchpattern)}"#end /> 46: </dd> 47: </dl> 48: <p> 49: <span class="buttonwrapper"><input type="submit" value="Search" name="actionsearch" class="button"/></span> 50: </p> 51: </form> 52: {{/html}} 53: {{/velocity}} 54: 55: {{velocity}} 56: #if ($request.actionsearch) 57: #set($extensions = $extensionManager.search($request.extensionsearchpattern, 0, -1)) 58: #foreach($extension in $extensions) 59: * [[$extension.id>>?actionsearch&extensionid=${escapetool.url($extension.id.id)}&extensionversion=${escapetool.url($extension.id.version)}&extensionsearchpattern=${escapetool.url($request.extensionsearchpattern)}]] 60: #end 61: #end 62: {{/velocity}} 63: 64: {{velocity}} 65: {{html}} 66: <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half"> 67: <dl> 68: <dt> 69: <label for="extensionid">Extension identifier <span class="xRequired">(Required)</span></label> 70: <span class="xHint"><groupid>:<artefactid> for a maven extension</span> 71: </dt> 72: <dd> 73: <input id="extensionid" name="extensionid" type="text" class="" #if($request.extensionid)value="${escapetool.xml($request.extensionid)}"#end /> 74: </dd> 75: </dl> 76: <dl> 77: <dt> 78: <label for="extensionversion">Extension version <span class="xRequired">(Required)</span></label> 79: </dt> 80: <dd> 81: <input id="extensionversion" name="extensionversion" type="text" #if($request.extensionversion)value="${escapetool.xml($request.extensionversion)}"#end /> 82: </dd> 83: </dl> 84: #if ($xwiki.isVirtualMode()) 85: <dl> 86: <dt> 87: <label for="extensionwiki">Extension wiki</label> 88: <span class="xHint">Leave empty to install on all wikis</span> 89: </dt> 90: <dd> 91: <input id="extensionwiki" name="extensionwiki" type="text" title="Extension wiki" #if($extensionwiki)value="${escapetool.xml($extensionwiki)}"#end /> 92: </dd> 93: </dl> 94: #end 95: <p> 96: <span class="buttonwrapper"><input type="submit" value="Resolve" name="actionresolve" class="button"/></span> 97: #if ($hasProgramming) 98: <span class="buttonwrapper"><input type="submit" value="Install" name="actioninstall" class="button"/></span> 99: #end 100: </p> 101: </form> 102: {{/html}} 103: {{/velocity}} 104: 105: {{velocity}} 106: #if ($request.actionresolve) 107: = Resolve 108: 109: #if (!$request.extensionid || $request.extensionid == '' || !$request.extensionversion || $request.extensionversion == '') 110: {{error}}You have to provide both extension id and version.{{/error}} 111: #else 112: #set($extension = $extensionManager.resolve($request.extensionid, $request.extensionversion)) 113: #set($lasterror = $extensionManager.lastError) 114: #if ($lasterror) 115: {{error}} 116: Can't resolve extension with id $request.extensionid and version $request.extensionversion: #printThrowable($lasterror) 117: {{/error}} 118: #else 119: ; Id 120: : {{{$extension.id.id}}} 121: ; Version 122: : {{{$extension.id.version}}} 123: ; Type 124: : {{{$extension.type}}} 125: ; Features 126: : #if (!$extension.features.empty){{{$extension.features}}}#else//No feature//#end 127: 128: ; Name 129: : #if ($extension.name){{{$!extension.name}}}#else{{{$extension.id.id}}}#end 130: 131: ; Description 132: : #if ($extension.description){{{$extension.description}}}#else//No description//#end 133: 134: ; Website 135: : #if ($extension.website)$extension.website#else//No website//#end 136: 137: ; Licenses 138: : #if (!$extension.licenses.empty){{{$extension.licenses}}}#else//No license//#end 139: 140: ; Authors 141: : #if (!$extension.authors.empty){{{$extension.authors}}}#else//No author//#end 142: 143: ; Repository 144: : $extension.repository.id.id#if($extension.repository.id.uRI) ([[$extension.repository.id.uRI]])#end 145: 146: #foreach($propertyEntry in $extension.properties.entrySet()) 147: ; $propertyEntry.key 148: : $propertyEntry.value 149: #end 150: 151: ; Dependencies: 152: #macro(resolveExtension $extensionid $extensionversion $extensionlevel) 153: #set($extension = $extensionManager.resolve($extensionid, $extensionversion)) 154: #if (!$extension) 155: #set($lasterror = $extensionManager.lastError) 156: {{error}} 157: Failed to resolve extension with id $extensionid and version $extensionversion: #printThrowable($lasterror) 158: {{/error}} 159: #else 160: #set($extensionclass = "${extension.class}") 161: #foreach($index in [1..$extensionlevel])*#end ## 162: #if ($extensionclass.endsWith('CoreExtension')) 163: **C** ## 164: #set($continueResolve = false) 165: #elseif ($extensionclass.endsWith('LocalExtension')) 166: #if ($extension.isInstalled($extensionwiki)) 167: **I** ## 168: #set($continueResolve = false) 169: #else 170: **L** ## 171: #set($continueResolve = true) 172: #end 173: #else 174: **R** ## 175: #set($continueResolve = true) 176: #end 177: $extension.id.id ($extension.type) ($extension.id.version#if($extensionversion != $extension.id.version) was $extensionversion#end) 178: #if ($continueResolve) 179: #resolveExtensionDependencies($extension) 180: #end 181: #end 182: #end 183: #macro(resolveExtensionDependencies $extension $extensionlevel) 184: #set($extensionlevel = $extensionlevel + 1) 185: #foreach ($dependency in $extension.dependencies) 186: #resolveExtension($dependency.id, $dependency.version, $extensionlevel) 187: #end 188: #set($extensionlevel = $extensionlevel - 1) 189: #end 190: #resolveExtensionDependencies($extension, 0) 191: 192: **C**: core extension 193: **L**: not installed local extension 194: **I**: installed extension 195: **R**: remote extension 196: #end 197: #end 198: #elseif($request.actioninstall) 199: = Install 200: 201: #if (!$request.extensionid || !$request.extensionversion) 202: {{error}}You have to provide both extension id and version.{{/error}} 203: #elseif ($request.confirm) 204: #set($installJob = $extensionManager.install($request.extensionid, $request.extensionversion, $extensionwiki)) 205: #set($lasterror = $extensionManager.lastError) 206: #if ($lasterror) 207: {{error}} 208: Failed to install extension with id $request.extensionid and version $request.extensionversion#if($extensionwiki) on wiki $extensionwiki#end: #printThrowable($lasterror) 209: {{/error}} 210: #else 211: {{box}} 212: #printJobLog($installJob) 213: {{/box}} 214: #end 215: #else 216: #macro(prepareInstall $extensionid $extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) 217: #set($extension = $extensionManager.resolve($extensionid, $extensionversion)) 218: #set($extensionclass = "${extension.class}") 219: #if (!$extensionclass.endsWith('CoreExtension')) 220: #if (!$extension.isInstalled($extensionwiki)) 221: #set($installedExtension = $extensionManager.getInstalledExtension($extensionid, $extensionwiki)) 222: #if ($installedExtension && $versionManager.compareVersions($installedExtension.id.version, $extensionversion) > 0) 223: #set($extensionsToUpgrade[$extension.id] = $extension) 224: #else 225: #set($extensionsToInstall[$extension.id] = $extension) 226: #end 227: #prepareInstallDependencies($extension, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested) 228: #end 229: #elseif ($versionManager.compareVersions($extensionversion, $extension.id.version) > 0) 230: #set($coreExtensionsConflicts[$extension.id] = [$extension, $extensionversion]) 231: #end 232: #end 233: #macro(prepareInstallDependencies $extension $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) 234: #foreach ($dependency in $extension.dependencies) 235: #prepareInstall($dependency.id, $dependency.version, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested) 236: #end 237: #end 238: #set($extensionsToInstall = {}) 239: #set($extensionsToUpgrade = {}) 240: #set($extensionsSuggested = {}) 241: #set($coreExtensionsConflicts = {}) 242: #prepareInstall($request.extensionid $request.extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts) 243: #set($lasterror = $extensionManager.lastError) 244: #if ($lasterror) 245: {{error}}Can't resolve extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}} 246: #elseif ($extensionsToInstall.isEmpty() && $extensionsToUpgrade.isEmpty()) 247: Already installed 248: #else 249: #if (!$extensionsToInstall.isEmpty()) 250: The following new extensions will be installed: 251: #foreach ($extension in $extensionsToInstall.values()) 252: * $extension.id.id ($extension.id.version) 253: #end 254: 255: #end 256: #if (!$extensionsToUpgrade.isEmpty()) 257: The following extensions will be upgraded: 258: #foreach ($extension in $extensionsToUpgrade.values()) 259: * $extension.id.id ($extension.id.version) 260: #end 261: 262: #end 263: #if (!$extensionsSuggested.isEmpty()) 264: Suggested: 265: #foreach ($extension in $extensionsSuggested.values()) 266: * $extension.id.id ($extension.id.version) 267: #end 268: 269: #end 270: #if (!$coreExtensionsConflicts.isEmpty()) 271: {{error}} 272: Conflict with core extensions: 273: #foreach ($conflict in $coreExtensionsConflicts.values()) 274: * extension **$conflict.get(0).id.id** is needed in version **$conflict.get(1)** but core extension has version **$conflict.get(0).id.version** 275: #end 276: {{/error}} 277: 278: #end 279: #if ($coreExtensionsConflicts.isEmpty()) 280: {{html}} 281: <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> 282: <div> 283: <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> 284: <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> 285: #if ($extensionwiki) 286: <input name="extensionwiki" value="$extensionwiki" type="hidden" /> 287: #end 288: <input name="actioninstall" type="hidden" /> 289: <p> 290: <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span> 291: </p> 292: </div> 293: </form> 294: {{/html}} 295: #end 296: #end 297: #end 298: #elseif($request.actionuninstall) 299: = Uninstall 300: 301: #if (!$request.extensionid || !$request.extensionversion) 302: {{error}}You have to provide both extension id and version.{{/error}} 303: #elseif($request.confirm) 304: #set($uninstallJob = $extensionManager.uninstall($request.extensionid, $request.extensionversion)) 305: #set($lasterror = $extensionManager.lastError) 306: #if ($lasterror) 307: {{error}} 308: Failed to uninstall extension with id $request.extensionid and version $request.extensionversion: #printThrowable($lasterror) 309: {{/error}} 310: #else 311: {{box}} 312: #printJobLog($uninstallJob) 313: {{/box}} 314: #end 315: #else 316: #macro(prepareUninstall $extensionid $extensionversion $extensionsToUninstall) 317: #set($void = $extensionsToUninstall.add("${extensionid}-${extensionversion}")) 318: #set($backwardDependencies = $extensionManager.getBackwardDependencies($extensionid, $extensionversion)) 319: #prepareUninstallBackwardDependencies($backwardDependencies, $extensionsToUninstall) 320: #end 321: #macro(prepareUninstallBackwardDependencies $backwardDependencies $extensionsToUninstall) 322: #foreach ($backwardDependencyMap in $backwardDependencies.values()) 323: #foreach ($backwardDependency in $backwardDependencyMap) 324: #prepareUninstall($backwardDependency.id.id, $backwardDependency.id.version, $extensionsToUninstall) 325: #end 326: #end 327: #end 328: #set($extensionsToUninstall = []) 329: #prepareUninstall($request.extensionid $request.extensionversion $extensionsToUninstall) 330: #set($lasterror = $extensionManager.lastError) 331: #if ($lasterror) 332: {{error}}Failed to prepare uninstalling extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}} 333: #elseif ($extensionsToUninstall.empty) 334: Extension does not exists 335: #else 336: The following extensions will be removed: 337: #foreach ($extensionid in $extensionsToUninstall) 338: * $extensionid 339: #end 340: 341: {{html}} 342: <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> 343: <div> 344: <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> 345: <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> 346: <input name="actionuninstall" type="hidden" /> 347: <p> 348: <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span> 349: </p> 350: </div> 351: </form> 352: {{/html}} 353: #end 354: #end 355: #end 356: {{/velocity}} 357: 358: {{velocity}} 359: = Installed extensions 360: 361: #set($extensions = $extensionManager.getInstalledExtensions()) 362: #if ($extensions.isEmpty()) 363: {{info}}No extension installed.{{/info}}## 364: #else 365: |=Id|=Version|=Type|=Dependency#if($xwiki.isVirtualMode())|=Wikis#end#if ($hasProgramming)|=Actions#end 366: 367: #foreach($extension in $extensions) 368: |$extension.id.id|$extension.id.version|$extension.type|$extension.dependency#if ($xwiki.isVirtualMode()) 369: |#if($extension.namespaces) 370: $extension.namespaces## 371: #else 372: All wikis## 373: #end 374: #end 375: #if ($hasProgramming) 376: |{{html clean="false"}} 377: <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post"> 378: <fieldset> 379: <input name="extensionid" value="${escapetool.xml($extension.id.id)}" type="hidden" /> 380: <input name="extensionversion" value="${escapetool.xml($extension.id.version)}" type="hidden" /> 381: <span class="buttonwrapper"><input type="submit" value="Uninstall" name="actionuninstall" class="button"/></span> 382: </fieldset> 383: </form> 384: {{/html}}## 385: #end 386: 387: #end 388: #end 389: {{/velocity}} 390: 391: 392: {{velocity}} 393: = Local extensions 394: 395: #set($extensions = $extensionManager.getLocalExtensions()) 396: #if ($extensions.isEmpty()) 397: {{info}}No extension in the local repository.{{/info}}## 398: #else 399: |=Id|=Version|=Type 400: #foreach($extension in $extensions) 401: |(%title="$extension.file.absolutePath"%)$extension.id.id|$extension.id.version|$extension.type 402: #end 403: #end 404: {{/velocity}} 405: 406: {{velocity}} 407: = Core extensions 408: 409: #set($extensions = $extensionManager.coreExtensions) 410: 411: == XWiki extensions 412: 413: |=Id|=Version|=Type 414: #foreach($extension in $extensions) 415: #if ($extension.id.id.startsWith("org.xwiki") || $extension.id.id.startsWith("com.xpn")) 416: |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type 417: #end 418: #end 419: 420: == Third party core extensions 421: 422: |=Id|=Version|=Type 423: #foreach($extension in $extensions) 424: #if (!$extension.guessed && !$extension.id.id.startsWith("org.xwiki") && !$extension.id.id.startsWith("com.xpn")) 425: |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type 426: #end 427: #end 428: 429: == Guessed third party core extensions 430: 431: |=Id|=Version|=Type 432: #foreach($extension in $extensions) 433: #if ($extension.guessed) 434: |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type 435: #end 436: #end 437: {{/velocity}}