特定の曜日を週の先頭に持ってくる

ユーザーからのインプットが「水曜日」で、intとして 3 を受け取ったとします。

#set ($theDay = 3)

水曜日を週の先頭に持ってくる週のリストを作成します。まず順番通りの曜日のリストを $weekOrder に作ります。そして空のリストを $weekRevised に作ります。あとはforeachで指定された曜日から後ろ[水, 木, 金, 土]をリストに入れた後に、指定された曜日から前[日, 月, 火]をリストに入れます。

#set ($weekOrder = ["$l10n.SCHEDULE_SUNDAY","$l10n.SCHEDULE_MONDAY","$l10n.SCHEDULE_TUSEDAY","$l10n.SCHEDULE_WEDNESDAY","$l10n.SCHEDULE_THURSDAY","$l10n.SCHEDULE_FRIDAY","$l10n.SCHEDULE_SATURDAY"]
)

#set ($weekRevised = [])
#foreach($test in $weekOrder)
    #set ($target = $weekOrder.get($theDay))
    $!weekRevised.add($!target)
    #set ($theDay = $theDay + 1)
    #if( 7 <= $theDay)
        #set($theDay = 0)
    #end
#end

問題だったのは、 $!weekRevised.add($!target) に出てくる “.add($!target)” の使い方で、”.add()” はBooleanを返すので

#set ($!weekRevised = $!weekRevised.add($!target))

のように定義してしまうと、addした後にBooleanで定義し直してしまうので、結果的には何も変化しません。 ここに少し躓いてしまいました。