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>