# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - "FreemindSitemap" action

    Create a freemind mind map of your wiki's structure.

    @copyright: 2009 Josef Meier <jo.meier@gmx.de>
    @license: GNU GPL, see COPYING for details.
"""

import StringIO
import string
import time
import re
from MoinMoin import wikiutil
import xml.etree.ElementTree as ElementTree
from xml.etree.ElementTree import tostring


def getSortedPagelist(request):
    #pages = request.rootpage.getPageDict(include_underlay=0)
    pagelist = request.rootpage.getPageList(include_underlay=False)
    pagelist.sort()
    return pagelist


def pagelist2freemind(request, pagelist):
    map = ElementTree.Element("map")
    map.set("version", "0.7.1")
    
    # Create the root element of our wiki xml tree
    root = ElementTree.SubElement(map, "node")
    root.set("TEXT", "Root")
    
    for idx, name in enumerate(pagelist):
        if wikiutil.isSystemPage(request, name):
            continue
        
        pages = string.split( name, "/")
        currNode = root
        for page in pages:
            children = currNode.getchildren()
            
            found = False
            for child in children:
                if child.get("TEXT") == page:
                    currNode = child
                    found = True
                    break
                
            if not found:
                newNode = ElementTree.SubElement(currNode, "node")
                newNode.set("TEXT", page )
                newNode.set("LINK", name.encode("UTF-8") )
                currNode = newNode
                
    # Print xml structure to string variable.                
    stringIO = StringIO.StringIO()
    tree = ElementTree.ElementTree(map)
    tree.write(stringIO)    
    freemindFormat = stringIO.getvalue()
    xmlFormat = """<?xml version="1.0" encoding="utf-8"?>"""
    return xmlFormat + freemindFormat


def getSiteMapFreemind(pagename, request):
    _ = request.getText
        
    pagelist = getSortedPagelist(request)
    freemindFormat = pagelist2freemind(request, pagelist)
    
    result = freemindFormat.replace("\n", "\r\n")
    return result


def execute(pagename, request):
    result = getSiteMapFreemind(pagename, request)

    request.mimetype = 'text'
    request.write(result)

