--- ECHO_content/ECHO_collection.py 2006/07/03 17:29:20 1.271
+++ ECHO_content/ECHO_collection.py 2007/01/23 18:53:01 1.282
@@ -18,8 +18,9 @@ except:
import urlparse
import string
import tempfile
+import zipfile
import re
-import os
+import os,shutil
import OFS.Image
from types import *
from OFS.Cache import Cacheable
@@ -67,11 +68,26 @@ import urllib
import xml.dom.minidom
import ECHO_helpers
from ECHO_helpers import *
-from ECHO_language import *
+
+try:
+ from ECHO_language import *
+except:
+ print "no echo_language"
+ class ECHO_language:
+ """ leere Klasse"""
+ pass
+
from ECHO_movie import *
import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
import xmlrpclib
-
+
+
+
+
+def normalizeCt(str):
+ """normalizes content_type"""
+ #str= str.replace(" ","_")
+ return str.replace("-"," ").lower()
def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""):
@@ -343,7 +359,10 @@ class ECHO_fullText(ZopePageTemplate,ECH
def getPage(self,nr='1'):
"""get page n"""
#return self().encode('latin-1','ignore')
- dom=xml.dom.minidom.parseString(self())
+ try:
+ dom=xml.dom.minidom.parseString(self())
+ except:
+ dom=xml.dom.minidom.parseString(self().encode('latin-1'))
pages=dom.getElementsByTagName('page')
return pages[int(nr)-1].toxml()
@@ -633,9 +652,14 @@ class ECHO_resource(CatalogAware,Folder,
#print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
+ 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()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
+ if x=="ok":
+
+ break;
+
- 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()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
-
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -793,9 +817,14 @@ class ECHO_resource(CatalogAware,Folder,
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))
-
- 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()
-
+
+ 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
@@ -858,10 +887,16 @@ class ECHO_resource(CatalogAware,Folder,
params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
- try:
- 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()
- except:
- zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])
+ 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:
+ zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])
zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.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
@@ -871,13 +906,13 @@ class ECHO_resource(CatalogAware,Folder,
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:
+ #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:
zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
@@ -1015,6 +1050,25 @@ class ECHO_resource(CatalogAware,Folder,
else:
return ''
+ def getOwnerOriginalsHTML(self):
+ """gibt Liste der foerdernden Institutionen aus"""
+
+ if hasattr(self,'ownerOriginal'):
+ obj=self.ownerOriginal
+ ret=obj.getOwner()
+ return ret
+ else:
+ return ''
+
+ def getDigiCopyByHTML(self):
+ """gibt Liste der foerdernden Institutionen aus"""
+
+ if hasattr(self,'digiCopyBy'):
+ obj=self.digiCopyBy
+ ret=obj.getDigiCopyBy()
+ return ret
+ else:
+ return ''
def getCredits(self):
"""Ausgabe der credits"""
@@ -1055,7 +1109,7 @@ class ECHO_resource(CatalogAware,Folder,
def getContentType(self):
try:
- return self.contentType
+ return normalizeCt(self.contentType)
except:
return ""
@@ -1113,8 +1167,42 @@ class ECHO_resource(CatalogAware,Folder,
+ def changeViewer(self,newViewer):
+ """set newViewer to the url of the new viewer
+ only if metalink is set, otherwise it gives false
+ """
+
+ vl,msg=self.checkValidityOfMetaLink()
+
+ if vl:
+ self.newViewer=newViewer
+ return vl,msg
+ else:
+ return vl,msg
+
+ def checkValidityOfMetaLink(self):
+ """checks if the metalink is valid xml"""
+
+ ml=self.metalink
+
+ try:
+ txt=urllib.urlopen(ml)
- def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
+ except:
+ return False,"Cannot open: %s)"%ml
+
+ txt.close()
+ try:
+ dom = NonvalidatingReader.parseUri(ml)
+ except:
+ return False, "Connot parse: %s)"%ml
+
+ if len(dom.xpath("//texttool"))==0:
+ return False, "No texttools: %s)"%ml
+
+ return True,""
+
+ def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,newViewer='',RESPONSE=None):
"""Aenderung der Properties"""
self.resourceID=resourceID
self.title=title
@@ -1128,6 +1216,9 @@ class ECHO_resource(CatalogAware,Folder,
self.link=link
self.metalink=metalink
+ self.newViewer=newViewer
+
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -1170,7 +1261,7 @@ class ECHO_resource(CatalogAware,Folder,
def changeECHO_resource_metadata_local(self,RESPONSE=None):
"""change metadata"""
- tags=self.findTagsFromMapping(self.contentType)
+ 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:]
@@ -1181,7 +1272,7 @@ class ECHO_resource(CatalogAware,Folder,
def changeECHO_resource_metadata(self,RESPONSE=None):
"""change metadata"""
- tags=self.findTagsFromMapping(self.contentType)
+ tags=self.findTagsFromMapping(normalizeCt(self.contentType))
self.OSAS_meta={}
for field in tags[1]:
try:
@@ -1191,8 +1282,14 @@ class ECHO_resource(CatalogAware,Folder,
zLOG.LOG("ECHO_collection (changeECHO_resource_metadata)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])
print self.newMetaXML()
- 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')).read()
-
+ 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')).read()
+ if x=="ok":
+
+ break;
+
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -1203,9 +1300,9 @@ class ECHO_resource(CatalogAware,Folder,
"""returns value for simple search"""
try:
- return " ".join([self.getMDValue('title',generic="yes"),
- self.getMDValue('author',generic="yes"),
- self.getMDValue('year',generic="yes"),self.getTitle()])
+ return " ".join([self.getMDValue('title',generic="yes",empty=" "),
+ self.getMDValue('author',generic="yes",empty=" "),
+ self.getMDValue('year',generic="yes",empty=" "),self.getTitle()])
except:
#zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"),
@@ -1221,6 +1318,7 @@ class ECHO_resource(CatalogAware,Folder,
if generic:
if self.contentType:
ct=self.contentType.replace(" ","_").lower()
+ ct=self.contentType.replace("-","_").lower()
else:
zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId())
ct=""
@@ -1228,33 +1326,39 @@ class ECHO_resource(CatalogAware,Folder,
#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
+ if empty is None:
+ #FIXME: warum gibt es manchmal kein metadatahas
try:
- ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
+ ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%normalizeCt(self.contentType))
except:
zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId())
return ""
else:
-
+ try:
ret= self.metaDataHash.get(fieldNameTest,empty)
-
+ except:
+ zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId())
+ return ""
+
if type(ret) is StringType:
return ret.decode('utf-8')
else:
@@ -1270,8 +1374,12 @@ class ECHO_resource(CatalogAware,Folder,
self.copyIndex_meta2echo_resource()
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):
@@ -1407,11 +1515,12 @@ class ECHO_resource(CatalogAware,Folder,
fields=[]
fieldlist=self.standardMD.fieldList
- tags=self.findTagsFromMapping(self.contentType)
+ tags=self.findTagsFromMapping(normalizeCt(self.contentType))
self.referencetypes=tags[2]
for referenceTypeF in self.referencetypes:
-
- if referenceTypeF[1].title.lower() == referenceType.lower():
+
+
+ if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()):
try:
bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
@@ -1449,7 +1558,7 @@ class ECHO_resource(CatalogAware,Folder,
for referenceTypeF in temp:
#print referenceType
- if referenceTypeF[1].title.lower() == referenceType.lower():
+ if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()):
try:
bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
referenceType=referenceTypeF[1].title
@@ -1476,10 +1585,10 @@ class ECHO_resource(CatalogAware,Folder,
return "ERROR:",error,self.absolute_url()
- self.contentType=metadict['bib_type'][0:]
- fields=self.findTagsFromMapping(self.contentType)
+ self.contentType=normalizeCt(metadict['bib_type'])[0:]
+ fields=self.findTagsFromMapping(normalizeCt(self.contentType))
- #fields=self.findLabelsFromMapping(self.contentType)
+ #fields=self.findLabelsFromMapping(normalizeCt(self.contentType))
for field in fields[1]:
if self.isDefinedInThisSet(fields,field):
@@ -1491,7 +1600,7 @@ class ECHO_resource(CatalogAware,Folder,
if RESPONSE:
return RESPONSE.redirect('manage_main')
- return "OK:",self.absolute_url(),self.contentType
+ 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"""
@@ -1504,11 +1613,11 @@ class ECHO_resource(CatalogAware,Folder,
return "ERROR:",error
if (not self.contentType) or (overwrite=="yes"):
- self.contentType=metadict['bib_type'].lower()
+ self.contentType=normalizeCt(normalizeCt(metadict['bib_type']).lower())
- if not (metadict['bib_type'].lower()==self.contentType.lower()):
- self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
- self.REQUEST.SESSION['contentZope']=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')()
@@ -1555,6 +1664,11 @@ class ECHO_resource(CatalogAware,Folder,
self.REQUEST.RESPONSE.write(fh)
self.REQUEST.RESPONSE.close()
return
+
+ if getattr(self,'newViewer',''): #benutze den neuen viewer
+ url=self.newViewer+'url='+self.metalink+"&mode=texttool"
+ return self.REQUEST.RESPONSE.redirect(url)
+
return self.REQUEST.RESPONSE.redirect(self.link)
def startpage_html(self):
@@ -1589,7 +1703,7 @@ class ECHO_resource(CatalogAware,Folder,
def generate_label(self):
"""Erzeugt_standard_Label aus Template"""
- pt=getattr(self,"label_template_"+self.contentType.lower())
+ pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower())
self.label=pt()[0:]
return pt()
@@ -1598,7 +1712,7 @@ class ECHO_resource(CatalogAware,Folder,
def generate_title(self,RESPONSE=None):
"""Erzeugt_standard_Label aus Template"""
- pt=getattr(self,"label_template_"+self.contentType.lower())
+ pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower())
self.title=pt()[0:]
@@ -1714,7 +1828,7 @@ class ECHO_link(ECHO_externalLink):
meta_type="ECHO_link"
manage_options = ECHO_externalLink.manage_options+(
- {'label':'add links config','action':'ECHO_link_addLinksForm'},
+ {'label':'add links config','action':'ECHO_link_addLinksForm'},
)
def ECHO_link_addLinksForm(self):
@@ -1753,7 +1867,71 @@ class ECHO_link(ECHO_externalLink):
#
# return ret
#
-
+ def getCopyrightsHTML(self):
+ """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
+
+ if hasattr(self,'copyrightModel'):
+ obj=self.copyrightModel
+
+ else:
+ return "ERROR"
+ ret=[]
+
+ for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
+
+
+ try:
+ if hasattr(self.copyrightTypes,copyright[2]):
+ copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
+ link="copyrightTypes/"+copyright[2]+'/copyright.html'
+ else:
+ copyrightTypeObj=getattr(obj,copyright[2])
+ link="copyrightModel/"+copyright[2]+'/copyright.html'
+
+ label=copyrightTypeObj.label
+ url=getattr(copyrightTypeObj, 'url', '')
+
+ if url!='':
+ ret.append((url,copyright[0],copyright[1],copyright[2],label))
+ else:
+ if hasattr(copyrightTypeObj, 'copyright.html'):
+ ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
+ else:
+ ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
+ except:
+ """nothing"""
+
+ return ret
+
+ def getInstitutionsHTML(self):
+ """gibt Liste der foerdernden Institutionen aus"""
+
+ if hasattr(self,'support'):
+ obj=self.support
+ ret=obj.getSupporter()
+ return ret
+ else:
+ return ''
+
+ def getOwnerOriginalsHTML(self):
+ """gibt Liste der foerdernden Institutionen aus"""
+
+ if hasattr(self,'ownerOriginal'):
+ obj=self.ownerOriginal
+ ret=obj.getOwner()
+ return ret
+ else:
+ return ''
+
+ def getDigiCopyByHTML(self):
+ """gibt Liste der foerdernden Institutionen aus"""
+
+ if hasattr(self,'digiCopyBy'):
+ obj=self.digiCopyBy
+ ret=obj.getDigiCopyBy()
+ return ret
+ else:
+ return ''
def index_html(self):
"""standard link"""
@@ -1811,6 +1989,83 @@ class ECHO_collection(CatalogAware, Fold
path="/mpiwg/online/permanent/shipbuilding"
+
+ def exportImportObjects_html(self,RESPONSE):
+ """ImportObject"""
+ pt=zptFile(self, 'zpt/exportImportObjects.zpt')
+ pt.content_type="text/html"
+ return pt()
+
+ def importObjects_html(self,RESPONSE):
+ """ImportObject"""
+ pt=zptFile(self, 'zpt/importObjects.zpt')
+ pt.content_type="text/html"
+ return pt()
+
+ def importObjects(self,zfile,RESPONSE=None,REQUEST=None):
+ """import object from file"""
+
+ zf=zipfile.ZipFile(zfile,"r")
+ tmpdir=tempfile.mkdtemp() # create tempdir
+ ret=None
+
+ for name in zf.namelist():
+ fn=tempfile.mkstemp()[1]
+ tf=file(fn,"w")
+ x=zf.read(name)
+ tf.write(x)
+ tf.close()
+ try:
+ self._importObjectFromFile(fn,set_owner=1)
+ except:
+ if not ret:
+ ret=""
+ ret+="Cannot import: %s (Already existing?)
"%name
+ os.remove(fn)
+
+ if ret:
+ return """
OK: %s"%resource[0]) + else: + if RESPONSE is not None: + RESPONSE.write("
ERROR: %s (%s)"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg)) + + + + if RESPONSE is not None: + RESPONSE.write("
Done
") + def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """change the templates""" @@ -2193,11 +2470,13 @@ class ECHO_collection(CatalogAware, Fold retStr="