{groovy:output=wiki|showErrorOutput=true} import com.atlassian.confluence.pages.Page; import bucket.container.ContainerManager; def index = request.getSession(true).getServletContext().getAttribute("climb.index") if (index == null ) { out.println "Creating index..." index = new Index() String pageTitle="Climbing Guides" //String pageTitle="Hobart Craglets" Page page = ContainerManager.getComponent("pageManager").getPage(context.spaceKey,pageTitle); addChildren(page, index) request.getSession(true).getServletContext().setAttribute("climb.index", index) // for (c in index.climbs) // out.println c } out.println ''' h2. Search Criteria: {html}<table><tr> <th>Stars</th> <th>Grades</th> <th>Guides</th> </tr> <tr> <td> </td> </tr> </table> {html}''' def grades = ["17","18" ] def stars = ["***"] def pages = ["Northern Buttress"] def filtered = new ArrayList(); for (c in index.climbs) { if ( pages.contains(c.page) && grades.contains(c.grade) && stars.contains(c.stars) ) filtered.add c } for (c in filtered) out.println c def addChildren(Page page, Index index) { for (child in page.children) { doPage(child, index) } } def doPage (Page page, Index index) { int index1 = page.content.indexOf("{guide}") if (index1 > -1) { int index2 = page.content.indexOf("{guide}",index1+1) String xml = page.content.substring(index1+7, index2) out.println ("Page:" + page ) def x = new XmlParser().parseText(xml) def climbs = x.climb for (climb in climbs) { Climb c = new Climb( name: climb.@name , grade: climb.@grade , stars: climb.@stars, length: climb.@length, page: page.title) index.climbs.add( c ) } } addChildren(page, index) } class Index { List climbs = new ArrayList() } class Climb { String name String grade String stars String length //String extra //String number String page; String toString() { return stars==null?"":stars + " " + " " + length + " " + grade } } {groovy} |