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