#!/usr/bin/env python

import string
import os
import re
import urllib

CROSS_REFERENCE_TAG = re.compile('<MSM>([^<]*)</MSM>')

class Package:

    def __init__(self, name):
        self.name = name
        self.description = ''
        self.processedDescription = None
        self.groups = None
        self.groupObjects = []

    def addGroup(self, group):
        self.groupObjects.append(group)

    def getURL(self, cgi):
        return os.path.join(cgi, urllib.quote_plus(self.name))

    def getName(self):
        return self.name

    def getLinkedName(self):
        permalink = '<a href="%s">#</a> ' % (self.getURL(self.cgi))
        url = self.getHomepage()
        if url:
            text = '<a href="%s">%s</a>' % (url, self.name)
        else:
            text = self.name
        return permalink + text

    def get(self, key, default='-'):
        return getattr(self, key, default)

    def getDescription(self):
        if not self.processedDescription:
            self.processedDescription = CROSS_REFERENCE_TAG.sub('<a href="%s/\\1">\\1</a>' % self.cgi, self.description)
        return self.processedDescription

    def getDate(self):
        return self.get('date')

    def getHomepage(self):
        return self.get('homepage', None)

    def getLicense(self):
        license = self.get('license', '[None specified]')
        license = 'License: ' + license
        return license

    def getLanguage(self):
        return self.get('language')

    def getGroupNames(self):
        if not self.groups:
            raise 'Package %s belongs to no groups!' % self.name
        else:
            return string.split(self.groups, ',') 

    def getGroups(self):
        return self.groupObjects

    def renderAsTable(self, fields, cgi, showGroups=0):
        self.cgi = cgi
        print '<a name="%s"></a>' % self.getName()
        print '<table border="0" width="100%">'
        print '<tr>'
        self.cgi = cgi
        for (width, method) in fields:
            print '<td width="%s%%">%s</td>' % (width, getattr(self, method)())
        print '</tr>'
        cells = len(fields)+1
        if showGroups:
            print '<tr><td colspan="%s">Filed under: ' % cells
            suffix = ','
            groups = self.getGroups()
            for i in range(0, len(groups)):
                if i == len(groups)-1:
                    suffix=''
                print '<a href="%s">%s</a>%s' % (groups[i].getURL(cgi), groups[i].getTitle(),suffix)
                suffix = ','
            print '</td></tr>'
        print '<tr><td colspan="%s">%s</td></tr>' % (cells, self.getDescription())
        print '</table>'
        print '<br/>'


    def selfTest(self):
        print 'Self-test for package: %s' % self.name
        print " Description: %s" % self.description
