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