--- OSA_system2/OSAS_browser.py 2005/02/10 19:50:18 1.8
+++ OSA_system2/OSAS_browser.py 2005/02/11 18:11:52 1.12
@@ -15,7 +15,7 @@ import stat
import xml.dom.minidom
from types import *
import xmlrpclib
-
+from OSAS_helpers import *
class OSAS_storeOnline(SimpleItem):
@@ -28,38 +28,146 @@ class OSAS_storeOnline(SimpleItem):
_v_fileSystem={} #chache fuer filesystem
_v_metaFiles={} #chache fuer indexMeta
+ def getMetaFile(self,path):
+ """get index.meta and translate it to HTML"""
+ """Lies Metafile ein
+ @param path: Pfad des index.met
+ @return: index.meta file
+ """
+ html=[]
+ server=xmlrpclib.Server(self.serverUrl)
+
-
-
- def __init__(self,id,serverUrl):
- """initialize a new instance
- @param id: Zope id"""
- self.id = id
- self.serverUrl = serverUrl
-
-
- security.declareProtected('View','index_html')
- def index_html(self):
- """main view either standard template zpt/storeOnline_index_html.zpt or storeOnline_index.html in tree"""
- if hasattr(self,'storeOnline_index.html'):
- return getattr(self,'storeOnline_index.html')()
+ f=server.getFile(path+"/index.meta")
+
+ if not f:
+
+ return self.getMetaInfoFromIndexMeta(path)
+ #return "NO_METADATA"
else:
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeOnline_index_html.zpt')).__of__(self)
- return pt()
+
+ dom = xml.dom.minidom.parseString(f)
+
+ 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"""
- def findIndexMeta(self,path=""):
- """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
- @keyword path: default ist "", Pfad auf das Object relativ zum rootFolderName
- @return: None falls kein index.meta existiert sonst Pfad auf das index.meta
+ # 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
"""
- realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
- #suche index.meta
+ 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.
+ """
+
server=xmlrpclib.Server(self.serverUrl)
- return server.findIndexMeta(realPath)
+ indexMeta=server.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.parseString(server.getFile(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 getSubDirsFromIndexMeta(self,path):
@@ -88,10 +196,10 @@ class OSAS_storeOnline(SimpleItem):
return self._v_metaFiles[path][1]
try:
- dom=xml.dom.minidom.parse(indexMeta)
+ dom=xml.dom.minidom.parseString(server.getFile(indexMeta))
except:
zLOG.LOG("OSAS_browser (getSubDirsFromIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)
-
+ return ret
dirs=[]
dirs=dom.getElementsByTagName('dir')+dom.getElementsByTagName('file')
@@ -116,14 +224,46 @@ class OSAS_storeOnline(SimpleItem):
fileType="OSAS_file_archive"
object=os.path.join(realPath,pathX,name)
- ret[object]=(fileType,'')
+ ret[object.encode('utf-8')]=(fileType,'')
self._v_metaFiles[path]=(stats[stat.ST_MTIME],ret) # speicher im chache
+
return ret
+
+ def __init__(self,id,serverUrl):
+ """initialize a new instance
+ @param id: Zope id"""
+ self.id = id
+ self.serverUrl = serverUrl
+
+
+ security.declareProtected('View','index_html')
+ def index_html(self):
+ """main view either standard template zpt/storeOnline_index_html.zpt or storeOnline_index.html in tree"""
+ if hasattr(self,'storeOnline_index.html'):
+ return getattr(self,'storeOnline_index.html')()
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeOnline_index_html.zpt')).__of__(self)
+ return pt()
+
+
+ def findIndexMeta(self,path=""):
+ """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
+ @keyword path: default ist "", Pfad auf das Object relativ zum rootFolderName
+ @return: None falls kein index.meta existiert sonst Pfad auf das index.meta
+ """
+ realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
+ #suche index.meta
+ server=xmlrpclib.Server(self.serverUrl)
+ return server.findIndexMeta(realPath)
+
+
+
+
def readObjectsFromPath(self,path="",metaDataId=None):
"""Liest files aus dem path und speichert im cache _v_filesystem.
@@ -165,15 +305,17 @@ class OSAS_storeOnline(SimpleItem):
return self._v_fileSystem[realPath][1]
dir=server.listdir(realPath)
+
+
ret={}
for filename in dir:
object=os.path.join(realPath,filename)
- fileType=OSAS_helpers.checkOSASFileType(object)
-
+ fileType=OSAS_helpers.checkOSASFileType(object,server)
+
if fileType:
if metaData:
- ret[object]=(fileType,metaData.getDisplayFieldsAsStr(object))
+ ret[object]=(fileType,metaData.getDisplayFieldsAsStr(object,server))
else:
ret[object]=(fileType,'')
@@ -214,6 +356,8 @@ class OSAS_storeOnline(SimpleItem):
objects=self.readObjectsFromPath(path)
if not objects:
objects={}
+
+
im=self.getSubDirsFromIndexMeta(path)
for key in im.keys():
#virtuelle pfade hinzufuegen
@@ -279,16 +423,6 @@ class OSAS_storeOnline(SimpleItem):
i=i-1
return string
- def getMetaFile(self,path):
- """Lies Metafile ein
- @param path: Pfad des index.met
- @return: index.meta file
- """
- server=xmlrpclib.Server(self.serverUrl)
- tmp=server.getMetaFile(path)
- #zLOG.LOG("EE",zLOG.INFO,type(tmp))
-
- return tmp
InitializeClass(OSAS_storeOnline)