1: import os
2: import os.path
3: import stat
4: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
5: from Globals import InitializeClass,package_home
6: from OFS.SimpleItem import SimpleItem
7: import xml.dom.minidom
8: import OSAS_helpers
9: from OSAS_helpers import *
10:
11: class OSAS_storeOnlineServer(SimpleItem):
12: """Server for store Online system"""
13:
14: meta_type="OSAS_server"
15:
16: def findIndexMeta(self,realPath=""):
17: """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
18: @keyword path: default ist "", Pfad auf das Object
19: @return: None falls kein index.meta existiert sonst Pfad auf das index.meta
20: """
21:
22: #suche index.meta
23: while (not os.path.exists(os.path.join(realPath,'index.meta'))) and (not ((realPath=="") or (realPath=="/"))):
24: realPath=os.path.split(realPath)[0]
25:
26: if realPath=='' or realPath=='/':
27: if os.path.exists(os.path.join(realPath,'index.meta')):
28: return (os.path.join(realPath,'index.meta'))
29: else:
30: return None
31: else:
32: return os.path.join(realPath,'index.meta')
33:
34: def findIndexMetaWithStats(self,path=""):
35: """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
36: @keyword path: default ist "", Pfad auf das Object
37: @return: None falls kein index.meta existiert sonst Tupel (Pfad auf das index.meta,stats(indexMeta)
38: """
39:
40: indexMeta=self.findIndexMeta(path)
41: if indexMeta:
42: return (indexMeta,self.getStat(indexMeta))
43: else:
44: return (None,[])
45:
46:
47: def getStat(self,path=""):
48: """Gibt stat von path aus
49: @keyword path: default ist "", Pfad
50: @return: stat[path]"""
51:
52: if not os.path.exists(path):
53: #return None,"(ERROR) path %s does not exist."%path
54: return None
55: else:
56: return [x for x in os.stat(path)]
57:
58:
59:
60:
61: def listdir(self,path=""):
62: """list dir"""
63: return os.listdir(path)
64:
65:
66: def getMetaFile(self,path):
67: """get index.meta and translate it to HTML"""
68: html=[]
69:
70: if not os.path.exists(path+"/index.meta"):
71:
72: return self.getMetaInfoFromIndexMeta(path)
73: #return "NO_METADATA"
74: else:
75:
76: f = os.popen("cat "+path+"/index.meta","r")
77: lines = f.read()
78:
79: dom = xml.dom.minidom.parseString(lines)
80: try:
81: name=getText(dom.getElementsByTagName("name")[0].childNodes)
82: except:
83: name="NOT_DEFINED!!!"
84: try:
85: creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
86: except:
87: creator="NOT_DEFINED!!!"
88:
89: try:
90: creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
91: except:
92: creation_date="NOT_DEFINED!!!"
93:
94: try:
95: description=getText(dom.getElementsByTagName("description")[0].childNodes)
96: except:
97: description="NOT_DEFINED!!!"
98:
99: try:
100: type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
101: except:
102: type=""
103: if type=="scanned document":
104: html="<h3>Document: "+name+"</h3>"
105: elif type=="folder":
106: html="<h3>Folder: "+name+"</h3>"
107: else:
108: html="<h3>Document: "+name+"</h3>"
109:
110: html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>"
111: html=html+"<h4>Description</h4><p>"+description+"</p>"
112: try:
113: bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
114: if bib.attributes.has_key('type'):
115: html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
116: else:
117: html=html+"<h4>Info</h4>"
118: html=html+getBib(bib.childNodes)
119:
120: except:
121: """none"""
122:
123: # html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
124:
125: return html
126:
127:
128: def getMetaInfoFromIndexMeta(self,path):
129: """metadaten zu path als html aus dem index.meta file zu path (meta tag im file bzw. dir container)
130: @param path: Pfad auf das Object relativ zum rootFolderName
131: @return: metadata als html
132: """
133: xmlInfos=self.findEntryInIndexMeta(path)
134: if xmlInfos:
135: return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos)
136: else:
137: return ""
138:
139: def findEntryInIndexMeta(self,path):
140: """Finde im naechstgelegenden index.meta relativ zu path den entprechenden Eintrag fuer diesen Pfad.
141: @param path: Pfad auf das Object relativ zum rootFolderName
142: @return: den Teil von Index.meta der Informationen zu path enthaelt, None wenn error.
143: """
144:
145: indexMeta=self.findIndexMeta(path) # suche index.meta
146:
147: if not indexMeta:
148: return None
149:
150: realPath=os.path.split(indexMeta)[0]
151: path=os.path.normpath(path)
152:
153: try:
154: dom=xml.dom.minidom.parse(indexMeta)
155: except:
156: zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)
157: #ist path ein directory?
158: dirs=dom.getElementsByTagName('dir')
159: for dir in dirs:
160: pathes=dir.getElementsByTagName('path')
161: if pathes:
162: pathX=OSAS_helpers.getText(pathes[0].childNodes)
163: else:
164: pathX=""
165: names=dir.getElementsByTagName('name')
166: if names:
167: name=OSAS_helpers.getText(names[0].childNodes)
168: else:
169: name=""
170:
171: checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
172: if checkpath==path:
173:
174: return dir.toxml()
175:
176: #ist path ein file?
177: files=dom.getElementsByTagName('file')
178: for dir in dirs:
179: pathes=dir.getElementsByTagName('path')
180: if pathes:
181: pathX=OSAS_helpers.getText(pathes[0].childNodes)
182: else:
183: pathX=""
184: names=dir.getElementsByTagName('name')
185: if names:
186: name=OSAS_helpers.getText(names[0].childNodes)
187: else:
188: name=""
189:
190: checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
191: if checkpath==path:
192:
193: return dir.toxml()
194:
195:
196: return None
197:
198:
199: def manage_addOSAS_storeOnlineServerForm(self):
200: """interface for adding the OSAS_storeOnline"""
201: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnlineServer.zpt')).__of__(self)
202: return pt()
203:
204: def manage_addOSAS_storeOnlineServer(self,id,RESPONSE=None):
205: """add the OSAS_storeOnline
206: @param id: id
207: """
208: newObj=OSAS_storeOnlineServer(id)
209: self._setObject(id,newObj)
210: if RESPONSE is not None:
211: RESPONSE.redirect('manage_main')
212:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>