File:  [Repository] / ImageArchive / ImageArchive.py
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Mon Dec 8 18:15:02 2003 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
metadataimport für leidenadded

    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>