Wiki source code of VelocityMacros

Last modified by Thomas Mortagne on 2019/02/28 11:44

Show last authors
1 {{velocity output="false"}}
2 #macro (getAppReference)
3 #set ($appLocalRef = $doc.getValue('dataSpaceName'))
4 #if ("$!appLocalRef" != '')
5 ## Between 6.3M2 (XWIKI-11249) and 7.3RC1 (XWIKI-12741).
6 #set ($appReference = $services.model.resolveSpace($appLocalRef))
7 #else
8 ## Possible locations:
9 ## 1. same space (<6.2M1, XWIKI-8757)
10 ## 2. sibling space (between 6.2M1 and 6.3M2)
11 ## 3. grand parent space (7.3RC1+)
12 #set ($appReferences = [
13 $doc.documentReference.parent,
14 $services.model.createSpaceReference($stringtool.removeEnd($doc.documentReference.name, 'TemplateProvider'),
15 $doc.documentReference.parent.parent),
16 $doc.documentReference.parent.parent
17 ])
18 #foreach ($item in $appReferences)
19 #set ($appReference = $item)
20 #if ($xwiki.getDocument($appReference).getObject($appDescriptorClassName))
21 #break
22 #end
23 #end
24 #end
25 #end
26
27 #macro (getAppTitle)
28 #getAppReference
29 #set ($appTitle = $xwiki.getDocument($appReference).plainTitle)
30 #end
31
32 #macro (getExpectedAppClassReference $appName $appReference)
33 #set ($expectedClassName = "$!{appName}Class")
34 #set ($expectedClassLocations = [
35 $services.model.createSpaceReference('Code', $appReference),
36 $services.model.createSpaceReference("${appReference.name}Code", $appReference.parent),
37 $appReference
38 ])
39 #set ($found = false)
40 #foreach ($expectedClassLocation in $expectedClassLocations)
41 #set ($expectedClassReference = $services.model.createDocumentReference($expectedClassName,
42 $expectedClassLocation))
43 #if ($xwiki.exists($expectedClassReference))
44 #set ($found = true)
45 #break
46 #end
47 #end
48 #if (!$found)
49 #set ($expectedClassReference = $NULL)
50 #end
51 #end
52
53 #macro (getAppClassReference $appHomePage)
54 #set ($appName = $appHomePage.pageReference.name)
55 #set ($appReference = $appHomePage.documentReference.parent)
56 ## Look for the application class in the expected location.
57 #getExpectedAppClassReference($appName $appReference)
58 #if ($expectedClassReference)
59 #set ($classReference = $expectedClassReference)
60 #else
61 ## The application was probably moved or renamed.
62 ## The configured class reference is relative to the application home page (holding the application descriptor).
63 #set ($configuredClassReference = $services.model.resolveDocument("$!appHomePage.getValue('class')",
64 $appHomePage.documentReference))
65 #set ($previousAppName = $stringtool.removeEnd($configuredClassReference.name, 'Class'))
66 ## Look for a class with the previous name in the current location.
67 #getExpectedAppClassReference($previousAppName $appReference)
68 #if ($expectedClassReference)
69 #set ($classReference = $expectedClassReference)
70 #else
71 ## Use the configured class.
72 #set ($classReference = $configuredClassReference)
73 #end
74 #end
75 #end
76 {{/velocity}}