#!/bin/env python
############################################################################## 
#
#     Copyright 
#
#       Copyright 1996 Digital Creations, L.C., 910 Princess Anne
#       Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All
#       rights reserved.  
#
############################################################################## 
__doc__='''Application support


$Id: Application.py,v 1.2 1997/07/28 21:33:08 jim Exp $'''
__version__='$Revision: 1.2 $'[11:-2]

import Folder, regex, string
import Globals

class Application(Folder.Folder):

    name='Your Place'
    description=''
    web__form__method='GET'
    manage_options=Folder.Folder.manage_options+(
	{'icon':'App/arrow.jpg', 'label':'Application Management',
	 'action':'app/manage',   'target':'_top'},
	)
    def folderClass(self): return Folder.Folder

    def __class_init__(self): pass

def open_bobobase():
    # Open the application database
    Bobobase=Globals.Bobobase=Globals.PickleDictionary(Globals.BobobaseName)
    
    if not Bobobase.has_key('products'):
	import initial_products
	initial_products.install(Bobobase)
	get_transaction().commit()
    
    products=Bobobase['products']
    
    install_products(products)

    return Bobobase

def install_products(products):
    # Install a list of products into the basic folder class, so
    # that all folders know about top-level objects, aka products

    meta_types=list(Folder.Folder.dynamic_meta_types)

    for product in products:
	product=__import__(product)
	for meta_type in product.meta_types:
	    meta_types.append(meta_type)
	    name=meta_type['name']

	    if (not meta_type.has_key('prefix') and 
		not regex.match('[^a-zA-Z0-9_]', name)):
	        meta_type['prefix']=string.lower(name)

	    if meta_type.has_key('prefix'):
		prefix=meta_type['prefix']

		def productNames(self, name=name):
		    t=[]
		    for i in self.objectMap():
			if i['meta_type']==name: t.append(i['name'])
		    return t

		setattr(Folder.Folder, "%sNames" % prefix , productNames)

		def productValues(self, name=name):
		    t=[]
		    for i in self.objectMap():
			if i['meta_type']==name:
			    t.append(getattr(self,i['name']))
		    return t

		setattr(Folder.Folder, "%sValues" % prefix , productValues)

		def productItems(self, name=name):
		    t=[]
		    for i in self.objectMap():
			if i['meta_type']=='Image':
			    n=i['name']
			    t.append((n,getattr(self,n)))
		    return t

		setattr(Folder.Folder, "%sItems" % prefix , productItems)

	for name,method in product.methods.items():
	    setattr(Folder.Folder, name, method)

    Folder.Folder.dynamic_meta_types=tuple(meta_types)
    

############################################################################## 
# Test functions:
#

def main():
    # The "main" program for this module
    import sys
    print sys.argv[0]+" is a pure module and doesn't do anything by itself."


if __name__ == "__main__": main()

############################################################################## 
#
# $Log: Application.py,v $
# Revision 1.2  1997/07/28 21:33:08  jim
# Changed top name.
#
# Revision 1.1  1997/07/25 20:03:22  jim
# initial
#
#