Annotation of ImageArchive/ImageArchive.py, revision 1.3
1.1 dwinter 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:
1.3 ! dwinter 27: def __init__(self,id,filename,meta=None):
1.1 dwinter 28: self.id=id
29: self.title=filename
30: self.filename=filename
1.3 ! dwinter 31: self.meta=meta
1.1 dwinter 32:
1.3 ! dwinter 33: def getMeta(self):
! 34: """ausgabe der metadaten"""
! 35: return self.meta
! 36:
1.1 dwinter 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)
1.3 ! dwinter 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:
1.1 dwinter 48:
1.3 ! dwinter 49:
! 50:
1.1 dwinter 51: def download(self):
52: """download"""
1.3 ! dwinter 53: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
1.1 dwinter 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"""
1.3 ! dwinter 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)
1.1 dwinter 67:
68:
1.3 ! dwinter 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
1.1 dwinter 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:
1.3 ! dwinter 88: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 89: """Add ImageCollection"""
90: #fileupload=self.REQUEST['fileupload']
1.3 ! dwinter 91: newObj=ImageDigilib(id,fileupload.filename,meta)
1.1 dwinter 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"
1.3 ! dwinter 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):
1.1 dwinter 107: self.id=id
108: self.title=title
109: self.ImageStoragePath=ImageStoragePath
110: self.ImageViewerPath=ImageViewerPath
1.3 ! dwinter 111: self.defaultMetaString=defaultMetaString
1.1 dwinter 112:
113: manage_options = Folder.manage_options+(
114: {'label':'Main Config','action':'ImageCollection_config'},
115: {'label':'Import','action':'ImportFiles'},
1.3 ! dwinter 116: {'label':'Recalculate Metadate','action':'recalculateMeta'},
! 117:
1.1 dwinter 118: )
119:
1.3 ! dwinter 120:
! 121: def meta_default(self,filename):
! 122: """url der metadaten"""
! 123: return self.defaultMetaString % filename
! 124:
1.2 dwinter 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:
1.1 dwinter 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))
1.2 dwinter 151: rc.sort()
1.1 dwinter 152: self.REQUEST.SESSION['filenames']=rc
153: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
154: return pt()
155:
1.3 ! dwinter 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"
1.1 dwinter 166:
167: def addImage(self):
168: """Add an Image"""
169: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
170: return pt()
171:
1.3 ! dwinter 172: def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
1.1 dwinter 173: """Add"""
174: #print "FU",fileupload
1.3 ! dwinter 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)
1.1 dwinter 183: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
184: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 ! dwinter 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')
1.1 dwinter 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:
1.2 dwinter 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
1.3 ! dwinter 224: self._setObject(file,newObj)
1.1 dwinter 225: #print ret
1.3 ! dwinter 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)
1.1 dwinter 229: RESPONSE.redirect('manage_main')
230:
231: def ImageCollection_config(self):
232: """Nothing yet"""
1.3 ! dwinter 233: if not hasattr(self,'defaultMetaString'):
! 234: self.defaultMetaString=""
! 235:
1.1 dwinter 236: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
237: return pt()
238:
1.3 ! dwinter 239: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 240: """Change"""
241: self.title=title
242: self.ImageStoragePath=ImageStoragePath
243: self.ImageViewerPath=ImageViewerPath
1.3 ! dwinter 244: self.defaultMetaString=defaultMetaString
! 245:
1.1 dwinter 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)
1.2 dwinter 260:
1.1 dwinter 261: #print ids
1.2 dwinter 262: ids.sort()
1.1 dwinter 263: return ids
264:
1.2 dwinter 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:
1.1 dwinter 294: def thumblistSelected(self):
295: """main template collection"""
1.2 dwinter 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)
1.1 dwinter 302: return pt()
303:
304: def thumblist(self):
305: """main template collection"""
1.2 dwinter 306: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
1.1 dwinter 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:
1.3 ! dwinter 330: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 331: """Add ImageCollection"""
1.3 ! dwinter 332: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 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>