import os import os.path import stat from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Globals import InitializeClass,package_home from OFS.SimpleItem import SimpleItem import xml.dom.minidom import OSAS_helpers from OSAS_helpers import * class OSAS_storeOnlineServer(SimpleItem): """Server for store Online system""" meta_type="OSAS_server" def findIndexMeta(self,realPath=""): """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file @keyword path: default ist "", Pfad auf das Object @return: None falls kein index.meta existiert sonst Pfad auf das index.meta """ #suche index.meta while (not os.path.exists(os.path.join(realPath,'index.meta'))) and (not ((realPath=="") or (realPath=="/"))): realPath=os.path.split(realPath)[0] if realPath=='' or realPath=='/': if os.path.exists(os.path.join(realPath,'index.meta')): return (os.path.join(realPath,'index.meta')) else: return None else: return os.path.join(realPath,'index.meta') def findIndexMetaWithStats(self,path=""): """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file @keyword path: default ist "", Pfad auf das Object @return: None falls kein index.meta existiert sonst Tupel (Pfad auf das index.meta,stats(indexMeta) """ indexMeta=self.findIndexMeta(path) if indexMeta: return (indexMeta,self.getStat(indexMeta)) else: return (None,[]) def getStat(self,path=""): """Gibt stat von path aus @keyword path: default ist "", Pfad @return: stat[path]""" if not os.path.exists(path): #return None,"(ERROR) path %s does not exist."%path return None else: return [x for x in os.stat(path)] def listdir(self,path=""): """list dir""" return os.listdir(path) def getMetaFile(self,path): """get index.meta and translate it to HTML""" html=[] if not os.path.exists(path+"/index.meta"): return self.getMetaInfoFromIndexMeta(path) #return "NO_METADATA" else: f = os.popen("cat "+path+"/index.meta","r") lines = f.read() dom = xml.dom.minidom.parseString(lines) try: name=getText(dom.getElementsByTagName("name")[0].childNodes) except: name="NOT_DEFINED!!!" try: creator=getText(dom.getElementsByTagName("creator")[0].childNodes) except: creator="NOT_DEFINED!!!" try: creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes) except: creation_date="NOT_DEFINED!!!" try: description=getText(dom.getElementsByTagName("description")[0].childNodes) except: description="NOT_DEFINED!!!" try: type=getText(dom.getElementsByTagName("content-type")[0].childNodes) except: type="" if type=="scanned document": html="

Document: "+name+"

" elif type=="folder": html="

Folder: "+name+"

" else: html="

Document: "+name+"

" html=html+"

created by: "+creator+" at: "+creation_date+"

" html=html+"

Description

"+description+"

" try: bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0] if bib.attributes.has_key('type'): html=html+"

Info ("+bib.attributes['type'].value+")

" else: html=html+"

Info

" html=html+getBib(bib.childNodes) except: """none""" # html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace') return html def getMetaInfoFromIndexMeta(self,path): """metadaten zu path als html aus dem index.meta file zu path (meta tag im file bzw. dir container) @param path: Pfad auf das Object relativ zum rootFolderName @return: metadata als html """ xmlInfos=self.findEntryInIndexMeta(path) if xmlInfos: return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos) else: return "" def findEntryInIndexMeta(self,path): """Finde im naechstgelegenden index.meta relativ zu path den entprechenden Eintrag fuer diesen Pfad. @param path: Pfad auf das Object relativ zum rootFolderName @return: den Teil von Index.meta der Informationen zu path enthaelt, None wenn error. """ indexMeta=self.findIndexMeta(path) # suche index.meta if not indexMeta: return None realPath=os.path.split(indexMeta)[0] path=os.path.normpath(path) try: dom=xml.dom.minidom.parse(indexMeta) except: zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta) #ist path ein directory? dirs=dom.getElementsByTagName('dir') for dir in dirs: pathes=dir.getElementsByTagName('path') if pathes: pathX=OSAS_helpers.getText(pathes[0].childNodes) else: pathX="" names=dir.getElementsByTagName('name') if names: name=OSAS_helpers.getText(names[0].childNodes) else: name="" checkpath=os.path.normpath(os.path.join(realPath,pathX,name)) if checkpath==path: return dir.toxml() #ist path ein file? files=dom.getElementsByTagName('file') for dir in dirs: pathes=dir.getElementsByTagName('path') if pathes: pathX=OSAS_helpers.getText(pathes[0].childNodes) else: pathX="" names=dir.getElementsByTagName('name') if names: name=OSAS_helpers.getText(names[0].childNodes) else: name="" checkpath=os.path.normpath(os.path.join(realPath,pathX,name)) if checkpath==path: return dir.toxml() return None def manage_addOSAS_storeOnlineServerForm(self): """interface for adding the OSAS_storeOnline""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnlineServer.zpt')).__of__(self) return pt() def manage_addOSAS_storeOnlineServer(self,id,RESPONSE=None): """add the OSAS_storeOnline @param id: id """ newObj=OSAS_storeOnlineServer(id) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')