Author: arielch
Date: Wed May 30 04:08:28 2012
New Revision: 1344092
URL: http://svn.apache.org/viewvc?rev=1344092&view=rev
Log:
i118478 - Implement getInvocationContext in PyUNO ScriptContext
Original author: Tsutomu Uchino <hanya.runo at gmail.com>
Modified:
incubator/ooo/trunk/main/scripting/source/pyprov/pythonscript.py
Modified: incubator/ooo/trunk/main/scripting/source/pyprov/pythonscript.py
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/scripting/source/pyprov/pythonscript.py?rev=1344092&r1=1344091&r2=1344092&view=diff
==============================================================================
--- incubator/ooo/trunk/main/scripting/source/pyprov/pythonscript.py (original)
+++ incubator/ooo/trunk/main/scripting/source/pyprov/pythonscript.py Wed May 30
04:08:28 2012
@@ -113,9 +113,9 @@ log.debug( "pythonscript loading" )
from com.sun.star.uno import RuntimeException
from com.sun.star.lang import XServiceInfo
from com.sun.star.io import IOException
-from com.sun.star.ucb import CommandAbortedException, XCommandEnvironment,
XProgressHandler
+from com.sun.star.ucb import CommandAbortedException, XCommandEnvironment,
XProgressHandler, Command
from com.sun.star.task import XInteractionHandler
-from com.sun.star.beans import XPropertySet
+from com.sun.star.beans import XPropertySet, Property
from com.sun.star.container import XNameContainer
from com.sun.star.xml.sax import XDocumentHandler, InputSource
from com.sun.star.uno import Exception as UnoException
@@ -247,12 +247,15 @@ def checkForPythonPathBesideScript( url
class ScriptContext(unohelper.Base):
- def __init__( self, ctx, doc ):
+ def __init__( self, ctx, doc, inv ):
self.ctx = ctx
self.doc = doc
+ self.inv = inv
# XScriptContext
def getDocument(self):
+ if self.doc:
+ return self.doc
return self.getDesktop().getCurrentComponent()
def getDesktop(self):
@@ -262,6 +265,9 @@ class ScriptContext(unohelper.Base):
def getComponentContext(self):
return self.ctx
+ def getInvocationContext(self):
+ return self.inv
+
#----------------------------------
# Global Module Administration
# does not fit together with script
@@ -726,7 +732,32 @@ class CommandEnvironment(unohelper.Base,
# log.isDebugLevel() and log.debug( "pythonscript:
ModifyListener.modified " + str( event ) )
# def disposing( self, event ):
# log.isDebugLevel() and log.debug( "pythonscript:
ModifyListener.disposing " + str( event ) )
+
+def getModelFromDocUrl(ctx, url):
+ """Get document model from document url."""
+ doc = None
+ args = ("Local", "Office")
+ ucb = ctx.getServiceManager().createInstanceWithArgumentsAndContext(
+ "com.sun.star.ucb.UniversalContentBroker", args, ctx)
+ identifier = ucb.createContentIdentifier(url)
+ content = ucb.queryContent(identifier)
+ p = Property()
+ p.Name = "DocumentModel"
+ p.Handle = -1
+
+ c = Command()
+ c.Handle = -1
+ c.Name = "getPropertyValues"
+ c.Argument = uno.Any("[]com.sun.star.beans.Property", (p,))
+ env = CommandEnvironment()
+ try:
+ ret = content.execute(c, 0, env)
+ doc = ret.getObject(1, None)
+ except Exception, e:
+ log.isErrorLevel() and log.error("getModelFromDocUrl: %s" % url)
+ return doc
+
def mapStorageType2PackageContext( storageType ):
ret = storageType
if( storageType == "share:uno_packages" ):
@@ -853,11 +884,26 @@ class PythonScriptProvider( unohelper.Ba
mystr = mystr + str(i)
log.debug( "Entering PythonScriptProvider.ctor" + mystr )
+ doc = None
+ inv = None
storageType = ""
+
if isinstance(args[0],unicode ):
storageType = args[0]
+ if storageType.startswith( "vnd.sun.star.tdoc" ):
+ doc = getModelFromDocUrl(ctx, storageType)
else:
- storageType = args[0].SCRIPTING_DOC_URI
+ inv = args[0]
+ try:
+ doc = inv.ScriptContainer
+ content = ctx.getServiceManager().createInstanceWithContext(
+
"com.sun.star.frame.TransientDocumentsDocumentContentFactory",
+ ctx).createDocumentContent(doc)
+ storageType = content.getIdentifier().getContentIdentifier()
+ except Exception, e:
+ text = lastException2String()
+ log.error( text )
+
isPackage = storageType.endswith( ":uno_packages" )
try:
@@ -876,7 +922,7 @@ class PythonScriptProvider( unohelper.Ba
raise RuntimeException(
"PythonScriptProvider couldn't instantiate " +ucbService,
self)
self.provCtx = ProviderContext(
- storageType, sfa, urlHelper, ScriptContext(
uno.getComponentContext(), None ) )
+ storageType, sfa, urlHelper, ScriptContext(
uno.getComponentContext(), doc, inv ) )
if isPackage:
mapPackageName2Path = getPackageName2PathMap( sfa, storageType
)
self.provCtx.setPackageAttributes( mapPackageName2Path ,
rootUrl )