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="<h3>Document: "+name+"</h3>"
elif type=="folder":
html="<h3>Folder: "+name+"</h3>"
else:
html="<h3>Document: "+name+"</h3>"
html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>"
html=html+"<h4>Description</h4><p>"+description+"</p>"
try:
bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
if bib.attributes.has_key('type'):
html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
else:
html=html+"<h4>Info</h4>"
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')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>