--- OSA_system2/OSAS_root.py 2004/12/23 08:30:56 1.2
+++ OSA_system2/OSAS_root.py 2005/04/06 09:18:41 1.9
@@ -21,14 +21,206 @@ import os.path
import Globals
from Globals import package_home
from AccessControl import ClassSecurityInfo
+import xmlrpclib
+from xml.sax import make_parser
+from xml.sax.handler import ContentHandler
+import sys
+class OSAS_add_contextData(Folder):
+ """Einfuegen eines Documentes in eine Collection"""
+
+ security=ClassSecurityInfo()
+
+
+ meta_type='OSAS_addObjectToCollection'
+
+ def XmlToTree(self,URL,pwstr=None):
+ """Collection XML to Tree"""
+ def spaces(depth):
+
+ tmp=""
+ k=0
+ while k<2*depth:
+ k+=1
+ tmp=tmp+" "+" "
+ return tmp
+
+ class requestHandler(ContentHandler):
+ def __init__(self):
+ self.depth=0
+ self.retStr=""
+
+ def startElement(self,name,attrs):
+ if name=="element":
+ self.depth+=1
+ begin=""
+ end=""
+ if self.depth==1:
+ begin=""
+ end=""
+
+ self.retStr+=spaces(self.depth)+"%s"%(attrs.get('url'),begin+urllib.unquote(attrs.get('name')))+end+"
\n"
+
+
+
+ def endElement(self,name):
+ if name=="element":
+ self.depth-=1
+
+ if pwstr=="":
+ pwstr=None
+
+
+
+ try:
+ if pwstr:
+ URL+="/getCollectionTreeXML?pwstr=%s"%pwstr
+ else:
+ URL+="/getCollectionTreeXML"
+ parser=make_parser()
+ curHandler=requestHandler()
+ parser.setContentHandler(curHandler)
+
+ parser.parse(urllib.urlopen(URL))
+ return curHandler.retStr.encode('utf-8')
+
+ except:
+ zLOG.LOG('OSAS_Root (addFileToDollection)',zLOG.ERROR,'%s %s'%sys.exc_info()[:2])
+ return URL
+ return urllib.urlopen(URL).read()
+
+
+ def __init__(self,id,collection):
+ self.id=id
+ self.collection=collection
+
+
+
+
+ def getPartners(self,URL):
+ """Zeige Partnerliste"""
+ class requestHandler(ContentHandler):
+ def __init__(self):
+ self.ret=[]
+
+ def startElement(self,name,attrs):
+ if name=="partner":
+ self.ret.append((attrs.get('id'),attrs.get('title').encode('utf-8')))
+
+
+ URL+="/getPartnersXML"
+ parser=make_parser()
+ curHandler=requestHandler()
+ parser.setContentHandler(curHandler)
+ parser.parse(urllib.urlopen(URL))
+ try:
+
+ return curHandler.ret
+ except:
+ return [("",URL)]
+
+
+
+ def addContextData(self,path):
+ """Hinzufuegen zu einer Sammlung"""
+
+ server=xmlrpclib.Server(self.serverUrl)
+
+
+ self.REQUEST.SESSION['images']=server.getImages(path)
+
+
+ self.REQUEST.SESSION['movies']=server.getMovies(path)
+
+
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','contextDataMain.zpt')).__of__(self)
+ return pt()
+
+ index_html=addContextData
+
+ def addContextData2(self,path,collection,label,description,content_type,responsible,weight,thumb="",streamingfile="",rawfile="",credits=None):
+ """Hinzufuegen der Resource"""
+ splitted=path.split("/")
+ #print "BLU"
+ id=splitted[len(splitted)-1]
+ title=splitted[len(splitted)-1]
+ metalink=self.REQUEST['SERVER_URL']+path+"/index.meta"
+
+ #link=TOBEDONE"
+ """Hinzufuegen der Ressource"""
+ gifPath=path.replace("/mpiwg/online/","")
+ rawPath=path.replace("/mpiwg/online/permanent/einstein_exhibition/movies/","")
+ thumbUrl="http://einst3.mpiwg-berlin.mpg.de/"+gifPath+"/"+thumb
+ link="rtsp://einst1.mpiwg-berlin.mpg.de/"+gifPath+"/"+streamingfile
+ rawFile="file:///Volumes/einstein_movies/"+rawPath+"/"+rawfile
+
+
+ params=urllib.urlencode({'id':id,'title':title,'link':link,'thumbUrl':thumbUrl,'rawFile':rawFile,'label':label,'description':description,'contentType':content_type,'responsible':responsible,'weight':weight,'credits':credits,'metalink':metalink})
-class OSAS_viewerObject(Folder):
+
+ try:
+ server=xmlrpclib.Server(collection,allow_none=True)
+ retStr=server.addMovie(id,title,label,description,content_type,responsible,link,thumbUrl,rawFile,metalink,weight,credits)
+ except:
+ zLOG.LOG('OSAS_Root (addFileToDollection2)',zLOG.ERROR,'%s %s'%sys.exc_info()[:2])
+ return "An Error occured adding the resource\n", collection,params
+
+ #print "added"
+ if not retStr:
+ return "An Error occured adding the resource\n", collection,params
+
+ #print collection+"/"+id+"/copyIndex_meta2echo_resource"
+
+ urllib.urlopen(collection+"/"+id+"/copyIndex_meta2echo_resource").read()
+ #print "copy2res"
+ urllib.urlopen(collection+"/"+id+"/generate_label").read()
+ #print "label"
+ urllib.urlopen(collection+"/"+id+"/generate_title").read()
+ #print "title"
+ return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'/browse?path='+path)
+
+ manage_options = Folder.manage_options+(
+ {'label':'Main Config','action':'add_contextData_config'},
+ )
+
+
+ def add_contextData_config(self):
+ """Main configuration"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeAddContextData.zpt')).__of__(self)
+ return pt()
+
+
+ def change_OSAS_add_contextData(self,collection,pwstr=None,RESPONSE=None):
+ """Change"""
+ self.pwstr=pwstr
+ self.collection=collection
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
+def manage_AddOSAS_add_contextDataForm(self):
+ """interface for adding the OSAS_add_Metadata"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addContextData.zpt')).__of__(self)
+ return pt()
+
+def manage_AddOSAS_add_contextData(self,id,collection,RESPONSE=None):
+ """add the OSAS_root"""
+ newObj=OSAS_add_contextData(id,collection)
+ self.Destination()._setObject(id,newObj)
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
+
+
+
+
+
+class OSAS_handlerObject(Folder):
"""
- Grundlegende Klasse fuer Viewer zur Zeit noch in Entwicklung
+ Grundlegende Klasse fuer Handler zur Zeit noch in Entwicklung
"""
- meta_type="OSAS_ViewerObject__neu"
+ meta_type="OSAS_HandlerObject__neu"
def __init__(self,id,title,prefix,objectTypes,ignorePath=""):
@@ -38,7 +230,7 @@ class OSAS_viewerObject(Folder):
- `id` : Zope ID des Objektes
- `title`: Titel des Objektes
- `prefix` : URL bzw. URL Rumpf der Zusammen mit dem Pfad des Objectes die Anzeige URL ergibt
- - `objectType` : liste von Objekttypen die mittels dieses Viewers angezeigt werden können.
+ - `objectType` : liste von Objekttypen die mittels dieses Handlers angezeigt werden können.
- `ignorePath` : Pfad der bei dem übergebenen Pfad element ingnoriert werden soll. Optional.
"""
self.id=id
@@ -48,33 +240,34 @@ class OSAS_viewerObject(Folder):
self.ignorePath=ignorePath
manage_options = Folder.manage_options+(
- {'label':'Main Config','action':'changeViewerObjectForm'},
+ {'label':'Main Config','action':'changeHandlerObjectForm'},
)
- def changeViewerObjectForm(self):
+ def changeHandlerObjectForm(self):
"""Main configuration"""
- pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeViewerObjectForm.zpt')).__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeHandlerObjectForm.zpt')).__of__(self)
return pt()
- def changeViewerObject(self,title,prefix,objectTypes,ignorePath=None,RESPONSE=None):
+ def changeHandlerObject(self,title,prefix,objectTypes="",ignorePath=None,newTarget="yes",RESPONSE=None):
"""Change RootFolderName"""
self.title=title
self.prefix=prefix
self.ignorePath=ignorePath
self.objectTypes=toList(objectTypes)
+ self.newTarget=newTarget
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
-def manage_addViewerObjectForm(self):
- """form for adding a viewer Object"""
- pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addViewerObjectForm.zpt')).__of__(self)
+def manage_addHandlerObjectForm(self):
+ """form for adding a handler Object"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addHandlerObjectForm.zpt')).__of__(self)
return pt()
-def manage_addViewerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
+def manage_addHandlerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
"""add the OSAS_root"""
- newObj=OSAS_viewerObject(id,title,prefix,objectTypes,ignorePath)
+ newObj=OSAS_handlerObject(id,title,prefix,objectTypes,ignorePath)
self._setObject(id,newObj)
if RESPONSE is not None:
@@ -86,7 +279,7 @@ class OSAS_root(Folder,Implicit):
security=ClassSecurityInfo()
- def __init__(self,id,rootFolderName,uploadServletUrl=None):
+ def __init__(self,id,rootFolderName,serverUrl,uploadServletUrl=None):
"""initialize a new instance
@@ -99,8 +292,8 @@ class OSAS_root(Folder,Implicit):
self.id = id
self.rootFolderName = rootFolderName
self.uploadServletUrl=uploadServletUrl
-
- meta_type="OSAS_Root__neu"
+ self.serverUrl=serverUrl
+ meta_type="OSAS_Root"
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'changeRootForm'},
@@ -108,6 +301,46 @@ class OSAS_root(Folder,Implicit):
OSASObjectTypes=OSAS_helpers.OSASObjectTypes
+
+ def extendDict(self,dict1,dict2):
+ """add two dicts"""
+ ret=dict1
+ for name in dict2.keys():
+ ret[name]=dict2[name]
+ return ret
+
+
+ def generateMovieThumb(self,name):
+ """generate movie"""
+ server=xmlrpclib.Server(self.serverUrl)
+ name="/mpiwg/online/permanent/einstein_exhibition/movies/"+name
+
+
+ ret=server.generateMovieThumb(name,os.path.splitext(name)[0]+".gif")
+ return ret
+
+ security.declareProtected("View management screens","getOSASObjectTypes")
+ def getOSASObjectTypes(self):
+ """return list of objecttypes"""
+ return OSASObjectTypes
+
+ def setProxy(self,name,value):
+ """set proxy"""
+ self.REQUEST.SESSION[name]=value
+ return True
+
+ def listToSingle(self,path):
+ """list to single"""
+ if type(path)==ListType:
+ return path[0]
+ else:
+ return path
+
+ def splitPath(self,path):
+ """split path"""
+ if type(path)==ListType:
+ path=path[0]
+ return os.path.split(path)
def changeRootForm(self):
"""Main configuration"""
@@ -115,10 +348,10 @@ class OSAS_root(Folder,Implicit):
return pt()
- def changeRoot(self,rootFolderName,uploadServletUrl,RESPONSE=None):
+ def changeRoot(self,rootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
"""Change RootFolderName"""
self.rootFolderName=rootFolderName
-
+ self.serverUrl=serverUrl
self.uploadServletUrl=uploadServletUrl
if RESPONSE is not None:
@@ -233,9 +466,9 @@ def manage_addOSAS_rootForm(self):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)
return pt()
-def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,RESPONSE=None):
+def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
"""add the OSAS_root"""
- newObj=OSAS_root(id,RootFolderName,uploadServletUrl)
+ newObj=OSAS_root(id,RootFolderName,serverUrl,uploadServletUrl)
self._setObject(id,newObj)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')