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(Folder,Persistent,Implicit):
24: """Anzeige object fuer digilib"""
25: meta_type="ImageDigilib"
26:
27: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
28:
29: manage_options = Folder.manage_options+(
30:
31: {'label':'Add Metadata','action':'addMetaObjectForm'},
32:
33: )
34:
35: def addMetaObject(self,id,RESPONSE=None):
36: """Add an MetaObject"""
37: objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
38:
39: request=self.REQUEST
40: objectCreate=objectType.createObjectManager(id,request)
41: #for field in self.leiden_meta_fields:
42: # self.REQUEST[field]=argv[field]
43: self._setObject(id,objectCreate)
44:
45: objectCreate.propertysheets.meta.manage_editProperties(request)
46:
47: if RESPONSE is not None:
48: RESPONSE.redirect('manage_main')
49:
50:
51:
52:
53: def addMetaObjectForm(self):
54: """Add Form"""
55: pt=PageTemplateFile('Products/ImageArchive/addMetaObject.zpt').__of__(self)
56: return pt()
57:
58:
59: def __init__(self,id,filename,meta=None):
60: self.id=id
61: self.title=filename
62: self.filename=filename
63: self.meta=meta
64:
65: def getMeta(self):
66: """ausgabe der metadaten"""
67: return self.meta
68:
69: def uploadImage(self,fileupload,path_name):
70: """upload an Image from an Requast"""
71: #path_name=self.ImageStoragePath
72: filename=path_name+"/"+fileupload.filename
73: filedata=fileupload.read()
74: f=open(filename,"w")
75: f.write(filedata)
76: f.close()
77: os.chmod(filename,0644)
78: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
79:
80:
81:
82:
83:
84: def download(self):
85: """download"""
86: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
87: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
88: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
89: return self.REQUEST.RESPONSE.redirect(path)
90:
91: def thumb(self):
92: """show thumb"""
93: thumbname=os.path.splitext(self.filename)[0]+".jpg"
94: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
95: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
96: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
97: ## f.write(image)
98: ## f.close()
99: ## os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
100:
101:
102: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
103: #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
104: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
105: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
106: return pt()
107:
108: def index_html(self):
109: """show image"""
110: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
111: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
112: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
113: return self.REQUEST.RESPONSE.redirect(path)
114:
115:
116: def manage_AddImageDigilibForm(self):
117: """Nothing yet"""
118: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
119: return pt()
120:
121: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
122: """Add ImageCollection"""
123: #fileupload=self.REQUEST['fileupload']
124: newObj=ImageDigilib(id,fileupload.filename,meta)
125:
126: self._setObject(id,newObj)
127: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
128:
129: if RESPONSE is not None:
130: RESPONSE.redirect('manage_main')
131:
132:
133: class ImageCollection(Folder, Persistent, Implicit):
134: """Sammelordner für Bilder"""
135: meta_type="ImageCollection"
136:
137: genericMetaDataType="leiden_meta"
138:
139: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
140:
141:
142: 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
143:
144: def scaleThumbs(self):
145: """scale thumbs"""
146: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
147: return "RESCALING STARTED"
148:
149: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
150: self.id=id
151: self.title=title
152: self.ImageStoragePath=ImageStoragePath
153: self.ImageViewerPath=ImageViewerPath
154: self.defaultMetaString=defaultMetaString
155:
156: manage_options = Folder.manage_options+(
157: {'label':'Main Config','action':'ImageCollection_config'},
158: {'label':'Import','action':'ImportFiles'},
159: {'label':'Recalculate Metadata','action':'recalculateMeta'},
160: {'label':'Import Metadata','action':'importMetaForm'},
161: {'label':'Rescale thumbs','action':'scaleThumbs'},
162: )
163:
164:
165: def importMetaForm(self):
166: """import metadata"""
167: pt=PageTemplateFile('Products/ImageArchive/importMeta.zpt').__of__(self)
168: return pt()
169:
170: def importMeta(self,fileupload,tag):
171: """import"""
172: filedata=fileupload.read()
173: dom=xml.dom.minidom.parseString(filedata)
174: rows=dom.getElementsByTagName(tag)
175: #print "ROWS",rows
176: request=self.REQUEST
177: for row in rows:
178:
179: for a in self.leiden_meta_fields:
180: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
181:
182: image_id=self.REQUEST['image_id']
183: if (not hasattr(self,image_id)) & (not image_id==""):
184: print image_id
185: newObj=ImageCollection(str(image_id),image_id,'','','')
186: self._setObject(str(image_id),newObj)
187:
188: id="leiden_meta_data_file"
189: self.REQUEST['id']=id
190: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
191: #objectCreate=objectType.createInObjectManager(id,request)
192: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
193: try:
194: addID=getattr(self,image_id)
195: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
196: #getattr(self,image_id)._setObject(id,objectCreate)
197: obj=getattr(addID,id)
198: obj.propertysheets.meta.manage_editProperties(request)
199: except:
200: """nothing"""
201: return "OK"
202:
203:
204: def nextImage(self,request,selected=None):
205: """show nextimage"""
206: ids=self.show_thumbs()
207: if request.SESSION.has_key("filename"):
208: filename=request.SESSION["filename"]
209: try:
210: nr=ids.index(filename)
211: except:
212: nr=0
213: else:
214: nr=0
215:
216: if nr==len(ids)-1:
217: return ""
218: else:
219: if selected:
220: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
221: else:
222: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
223:
224: def prevImage(self,request,selected=None):
225: """show nextimage"""
226: #return self.getId()
227: ids=self.show_thumbs()
228: if request.SESSION.has_key("filename"):
229: filename=request.SESSION["filename"]
230: try:
231: nr=ids.index(filename)
232: except:
233: nr=0
234: else:
235: nr=0
236:
237: if nr==0:
238: return ""
239: else:
240: if selected:
241: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
242: else:
243: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
244:
245: def meta_default(self,filename):
246: """url der metadaten"""
247: return self.defaultMetaString % filename
248:
249: def getThumbAttribute(self,id,attr):
250: if hasattr(self,id):
251: return getattr(getattr(self,id),attr)
252: else:
253: if attr=='title':
254: return "<b>Missing Image:%s</b>" % id
255:
256: def getThumbFunction(self,id,attr):
257: #return "DUMP"
258: if hasattr(self,id):
259: return getattr(getattr(self,id),attr)()
260:
261:
262: def xmlinput(self,url):
263: """Anzeige von ausgewaehlten thumbs"""
264: #return url
265:
266: url=urllib.unquote(url)
267: xmldoc=urllib.urlopen(url).read()
268: #print url
269: dom=xml.dom.minidom.parseString(xmldoc)
270:
271: images=dom.getElementsByTagName('imagename')
272: rc=[]
273: for image in images:
274: text=getText(image.childNodes)
275: if not text=="":
276: rc.append(str(text))
277: rc.sort()
278: self.REQUEST.SESSION['filenames']=rc
279: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
280: return pt()
281:
282: def recalculateMeta(self):
283: """recalculate the metadata"""
284:
285: for entryid in self.__dict__:
286: entry=getattr(self,entryid)
287: if hasattr(entry,'meta_type'):
288:
289: if entry.meta_type=="ImageDigilib":
290: entry.meta=entry.meta_default(entry.getId())
291: return "OK"
292:
293: def addImage(self):
294: """Add an Image"""
295: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
296: return pt()
297:
298: def addImage2(self,fileupload,meta,use_default=None,RESPONSE=None):
299: """Add"""
300: #print "FU",fileupload
301:
302: if use_default:
303: try:
304: meta=self.meta_default(fileupload.filename)
305: except:
306: meta=None
307: else:
308: meta=None
309:
310: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
311: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
312: #return self.REQUEST['URL1']+'/'+fileupload.filename
313:
314: def ImportFiles2(self,RESPONSE=None):
315: """Import the existing files of a folder"""
316: files=os.listdir(self.ImageStoragePath)
317: ret=""
318: #print self.__dict__
319: for file in files:
320: if not file[0]==".":
321: if self.__dict__.has_key(file):
322:
323: ret=ret+"<br>"+file+" already exists!"
324: else:
325: ret=ret+"<br>"+file+" created!"
326: meta=self.meta_default(file)
327: newObj=ImageDigilib(file,file,meta)
328: #print newObj,file
329: #print newObj
330: self._setObject(file,newObj)
331: #print ret
332: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
333: #print self.ImageStoragePath
334: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
335: RESPONSE.redirect('manage_main')
336:
337: def ImportFiles(self,RESPONSE=None):
338: """Import the existing files of a folder"""
339: files=os.listdir(self.ImageStoragePath)
340: ret=""
341: #print self.__dict__
342: for file in files:
343: if not file[0]==".":
344: if self.__dict__.has_key(file):
345:
346: ret=ret+"<br>"+file+" already exists!"
347: else:
348: ret=ret+"<br>"+file+" created!"
349: newObj=ImageDigilib(file,file)
350: #print newObj,file
351: #print newObj
352: try:
353: self._setObject(file,newObj)
354: except:
355: """nothing yet"""
356: #print ret
357: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
358: #print self.ImageStoragePath
359: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
360: RESPONSE.redirect('manage_main')
361:
362: def ImageCollection_config(self):
363: """Nothing yet"""
364: if not hasattr(self,'defaultMetaString'):
365: self.defaultMetaString=""
366:
367: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
368: return pt()
369:
370: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
371: """Change"""
372: self.title=title
373: self.ImageStoragePath=ImageStoragePath
374: self.ImageViewerPath=ImageViewerPath
375: self.defaultMetaString=defaultMetaString
376:
377: if RESPONSE is not None:
378: RESPONSE.redirect('manage_main')
379:
380: def show_selected_thumbs(self):
381: #ids=[]
382:
383: return self.REQUEST.SESSION['filenames']
384:
385: def show_thumbs(self):
386: ids=[]
387: for entry in self.__dict__:
388: #print entry
389: if hasattr(getattr(self,entry),'thumb'):
390: ids.append(entry)
391:
392: #print ids
393: ids.sort()
394: return ids
395:
396: def show_thumbs_selected_rows(self,numberOfColumns):
397: """Ausgabe anzahl"""
398: ids=self.show_selected_thumbs()
399: self.REQUEST.SESSION['ids']=ids
400: number=int(len(ids)/numberOfColumns)+1
401: self.REQUEST.SESSION['number']=range(number)
402: return range(number+1)
403:
404: def show_thumbs_rows(self,numberOfColumns):
405: """Ausgabe anzahl"""
406: ids=self.show_thumbs()
407: self.REQUEST.SESSION['ids']=ids
408: number=int(len(ids)/numberOfColumns)+1
409:
410: return range(number+1)
411:
412: def show_thumbs_columns(self,row,numberOfColumns):
413: """Ausgabe einer Liste der Reihe"""
414: ids=self.REQUEST.SESSION['ids']
415: max=len(ids)
416: if (row*numberOfColumns)<max:
417: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
418: else:
419: return ids[(row-1)*numberOfColumns:]
420: def thumblistSelected_old(self):
421: """main template collection"""
422: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
423: return pt()
424:
425: def thumblistSelected(self):
426: """main template collection"""
427: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
428: return pt()
429:
430: def thumblist_old(self):
431: """main template collection"""
432: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
433: return pt()
434:
435: def thumblist(self):
436: """main template collection"""
437: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
438: return pt()
439:
440: def navig_selected_html(self):
441: """navigation"""
442: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
443: pt=PageTemplateFile('Products/ImageArchive/navigation_selected.zpt').__of__(self)
444: return pt()
445:
446: def navig_html(self):
447: """navigation"""
448: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
449: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
450: return pt()
451:
452:
453: def selection(self):
454: """show only selected"""
455: if self.REQUEST.has_key('filename'):
456: filen=self.REQUEST['filename']
457: else:
458: filen=""
459: self.REQUEST.SESSION['filename']=filen
460: pt=PageTemplateFile('Products/ImageArchive/overview_selected2.zpt').__of__(self)
461: return pt()
462:
463: def index_html(self):
464: """main template collection"""
465: if self.REQUEST.has_key('filename'):
466: filen=self.REQUEST['filename']
467: else:
468: filen=""
469: self.REQUEST.SESSION['filename']=filen
470: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
471: return pt()
472:
473: def manage_AddImageCollectionForm(self):
474: """Nothing yet"""
475: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
476: return pt()
477:
478: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
479: """Add ImageCollection"""
480: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
481: self._setObject(id,newObj)
482:
483: if RESPONSE is not None:
484: RESPONSE.redirect('manage_main')
485:
486:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>