summaryrefslogtreecommitdiff
path: root/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java')
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/ScriptProvider.java745
1 files changed, 745 insertions, 0 deletions
diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
new file mode 100755
index 000000000000..e83410f3f35c
--- /dev/null
+++ b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
@@ -0,0 +1,745 @@
+/*************************************************************************
+*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+************************************************************************/
+package com.sun.star.script.framework.provider;
+
+import com.sun.star.container.XNameContainer;
+
+import com.sun.star.uno.Exception;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XInitialization;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.frame.XModel;
+
+import com.sun.star.util.XMacroExpander;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.Type;
+
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.XVetoableChangeListener;
+import com.sun.star.beans.XPropertyChangeListener;
+import com.sun.star.beans.XPropertySetInfo;
+import com.sun.star.beans.Property;
+
+import com.sun.star.beans.XIntrospectionAccess;
+import com.sun.star.script.XInvocation;
+
+import com.sun.star.script.provider.XScriptContext;
+import com.sun.star.script.provider.XScriptProvider;
+import com.sun.star.script.provider.XScript;
+import com.sun.star.script.provider.ScriptFrameworkErrorException;
+import com.sun.star.script.provider.ScriptFrameworkErrorType;
+
+import com.sun.star.script.browse.XBrowseNode;
+import com.sun.star.script.browse.BrowseNodeTypes;
+
+import com.sun.star.script.framework.log.LogUtils;
+
+import com.sun.star.script.framework.container.ScriptMetaData;
+import com.sun.star.script.framework.container.XMLParserFactory;
+import com.sun.star.script.framework.container.ParcelContainer;
+import com.sun.star.script.framework.container.ParsedScriptUri;
+import com.sun.star.script.framework.container.UnoPkgContainer;
+
+import com.sun.star.ucb.Command;
+import com.sun.star.ucb.XContentProvider;
+import com.sun.star.ucb.XContent;
+import com.sun.star.ucb.XCommandProcessor;
+import com.sun.star.ucb.XContentIdentifier;
+import com.sun.star.ucb.XContentIdentifierFactory;
+
+import com.sun.star.sdbc.XRow;
+
+import com.sun.star.script.framework.browse.ProviderBrowseNode;
+import com.sun.star.script.framework.browse.DialogFactory;
+
+import com.sun.star.deployment.XPackage;
+
+
+import com.sun.star.document.XScriptInvocationContext;
+import com.sun.star.frame.XTransientDocumentsDocumentContentFactory;
+import com.sun.star.uno.TypeClass;
+
+public abstract class ScriptProvider
+ implements XScriptProvider, XBrowseNode, XPropertySet, XInvocation,
+ XInitialization, XTypeProvider, XServiceInfo, XNameContainer
+{
+ private final String[] __serviceNames = {
+ "com.sun.star.script.provider.ScriptProviderFor",
+ "com.sun.star.script.provider.LanguageScriptProvider"
+ };
+
+ public final static String CLASSPATH = "classpath";
+
+ protected String language;
+
+ protected XComponentContext m_xContext;
+ protected XMultiComponentFactory m_xMultiComponentFactory;
+ protected XModel m_xModel;
+ protected XScriptInvocationContext m_xInvocContext;
+ protected ParcelContainer m_container;
+
+ // proxies to helper objects which implement interfaces
+ private XPropertySet m_xPropertySetProxy;
+ private XInvocation m_xInvocationProxy;
+ // TODO should this be implemented in this class
+ private XBrowseNode m_xBrowseNodeProxy;
+ private XScriptContext m_xScriptContext;
+
+ public ScriptProvider( XComponentContext ctx, String language )
+ {
+ this.language = language;
+ __serviceNames[0] += language;
+
+ LogUtils.DEBUG( "ScriptProvider: constructor - start. " + language );
+
+ m_xContext = ctx;
+
+ // Initialize DialogFactory class in case dialogs are required
+ DialogFactory.createDialogFactory(m_xContext);
+
+ try
+ {
+ m_xMultiComponentFactory = m_xContext.getServiceManager();
+
+ if ( m_xMultiComponentFactory == null )
+ {
+ throw new Exception( "Error could not obtain a " +
+ "multicomponent factory - rethrowing Exception." );
+ }
+
+ Object serviceObj = m_xContext.getValueByName(
+ "/singletons/com.sun.star.util.theMacroExpander");
+
+ XMacroExpander me = (XMacroExpander) AnyConverter.toObject(
+ new Type(XMacroExpander.class), serviceObj);
+
+ XMLParserFactory.setOfficeDTDURL(me.expandMacros(
+ "${$BRAND_BASE_DIR/program/bootstraprc::BaseInstallation}/share/dtd/officedocument/1_0/"));
+
+ }
+ catch ( Exception e )
+ {
+ LogUtils.DEBUG( LogUtils.getTrace( e ) );
+ throw new com.sun.star.uno.RuntimeException(
+ "Error constructing ScriptProvider: "
+ + e.getMessage() );
+ }
+
+ LogUtils.DEBUG( "ScriptProvider: constructor - finished." );
+ }
+
+ synchronized public XScriptContext getScriptingContext()
+ {
+ if ( m_xScriptContext == null )
+ {
+ m_xScriptContext = ScriptContext.createContext( m_xModel, m_xInvocContext, m_xContext, m_xMultiComponentFactory );
+ }
+ return m_xScriptContext;
+ }
+ public void initialize( Object[] aArguments )
+ throws com.sun.star.uno.Exception
+ {
+ LogUtils.DEBUG( "entering XInit for language " + language);
+ boolean isPkgProvider = false;
+ if( aArguments.length == 1 )
+ {
+ String contextUrl = null;
+ if ( AnyConverter.getType(aArguments[0]).getTypeClass().equals(TypeClass.INTERFACE) )
+ {
+ // try whether it denotes a XScriptInvocationContext
+ m_xInvocContext = (XScriptInvocationContext)UnoRuntime.queryInterface(
+ XScriptInvocationContext.class, aArguments[0]);
+ if ( m_xInvocContext != null )
+ {
+ // if so, obtain the document - by definition, this must be
+ // the ScriptContainer
+ m_xModel = (XModel)UnoRuntime.queryInterface( XModel.class,
+ m_xInvocContext.getScriptContainer() );
+ }
+ else
+ {
+ // otherwise, check whether it's an XModel
+ m_xModel = (XModel)UnoRuntime.queryInterface( XModel.class,
+ m_xInvocContext.getScriptContainer() );
+ }
+ if ( m_xModel == null )
+ {
+ throw new com.sun.star.uno.Exception(
+ "ScriptProvider argument must be either a string, a valid XScriptInvocationContext, " +
+ "or an XModel", this);
+ }
+
+ contextUrl = getDocUrlFromModel( m_xModel );
+ m_container = new ParcelContainer( m_xContext, contextUrl, language );
+ }
+ else if (AnyConverter.isString(aArguments[0]) == true)
+ {
+ String originalContextURL = AnyConverter.toString(aArguments[0]);
+ LogUtils.DEBUG("creating Application, path: " + originalContextURL );
+ contextUrl = originalContextURL;
+ // TODO no support for packages in documents yet
+ if ( originalContextURL.startsWith( "vnd.sun.star.tdoc" ) )
+ {
+ m_container = new ParcelContainer( m_xContext, contextUrl, language );
+ m_xModel = getModelFromDocUrl( originalContextURL );
+ }
+ else
+ {
+ String extensionDb = null;
+ String extensionRepository = null;
+ if ( originalContextURL.startsWith( "bundled" ) )
+ {
+ contextUrl = "vnd.sun.star.expand:$BUNDLED_EXTENSIONS";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "bundled";
+ }
+
+ if ( originalContextURL.startsWith( "share" ) )
+ {
+ contextUrl = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::BaseInstallation}/share";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "shared";
+ }
+ else if ( originalContextURL.startsWith( "user" ) )
+ {
+ contextUrl = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "user";
+ }
+
+ if ( originalContextURL.endsWith( "uno_packages") )
+ {
+ isPkgProvider = true;
+ }
+ if ( originalContextURL.endsWith( "uno_packages") && !originalContextURL.equals( contextUrl )
+ && !extensionRepository.equals("bundled"))
+ {
+ contextUrl = PathUtils.make_url( contextUrl, "uno_packages" );
+ }
+ if ( isPkgProvider )
+ {
+ m_container = new UnoPkgContainer( m_xContext, contextUrl, extensionDb, extensionRepository, language );
+ }
+ else
+ {
+ m_container = new ParcelContainer( m_xContext, contextUrl, language );
+ }
+ }
+ }
+ else
+ {
+ throw new com.sun.star.uno.RuntimeException(
+ "ScriptProvider created with invalid argument");
+ }
+
+ LogUtils.DEBUG("Modified Application path is: " + contextUrl );
+ LogUtils.DEBUG("isPkgProvider is: " + isPkgProvider );
+
+ // TODO should all be done in this class instead of
+ // deleagation????
+ m_xBrowseNodeProxy = new ProviderBrowseNode( this,
+ m_container, m_xContext );
+
+ m_xInvocationProxy = (XInvocation)UnoRuntime.queryInterface(XInvocation.class, m_xBrowseNodeProxy);
+ m_xPropertySetProxy = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, m_xBrowseNodeProxy);
+ }
+ else
+ {
+ // this is ok, for example when executing a script from the
+ // command line
+ LogUtils.DEBUG( "ScriptProviderFor" + language +
+ " initialized without a context");
+ }
+ LogUtils.DEBUG( "leaving XInit" );
+ }
+
+ /**
+ * Gets the types attribute of the ScriptProvider object
+ *
+ * @return The types value
+ */
+ public com.sun.star.uno.Type[] getTypes()
+ {
+ Type[] retValue = new Type[ 8 ];
+ retValue[ 0 ] = new Type( XScriptProvider.class );
+ retValue[ 1 ] = new Type( XBrowseNode.class );
+ retValue[ 2 ] = new Type( XInitialization.class );
+ retValue[ 3 ] = new Type( XTypeProvider.class );
+ retValue[ 4 ] = new Type( XServiceInfo.class );
+ retValue[ 5 ] = new Type( XPropertySet.class );
+ retValue[ 6 ] = new Type( XInvocation.class );
+ retValue[ 7 ] = new Type( com.sun.star.container.XNameContainer.class );
+ return retValue;
+ }
+
+ /**
+ * Gets the implementationId attribute of the ScriptProvider object
+ *
+ * @return The implementationId value
+ */
+ public byte[] getImplementationId()
+ {
+ return this.getClass().getName().getBytes();
+ }
+
+ /**
+ * Gets the implementationName attribute of the ScriptProvider object
+ *
+ * @return The implementationName value
+ */
+ public String getImplementationName()
+ {
+ return getClass().getName();
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param serviceName Description of the Parameter
+ * @return Description of the Return Value
+ */
+ public boolean supportsService( String serviceName )
+ {
+ for ( int index = __serviceNames.length; index-- > 0; )
+ {
+ if ( serviceName.equals( __serviceNames[ index ] ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Gets the supportedServiceNames attribute of the ScriptProvider object
+ *
+ * @return The supportedServiceNames value
+ */
+ public String[] getSupportedServiceNames()
+ {
+ return __serviceNames;
+ }
+
+
+
+ public abstract XScript getScript( /*IN*/String scriptURI )
+ throws com.sun.star.uno.RuntimeException,
+ ScriptFrameworkErrorException;
+
+ // TODO need to encapsulate this better,
+ // Some factory concept for creating/accessing Editor
+ // How this is passed down or how it is accessable by BrowseNode
+ // implementations needs thinking about
+ // This method is used to determine whether the ScriptProvider
+ // has a ScriptEditor
+ public abstract boolean hasScriptEditor();
+ // TODO see above
+ // This method is used to get the ScriptEditor for this ScriptProvider
+ public abstract ScriptEditor getScriptEditor();
+
+ public ScriptMetaData getScriptData( /*IN*/String scriptURI ) throws ScriptFrameworkErrorException
+
+ {
+ ParsedScriptUri details = null;
+ try
+ {
+ details = m_container.parseScriptUri( scriptURI );
+ ScriptMetaData scriptData = m_container.findScript( details );
+ if ( scriptData == null )
+ {
+ throw new ScriptFrameworkErrorException( details.function + " does not exist",
+ null, details.function, language, ScriptFrameworkErrorType.NO_SUCH_SCRIPT );
+ }
+ return scriptData;
+ }
+ catch ( com.sun.star.lang.IllegalArgumentException ila )
+ {
+ // TODO specify the correct error Type
+ throw new ScriptFrameworkErrorException( ila.getMessage(),
+ null, scriptURI, language, ScriptFrameworkErrorType.UNKNOWN );
+ }
+ catch ( com.sun.star.container.NoSuchElementException nse )
+ {
+ throw new ScriptFrameworkErrorException( nse.getMessage(),
+ null, details.function, language, ScriptFrameworkErrorType.NO_SUCH_SCRIPT );
+ }
+ catch ( com.sun.star.lang.WrappedTargetException wta )
+ {
+ // TODO specify the correct error Type
+ Exception wrapped = (Exception)wta.TargetException;
+ String message = wta.getMessage();
+ if ( wrapped != null )
+ {
+ message = wrapped.getMessage();
+ }
+ throw new ScriptFrameworkErrorException( message,
+ null, details.function, language, ScriptFrameworkErrorType.UNKNOWN );
+ }
+
+ }
+
+
+ // Implementation of XBrowseNode interface
+ public String getName()
+ {
+ return language;
+ }
+
+ public XBrowseNode[] getChildNodes()
+ {
+ if ( m_xBrowseNodeProxy == null )
+ {
+ LogUtils.DEBUG("No Nodes available ");
+ return new XBrowseNode[0];
+ }
+ return m_xBrowseNodeProxy .getChildNodes();
+ }
+
+ public boolean hasChildNodes()
+ {
+ if ( m_xBrowseNodeProxy == null )
+ {
+ LogUtils.DEBUG("No Nodes available ");
+ return false;
+ }
+ return m_xBrowseNodeProxy.hasChildNodes();
+ }
+
+ public short getType()
+ {
+ return BrowseNodeTypes.CONTAINER;
+ }
+
+ public String toString()
+ {
+ return getName();
+ }
+
+ // implementation of XInvocation interface
+ public XIntrospectionAccess getIntrospection() {
+ return m_xInvocationProxy.getIntrospection();
+ }
+
+ public Object invoke(String aFunctionName, Object[] aParams,
+ short[][] aOutParamIndex, Object[][] aOutParam)
+ throws com.sun.star.lang.IllegalArgumentException,
+ com.sun.star.script.CannotConvertException,
+ com.sun.star.reflection.InvocationTargetException
+ {
+ return m_xInvocationProxy.invoke(
+ aFunctionName, aParams, aOutParamIndex, aOutParam);
+ }
+
+ public void setValue(String aPropertyName, Object aValue)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.script.CannotConvertException,
+ com.sun.star.reflection.InvocationTargetException
+ {
+ m_xInvocationProxy.setValue(aPropertyName, aValue);
+ }
+
+ public Object getValue(String aPropertyName)
+ throws com.sun.star.beans.UnknownPropertyException
+ {
+ return m_xInvocationProxy.getValue(aPropertyName);
+ }
+
+ public boolean hasMethod(String aName) {
+ return m_xInvocationProxy.hasMethod(aName);
+ }
+
+ public boolean hasProperty(String aName) {
+ return m_xInvocationProxy.hasProperty(aName);
+ }
+
+ public XPropertySetInfo getPropertySetInfo()
+ {
+ return m_xPropertySetProxy.getPropertySetInfo();
+ }
+
+ public void setPropertyValue(String aPropertyName, Object aValue)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.beans.PropertyVetoException,
+ com.sun.star.lang.IllegalArgumentException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ m_xPropertySetProxy.setPropertyValue(aPropertyName, aValue);
+ }
+
+ public Object getPropertyValue(String PropertyName)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ return m_xPropertySetProxy.getPropertyValue(PropertyName);
+ }
+
+ public void addPropertyChangeListener(
+ String aPropertyName, XPropertyChangeListener xListener)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ m_xPropertySetProxy.addPropertyChangeListener(aPropertyName, xListener);
+ }
+
+ public void removePropertyChangeListener(
+ String aPropertyName, XPropertyChangeListener aListener)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ m_xPropertySetProxy.removePropertyChangeListener(
+ aPropertyName, aListener);
+ }
+
+ public void addVetoableChangeListener(
+ String PropertyName, XVetoableChangeListener aListener)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ m_xPropertySetProxy.addVetoableChangeListener(PropertyName, aListener);
+ }
+
+ public void removeVetoableChangeListener(
+ String PropertyName, XVetoableChangeListener aListener)
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ m_xPropertySetProxy.removeVetoableChangeListener(
+ PropertyName, aListener);
+ }
+ public java.lang.Object getByName( String aName ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ // TODO needs implementing?
+ if ( true )
+ {
+ throw new com.sun.star.uno.RuntimeException(
+ "getByName not implemented" );
+ }
+ return new Object();
+ }
+
+ public String[] getElementNames()
+ {
+ // TODO needs implementing?
+ String[] result = new String[0];
+ if ( true )
+ {
+ throw new com.sun.star.uno.RuntimeException(
+ "getElementNames not implemented" );
+
+ }
+ return result;
+ }
+
+
+ // Performs the getRegStatus functionality for the PkgMgr
+ public boolean hasByName( String aName )
+ {
+ boolean result = false;
+ if ( ((UnoPkgContainer)m_container).hasRegisteredUnoPkgContainer( aName ) )
+ {
+ result = true;
+ }
+ return result;
+ }
+
+ public com.sun.star.uno.Type getElementType()
+ {
+ // TODO at the moment this returns void indicating
+ // type is unknown should indicate XPackage ? do we implement XPackage
+ return new Type();
+ }
+
+ public boolean hasElements()
+ {
+ // TODO needs implementing?
+ boolean result = false;
+ if ( true )
+ {
+ throw new com.sun.star.uno.RuntimeException(
+ "hasElements not implemented" );
+
+ }
+ return result;
+ }
+ public void replaceByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ // TODO needs implementing
+ if ( true )
+ {
+ throw new com.sun.star.uno.RuntimeException(
+ "replaceByName not implemented" );
+
+ }
+ }
+
+ public void insertByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.ElementExistException, com.sun.star.lang.WrappedTargetException
+ {
+ LogUtils.DEBUG("Provider for " + language + " received register for package " + aName );
+ XPackage newPackage = ( XPackage ) UnoRuntime.queryInterface( XPackage.class, aElement );
+ if ( aName.length() == 0 )
+ {
+ throw new com.sun.star.lang.IllegalArgumentException( "Empty name" );
+ }
+ if ( newPackage == null )
+ {
+ throw new com.sun.star.lang.IllegalArgumentException( "No package supplied" );
+ }
+
+ ((UnoPkgContainer)m_container).processUnoPackage( newPackage, language );
+ }
+
+ // de-register for library only !!
+ public void removeByName( String Name ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ LogUtils.DEBUG("In ScriptProvider.removeByName() for " + Name + " this provider = " + language );
+ ParcelContainer c = ((UnoPkgContainer)m_container).getRegisteredUnoPkgContainer( Name );
+ if ( c != null )
+ {
+ String libName;
+ if (Name.endsWith("/"))
+ {
+ String tmp = Name.substring( 0, Name.lastIndexOf( "/" ) );
+ libName = tmp.substring( tmp.lastIndexOf( "/" ) + 1 );
+ }
+ else
+ {
+ libName = Name.substring( Name.lastIndexOf( "/" ) + 1 );
+ }
+ LogUtils.DEBUG("Deregistering library " + libName );
+ if ( c.removeParcel( libName ) )
+ {
+ ((UnoPkgContainer)m_container).deRegisterPackageContainer( Name );
+ }
+ else
+ {
+ throw new com.sun.star.container.NoSuchElementException( libName + " cannot be removed from container." );
+ }
+ }
+ else
+ {
+ throw new com.sun.star.container.NoSuchElementException( Name + " doesn't exist for " + language );
+ }
+ // TODO see if we want to remove the ParcelContainer is no Parcels/Libraries left
+ }
+
+ private String getDocUrlFromModel( XModel document )
+ {
+ XTransientDocumentsDocumentContentFactory factory = null;
+ try
+ {
+ factory = (XTransientDocumentsDocumentContentFactory)UnoRuntime.queryInterface(
+ XTransientDocumentsDocumentContentFactory.class,
+ m_xMultiComponentFactory.createInstanceWithContext(
+ "com.sun.star.frame.TransientDocumentsDocumentContentFactory",
+ m_xContext
+ )
+ );
+ }
+ catch (Exception ex)
+ {
+ }
+
+ if ( factory == null )
+ throw new com.sun.star.uno.RuntimeException( "ScriptProvider: unable to create a TDOC context factory.", this );
+
+ try
+ {
+ XContent content = factory.createDocumentContent( document );
+ return content.getIdentifier().getContentIdentifier();
+ }
+ catch( Exception ex )
+ {
+ }
+
+ LogUtils.DEBUG("unable to determine the model's TDOC URL");
+ return "";
+ }
+
+ private XModel getModelFromDocUrl( String docUrl )
+ {
+ LogUtils.DEBUG("getModelFromDocUrl - searching for match for ->" + docUrl + "<-" );
+ XModel xModel = null;
+ try
+ {
+ Object[] args = new String[] {"Local", "Office" };
+
+ Object ucb = m_xMultiComponentFactory.createInstanceWithArgumentsAndContext( "com.sun.star.ucb.UniversalContentBroker", args, m_xContext );
+
+
+ XContentIdentifierFactory xFac = ( XContentIdentifierFactory )
+ UnoRuntime.queryInterface( XContentIdentifierFactory.class,
+ ucb );
+
+
+ XContentIdentifier xCntId = xFac.createContentIdentifier( docUrl );
+
+
+ XContentProvider xCntAccess = ( XContentProvider )
+ UnoRuntime.queryInterface( XContentProvider.class,
+ ucb );
+
+
+ XContent xCnt = xCntAccess.queryContent( xCntId );
+
+
+ XCommandProcessor xCmd = ( XCommandProcessor )
+ UnoRuntime.queryInterface( XCommandProcessor.class, xCnt );
+
+
+ Property[] pArgs = new Property[ ] { new Property() };
+ pArgs[ 0 ].Name = "DocumentModel";
+ pArgs[ 0 ].Handle = -1;
+
+ Command command = new Command();
+
+ command.Handle = -1;
+ command.Name = "getPropertyValues";
+ command.Argument = pArgs;
+
+ com.sun.star.ucb.XCommandEnvironment env = null ;
+ Object result = xCmd.execute( command, 0, env ) ;
+
+ XRow values = ( XRow ) UnoRuntime.queryInterface( XRow.class,
+ result );
+
+ xModel = ( XModel ) UnoRuntime.queryInterface( XModel.class,
+ values.getObject( 1, null ) );
+ }
+ catch ( Exception ignore )
+ {
+ LogUtils.DEBUG("Failed to get model exception " + ignore );
+
+ }
+ return xModel;
+ }
+
+
+}