Annotation of OSA_system2/OSAS_browser.py, revision 1.1.1.1

1.1       dwinter     1: """ Classes for displaying, browsing and organizing the archive
                      2: """
                      3: 
                      4: 
                      5: import OSAS_helpers
                      6: from AccessControl import ClassSecurityInfo
                      7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      8: from OFS.Folder import Folder
                      9: from OFS.SimpleItem import SimpleItem
                     10: from Globals import InitializeClass,package_home
                     11: import zLOG
                     12: import os
                     13: import os.path
                     14: import stat
                     15: 
                     16: class OSAS_storeOnline(SimpleItem):
                     17:     """Webfrontend für das Storagesystem
                     18:     liefert Browserumgebung 
                     19:     """
                     20:     meta_type="OSAS_StoreOnline__neu"
                     21:     
                     22:     security=ClassSecurityInfo()
                     23: 
                     24:     _v_fileSystem={} #chache fuer filesystem
                     25:     
                     26:     def __init__(self,id):
                     27:         """initialize a new instance"""
                     28:         self.id = id
                     29: 
                     30:     
                     31: 
                     32:     security.declareProtected('View','index_html')
                     33:     def index_html(self):
                     34:         """main view either standard template or storeOnline_index.html in tree"""
                     35:         if hasattr(self,'storeOnline_index.html'):
                     36:             return getattr(self,'storeOnline_index.html')()
                     37:         else:
                     38:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeOnline_index_html.zpt')).__of__(self)
                     39:             return pt()
                     40: 
                     41: 
                     42:    
                     43: 
                     44:     def readObjectsFromPath(self,path=""):
                     45:         """Liest files aus dem path und speichert im cache _v_filesystem.
                     46:          - to do: files aus metadaten
                     47: 
                     48:         @param path : path relativ zum root folder des Storagesystems
                     49:         """
                     50:                        
                     51:         realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
                     52:         metaData=self.testmd #test
                     53:         
                     54:         if realPath.find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen
                     55:             return {}
                     56:             
                     57:         
                     58:         if not os.path.exists(realPath):
                     59:             return None,"(ERROR) path %s does not exist."%path
                     60: 
                     61:         stats=os.stat(realPath)
                     62: 
                     63:         # teste ob schon im cache
                     64:         #if self._v_fileSystem.has_key(realPath) and (self._v_fileSystem[realPath][0]==stats[stat.ST_MTIME]):
                     65:             
                     66:         #    return self._v_fileSystem[realPath][1]
                     67: 
                     68:         dir=os.listdir(realPath)
                     69:         ret={}
                     70:         for filename in dir:
                     71:             object=os.path.join(realPath,filename)
                     72:             fileType=OSAS_helpers.checkOSASFileType(object)
                     73:             
                     74:             if fileType:
                     75:                 ret[object]=(fileType,metaData.getDisplayFieldsAsStr(object))
                     76:             
                     77:         self._v_fileSystem[realPath]=(stats[stat.ST_MTIME],ret) # speicher im chache
                     78:         
                     79:         return ret
                     80: 
                     81:     def giveHandlers(self,path,type):
                     82:         """teste ob für diese Typ, viewer definiert sind"""
                     83:         ret=[]
                     84:         
                     85:         for viewer in self.ZopeFind(self.aq_parent,obj_metatypes=['OSAS_ViewerObject__neu'],search_sub=1):
                     86:             if type in viewer[1].objectTypes:
                     87:                 path=path.replace(getattr(viewer[1],'ignorePath',''),'')
                     88:                 url=viewer[1].prefix%path
                     89:                 text=viewer[1].title
                     90:                 string="""<a target="_blank" href="%s">%s</a>"""%(url,text)
                     91:                 ret.append(string)
                     92:         return ret
                     93:                       
                     94:         
                     95:     def generateTree(self,path=""):
                     96:         """erzeuge navigations elemente"""
                     97:         objects=self.readObjectsFromPath(path)
                     98:         def sortLow(x,y):
                     99:             return cmp(x.lower(),y.lower())
                    100:         
                    101:         ret=[]
                    102:         
                    103:         objectSorted=objects.keys()
                    104:         objectSorted.sort(sortLow)
                    105:         for object in objectSorted:
                    106:             handler=self.giveHandlers(object,objects[object][0])
                    107:             if objects[object][0]=="OSAS_dir":
                    108:                 
                    109:                 string="""<a href="?path=%s">%s</a>"""%(object,os.path.split(object)[1])
                    110:                 
                    111:                 ret.append((string,handler,objects[object][1]))
                    112:             else:
                    113:                 ret.append((os.path.split(object)[1],handler,objects[object][1]))
                    114: 
                    115:                      
                    116:         return ret
                    117: 
                    118: 
                    119:     def path_to_link(self,pathTmp=""):
                    120:         """generates navigation bar for viewfiles"""
                    121: 
                    122:         path=os.path.normpath(os.path.join(self.rootFolderName,pathTmp))
                    123:         
                    124:         URL=self.absolute_url()
                    125:         string=""
                    126:         
                    127:         tmppath=os.path.dirname(path)
                    128:         i=0
                    129:         pathes=[[path, os.path.basename(path)]]
                    130: 
                    131:         while not (len(tmppath)==1):
                    132: 
                    133:               i=i+1
                    134:               if i>20: break
                    135: 
                    136:               pathes.append([tmppath, os.path.basename(tmppath)])
                    137:               tmppath=os.path.dirname(tmppath)
                    138: 
                    139:         while i>=0:
                    140:             if pathes[i][0].find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen
                    141:                 string=string+"<a>"+pathes[i][1]+"</a>/"
                    142:             else:
                    143:                 string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    144:             
                    145:             i=i-1
                    146:         return string
                    147: 
                    148:     def getMetaFile(self,path):
                    149:         """Lese Metafile ein"""
                    150:         return OSAS_helpers.getMetaFile(path)
                    151: 
                    152: InitializeClass(OSAS_storeOnline)
                    153:    
                    154: def manage_addOSAS_storeOnlineForm(self):
                    155:     """interface for adding the OSAS_root"""
                    156:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnline.zpt')).__of__(self)
                    157:     return pt()
                    158: 
                    159: def manage_addOSAS_storeOnline(self,id,RESPONSE=None):
                    160:     """add the OSAS_root"""
                    161:     newObj=OSAS_storeOnline(id)
                    162:     self._setObject(id,newObj)
                    163:     if RESPONSE is not None:
                    164:         RESPONSE.redirect('manage_main')
                    165: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>