--- ECHO_content/ECHO_collection.py 2004/05/13 20:47:41 1.85 +++ ECHO_content/ECHO_collection.py 2004/05/26 07:39:36 1.90 @@ -52,24 +52,34 @@ viewClassificationListMaster=['view poin def checkDiffs(self,metadict): """check differences""" + + + def NoneToEmpty(obj): if obj: return obj else: return "" + + diffs={} + tags=self.findTagsFromMapping(self.contentType) + self.referencetypes=tags[2] + self.fields=tags[3] + + for field in tags[1]: try: if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]): diffs[self.getFieldTag(tags,field)]=1 else: - print "DIFF",field,self.getFieldValue(self.getFieldTag(tags,field)),metadict[self.getFieldTag(tags,field)] + #print "DIFF",field,self.getFieldValue(self.getFieldTag(tags,field)),metadict[self.getFieldTag(tags,field)] diffs[self.getFieldTag(tags,field)]=0 except: diffs[self.getFieldTag(tags,field)]=0 - print "EX",field + #print "EX",field return diffs def content_html(self,type): @@ -124,9 +134,25 @@ def sendFile(self, filename, type): self.REQUEST.RESPONSE.write(file(fn).read()) return +class BrowserCheck: + """check the browsers request to find out the browser type""" + + def __init__(self, zope): + self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT") + self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0) + self.isIE = string.find(self.ua, 'MSIE') > -1 + self.nav = self.ua[string.find(self.ua, '('):] + ie = string.split(self.nav, "; ")[1] + if string.find(ie, "MSIE") > -1: + self.versIE = string.split(ie, " ")[1] + self.isMac = string.find(self.ua, 'Macintosh') > -1 + self.isWin = string.find(self.ua, 'Windows') > -1 + self.isIEWin = self.isIE and self.isWin + self.isIEMac = self.isIE and self.isMac + def writeMetadata(url,metadict): - """Einlesen der Metadaten und und erstellen des geänderten XML file""" + """Einlesen der Metadaten und und erstellen des geaenderten XML file""" try: geturl="" @@ -150,7 +176,7 @@ def writeMetadata(url,metadict): metanode=metanodes[0] for metaData in metadict.keys(): - print metaData,metanode + try: nodeOld=metanode.getElementsByTagName(metaData) except: @@ -169,13 +195,18 @@ def writeMetadata(url,metadict): metanode.removeChild(nodeOld[0]).unlink() metanodeneu=dom.createElement(metaData) - metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf8")) + try: + metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8")) + except: + metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8')) metanodeneu.appendChild(metanodetext) metanode.appendChild(metanodeneu) - return dom.topxml().encode('utf-8') + return dom.toxml().encode('utf-8') + + def readMetadata(url): """Methode zum Auslesen der Metadateninformation zu einer Resource Vorerst noch Typ bib""" @@ -212,7 +243,7 @@ def readMetadata(url): for node in metacontent: try: - metadict[re.sub('-','_',node.tagName.lower())]=getText(node.childNodes) + metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes)) except: """nothing""" @@ -365,7 +396,7 @@ def manage_addECHO_layoutTemplate(self, REQUEST.RESPONSE.redirect(u+'/manage_main') return '' -class ECHO_resource(Folder): +class ECHO_resource(Folder,Persistent): """ECHO Ressource""" meta_type='ECHO_resource' @@ -391,19 +422,25 @@ class ECHO_resource(Folder): return "" def getFullTextXML(self,noredirect=None): - """getFullTextXML""" + """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" try: fh=urllib.urlopen(self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('text') texturl=getText(text[0].childNodes) + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') if not noredirect: self.REQUEST.RESPONSE.redirect(texturl) else: return texturl except: - return None + + if not noredirect: + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') + self.REQUEST.RESPONSE.write("no fulltext available") + else: + return "no fulltext available" def getCredits(self): """Ausgabe der credits""" @@ -412,7 +449,7 @@ class ECHO_resource(Folder): else: return [] - def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords): + def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords): self.id = id """Festlegen der ID""" @@ -425,8 +462,10 @@ class ECHO_resource(Folder): self.credits=toList(credits) self.description=description self.contentType=contentType + self.renderingType=renderingType self.responsible=responsible - + self.resourceID=resourceID + if coords: coordsnew=[ string.split(x,",") for x in coords] else: @@ -558,6 +597,17 @@ class ECHO_resource(Folder): RESPONSE.redirect('manage_main') + def changeECHO_resource_metadata_local(self,RESPONSE=None): + """change metadata""" + tags=self.findTagsFromMapping(self.contentType) + for field in tags[1]: + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] + + + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + def changeECHO_resource_metadata(self,RESPONSE=None): """change metadata""" tags=self.findTagsFromMapping(self.contentType) @@ -575,12 +625,20 @@ class ECHO_resource(Folder): RESPONSE.redirect('manage_main') + def getMDValue(self,fieldName): + return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) + def newMetaXML(self): """new index.meta""" self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') return writeMetadata(self.metalink,self.OSAS_meta) - + + def getMetaDataXML(self): + """prints out metadata as stored in the echo environment, format is the index.meta format""" + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') + return writeMetadata(self.metalink,self.metaDataHash) + def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): """Änderung der Properties""" @@ -682,75 +740,138 @@ class ECHO_resource(Folder): except: return None + def getMetaDataHash(self): + """md hash""" + return self.metaDataHash + + def setFieldValue(self,field,value): + """get value""" + #print field + if not hasattr(self,'metaDataHash'): + setattr(self,'metaDataHash',{}) + self.metaDataHash[field]=value[0:] + + + def findLabelsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" - self.referencetypes=self.ZopeFind(self.standardMD) - #print "RT",referenceType + #return {},[] + + temp=self.ZopeFind(self.standardMD) + + if referenceType=="": + referenceType="book" + bibdata={} retdata={} + fields=[] fieldlist=self.standardMD.fieldList for referenceTypeF in self.referencetypes: #print referenceTypeF[1].title,referenceType - if referenceTypeF[1].title == referenceType: + if referenceTypeF[1].title.lower() == referenceType.lower(): #print "OK" - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + referenceType=referenceTypeF[1].title + except: + bibdata[referenceType]=referenceTypeF[1].fields + + bibdata['data']=referenceTypeF[1] - self.fields=bibdata[referenceType] + fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[1] #print retdata,fieldlist - return retdata,fieldlist + return retdata,fieldlist,temp,fields def findTagsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" - self.referencetypes=self.ZopeFind(self.standardMD) + + + if referenceType=="": + referenceType="book" + + temp = self.ZopeFind(self.standardMD)[0:] + + + #self.referencetypes=temp[0:] + + + + bibdata={} retdata={} fieldlist=self.standardMD.fieldList - for referenceTypeF in self.referencetypes: + for referenceTypeF in temp: - if referenceTypeF[1].title == referenceType: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + if referenceTypeF[1].title.lower() == referenceType.lower(): + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + referenceType=referenceTypeF[1].title + except: + bibdata[referenceType]=referenceTypeF[1].fields bibdata['data']=referenceTypeF[1] - self.fields=bibdata[referenceType] + fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[0] - return retdata,fieldlist + return retdata,fieldlist,temp,fields - - + + def copyIndex_meta2echo_resource(self,RESPONSE=None): + """copy MD von Index_meta to the echo_resource""" + + (metadict, error)=readMetadata(self.metalink) + + self.metaDataHash={} + if not error=="": #Fehler beim Auslesen des Metafiles + return "ERROR:",error + fields=self.findTagsFromMapping(self.contentType) + #fields=self.findLabelsFromMapping(self.contentType) + for field in fields[1]: + if self.isDefinedInThisSet(fields,field): + self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),'')) + + + + if RESPONSE: + return RESPONSE.redirect('manage_main') + def ECHO_getResourceMD(self,template="yes"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" (metadict, error)=readMetadata(self.metalink) - + if not error=="": #Fehler beim Auslesen des Metafiles return "ERROR:",error - if not (metadict['bib_type']==self.contentType): + if not (metadict['bib_type'].lower()==self.contentType.lower()): self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] self.REQUEST.SESSION['contentZope']=self.contentType return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() - - self.REQUEST.SESSION['metadict']=metadict - self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict) + self.REQUEST.SESSION['metadict']=metadict + + + + self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) + if template=="yes": - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) - return pt() + pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) + return pt() + @@ -763,12 +884,49 @@ class ECHO_resource(Folder): return self.REQUEST.RESPONSE.redirect(self.link) + def startpage_html(self): + """prints out a startpage for a resource for use e.g. in the BVE""" + + # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt + + sp=self.ZopeFind(self,obj_ids=['startpage.html']) + + if sp: + return sp[1]() + + #prüfen ob irgendwo ein template + if hasattr(self,'startpage_index_template'): + return self.startpage_index_template() + + #generisches template ausgeben + + pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self) + pt.content_type="text/html" + return pt() + + def toc_html(self): + + sp=self.ZopeFind(self,obj_ids=['toc.html']) + + if sp: + return sp[0][1]() + + + def generate_label(self): """Erzeugt_standard_Label aus Template""" pt=getattr(self,"label_template_"+self.bib_type) return pt() + def generate_title(self,RESPONSE=None): + """Erzeugt_standard_Label aus Template""" + pt=getattr(self,"label_template_"+self.contentType) + + self.title=pt() + + return pt() + def manage_addECHO_resourceForm(self): """Form for adding a ressource""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self) @@ -776,10 +934,10 @@ def manage_addECHO_resourceForm(self): -def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): +def manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None): """addaresource""" - newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords) self._setObject(id,newObj) @@ -1005,7 +1163,7 @@ class ECHO_collection(Folder, Persistent return ret+""+getCollection(self)+"" def createJavaScript(self): - """CreateJava""" + """OLD CreateJava""" ret=javaScriptMain dynamical="\n" @@ -1019,7 +1177,7 @@ class ECHO_collection(Folder, Persistent return ret def createJSAreas(self): - """new version of createJavaScript""" + """create area calls for JavaScript""" dynamical="\n" for ob in self.getGraphicCoords(): if ob[5] == "area": @@ -1029,20 +1187,37 @@ class ECHO_collection(Folder, Persistent return dynamical def createMapHead(self): - """generate divs""" + """create javascript include and script tags for head""" pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self) return pt() + + def createMapImg(self): + """generate img-tag for map""" + bt = BrowserCheck(self) + tag = "" + src = self.REQUEST['URL1'] + "/overview" + if bt.isN4: + tag += ''%src + else: + tag += ''%src + return tag def createMapLink(self, ob, text=None): """generate map link""" + bt = BrowserCheck(self) id = ob[1] link = ob[1] if text == None: text = ob[2] - tag = '" + tag = "" + if bt.isN4: + tag += '" + else: + tag = '" return tag def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"): @@ -1051,18 +1226,39 @@ class ECHO_collection(Folder, Persistent link = ob[1] vtype = ob[5] ctype = ob[3].contentType - - tag = ''%(id,id,id,link) - if vtype == "view point": - rot = ob[4][4] - tag += ''%(id,arrowsrc,rot) + bt = BrowserCheck(self) + tag = "" + + if bt.isN4: + tag += ''%(id,id,id) + if vtype == "view point": + rot = ob[4][4] + tag += ''%(link,arrowsrc,rot) + else: + tag += ''%(id,id,id,link) + if vtype == "view point": + rot = ob[4][4] + if bt.isIEWin and bt.versIE > 5: + tag += ''%(id,arrowsrc,rot,arrowsrc,rot) + else: + tag += ''%(id,arrowsrc,rot) + else: + if bt.isIEWin: + tag += '
"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) ret +="""\n""" - print ret + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret)