classes/macros/PowerConfluenceMacro.psm1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
class PowerConfluenceMacro {

    #####################
    # HIDDEN PROPERTIES #
    #####################

    hidden
    static
    [string]
    $MacroTemplateString = '<ac:structured-macro ac:name="{0}" ac:schema-version="{1}">{2}</ac:structured-macro>'

    hidden
    static
    [string]
    $ParameterTemplateString = '<ac:parameter ac:name="{0}">{1}</ac:parameter>'

    hidden
    static
    [string]
    $RichTextBodyTemplateString = '<ac:rich-text-body>{0}</ac:rich-text-body>'

    #####################
    # PUBLIC PROPERTIES #
    #####################

    [string]
    $Name

    [int]
    $SchemaVersion

    [hashtable]
    $Parameters

    [string]
    $RichTextBody

    #####################
    # CONSTRUCTORS #
    #####################

    PowerConfluenceMacro(
        [string] $Name,
        [int] $SchemaVersion
    ) {
        $this.Init($Name, $SchemaVersion, $null, @{})
    }

    PowerConfluenceMacro(
        [string] $Name,
        [int] $SchemaVersion,
        [string] $RichTextBody
    ) {
        $this.Init($Name, $SchemaVersion, $RichTextBody, @{})
    }

    PowerConfluenceMacro(
        [string] $Name,
        [int] $SchemaVersion,
        [hashtable] $Parameters
    ) {
        $this.Init($Name, $SchemaVersion, $null, $Parameters)
    }

    PowerConfluenceMacro(
        [string] $Name,
        [int] $SchemaVersion,
        [string] $RichTextBody,
        [hashtable] $Parameters
    ) {
        $this.Init($Name, $SchemaVersion, $RichTextBody, $Parameters)
    }

    #####################
    # HIDDEN METHODS #
    #####################

    hidden
    [void]
    Init(
        [string] $Name,
        [int] $SchemaVersion,
        [string] $RichTextBody,
        [hashtable] $Parameters
    ) {
        $this.Name = $Name
        $this.SchemaVersion = $SchemaVersion
        $this.RichTextBody = $RichTextBody
        $this.Parameters = $Parameters
    }

    #####################
    # PUBLIC METHODS #
    #####################

    [void]
    SetParameter(
        [string] $Key,
        [object] $Value
    ) {
        if ($this.Parameters.ContainsKey($Key)) {
            $this.Parameters.Remove($key)
        }
        $this.Parameters.Add($Key,$Value)
    }

    [string]
    ToString()
    {
        $contents = @()

        if ($this.Parameters.Count -gt 0) {
            foreach($key in $this.Parameters.Keys) {
                $contents += [PowerConfluenceMacro]::ParameterTemplateString -f $key,$this.Parameters.Item($key)
            }
        }
        if ($null -ne $this.RichTextBody -and $this.RichTextBody -ne "") {
            $contents += [PowerConfluenceMacro]::RichTextBodyTemplateString -f $this.RichTextBody
        }

        return [PowerConfluenceMacro]::MacroTemplateString -f $this.Name,$this.SchemaVersion,"$contents"
    }
}