File:  [Repository] / ImageArchive / ImageArchive.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Thu Dec 4 20:49:44 2003 UTC (20 years, 7 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
minor bug

    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:                     try:
  225:                         self._setObject(file,newObj)
  226:                     except:
  227:                         """nothing yet"""
  228:         #print ret
  229:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
  230:         #print self.ImageStoragePath
  231:         os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
  232:         RESPONSE.redirect('manage_main')
  233:         
  234:     def ImageCollection_config(self):
  235:         """Nothing yet"""
  236:         if not hasattr(self,'defaultMetaString'):
  237:             self.defaultMetaString=""
  238:             
  239:         pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
  240:         return pt()
  241: 
  242:     def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
  243:         """Change"""
  244:         self.title=title
  245:         self.ImageStoragePath=ImageStoragePath
  246:         self.ImageViewerPath=ImageViewerPath
  247:         self.defaultMetaString=defaultMetaString
  248:         
  249:         if RESPONSE is not None:
  250:             RESPONSE.redirect('manage_main')
  251: 
  252:     def show_selected_thumbs(self):
  253:         #ids=[]
  254:         
  255:         return self.REQUEST.SESSION['filenames']
  256: 
  257:     def show_thumbs(self):
  258:         ids=[]
  259:         for entry in self.__dict__:
  260:             #print entry
  261:             if hasattr(getattr(self,entry),'thumb'):
  262:                 ids.append(entry)
  263:                 
  264:         #print ids
  265:         ids.sort()
  266:         return ids
  267: 
  268:     def show_thumbs_selected_rows(self,numberOfColumns):
  269:         """Ausgabe anzahl"""
  270:         ids=self.show_selected_thumbs()
  271:         self.REQUEST.SESSION['ids']=ids
  272:         number=int(len(ids)/numberOfColumns)+1
  273:         self.REQUEST.SESSION['number']=range(number)
  274:         return range(number+1)
  275: 
  276:     def show_thumbs_rows(self,numberOfColumns):
  277:         """Ausgabe anzahl"""
  278:         ids=self.show_thumbs()
  279:         self.REQUEST.SESSION['ids']=ids
  280:         number=int(len(ids)/numberOfColumns)+1
  281:         
  282:         return range(number+1)
  283: 
  284:     def show_thumbs_columns(self,row,numberOfColumns):
  285:         """Ausgabe einer Liste der Reihe"""
  286:         ids=self.REQUEST.SESSION['ids']
  287:         max=len(ids)
  288:         if (row*numberOfColumns)<max:
  289:             return ids[(row-1)*numberOfColumns:row*numberOfColumns]
  290:         else:
  291:             return ids[(row-1)*numberOfColumns:]
  292:     def thumblistSelected_old(self):
  293:         """main template collection"""
  294:         pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
  295:         return pt()
  296: 
  297:     def thumblistSelected(self):
  298:         """main template collection"""
  299:         pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
  300:         return pt()
  301:     
  302:     def thumblist_old(self):
  303:         """main template collection"""
  304:         pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
  305:         return pt()
  306: 
  307:     def thumblist(self):
  308:         """main template collection"""
  309:         pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
  310:         return pt()
  311: 
  312:     def navig_html(self):
  313:         """navigation"""
  314:         pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
  315:         return pt()
  316: 
  317: 
  318:     def index_html(self):
  319:         """main template collection"""
  320:         if self.REQUEST.has_key('filename'):
  321:             filen=self.REQUEST['filename']
  322:         else:
  323:             filen=""
  324:         self.REQUEST.SESSION['filename']=filen
  325:         pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
  326:         return pt()
  327:     
  328: def manage_AddImageCollectionForm(self):
  329:     """Nothing yet"""
  330:     pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
  331:     return pt()
  332:     
  333: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
  334:     """Add ImageCollection"""
  335:     newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
  336:     self._setObject(id,newObj)
  337:     
  338:     if RESPONSE is not None:
  339:         RESPONSE.redirect('manage_main')
  340: 
  341: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>