1: from OFS.Folder import Folder
2: from OFS.SimpleItem import SimpleItem
3: from Globals import Persistent
4: from Acquisition import Implicit
5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: from Products.PageTemplates.PageTemplate import PageTemplate
7: import re
8: import os
9: import os.path
10: import urllib
11: import xml.dom.minidom
12:
13: def getText(nodelist):
14:
15: rc = ""
16: for node in nodelist:
17:
18: if node.nodeType == node.TEXT_NODE:
19: rc = rc + node.data
20: return rc
21:
22:
23: class ImageDigilib(SimpleItem,Persistent,Implicit):
24: """Anzeige object fuer digilib"""
25: meta_type="ImageDigilib"
26:
27: def __init__(self,id,filename,meta=None):
28: self.id=id
29: self.title=filename
30: self.filename=filename
31: self.meta=meta
32:
33: def getMeta(self):
34: """ausgabe der metadaten"""
35: return self.meta
36:
37: def uploadImage(self,fileupload,path_name):
38: """upload an Image from an Requast"""
39: #path_name=self.ImageStoragePath
40: filename=path_name+"/"+fileupload.filename
41: filedata=fileupload.read()
42: f=open(filename,"w")
43: f.write(filedata)
44: f.close()
45: os.chmod(filename,0644)
46: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
47:
48:
49:
50:
51: def download(self):
52: """download"""
53: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
54: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
55: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
56: return self.REQUEST.RESPONSE.redirect(path)
57:
58: def thumb(self):
59: """show thumb"""
60: thumbname=os.path.splitext(self.filename)[0]+".jpg"
61: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
62: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
63: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
64: ## f.write(image)
65: ## f.close()
66: ## os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
67:
68:
69: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
70: #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
71: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
72: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
73: return pt()
74:
75: def index_html(self):
76: """show image"""
77: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
78: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
79: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
80: return self.REQUEST.RESPONSE.redirect(path)
81:
82:
83: def manage_AddImageDigilibForm(self):
84: """Nothing yet"""
85: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
86: return pt()
87:
88: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
89: """Add ImageCollection"""
90: #fileupload=self.REQUEST['fileupload']
91: newObj=ImageDigilib(id,fileupload.filename,meta)
92:
93: self._setObject(id,newObj)
94: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
95:
96: if RESPONSE is not None:
97: RESPONSE.redirect('manage_main')
98:
99:
100: class ImageCollection(Folder, Persistent, Implicit):
101: """Sammelordner für Bilder"""
102: meta_type="ImageCollection"
103:
104: defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP
105:
106: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
107: self.id=id
108: self.title=title
109: self.ImageStoragePath=ImageStoragePath
110: self.ImageViewerPath=ImageViewerPath
111: self.defaultMetaString=defaultMetaString
112:
113: manage_options = Folder.manage_options+(
114: {'label':'Main Config','action':'ImageCollection_config'},
115: {'label':'Import','action':'ImportFiles'},
116: {'label':'Recalculate Metadate','action':'recalculateMeta'},
117:
118: )
119:
120:
121: def meta_default(self,filename):
122: """url der metadaten"""
123: return self.defaultMetaString % filename
124:
125: def getThumbAttribute(self,id,attr):
126: if hasattr(self,id):
127: return getattr(getattr(self,id),attr)
128: else:
129: if attr=='title':
130: return "<b>Missing Image:%s</b>" % id
131:
132: def getThumbFunction(self,id,attr):
133: #return "DUMP"
134: if hasattr(self,id):
135: return getattr(getattr(self,id),attr)()
136:
137:
138: def xmlinput(self,url):
139: """Anzeige von ausgewaehlten thumbs"""
140: #return url
141: xmldoc=urllib.urlopen(url).read()
142:
143: dom=xml.dom.minidom.parseString(xmldoc)
144:
145: images=dom.getElementsByTagName('imagename')
146: rc=[]
147: for image in images:
148: text=getText(image.childNodes)
149: if not text=="":
150: rc.append(str(text))
151: rc.sort()
152: self.REQUEST.SESSION['filenames']=rc
153: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
154: return pt()
155:
156: def recalculateMeta(self):
157: """recalculate the metadata"""
158:
159: for entryid in self.__dict__:
160: entry=getattr(self,entryid)
161: if hasattr(entry,'meta_type'):
162:
163: if entry.meta_type=="ImageDigilib":
164: entry.meta=entry.meta_default(entry.getId())
165: return "OK"
166:
167: def addImage(self):
168: """Add an Image"""
169: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
170: return pt()
171:
172: def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
173: """Add"""
174: #print "FU",fileupload
175:
176: if use_default:
177: try:
178: meta=self.meta_default(fileupload.filename)
179: except:
180: meta=None
181:
182: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
183: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
184: #return self.REQUEST['URL1']+'/'+fileupload.filename
185:
186: def ImportFiles2(self,RESPONSE=None):
187: """Import the existing files of a folder"""
188: files=os.listdir(self.ImageStoragePath)
189: ret=""
190: #print self.__dict__
191: for file in files:
192: if not file[0]==".":
193: if self.__dict__.has_key(file):
194:
195: ret=ret+"<br>"+file+" already exists!"
196: else:
197: ret=ret+"<br>"+file+" created!"
198: meta=self.meta_default(file)
199: newObj=ImageDigilib(file,file,meta)
200: #print newObj,file
201: #print newObj
202: self._setObject(file,newObj)
203: #print ret
204: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
205: #print self.ImageStoragePath
206: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
207: RESPONSE.redirect('manage_main')
208:
209: def ImportFiles(self,RESPONSE=None):
210: """Import the existing files of a folder"""
211: files=os.listdir(self.ImageStoragePath)
212: ret=""
213: #print self.__dict__
214: for file in files:
215: if not file[0]==".":
216: if self.__dict__.has_key(file):
217:
218: ret=ret+"<br>"+file+" already exists!"
219: else:
220: ret=ret+"<br>"+file+" created!"
221: newObj=ImageDigilib(file,file)
222: #print newObj,file
223: #print newObj
224: self._setObject(file,newObj)
225: #print ret
226: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
227: #print self.ImageStoragePath
228: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
229: RESPONSE.redirect('manage_main')
230:
231: def ImageCollection_config(self):
232: """Nothing yet"""
233: if not hasattr(self,'defaultMetaString'):
234: self.defaultMetaString=""
235:
236: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
237: return pt()
238:
239: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
240: """Change"""
241: self.title=title
242: self.ImageStoragePath=ImageStoragePath
243: self.ImageViewerPath=ImageViewerPath
244: self.defaultMetaString=defaultMetaString
245:
246: if RESPONSE is not None:
247: RESPONSE.redirect('manage_main')
248:
249: def show_selected_thumbs(self):
250: #ids=[]
251:
252: return self.REQUEST.SESSION['filenames']
253:
254: def show_thumbs(self):
255: ids=[]
256: for entry in self.__dict__:
257: #print entry
258: if hasattr(getattr(self,entry),'thumb'):
259: ids.append(entry)
260:
261: #print ids
262: ids.sort()
263: return ids
264:
265: def show_thumbs_selected_rows(self,numberOfColumns):
266: """Ausgabe anzahl"""
267: ids=self.show_selected_thumbs()
268: self.REQUEST.SESSION['ids']=ids
269: number=int(len(ids)/numberOfColumns)+1
270: self.REQUEST.SESSION['number']=range(number)
271: return range(number+1)
272:
273: def show_thumbs_rows(self,numberOfColumns):
274: """Ausgabe anzahl"""
275: ids=self.show_thumbs()
276: self.REQUEST.SESSION['ids']=ids
277: number=int(len(ids)/numberOfColumns)+1
278:
279: return range(number+1)
280:
281: def show_thumbs_columns(self,row,numberOfColumns):
282: """Ausgabe einer Liste der Reihe"""
283: ids=self.REQUEST.SESSION['ids']
284: max=len(ids)
285: if (row*numberOfColumns)<max:
286: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
287: else:
288: return ids[(row-1)*numberOfColumns:]
289: def thumblistSelected_old(self):
290: """main template collection"""
291: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
292: return pt()
293:
294: def thumblistSelected(self):
295: """main template collection"""
296: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
297: return pt()
298:
299: def thumblist_old(self):
300: """main template collection"""
301: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
302: return pt()
303:
304: def thumblist(self):
305: """main template collection"""
306: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
307: return pt()
308:
309: def navig_html(self):
310: """navigation"""
311: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
312: return pt()
313:
314:
315: def index_html(self):
316: """main template collection"""
317: if self.REQUEST.has_key('filename'):
318: filen=self.REQUEST['filename']
319: else:
320: filen=""
321: self.REQUEST.SESSION['filename']=filen
322: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
323: return pt()
324:
325: def manage_AddImageCollectionForm(self):
326: """Nothing yet"""
327: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
328: return pt()
329:
330: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
331: """Add ImageCollection"""
332: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
333: self._setObject(id,newObj)
334:
335: if RESPONSE is not None:
336: RESPONSE.redirect('manage_main')
337:
338:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>