File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Tue Dec 23 15:17:37 2003 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
new archiveCVS: ----------------------------------------------------------------------

    1: # Methoden und Klassen fuer den MPIWG Archiver
    2: 
    3: from OFS.Image import Image
    4: from OFS.Folder import Folder
    5: from OFS.SimpleItem import SimpleItem
    6: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    7: from Products.PageTemplates.PageTemplate import PageTemplate
    8: from AccessControl import ClassSecurityInfo
    9: from Globals import InitializeClass
   10: from Globals import Persistent
   11: from Acquisition import Implicit
   12: from OSAS_show import *
   13: from OSAS_helpers import *
   14: 
   15: import os.path
   16: import os
   17: import OSAS_ids
   18: import archive #Baustelle
   19: import time
   20: 
   21: class OSAS_archiveInbox(SimpleItem,Persistent,Implicit):
   22:     """Inbox"""
   23: 
   24:     meta_type="OSAS_archiveInbox"
   25:     pathes=[]
   26:     
   27:     def __init__(self,id,title):
   28:         """init"""
   29:         self.id=id
   30:         self.title=title
   31:         self.pathes=[]
   32: 
   33:     def addPath(self,path):
   34:         today=time.localtime()
   35:         self.pathes.append([path,today])
   36: 
   37:     def index_html(self):
   38:         """main"""
   39:         pt=PageTemplateFile('Products/OSA_system/OSAS_archiveInboxIndex.zpt').__of__(self)
   40:         return pt()
   41:     
   42: def manage_AddOSAS_archiveInboxForm(self):
   43:     """interface for adding the OSAS_root"""
   44:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiveInbox.zpt').__of__(self)
   45:     return pt()
   46: 
   47: 
   48: def manage_AddOSAS_archiveInbox(self,id,title="",RESPONSE=None):
   49:     """add the OSAS_root"""
   50:     if title=="":
   51:         title=id
   52:         
   53:     newObj=OSAS_archiveInbox(id, title)
   54:     self._setObject(id,newObj)
   55:     if RESPONSE is not None:
   56:         RESPONSE.redirect('manage_main')
   57:     
   58: 
   59: 
   60: class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit):
   61:     """Eingabe von Metadaten"""
   62: 
   63:     meta_type="OSAS_metadataOrganizer"
   64:     mediaTypes=["image","video","text","audio","data"]
   65:     acquisitionTypes=["Image-Acquisition"]
   66:     mediaToAcquisition={"image":"Image-Acquisition"}
   67:     metaDataSets={'Image-Acquisition': [('device','opt'),('image-type','opt'),('production-comment','opt')]}
   68:     imgData={'image':[('dpi','req')]}
   69:     
   70:     bibDataSets={'Book':[('author','opt'),('year','opt'),('title','opt'),('series editor','opt'),('series title','opt'),('series volume','opt'),('number of pages','opt'),('city','opt'),('publisher','opt'),('edition','opt'),('number of volumes','opt'),('translator','opt'),('ISBN ISSN','opt')],
   71:                   'Journal Article':[('author','opt'),('year','opt'),('title','opt'),('journal','opt'),('volume','opt'),('issue','opt'),('pages','opt'),('alternate journal','opt'),('call number','opt')],
   72:                   'Manuscript':[('author','opt'),('year','opt'),('title','opt'),('location','opt'),('signature','opt'),('pages','opt'),('editorial remarks','opt'),('description','opt'),('keywords','opt')]}
   73: 
   74: 
   75:     referenceTypes=['Book','Journal Article','Manuscript']
   76: 
   77:     def __init__(self,id,title):
   78:         """init"""
   79:         self.id=id
   80:         self.title=title
   81:         #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description']
   82: 
   83:     def addAcquisition(self,path):
   84:         """Hinzufügen von Acquisition Daten"""
   85:         self.REQUEST.SESSION['path']=path
   86:         pt=PageTemplateFile('Products/OSA_system/inputAcquisitionData.zpt').__of__(self)
   87:         return pt()
   88: 
   89:     def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
   90:         """Schreibe Acquisiondata in index.meta"""
   91:         
   92:         
   93:         #schreibe in index.meta
   94:         subnodes={}
   95:         subnodes['media-type']=media_type
   96:         changeNodesInIndexMeta(path,"",subnodes)
   97:         
   98:         subnodes={}
   99:         subnodes['date']=date
  100:         subnodes['description']=description
  101:         
  102:         changeNodesInIndexMeta(path,"acquisition",subnodes)
  103:         #print "HI"
  104: 
  105:         subnodes={}
  106:         subnodes['provider-id']=producer
  107:         subnodes['url']=getattr(self.producerFolder,producer).url
  108:         subnodes['contact']=getattr(self.producerFolder,producer).contact
  109:         subnodes['address']=getattr(self.producerFolder,producer).address
  110:         
  111:         changeNodesInIndexMeta(path,"provider",subnodes,parent="acquisition")
  112: 
  113:         
  114:         self.metaDataSet=self.metaDataSets[self.mediaToAcquisition[media_type]]
  115:         self.media_type=self.mediaToAcquisition[media_type]
  116:         
  117:         pt=PageTemplateFile('Products/OSA_system/inputDocumentMetadata.zpt').__of__(self)
  118:         return pt()
  119: 
  120:         
  121:     def writeDocumentMetadata(self,referenceType):
  122: 
  123:         """write document metadata"""
  124:         form=self.REQUEST.form
  125: #schreibe in index.meta
  126:         self.bibDataSet=self.bibDataSets[form['referenceType']]
  127:         self.bibdata_type=form['referenceType']
  128: 
  129:         subnodes={}
  130:         subnodes['device']=form['device']
  131:         subnodes['image-type']=form['image-type']
  132:         subnodes['production-comment']=form['production-comment']
  133:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"image-acquisition",subnodes)
  134: 
  135:         subnodes={}
  136:         subnodes['dpi']=form['dpi']
  137: 
  138:         
  139:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"img",subnodes)
  140: 
  141: 
  142:         pt=PageTemplateFile('Products/OSA_system/inputBiblioMetadata.zpt').__of__(self)
  143:         return pt()
  144: 
  145:     def writeBiblioMetadata(self,bibdata_type,RESPONSE=None):
  146:         """Write all"""
  147:         #to do write metadata
  148: 
  149:         subnodes={}
  150:         form=self.REQUEST.form
  151:         #for key in form.keys():
  152:         #    subnodes[key]=form['device']
  153:         subnodes=form
  154:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta")
  155:         self.inbox.addPath(self.REQUEST.SESSION['path'])
  156:         RESPONSE.redirect(self.REQUEST['URL2'])
  157:         
  158: 
  159: 
  160:     
  161:         
  162:     
  163: 
  164: def manage_AddOSAS_metadataOrganizerForm(self):
  165:     """interface for adding the OSAS_root"""
  166:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_metadataOrganizer.zpt').__of__(self)
  167:     return pt()
  168: 
  169: 
  170: def manage_AddOSAS_metadataOrganizer(self,id,title="",RESPONSE=None):
  171:     """add the OSAS_root"""
  172:     if title=="":
  173:         title=id
  174:         
  175:     newObj=OSAS_metadataOrganizer(id, title)
  176:     self._setObject(id,newObj)
  177:     if RESPONSE is not None:
  178:         RESPONSE.redirect('manage_main')
  179:     
  180: 
  181: class OSAS_processViewer(SimpleItem,Persistent,Implicit):
  182:     """Process viewer for archiving"""
  183: 
  184:     meta_type="OSAS_processViewer"
  185: 
  186:     def __init__(self, id, title):
  187:         """init"""
  188:         self.id=id
  189:         self.title=title
  190: 
  191:     def index_html(self):
  192:         """main page"""
  193:         pt=PageTemplateFile('Products/OSA_system/processViewerIndex.zpt').__of__(self)
  194:         return pt()
  195: 
  196:     def storeFile(self,something):
  197:         """store info in session"""
  198:         self.REQUEST.SESSION['something']=something
  199:         return 1
  200: 
  201:     def getFile(self):
  202:         """get info from session"""
  203:         return self.REQUEST.SESSION['something']
  204: 
  205:     def getoverview(self,path):
  206:         """get overview"""
  207:         return archive.overview(path)
  208: 
  209:     def storeerror(self,ret,path,context,i):
  210:         """store an error"""
  211:         session=context.REQUEST.SESSION
  212:         session['error%i'%i]=ret
  213:         session['path%i'%i]=path
  214:      
  215:         return 'error?number=%i'%i
  216: 
  217:     def geterror(self,str,context):
  218:         session=context.REQUEST.SESSION
  219:         return session[str]
  220: 
  221: 
  222:     def readfile(self,path):
  223:         
  224:         ret=""
  225:         f=open(path,'r')
  226:         for g in f.readlines():
  227:             ret=ret+g
  228:         return ret
  229:      
  230:     def writefile(self,path,txt,REQUEST):
  231:         f=open(path,'w')
  232:         f.write(txt)
  233:         f.close()
  234:         rval=self.aq_acquire('archive2')
  235:         return rval()
  236: 
  237: 
  238:     def view(self):
  239:         """view page"""
  240:         pt=PageTemplateFile('Products/OSA_system/processViewerView.zpt').__of__(self)
  241:         return pt()
  242: 
  243:     def error(self):
  244:         """view errors"""
  245:         pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
  246:         return pt()
  247:     
  248: def manage_AddOSAS_processViewerForm(self):
  249:     """interface for adding the OSAS_processViewer"""
  250:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_processViewer.zpt').__of__(self)
  251:     return pt()
  252: 
  253: 
  254: def manage_AddOSAS_processViewer(self,id,title="",RESPONSE=None):
  255:     """add the OSAS_processViewer"""
  256:     if title=="":
  257:         title=id
  258:         
  259:     newObj=OSAS_processViewer(id, title)
  260:     self._setObject(id,newObj)
  261:     if RESPONSE is not None:
  262:         RESPONSE.redirect('manage_main')
  263: 
  264: 
  265: 
  266: class OSAS_archiver(Folder, Persistent,Implicit):
  267:     """Hauptklasse fuer das Archiv"""
  268: 
  269:     meta_type="OSAS_archiver"
  270: 
  271:     # to be deleted later
  272:     #startPath="/mpiwg"
  273:     ## methoden aus dem alten archive.py
  274: 
  275:    
  276: 
  277:     def archiver(self,path):
  278:         """archive the documents in path"""
  279:         tmp=archive.archive(path,self.REQUEST.SESSION)
  280:         pt=PageTemplateFile('Products/OSA_system/archiveStatus.zpt').__of__(self)
  281:         return pt()
  282: 
  283:         
  284: 
  285: 
  286:     def metachecker(self,path):
  287:         """check the metadata the documents in path"""
  288:         self.REQUEST.SESSION['path']=self.REQUEST['path']
  289:         return archive.metacheck(path)
  290: 
  291:     ## methods  from OSAS_show
  292:     def changeName(self,name):
  293:         return changeName(name)
  294: 
  295:     def hasMetafile(self,path):
  296:         return hasMetafile(path)
  297: 
  298:     def getMetafile(self,path):
  299:         return getMetafile(path)
  300: 
  301:     def toggle_view(self,path,file):
  302:         """Oeffnen bzw. schließen der Subfolders"""
  303:         self.tree(path).toggle(path,file)
  304:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
  305: 
  306: 
  307: 
  308:     def isdigilib2(self,path):
  309:         """check if digilib"""
  310:         return isdigilib2(path)
  311: 
  312:     def path_to_link_view(self,path):
  313:         """generates navigation bar for viewfiles"""
  314:         return path_to_link_view(self.REQUEST['URL'],path)
  315:     
  316: 
  317:     def tree(self,start):
  318: 	"""get the filetree"""
  319: 	k=browse(start)
  320: 	return k
  321: 
  322:     def getfilesystem2(self,start,reload=0):
  323: 	"""load filesystem"""
  324: 
  325: 	k=filesystem2(start,1)
  326: 	return k
  327: 
  328:     def getfilesystem(self,start,reload=0):
  329: 	"""load filesystem"""
  330: 
  331: 	k=filesystem(start,1)
  332: 	return k
  333: 
  334: 
  335:     ##init
  336:     def __init__(self, id, title,startPath):
  337:         """init"""
  338:         self.id=id
  339:         self.title=title
  340:         self.startPath=startPath
  341: 
  342:     def archiver_html(self):
  343:         """archiver"""
  344:         pt=PageTemplateFile('Products/OSA_system/OSAS_Archiver.zpt').__of__(self)
  345:         return pt()
  346: 
  347:     def index_html(self):
  348:         """main page"""
  349:         pt=PageTemplateFile('Products/OSA_system/archiverIndex.zpt').__of__(self)
  350:         return pt()
  351: 
  352:     def getDate(self):
  353:         """date"""
  354:         return time.strftime("%Y-%m-%d",time.localtime())
  355:     
  356:     def newFolders_html(self):
  357:         """main page"""
  358:         pt=PageTemplateFile('Products/OSA_system/newFolders.zpt').__of__(self)
  359:         return pt()
  360: 
  361:     def getProducers(self):
  362:         """Ausgabe der registrierten Benutzer"""
  363:         ret=[]
  364:         #x=7
  365:         id=self.producerFolder.getId()
  366:         for list in self.producerFolder.__dict__:
  367:             obj=getattr(self.producerFolder,list)
  368:             if (hasattr(obj,"meta_type")):
  369:                 if (obj.meta_type=="OSAS_producer"):
  370:                     ret.append(obj.getId())
  371:         return ret
  372: 
  373:     def getProducer(self,id):
  374:         """Gebe ProducerObjekt zurück"""
  375:         obj=getattr(self.aq_parent.producerFolder,id)
  376:         return obj
  377:         
  378:         
  379: 
  380:     def createFoldersForm(self,producer,number):
  381:         """Erzeuge Folder im producer Verzeichnis mit ids"""
  382:         self.REQUEST.SESSION['producer']=producer
  383:         self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number)
  384:         pt=PageTemplateFile('Products/OSA_system/createFoldersForm.zpt').__of__(self)
  385:         return pt()
  386:     
  387:     def createFolders(self,folderList,producer):
  388:         """Erzeug die entsprechenden Folder"""
  389:         for folder in folderList:
  390:             os.mkdir(self.startPath+"/"+producer+"/"+folder)
  391:         self.REQUEST.SESSION['folderList']=folderList
  392:         pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)
  393:         return pt()
  394: 
  395:     def storeerror(self,ret,path,context,i):
  396:         """store an error"""
  397:         session=context.REQUEST.SESSION
  398:         session['error%i'%i]=ret
  399:         session['path%i'%i]=path
  400:      
  401:         return 'error?number=%i'%i
  402: 
  403:     def geterror(self,str,context):
  404:         session=context.REQUEST.SESSION
  405:         return session[str]
  406: 
  407:     def readfile(self,path):
  408:         
  409:         ret=""
  410:         f=open(path,'r')
  411:         for g in f.readlines():
  412:             ret=ret+g
  413:         return ret
  414:      
  415:     def writefile(self,path,txt,REQUEST):
  416:         f=open(path,'w')
  417:         f.write(txt)
  418:         f.close()
  419:         rval=self.aq_acquire('archive2')
  420:         return rval()
  421: 
  422:     def error(self):
  423:         """view errors"""
  424:         pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
  425:         return pt()
  426: 
  427:     
  428:     def archiveSelected(self):
  429:         """Archiviere ausgewaehlte files"""
  430:         pt=PageTemplateFile('Products/OSA_system/archiveSelected.zpt').__of__(self)
  431:         return pt()
  432: 
  433:     def enterAcquisitionMetadata(self):
  434:         """Erstelle Metadaten fuer Acquisition"""
  435: 
  436:     def enterPreliminaryBibMeta(self):
  437:         """Erstelle Metadaten fuer Bibliography"""
  438:         
  439:     def showFilesForArchiving(self):
  440:         """Anzeige der noch zu archivieren Files"""
  441: 
  442:         
  443: 
  444:     
  445: 
  446: def manage_AddOSAS_archiverForm(self):
  447:     """interface for adding the OSAS_root"""
  448:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiver.zpt').__of__(self)
  449:     return pt()
  450: 
  451: 
  452: def manage_AddOSAS_archiver(self,id,startPath,title="",RESPONSE=None):
  453:     """add the OSAS_root"""
  454:     if title=="":
  455:         title=id
  456:         
  457:     newObj=OSAS_archiver(id, title,startPath)
  458:     self._setObject(id,newObj)
  459:     if RESPONSE is not None:
  460:         RESPONSE.redirect('manage_main')
  461: 
  462: 
  463: class OSAS_producer(SimpleItem,Persistent,Implicit):
  464:     """Klasse fuer Produzenteninformationen
  465:     Metadaten nach  V1.1.1"""
  466: 
  467:     meta_type="OSAS_producer"
  468: 
  469:     def __init__(self,shortName,fullName,address="",url="",contact=""):
  470: 
  471:         self.id=shortName
  472:         self.title=fullName
  473:         self.address=address
  474:         self.url=url
  475:         self.contact=contact
  476: 
  477:     manage_options = SimpleItem.manage_options+(
  478:         {'label':'Main Config','action':'changeOSAS_producerForm'},
  479:         )
  480: 
  481:     def changeOSAS_producerForm(self):
  482:         """change"""
  483:         pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_producer.zpt').__of__(self)
  484:         return pt()
  485: 
  486:     def changeOSAS_producer(self,title,address,contact="",url=""):
  487:         """change"""
  488:         self.title=fullName
  489:         self.address=address
  490:         self.url=url
  491:         self.contact=contact
  492: 
  493: def manage_AddOSAS_producerForm(self):
  494:     """interface for adding the OSAS_root"""
  495:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_producer.zpt').__of__(self)
  496:     return pt()
  497: 
  498: 
  499: def manage_AddOSAS_producer(self,id,title="",contact="",address="",url="",RESPONSE=None):
  500:     """add the OSAS_root"""
  501:     if title=="":
  502:         title=id
  503:         
  504:     newObj=OSAS_producer(id, title,address,contact,url)
  505:     self._setObject(id,newObj)
  506:     if RESPONSE is not None:
  507:         RESPONSE.redirect('manage_main')
  508: 

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