#100075# using macro expander singleton handling macrofied urls
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: JavaLoader.java,v $
|
||||
*
|
||||
* $Revision: 1.3 $
|
||||
* $Revision: 1.4 $
|
||||
*
|
||||
* last change: $Author: kr $ $Date: 2001-02-19 10:01:01 $
|
||||
* last change: $Author: dbo $ $Date: 2002-06-14 13:09:52 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -67,6 +67,8 @@ import java.lang.reflect.Field;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import java.net.URLDecoder;
|
||||
|
||||
import com.sun.star.loader.CannotActivateFactoryException;
|
||||
import com.sun.star.loader.XImplementationLoader;
|
||||
|
||||
@@ -85,9 +87,16 @@ import com.sun.star.lang.ServiceNotRegisteredException;
|
||||
import com.sun.star.lang.WrappedTargetException;
|
||||
import com.sun.star.lang.XInitialization;
|
||||
|
||||
import com.sun.star.uno.XComponentContext;
|
||||
import com.sun.star.beans.XPropertySet;
|
||||
import com.sun.star.util.XMacroExpander;
|
||||
|
||||
import com.sun.star.uno.XInterface;
|
||||
import com.sun.star.uno.Type;
|
||||
import com.sun.star.uno.UnoRuntime;
|
||||
|
||||
import com.sun.star.uno.AnyConverter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
@@ -96,7 +105,7 @@ import java.net.MalformedURLException;
|
||||
* service. Therefor the <code>JavaLoader</code> activates external UNO components which are implemented in Java.
|
||||
* The loader is used by the <code>ServiceManger</code>.
|
||||
* <p>
|
||||
* @version $Revision: 1.3 $ $ $Date: 2001-02-19 10:01:01 $
|
||||
* @version $Revision: 1.4 $ $ $Date: 2002-06-14 13:09:52 $
|
||||
* @author Markus Herzog
|
||||
* @see com.sun.star.loader.XImplementationLoader
|
||||
* @see com.sun.star.loader.Java
|
||||
@@ -108,7 +117,7 @@ public class JavaLoader implements XImplementationLoader,
|
||||
XServiceInfo,
|
||||
XInitialization
|
||||
{
|
||||
private static final boolean DEBUG = false;
|
||||
private static final boolean DEBUG = true;
|
||||
|
||||
private static final void DEBUG(String dbg) {
|
||||
if (DEBUG) System.err.println( dbg );
|
||||
@@ -120,6 +129,53 @@ public class JavaLoader implements XImplementationLoader,
|
||||
|
||||
protected XMultiServiceFactory multiServiceFactory = null;
|
||||
|
||||
private XMacroExpander m_xMacroExpander = null;
|
||||
private static final String EXPAND_PROTOCOL_PREFIX = "vnd.sun.star.expand:";
|
||||
|
||||
/** Expands macrofied url using the macro expander singleton.
|
||||
*/
|
||||
private String expand_url( String url ) throws RuntimeException
|
||||
{
|
||||
if (url != null && url.startsWith( EXPAND_PROTOCOL_PREFIX ))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (m_xMacroExpander == null)
|
||||
{
|
||||
XPropertySet xProps = (XPropertySet)UnoRuntime.queryInterface(
|
||||
XPropertySet.class, multiServiceFactory );
|
||||
if (xProps == null)
|
||||
{
|
||||
throw new com.sun.star.uno.RuntimeException(
|
||||
"service manager does not support XPropertySet!", this );
|
||||
}
|
||||
XComponentContext xContext = (XComponentContext)AnyConverter.toObject(
|
||||
new Type( XComponentContext.class ),
|
||||
xProps.getPropertyValue( "DefaultContext" ) );
|
||||
m_xMacroExpander = (XMacroExpander)AnyConverter.toObject(
|
||||
new Type( XMacroExpander.class ),
|
||||
xContext.getValueByName( "/singletons/com.sun.star.util.theMacroExpander" ) );
|
||||
// decode uric class chars
|
||||
String macro = URLDecoder.decode(
|
||||
url.substring( EXPAND_PROTOCOL_PREFIX.length() ) /* cut protocol */ );
|
||||
// expand macro string
|
||||
String ret = m_xMacroExpander.expandMacros( macro );
|
||||
if (DEBUG)
|
||||
{
|
||||
System.err.println(
|
||||
"JavaLoader.expand_url(): " + url + " => " + macro + " => " + ret );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
catch (com.sun.star.uno.Exception exc)
|
||||
{
|
||||
throw new com.sun.star.uno.RuntimeException( exc.getMessage(), this );
|
||||
}
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
/** default constructor
|
||||
*/
|
||||
|
||||
@@ -234,6 +290,8 @@ public class JavaLoader implements XImplementationLoader,
|
||||
throws CannotActivateFactoryException,
|
||||
com.sun.star.uno.RuntimeException
|
||||
{
|
||||
locationUrl = expand_url( locationUrl );
|
||||
|
||||
boolean needFactoryWrapper = false;
|
||||
Object returnObject = null;
|
||||
Class clazz = null;
|
||||
@@ -349,6 +407,8 @@ public class JavaLoader implements XImplementationLoader,
|
||||
throws CannotRegisterImplementationException,
|
||||
com.sun.star.uno.RuntimeException
|
||||
{
|
||||
locationUrl = expand_url( locationUrl );
|
||||
|
||||
boolean success = false;
|
||||
|
||||
try {
|
||||
@@ -425,7 +485,7 @@ public class JavaLoader implements XImplementationLoader,
|
||||
* the registration at a registry in a default manner. The class is used by the <code>JavaLoader</code> if the
|
||||
* a component does not comes with its own methods for creating a factory or for the registration.
|
||||
* <p>
|
||||
* @version $Revision: 1.3 $ $ $Date: 2001-02-19 10:01:01 $
|
||||
* @version $Revision: 1.4 $ $ $Date: 2002-06-14 13:09:52 $
|
||||
* @author Markus Herzog
|
||||
* @since UDK1.0
|
||||
*/
|
||||
|
Reference in New Issue
Block a user