--- ECHO_content/ECHO_collection.py 2005/10/28 13:25:01 1.244 +++ ECHO_content/ECHO_collection.py 2005/11/29 13:48:44 1.256 @@ -83,6 +83,90 @@ def setECHO_collectionInformation(self,t self.credits=toList(credits) self.weight=weight +class ECHO_partner(Image,Persistent,ECHO_basis): + """ECHO Partner""" + + meta_type="ECHO_partner" + + def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''): + self.__name__=id + self.title=title + self.url=url + self.person=person + self.email=email + self.country=country + self.color=color + self.precondition=precondition + self.copyrightType=copyrightType + data, size = self._read_data(file) + content_type=self._get_content_type(file, data, id, content_type) + self.update_data(data, content_type, size) + + manage_options = Image.manage_options+( + {'label':'Partner Information','action':'ECHO_partner_config'}, + ) + + + def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None): + """Change main information""" + self.url=url + self.person=person + self.email=email + self.country=country + self.color=color + self.copyrightType=copyrightType + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + + def ECHO_partner_config(self): + """Main configuration""" + if not hasattr(self,'url'): + self.url="" + pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt') + return pt() + + +manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(), + Kind='ECHO_partner',kind='ECHO_partner') + + + +def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='', + REQUEST=None): + """ + Add a new ECHO_partner object. + + Creates a new ECHO_partner object 'id' with the contents of 'file'. + Based on Image.manage_addImage + """ + + id=str(id) + title=str(title) + content_type=str(content_type) + precondition=str(precondition) + + id, title = OFS.Image.cookId(id, title, file) + + self=self.this() + + # First, we create the image without data: + self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition)) + + # Now we "upload" the data. By doing this in two steps, we + # can use a database trick to make the upload more efficient. + if file: + self._getOb(id).manage_upload(file) + if content_type: + self._getOb(id).content_type=content_type + + if REQUEST is not None: + try: url=self.DestinationURL() + except: url=REQUEST['URL1'] + REQUEST.RESPONSE.redirect('%s/manage_main' % url) + return id + class ECHO_locale(ZopePageTemplate): """localisierung""" @@ -1037,14 +1121,56 @@ class ECHO_resource(CatalogAware,Folder, if RESPONSE is not None: RESPONSE.redirect('manage_main') + - def getMDValue(self,fieldName,empty=None): + def getMDValueSimpleSearchField(self): + """returns value for simple search""" + return " ".join([self.getMDValue('title',generic="yes"), + self.getMDValue('author',generic="yes"), + self.getMDValue('year',generic="yes")]) + + 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() + else: + zLOG.LOG("ECHO_collection (getMDValue)", zLOG.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.standardMD,ct): + fieldName=getattr(self.standardMD,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: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - + except: + zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) + return "" + else: - return self.metaDataHash.get(fieldName,empty) - + + return self.metaDataHash.get(fieldNameTest,empty) + + getFieldValue=getMDValue #depricated + def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None): """new index.meta""" self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') @@ -1153,20 +1279,6 @@ class ECHO_resource(CatalogAware,Folder, return field - - def getFieldValue(self,field): - """get value""" - - try: - - ret=self.metaDataHash[field] - if ret == "": - return None - else: - - return ret - except: - return None def getMetaDataHash(self): """md hash""" @@ -1174,6 +1286,7 @@ class ECHO_resource(CatalogAware,Folder, def setFieldValue(self,field,value): """get value""" + #TODO: remove setFieldValue if not hasattr(self,'metaDataHash'): setattr(self,'metaDataHash',{}) @@ -1183,8 +1296,9 @@ class ECHO_resource(CatalogAware,Folder, def copySearchFields(self): """copys metadatafields to the object""" fields=['author','title','year'] + for field in fields: - setattr(self,'MD_'+field,self.getFieldValue(field)) + setattr(self,'MD_'+field,self.getMDValue(field,generic="yes")) def findLabelsFromMapping(self,referenceType): @@ -1235,9 +1349,7 @@ class ECHO_resource(CatalogAware,Folder, #self.referencetypes=temp[0:] - - - + bibdata={} retdata={} @@ -1288,7 +1400,9 @@ class ECHO_resource(CatalogAware,Folder, if RESPONSE: return RESPONSE.redirect('manage_main') - def ECHO_getResourceMD(self,template="yes",back=None): + return "OK:",self.absolute_url(),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) @@ -1298,7 +1412,7 @@ class ECHO_resource(CatalogAware,Folder, if not error=="": #Fehler beim Auslesen des Metafiles return "ERROR:",error - if not self.contentType: + if (not self.contentType) or (overwrite=="yes"): self.contentType=metadict['bib_type'].lower() if not (metadict['bib_type'].lower()==self.contentType.lower()): @@ -1425,7 +1539,18 @@ class ECHO_externalLink(Folder,ECHO_basi security.declarePublic('content_html') def content_html(self): """template fuer content""" - return ECHO_basis.content_html(self,'externalLink') + ret= ECHO_basis.content_html(self,'externalLink') + + + try: + return ret.encode('utf-8') + + except: + try: + return ret.decode('latin-1') + except: + + return ret def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): @@ -1498,7 +1623,8 @@ class ECHO_link(ECHO_externalLink): """external_link""" meta_type="ECHO_link" - manage_options = ECHO_externalLink.manage_options+( + + manage_options = ECHO_externalLink.manage_options+( {'label':'add links config','action':'ECHO_link_addLinksForm'}, ) @@ -1516,16 +1642,29 @@ class ECHO_link(ECHO_externalLink): def content_html(self): """template fuer link""" - + + if hasattr(self,"link_template"): ret=ECHO_basis.content_html(self,'link') + else: ret=ECHO_basis.content_html(self,'collection') - try: - return ret.decode('utf-8') - except: - return ret + + #return ret + return ret +# +# +# try: +# return ret.decode('utf-8') +# except: +# try: +# return ret.decode('latin-1') +# except: +# +# return ret +# + def index_html(self): """standard link""" @@ -1570,16 +1709,22 @@ def manage_addECHO_link(self,id,title,la RESPONSE.redirect('manage_main') -class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis): +class ECHO_collection(CatalogAware, Folder, Persistent, Implicit, Cacheable,ECHO_basis): """ECHO Collection""" security=ClassSecurityInfo() meta_type='ECHO_collection' + default_catalog='resourceCatalog' + # viewClassificationList=viewClassificationListMaster displayTypes=displayTypes path="/mpiwg/online/permanent/shipbuilding" + def getMDValueSimpleSearchField(self): + """returns value for simple search""" + return " ".join([self.title,self.description]) + def getTitleAndLabel(self): """gibt title und label zurueck""" return (getattr(self,'title',''),getattr(self,'label','')) @@ -1778,15 +1923,20 @@ class ECHO_collection(Folder, Persistent pass return ret - def updateCollection(self,RESPONSE=None): + def importCollection(self,path=None,RESPONSE=None): """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" - files=os.listdir(self.path) + + if path is None: + pt=zptFile(self, 'zpt/importCollection.zpt') + return pt() + + files=os.listdir(path) ret="" for fileName in files: if fileName: - tempPath=re.sub("/mpiwg/online","",self.path) + tempPath=re.sub("/mpiwg/online","",path) link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg" metalink=self.path+"/"+fileName+"/index.meta" @@ -1809,20 +1959,6 @@ class ECHO_collection(Folder, Persistent if RESPONSE is not None: RESPONSE.redirect('manage_main') - def updateCollectionMD(self,RESPONSE=None): - """updateMD""" - files=os.listdir(self.path) - for fileName in files: - if fileName: - genObj=getattr(self,fileName) - genObj.copyIndex_meta2echo_resource() - genObj.generate_title() - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def changeViewerTemplateSetsForm(self): """change the viewer template set""" pt=zptFile(self, 'zpt/changeViewerTemplateSet') @@ -1913,8 +2049,8 @@ class ECHO_collection(Folder, Persistent RESPONSE.redirect('manage_main') def copySearchFields(self,RESPONSE=None): - """copys import metadatafields to the object""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) + """copys < metadatafields to the object""" + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) for resource in resources: @@ -1932,7 +2068,7 @@ class ECHO_collection(Folder, Persistent def reloadMetaDataFromStorage(self,RESPONSE=None): """copy metadata from the storage to ECHO""" - return reloadMetaDataFromStorage(self,RESPONSE=None) + return reloadMetaDataFromStorage(self,RESPONSE) def getPartnerCopyright(self,name,sonst="generic"): @@ -2069,14 +2205,19 @@ class ECHO_collection(Folder, Persistent areas = self.getAllMapAreas() return self.createJSAreas(areas) + + emptyPartner=ECHO_partner("", "","", "", "", "", "", "", "") + security.declarePublic('getCreditObject') def getCreditObject(self,name): """credit id to credititem""" try: return getattr(self.partners,name) except: - return "" - + + return self.emptyPartner + + security.declarePublic('ECHO_generateNavBar') def ECHO_generateNavBar(self): """Erzeuge Navigationsbar""" @@ -2143,7 +2284,7 @@ class ECHO_collection(Folder, Persistent {'label':'Set Startpage','action':'setStartpageFolderForm'}, {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'}, {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, - {'label':'ImportCollection','action':'updateCollection'}, + {'label':'ImportCollection','action':'importCollection'}, {'label':'Copy MD for indexing and search','action':'copySearchFields'}, ) @@ -2608,6 +2749,10 @@ class ECHO_root(Folder,Persistent,Implic meta_type="ECHO_root" + def mod_re_sub(self,pattern,replace,string): + """re.sub aus mod re zur Verfuegung stellen""" + return re.sub(pattern,replace,string) + def findObjectFromFulltext(self,existUri): ''' @@ -2635,7 +2780,7 @@ class ECHO_root(Folder,Persistent,Implic for resource in resources: resource[1].reindex() - print "

done %s

\n" + #print "

done %s

\n" if RESPONSE: RESPONSE.write("

done %s

\n"%resource[0]) @@ -3459,89 +3604,6 @@ def manage_addECHO_copyrightType(self,id -class ECHO_partner(Image,Persistent,ECHO_basis): - """ECHO Partner""" - - meta_type="ECHO_partner" - - def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''): - self.__name__=id - self.title=title - self.url=url - self.person=person - self.email=email - self.country=country - self.color=color - self.precondition=precondition - self.copyrightType=copyrightType - data, size = self._read_data(file) - content_type=self._get_content_type(file, data, id, content_type) - self.update_data(data, content_type, size) - - manage_options = Image.manage_options+( - {'label':'Partner Information','action':'ECHO_partner_config'}, - ) - - - def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None): - """Change main information""" - self.url=url - self.person=person - self.email=email - self.country=country - self.color=color - self.copyrightType=copyrightType - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - - def ECHO_partner_config(self): - """Main configuration""" - if not hasattr(self,'url'): - self.url="" - pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt') - return pt() - - -manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(), - Kind='ECHO_partner',kind='ECHO_partner') - - - -def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='', - REQUEST=None): - """ - Add a new ECHO_partner object. - - Creates a new ECHO_partner object 'id' with the contents of 'file'. - Based on Image.manage_addImage - """ - - id=str(id) - title=str(title) - content_type=str(content_type) - precondition=str(precondition) - - id, title = OFS.Image.cookId(id, title, file) - - self=self.this() - - # First, we create the image without data: - self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition)) - - # Now we "upload" the data. By doing this in two steps, we - # can use a database trick to make the upload more efficient. - if file: - self._getOb(id).manage_upload(file) - if content_type: - self._getOb(id).content_type=content_type - - if REQUEST is not None: - try: url=self.DestinationURL() - except: url=REQUEST['URL1'] - REQUEST.RESPONSE.redirect('%s/manage_main' % url) - return id class ECHO_linkList(ZopePageTemplate,ECHO_basis): """LinkList Objekt"""