# Methoden und Klassen fuer den MPIWG Archiver from OFS.Image import Image from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from AccessControl import ClassSecurityInfo from Globals import InitializeClass from Globals import Persistent from Acquisition import Implicit from OSAS_show import * from OSAS_helpers import * import os.path import os import OSAS_ids import archive #Baustelle import time class OSAS_archiveInbox(SimpleItem,Persistent,Implicit): """Inbox""" meta_type="OSAS_archiveInbox" pathes=[] def __init__(self,id,title): """init""" self.id=id self.title=title self.pathes=[] def addPath(self,path): today=time.localtime() self.pathes.append([path,today]) def index_html(self): """main""" pt=PageTemplateFile('Products/OSA_system/OSAS_archiveInboxIndex.zpt').__of__(self) return pt() def manage_AddOSAS_archiveInboxForm(self): """interface for adding the OSAS_root""" pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiveInbox.zpt').__of__(self) return pt() def manage_AddOSAS_archiveInbox(self,id,title="",RESPONSE=None): """add the OSAS_root""" if title=="": title=id newObj=OSAS_archiveInbox(id, title) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit): """Eingabe von Metadaten""" meta_type="OSAS_metadataOrganizer" mediaTypes=["image","video","text","audio","data"] acquisitionTypes=["Image-Acquisition"] mediaToAcquisition={"image":"Image-Acquisition"} metaDataSets={'Image-Acquisition': [('device','opt'),('image-type','opt'),('production-comment','opt')]} imgData={'image':[('dpi','req')]} 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')], 'Journal Article':[('author','opt'),('year','opt'),('title','opt'),('journal','opt'),('volume','opt'),('issue','opt'),('pages','opt'),('alternate journal','opt'),('call number','opt')], 'Manuscript':[('author','opt'),('year','opt'),('title','opt'),('location','opt'),('signature','opt'),('pages','opt'),('editorial remarks','opt'),('description','opt'),('keywords','opt')]} referenceTypes=['Book','Journal Article','Manuscript'] def __init__(self,id,title): """init""" self.id=id self.title=title #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description'] def addAcquisition(self,path): """Hinzufügen von Acquisition Daten""" self.REQUEST.SESSION['path']=path pt=PageTemplateFile('Products/OSA_system/inputAcquisitionData.zpt').__of__(self) return pt() def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""): """Schreibe Acquisiondata in index.meta""" #schreibe in index.meta subnodes={} subnodes['media-type']=media_type changeNodesInIndexMeta(path,"",subnodes) subnodes={} subnodes['date']=date subnodes['description']=description changeNodesInIndexMeta(path,"acquisition",subnodes) #print "HI" subnodes={} subnodes['provider-id']=producer subnodes['url']=getattr(self.producerFolder,producer).url subnodes['contact']=getattr(self.producerFolder,producer).contact subnodes['address']=getattr(self.producerFolder,producer).address changeNodesInIndexMeta(path,"provider",subnodes,parent="acquisition") self.metaDataSet=self.metaDataSets[self.mediaToAcquisition[media_type]] self.media_type=self.mediaToAcquisition[media_type] pt=PageTemplateFile('Products/OSA_system/inputDocumentMetadata.zpt').__of__(self) return pt() def writeDocumentMetadata(self,referenceType): """write document metadata""" form=self.REQUEST.form #schreibe in index.meta self.bibDataSet=self.bibDataSets[form['referenceType']] self.bibdata_type=form['referenceType'] subnodes={} subnodes['device']=form['device'] subnodes['image-type']=form['image-type'] subnodes['production-comment']=form['production-comment'] changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"image-acquisition",subnodes) subnodes={} subnodes['dpi']=form['dpi'] changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"img",subnodes) pt=PageTemplateFile('Products/OSA_system/inputBiblioMetadata.zpt').__of__(self) return pt() def writeBiblioMetadata(self,bibdata_type,RESPONSE=None): """Write all""" #to do write metadata subnodes={} form=self.REQUEST.form #for key in form.keys(): # subnodes[key]=form['device'] subnodes=form changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta") self.inbox.addPath(self.REQUEST.SESSION['path']) RESPONSE.redirect(self.REQUEST['URL2']) def manage_AddOSAS_metadataOrganizerForm(self): """interface for adding the OSAS_root""" pt=PageTemplateFile('Products/OSA_system/AddOSAS_metadataOrganizer.zpt').__of__(self) return pt() def manage_AddOSAS_metadataOrganizer(self,id,title="",RESPONSE=None): """add the OSAS_root""" if title=="": title=id newObj=OSAS_metadataOrganizer(id, title) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class OSAS_processViewer(SimpleItem,Persistent,Implicit): """Process viewer for archiving""" meta_type="OSAS_processViewer" def __init__(self, id, title): """init""" self.id=id self.title=title def index_html(self): """main page""" pt=PageTemplateFile('Products/OSA_system/processViewerIndex.zpt').__of__(self) return pt() def storeFile(self,something): """store info in session""" self.REQUEST.SESSION['something']=something return 1 def getFile(self): """get info from session""" return self.REQUEST.SESSION['something'] def getoverview(self,path): """get overview""" return archive.overview(path) def storeerror(self,ret,path,context,i): """store an error""" session=context.REQUEST.SESSION session['error%i'%i]=ret session['path%i'%i]=path return 'error?number=%i'%i def view(self): """view page""" pt=PageTemplateFile('Products/OSA_system/processViewerView.zpt').__of__(self) return pt() def manage_AddOSAS_processViewerForm(self): """interface for adding the OSAS_processViewer""" pt=PageTemplateFile('Products/OSA_system/AddOSAS_processViewer.zpt').__of__(self) return pt() def manage_AddOSAS_processViewer(self,id,title="",RESPONSE=None): """add the OSAS_processViewer""" if title=="": title=id newObj=OSAS_processViewer(id, title) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class OSAS_archiver(Folder, Persistent,Implicit): """Hauptklasse fuer das Archiv""" meta_type="OSAS_archiver" # to be deleted later #startPath="/mpiwg" ## methoden aus dem alten archive.py def archiver(self,path): """archive the documents in path""" tmp=archive.archive(path,self.REQUEST.SESSION) pt=PageTemplateFile('Products/OSA_system/archiveStatus.zpt').__of__(self) return pt() def metachecker(self,path): """check the metadata the documents in path""" self.REQUEST.SESSION['path']=self.REQUEST['path'] return archive.metacheck(path) ## methods from OSAS_show def changeName(self,name): return changeName(name) def hasMetafile(self,path): return hasMetafile(path) def getMetafile(self,path): return getMetafile(path) def toggle_view(self,path,file): """Oeffnen bzw. schließen der Subfolders""" self.tree(path).toggle(path,file) return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path) def isdigilib2(self,path): """check if digilib""" return isdigilib2(path) def path_to_link_view(self,path): """generates navigation bar for viewfiles""" return path_to_link_view(self.REQUEST['URL'],path) def tree(self,start): """get the filetree""" k=browse(start) return k def getfilesystem2(self,start,reload=0): """load filesystem""" k=filesystem2(start,1) return k def getfilesystem(self,start,reload=0): """load filesystem""" k=filesystem(start,1) return k ##init def __init__(self, id, title,startPath): """init""" self.id=id self.title=title self.startPath=startPath def archiver_html(self): """archiver""" pt=PageTemplateFile('Products/OSA_system/OSAS_Archiver.zpt').__of__(self) return pt() def index_html(self): """main page""" pt=PageTemplateFile('Products/OSA_system/archiverIndex.zpt').__of__(self) return pt() def getDate(self): """date""" return time.strftime("%Y-%m-%d",time.localtime()) def newFolders_html(self): """main page""" pt=PageTemplateFile('Products/OSA_system/newFolders.zpt').__of__(self) return pt() def getProducers(self): """Ausgabe der registrierten Benutzer""" ret=[] #x=7 id=self.producerFolder.getId() for list in self.producerFolder.__dict__: obj=getattr(self.producerFolder,list) if (hasattr(obj,"meta_type")): if (obj.meta_type=="OSAS_producer"): ret.append(obj.getId()) return ret def getProducer(self,id): """Gebe ProducerObjekt zurück""" obj=getattr(self.aq_parent.producerFolder,id) return obj def createFoldersForm(self,producer,number): """Erzeuge Folder im producer Verzeichnis mit ids""" self.REQUEST.SESSION['producer']=producer self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number) pt=PageTemplateFile('Products/OSA_system/createFoldersForm.zpt').__of__(self) return pt() def createFolders(self,folderList,producer): """Erzeug die entsprechenden Folder""" for folder in folderList: os.mkdir(self.startPath+"/"+producer+"/"+folder) self.REQUEST.SESSION['folderList']=folderList pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self) return pt() def archiveSelected(self): """Archiviere ausgewaehlte files""" pt=PageTemplateFile('Products/OSA_system/archiveSelected.zpt').__of__(self) return pt() def enterAcquisitionMetadata(self): """Erstelle Metadaten fuer Acquisition""" def enterPreliminaryBibMeta(self): """Erstelle Metadaten fuer Bibliography""" def showFilesForArchiving(self): """Anzeige der noch zu archivieren Files""" def manage_AddOSAS_archiverForm(self): """interface for adding the OSAS_root""" pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiver.zpt').__of__(self) return pt() def manage_AddOSAS_archiver(self,id,startPath,title="",RESPONSE=None): """add the OSAS_root""" if title=="": title=id newObj=OSAS_archiver(id, title,startPath) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class OSAS_producer(SimpleItem,Persistent,Implicit): """Klasse fuer Produzenteninformationen Metadaten nach V1.1.1""" meta_type="OSAS_producer" def __init__(self,shortName,fullName,address="",url="",contact=""): self.id=shortName self.title=fullName self.address=address self.url=url self.contact=contact manage_options = SimpleItem.manage_options+( {'label':'Main Config','action':'changeOSAS_producerForm'}, ) def changeOSAS_producerForm(self): """change""" pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_producer.zpt').__of__(self) return pt() def changeOSAS_producer(self,title,address,contact="",url=""): """change""" self.title=fullName self.address=address self.url=url self.contact=contact def manage_AddOSAS_producerForm(self): """interface for adding the OSAS_root""" pt=PageTemplateFile('Products/OSA_system/AddOSAS_producer.zpt').__of__(self) return pt() def manage_AddOSAS_producer(self,id,title="",contact="",address="",url="",RESPONSE=None): """add the OSAS_root""" if title=="": title=id newObj=OSAS_producer(id, title,address,contact,url) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')