groovyでstruts-config.xmlをhtml変換

Groovy

struts-config.xmlの内容のうち、特にaction-mappingsについてはチェックする機会が多い。もうちょっと見やすくならないかな、ということで、htmlに変換してみた。(xslt使うのが本来のやり方なのかもしれないけれども、そこはGroovy中毒患者。)

import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*


final xmlSlurper = new XmlSlurper()
def config = xmlSlurper.parseText(new File(args[0]).text.replaceFirst(/<!DOCTYPE(?ms)[^>]+>/, ""))
def actions = config."action-mappings".action

def html = new MarkupBuilder()
html.html() {
    head{
        link(
            rel:"stylesheet",
            type:"text/css",
            href:"style.css",
            )
        style{
            def i = 0
            actions.@path*.toString().collect{ it.split("/")[1] }.unique().each{
                yieldUnescaped """
.${it}{
    background-color: #${(1..6).collect{("A".."F")[(int)(Math.random()*6)]}.join("")};
}
"""
            }
        }
    }
    body{
        table{
            caption("action-mappings")
            thead{
                tr{
                    th("path")
                    th("type")
                    th("forward")
                    th("scope")
                }
            }
            tbody{
                actions.each{ action ->
                    tr(class:"${action.@path.toString().split("/")[1]}"){
                        td(action.@path)
                        td(action.@type)
                        td(style:"text-align:left;"){
                            ul{
                                action.forward.each{
                                    li(it.@name)
                                }
                            }
                        }
                        td(action.@scope)
                    }
                }
            }
        }
    }
}

これに、適当なcssファイルを付け加えてみる。

table {
    width:90%;
    border-top:3px solid #e5eff8;
    border-right:1px solid #e5eff8;
    margin:1em auto;
    border-collapse:collapse;
}
table caption{
    font-size: 150%;
    font-weight: bold;
    border :2px solid gray;
    text-valign: middle;
}
td {
    color:#5B4167;
    border-bottom:1px solid #e5eff8;
    border-left:1px solid #e5eff8;
    padding:.3em 1em;
    text-align:center;
}


thead th {
    background:#f4f9fe;
    text-align:center;
    font:bold 1.2em/2em "Century Gothic","Trebuchet MS",Arial,Helvetica,sans-serif;
    color:#66a3d3;
}

いい加減、struts 1.Xなプロジェクト、抜けたい。でも現在保守作業中なので当分抜けられないんだろうな。

Groovy