--- ECHO_content/ECHO_resource.py 2012/09/03 14:48:22 1.6.2.6 +++ ECHO_content/ECHO_resource.py 2012/01/03 13:02:31 1.7 @@ -1,6 +1,3 @@ -#TODO: change metaDataHash, jetzt tag -> data(tags aus dem neuen Metadatamain) -#TODO: contentType aus den Metadaten - import urlparse import string import tempfile @@ -35,11 +32,11 @@ import urllib2 import cgi import smtplib import time -#from Ft.Xml.Domlette import NonvalidatingReader -#from Ft.Xml.Domlette import PrettyPrint, Print -#from Ft.Xml import EMPTY_NAMESPACE -# -#import Ft.Xml.XPath +from Ft.Xml.Domlette import NonvalidatingReader +from Ft.Xml.Domlette import PrettyPrint, Print +from Ft.Xml import EMPTY_NAMESPACE + +import Ft.Xml.XPath import cStringIO import sys @@ -61,7 +58,7 @@ from ECHO_helpers import * from ECHO_movie import * -#import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen +import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib import logging @@ -72,38 +69,13 @@ class ECHO_resource(CatalogAware,Folder, meta_type='ECHO_resource' default_catalog='resourceCatalog' - # viewClassificationList=viewClassificationListMaster - - - - +# viewClassificationList=viewClassificationListMaster + def PrincipiaSearchSource(self): """Return cataloguable key for ourselves.""" return str(self) - - def getDCDate(self): - """dc mapped date""" - try: - bibdata=self.getMetaDataManager().getBibData(path=self.getMetaDataLink()) - dcMapped = self.getMetaDataManager().getDCMappedData(bibdata) - return dcMapped.get('date') - except: - - logging.error("getDCDate doesn't work, cannot read metadata:"+self.getId()) - - + getSubCols = ECHO_helpers.getSubCols - -# def getMetaDataManager(self): -# """hole eine Instanz von MetaDataFolder -# TODO: sollte konfigurierbar sein. -# zur Zeit wird enfach nur self.metadata falls vorhanden zurueckggegeben. -# """ -# -# mf= getattr(self,"metadataFolder",None) -# #logging.debug("MetadataManager:"+repr(mf)) -# return mf -# def index_meta(self,RESPONSE=None): """ gibt das im metalink gespeicher xml-file zurueck""" @@ -147,7 +119,88 @@ class ECHO_resource(CatalogAware,Folder, self.reindex_object() - + security.declareProtected('View','createPDF') + def createPDF(self,RESPONSE=None,local=None,dpi=150): + """erzeuge pdf file""" + pages=1 + dpi=float(dpi) + imagePath=self.getImagePath().replace("/mpiwg/online","") + + + image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i" + xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath + + dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo)) + for parameter in dom.getElementsByTagName('parameter'): + if parameter.getAttribute('name')=="pt": + pages=int(parameter.getAttribute('value')) + break + + + tempdir="/tmp/archivesImageServer" + if not os.path.exists(tempdir): + os.mkdir(tempdir) + + tmpPath=tempfile.mkdtemp(dir=tempdir) + + + tmpZip=tempfile.mktemp(dir=tempdir) + + tmpFn=os.path.split(tmpZip)[1] + + + + + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/html") + RESPONSE.write("

I am creating the pdf

") + txt="

1. step: getting the images( %i pages)

"%pages + RESPONSE.write(txt) + + c=canvas.Canvas(tmpZip) + for i in range(1,pages+1): + if RESPONSE: + RESPONSE.write(str("

Get Page: %i
\n"%i)) + faktor=dpi/72.0 + + fn=tmpPath+"/%i"%i + + width,height=A4 + #print image%(width*faktor,height*faktor,i) + url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read() + fh=file(fn,"w") + fh.write(url) + fh.close() + + + + c.drawImage(fn,0,0,width=width,height=height) + c.showPage() + c.save() + if RESPONSE: + RESPONSE.write("

finished
\n") + + if RESPONSE: + len=os.stat(tmpZip)[6] + downloadUrl=self.absolute_url()+"/downloadPDF" + RESPONSE.write("""

Click here for download ( %i Byte)

\n"""%(tmpFn,len)) + RESPONSE.write("""

The file will be stored for a while, you can download it later, the URL is:

+

%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn)) + RESPONSE.close() + + + def downloadPDF(self,fn): + """download prepared set""" + filename="/tmp/archivesImageServer/"+fn + namePDF=self.getId()+".pdf" + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF) + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + len=os.stat(filename)[6] + self.REQUEST.RESPONSE.setHeader("Content-Length",len) + images=file(filename).read() + self.REQUEST.RESPONSE.write(images) + self.REQUEST.RESPONSE.close() + def getRDF(self,urn=None): """rdf""" @@ -370,6 +423,14 @@ class ECHO_resource(CatalogAware,Folder, server.writeMetaDataFile(path,string,"yes") + def setStartPageForm(self): + """Form for changing the startpage""" + + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') + pt.content_type="text/html" + return pt() + def createImageUrl(self,pn=1): """create ImageUrl""" @@ -418,7 +479,58 @@ class ECHO_resource(CatalogAware,Folder, return None,self.absolute_url() + def setStartPage(self,startpage=None,RESPONSE=None): + """set start page, if no startpage defined use the generic one of the resource""" + if (not (type(startpage)==StringType)): + if ("__generic" in startpage): # checke ob generic in der liste + startpage=self.absolute_url()+"/startpage_html" + elif ("__firstPage" in startpage): # checke ob generic in der liste + startpage=self.createImageUrl() + + if (not startpage): + startpage=self.absolute_url()+"/startpage_html" + elif (startpage=="__generic"): + startpage=self.absolute_url()+"/startpage_html" + elif (startpage=="__firstPage"): + startpage=self.createImageUrl() + + params="startpage=%s"%startpage + #print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params)) + + tries=0 + for i in range(10): + x=ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() + if x=="ok": + + break; + + + path=self.metalink + + path=re.sub(self.REQUEST['SERVER_URL'],'',path) + path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path) + + path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server + path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server + path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server + path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server + path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server + path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server + path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server + path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo + path=re.sub('/index.meta','',path) + + + ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + def changeViewerTemplateSetForm(self): + """change the viewer template set""" + pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') + return pt() def setLink(self, link=None): @@ -445,7 +557,49 @@ class ECHO_resource(CatalogAware,Folder, return default + def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): + """changeit""" + paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix'] + + + #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate) + + params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) + + try: + tries=0 + for i in range(10): + x=ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() + if x=="ok": + + break; + + except: + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) + #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params) + # hack Pfad auf die Dokumente + path=self.metalink + + + + path=re.sub('/index.meta','',path) + + #TODO: direct access to the file system necessary, fix that also xmlrpc to the server where the index file is stored is possible + parsedUrl=urlparse.urlparse(path) + path=parsedUrl[2] + + try: + return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() + except: + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + security.declarePublic('content_html') def content_html(self): @@ -467,8 +621,22 @@ class ECHO_resource(CatalogAware,Folder, #logger("ECHO Fulltext",logging.INFO,"opened %s"%self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') - text=texttools[0].getElementsByTagName('text') - texturl=getText(text[0].childNodes) + + text=texttools[0].getElementsByTagName('text-url-path') #pfad auf text im neuen system + logging.debug(text); + if (text is not None) and len(text)>0: + texturl=getText(text[0].childNodes) + textBasisUrl=None + if hasattr(self,"getFullTextBasisUrl"): + textBasisUrl=self.getFullTextBasisUrl() + else: #default + textBasisUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/getDoc?doc=%s" + #Beispiel http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/getDoc?doc=/archimedes/la/achil_propo_087_la_1545.xml + logging.debug(textBasisUrl); + texturl=textBasisUrl%texturl + else: + text=texttools[0].getElementsByTagName('text') + texturl=getText(text[0].childNodes) #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() @@ -605,19 +773,19 @@ class ECHO_resource(CatalogAware,Folder, return [] -# def getStorageManagerResourceURL(self): -# """get the link to storage""" -# urlbase=self.getStorageManagerURL(); -# -# #now get the path from the metadatalink -# -# path = self.correctPath(self.getMetaDataLink()) -# if path is None: -# return "" -# else: -# path=path.replace("index.meta","") -# return urlbase+path -# + def getStorageManagerResourceURL(self): + """get the link to storage""" + urlbase=self.getStorageManagerURL(); + + #now get the path from the metadatalink + + path = self.correctPath(self.getMetaDataLink()) + if path is None: + return "" + else: + path=path.replace("index.meta","") + return urlbase+path + def correctPath(self,path): #take only the path of the url which starts with /permanent or /experimental @@ -707,6 +875,20 @@ class ECHO_resource(CatalogAware,Folder, pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt') return pt() + def ECHO_resource_config_metadata(self): + """Main configuration""" + if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): + self.metaDataHash={} + self.contentType=self.bib_type + for data in self.metadata: + data_neu=re.sub('-','_',data) + self.metaDataHash[data_neu]=getattr(self,data)[0:] + + + pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt') + return pt() + + def changeViewer(self,newViewer): """set newViewer to the url of the new viewer @@ -818,18 +1000,25 @@ class ECHO_resource(CatalogAware,Folder, RESPONSE.redirect('manage_main') - + def changeECHO_resource_metadata_local(self,RESPONSE=None): + """change metadata""" + tags=self.findTagsFromMapping(normalizeCt(self.contentType)) + for field in tags[1]: + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] + + + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + def changeECHO_resource_metadata(self,RESPONSE=None): """change metadata""" - - self.copyIndex_meta2echo_resource() - tags=mappedData.keys() - - - for field in tags: + tags=self.findTagsFromMapping(normalizeCt(self.contentType)) + self.OSAS_meta={} + for field in tags[1]: try: - self.metaDataHash[field]=self.REQUEST.form[field] - + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] + self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] except: logger("ECHO_collection (changeECHO_resource_metadata)",logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) @@ -848,20 +1037,68 @@ class ECHO_resource(CatalogAware,Folder, def getMDValueSimpleSearchField(self): - """returns value for simple search aus DC daten""" + """returns value for simple search""" try: - bibdata=self.getMetaDataManager().getBibData(path=self.getMetaDataLink()) - dcMapped = self.getMetaDataManager().getDCMappedData(bibdata) - logging.debug("getMDValueSimpleSearchField:"+ repr(dcMapped)) - return " ".join([dcMapped.get('title',''), - dcMapped.get('creator',''), - dcMapped.get('date',''),self.getTitle(),self.getDescription()]) - + return " ".join([self.getMDValue('title',generic="yes"), + self.getMDValue('author',generic="yes"), + self.getMDValue('year',generic="yes"),self.getTitle()]) except: - logging.error("getMDValueSimpleSearchField doesn't work cannot read metadata:"+self.getId()) - return " ".join([self.getDescription(),self.getTitle()]) - + + #logger(" ECHO_collection(getMDSimpleSearchField)",logging.INFO," ".join([self.getMDValue('title',generic="yes"), + # self.getMDValue('author',generic="yes"), + # self.getMDValue('year',generic="yes"),''])) + return "" + + def getMDValue(self,fieldNameTest,empty=None,generic=None): + """get md values""" + #TODO: cache mappinghash + + fieldName=None + if generic: + if self.contentType: + ct=self.contentType.replace(" ","_").lower() + ct=self.contentType.replace("-","_").lower() + else: + logger("ECHO_collection (getMDValue)", logging.INFO, "no_content type for %s"%self.getId()) + ct="" + + #caching + if not hasattr(self,'_v_mapHash'): #noch keine cachevariable + self._v_mapHash={} + + + + tmp=self._v_mapHash.get(ct,None) + if tmp: #teste ob type schon existiert + fieldName=tmp.get(fieldNameTest,None) + else: + self._v_mapHash[ct]={} + + + #noch nicht gecached + if not fieldName and hasattr(self.getStandardMD(),ct): + fieldName=getattr(self.getStandardMD(),ct).generateMappingHash()[fieldNameTest][0] + self._v_mapHash[ct][fieldNameTest]=fieldName + if not fieldName: + fieldName=fieldNameTest + if not empty: + #FIXME: warum gibt es manchmal kein metadatahas + try: + + ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%normalizeCt(self.contentType)) + except: + logger("ECHO (line 1069)",logging.ERROR,"no md hash for %s"%self.getId()) + return "" + + else: + + + ret= self.metaDataHash.get(fieldNameTest,empty) + + return unicodify(ret) + + getFieldValue=getMDValue #depricated def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None): """new index.meta""" @@ -870,8 +1107,14 @@ class ECHO_resource(CatalogAware,Folder, if not hasattr(self,'metaDataHash'): self.copyIndex_meta2echo_resource() - - return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) + try: + + + return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) + except: + #print self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix + + return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): """return bibliographical metadata as stored in the object""" @@ -931,79 +1174,204 @@ class ECHO_resource(CatalogAware,Folder, manage_options = ( {'label':'Main Config','action':'ECHO_resource_config_main'}, - {'label':'Edit Metadata','action':'ECHO_getResourceMD'}, + {'label':'Change Local Metadata','action':'ECHO_resource_config_metadata'}, + {'label':'Sync Metadata with Repository','action':'ECHO_getResourceMD'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, + {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'}, {'label':'set/change startpage','action':'setStartPageForm'}, + {'label':'Copy MD for indexing and search','action':'copySearchFields'}, {'label':'Change AccessRights','action':'changeAccessRightForm'}, ) + Folder.manage_options + def isDefinedInThisSet(self,fields,field): + """checks if field is defined in fields""" + if (fields[0].has_key(field)) and not (fields[0][field]==""): + return 1 + else: + + return 0 + def getFieldLabel(self,fields,field): + """get labels""" + try: + ret =fields[0][field] + if ret == "": + return field + else: + return ret + except: + return field + + + + def getFieldTag(self,fields,field): + """get labels""" + try: + ret =fields[0][field] + if ret == "": + return field + else: + return ret + except: + return field + def getMetaDataHash(self): """md hash""" return getattr(self,'metaDataHash',{}) - - def getMetaDataValue(self,fieldName): - - self.copyIndex_meta2echo_resource() - return self.metaDataHash.get(fieldName,{}).get('value','') - + + def setFieldValue(self,field,value): + """get value""" + #TODO: remove setFieldValue + + if not hasattr(self,'metaDataHash'): + setattr(self,'metaDataHash',{}) + self.metaDataHash[field]=value[0:] + + def copySearchFields(self): + """copys metadatafields to the object""" + + # Zunaechst die gnerischen felder + fields=['author','title','year'] + for field in fields: + setattr(self,'MD_'+field,self.getMDValue(field,generic="yes")) + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + logging.debug("ECHO_resource (copySearchFields) mapping: "+field) + logging.debug("ECHO_resource (copySearchFields) mapping value : "+self.getMDValue(field)) + setattr(self,'MD_'+field,self.getMDValue(field)) + + + + def findLabelsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" #return {},[] - mo=self.getMetaDataManager().getBibMapping(referenceType) + + temp=self.ZopeFind(self.getStandardMD()) + + if referenceType=="": + referenceType="book" + - if mo is None: - return [],{} - - return mo.getFieldList(),mo.getFields() + bibdata={} + retdata={} + fields=[] + fieldlist=self.getStandardMD().fieldList + + tags=self.findTagsFromMapping(normalizeCt(self.contentType)) + logging.debug("ECHO_resource(findLabelsFromMapping)"+repr(tags)) + self.referencetypes=tags[2] + for referenceTypeF in self.referencetypes: + + logging.debug("--- compare"+normalizeCt(referenceTypeF[1].title)+normalizeCt(referenceType.lower())) + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): + + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].getUsedFields() + referenceType=referenceTypeF[1].title + logging.debug("------fields:"+repr(bibdata[referenceTypeF[1].title])) + except: + bibdata[referenceType]=referenceTypeF[1].getUsedFields() + + + bibdata['data']=referenceTypeF[1] + fields=bibdata[referenceType] + for field in fieldlist: + retdata[field]=referenceTypeF[1].getValue(field)[1] + + return retdata,fieldlist,temp,fields def findTagsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" - return self.findLabelsFromMapping(referenceType) + if referenceType=="": + referenceType="book" + + temp = self.ZopeFind(self.getStandardMD())[0:] + + + #self.referencetypes=temp[0:] + + - + + bibdata={} + retdata={} + fieldlist=self.getStandardMD().fieldList + fields=[] + for referenceTypeF in temp: + #print referenceType + + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].getUsedFields() + referenceType=referenceTypeF[1].title + except: + logging.debug("Error in ECHOresource(findTagsFromMapping): %s %s"%(sys.exc_info()[0],sys.exc_info()[1])) + logging.debug(referenceTypeF) + #TODO:CCCC + bibdata[referenceType]=referenceTypeF[1].getUsedFields() + bibdata['data']=referenceTypeF[1] + fields=bibdata[referenceType] + for field in fieldlist: + retdata[field]=referenceTypeF[1].getValue(field)[0] + + return retdata,fieldlist,temp,fields + + + security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination def copyIndex_meta2echo_resource(self,RESPONSE=None): - #copy MD von Index_meta to the echo_resource + """copy MD von Index_meta to the echo_resource""" - logging.debug("copyIndex_meta2echo_resource:"+self.metalink) - md = self.getMetaDataManager().getBibData(path=self.metalink) - logging.debug("copyIndex_meta2echo_resource:"+repr(md)) - self.metaDataHash=self.getMetaDataManager().getBibMappedData(md) - logging.debug("copyIndex_meta2echo_resource:"+repr(self.metaDataHash)) + (metadict, error)=readMetadata(self.metalink) + logging.debug(metadict) - self.contentType=normalizeCt(self.metaDataHash.get('@type','')) + self.metaDataHash={} + if not error=="": #Fehler beim Auslesen des Metafiles + + return "ERROR:",error,self.absolute_url() - return - - def getDRI(self,type="escidoc"): - """get DRI""" - try: - dri = self.getMetaDataManager().getDRI(path=self.metalink,type=type) - except: - return None - - return dri + self.contentType=normalizeCt(metadict['bib_type'])[0:] + fields=self.findTagsFromMapping(normalizeCt(self.contentType)) + + #fields=self.findLabelsFromMapping(normalizeCt(self.contentType)) + for field in fields[1]: + + if self.isDefinedInThisSet(fields,field): + #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),'')) + self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),'')) + + + + if RESPONSE: + return RESPONSE.redirect('manage_main') + + return "OK:",self.absolute_url(),normalizeCt(self.contentType) def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" - #(metadict, error)=readMetadata(self.metalink) - logging.debug("getMetaData:"+self.metalink) - - self.copyIndex_meta2echo_resource() + (metadict, error)=readMetadata(self.metalink) + logging.debug("METADICT:") + logging.debug(metadict) if back: self.REQUEST.SESSION['back']=back + if not error=="": #Fehler beim Auslesen des Metafiles + return "ERROR:",error + if (not self.contentType) or (overwrite=="yes"): - self.contentType=normalizeCt(normalizeCt(self.metaDataHash.get('@type','')).lower()) + self.contentType=normalizeCt(normalizeCt(metadict['bib_type']).lower()) - if not (normalizeCt(self.contentType).lower()==normalizeCt(self.contentType).lower()): - self.REQUEST.SESSION['contentStorage']=normalizeCt(self.contentType) + if not (normalizeCt(metadict['bib_type']).lower()==normalizeCt(self.contentType).lower()): + self.REQUEST.SESSION['contentStorage']=normalizeCt(metadict['bib_type']) self.REQUEST.SESSION['contentZope']=normalizeCt(self.contentType) return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() @@ -1011,21 +1379,26 @@ class ECHO_resource(CatalogAware,Folder, #self.REQUEST.SESSION['metadict']=metadict + + + self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict) + + if template=="yes": #pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_resourceMD.zpt'),metadict=metadict).__of__(self) pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') - return pt(metadict=self.metaDataHash) + return pt(metadict=metadict) -# def ECHO_getMD(self,item): -# """Ausgabe der MD""" -# return getattr(self,item) + def ECHO_getMD(self,item): + """Ausgabe der MD""" + return getattr(self,item) - def checkPDF(self,path): + def checkRDF(self,path): """check if pdf in the path""" try: for fileName in os.listdir(path): @@ -1039,7 +1412,7 @@ class ECHO_resource(CatalogAware,Folder, security.declareProtected('View','index_html') def index_html(self): """standard page""" - pdf=self.checkPDF(self.link) + pdf=self.checkRDF(self.link) if pdf: fh=file(pdf,'r').read() self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf') @@ -1081,19 +1454,80 @@ class ECHO_resource(CatalogAware,Folder, return sp[0][1]() - security.declarePublic('generate_label') + security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination def generate_label(self): """Erzeugt_standard_Label aus Template""" - self.label=self.getMetaDataManager().getBibFormattedLabel(path=self.metalink) - return self.label + + templateName="label_template_"+normalizeCt(self.contentType).lower(); + if hasattr(self, templateName): + pt=getattr(self,templateName) + self.title=pt()[0:] + return pt() + else: + pt=getattr(self.metadata,templateName) + + mdHash={} + #mdHash={"author":self.getMDValue('author'),"title":self.getMDValue('title'),"year":self.MD_year} + #logging.debug(mdHash) + logging.debug("new format for template") + fields=['author','title','year'] + + for field in fields: + mdHash[field]=self.getMDValue(field); + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + + logging.debug(field) + mdHash[field]=self.getMDValue(field); + + + self.title=pt(md=mdHash)[0:] + return pt(md=mdHash)[0:] + + + + security.declarePublic('generate_title') # has to be change, presently set because of OSAS koordination - security.declarePublic('generate_title') def generate_title(self,RESPONSE=None): """Erzeugt_standard_Label aus Template""" - self.title=self.generate_label(); - return self.title + + + templateName="label_template_"+normalizeCt(self.contentType).lower(); + if hasattr(self, templateName): + pt=getattr(self,templateName) + self.title=pt()[0:] + return pt() + else: + pt=getattr(self.metadata,templateName) + + mdHash={} + #mdHash={"author":self.getMDValue('author'),"title":self.getMDValue('title'),"year":self.MD_year} + #logging.debug(mdHash) + logging.debug("new format for template") + fields=['author','title','year'] + + for field in fields: + mdHash[field]=self.getMDValue(field); + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + + logging.debug(field) + mdHash[field]=self.getMDValue(field); + + + self.title=pt(md=mdHash)[0:] + return pt(md=mdHash)[0:] + + + Globals.InitializeClass(ECHO_resource)