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