File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Sun Dec 28 17:11:05 2003 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
 im archiverVS: ----------------------------------------------------------------------

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

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