import os, string, sys


class AdminPage:
    """
    AdminPage is the abstract superclass of all CGI Wrapper administration CGI classes.
    
    Subclasses typically override title() and writeBody(), but may customize other methods.
    
    Subclasses use self._var for the various vars that are passed in from CGI Wrapper
    and self.write() and self.writeln().
    """ 

    ## Init ##

    def __init__(self, vars):
        for name in vars.keys():
            setattr(self, '_'+name, vars[name])
        self._vars = vars


    ## HTML ##
    
    def html(self):
        self._html = []
        self.writeHeader()
        self.writeBody()
        self.writeFooter()
        return string.join(self._html, '')

        
    ## Utility methods ##

    def write(self, *args):
        for arg in args:
            self._html.append(str(arg))

    def writeln(self, *args):
        for arg in args:
            self._html.append(str(arg))
        self._html.append('\n')

        
    ## Content methods ##

    def writeHeader(self):
        self.writeln('''<html>
            <head>
                <title>%s</title>
            </head>
            <body %s><table align=center><tr><td>''' % (self.title(), self.bodyTags()))
        self.writeBanner()
        self.writeToolbar()

    def writeBody(self):
        raise NotImplementedError, 'Should be overridden in a subclass'

    def writeFooter(self):
        self.writeln('<p><br><hr></table></body></html>')

    def title(self):
        raise NotImplementedError, 'Should be overridden in a subclass'

    def bodyTags(self):
        return 'color=black bgcolor=white'
    
    def writeBanner(self):
        self.writeln('''<table align=center bgcolor=darkblue cellpadding=5 cellspacing=0 width=100%%>
            <tr><td align=center>
                <font face="Tahoma, Arial, Helvetica" color=white><b>
                    CGI Wrapper
                    <br><font size=+2>%s</font>
                </b></font>
            </td></tr>
        </table><p>''' % self.title())

    def writeToolbar(self):
        pass