diff options
Diffstat (limited to 'scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java')
-rw-r--r-- | scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java b/scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java index 1cf99d78292e..178f4806f344 100644 --- a/scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java +++ b/scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java @@ -50,7 +50,14 @@ import com.sun.star.script.framework.io.UCBStreamHandler; import com.sun.star.ucb.XSimpleFileAccess2; +import com.sun.star.uno.AnyConverter; import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +import com.sun.star.uri.UriReferenceFactory; +import com.sun.star.uri.XVndSunStarExpandUrl; + +import com.sun.star.util.XMacroExpander; public class ScriptMetaData extends ScriptEntry implements Cloneable { private boolean hasSource = false; @@ -246,7 +253,8 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { return "\nParcelLocation = " + getParcelLocation() + "\nLocationPlaceHolder = " + locationPlaceHolder + super.toString(); } - public URL[] getClassPath() throws java.net.MalformedURLException + public URL[] getClassPath(XComponentContext context) + throws java.net.MalformedURLException { try { @@ -274,7 +282,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { { String relativeClasspath = (String)stk.nextElement(); String pathToProcess = PathUtils.make_url( parcelPath, relativeClasspath); - URL url = createURL( pathToProcess ); + URL url = expandURL( context, pathToProcess ); if ( url != null ) { classPathVec.add ( url ); @@ -283,7 +291,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { } if ( classPathVec.size() == 0) { - URL url = createURL( parcelPath ); + URL url = expandURL( context, parcelPath ); if ( url != null ) { classPathVec.add(url); @@ -300,6 +308,38 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { } } + + private URL expandURL(XComponentContext context, String url) + throws java.net.MalformedURLException + { + XVndSunStarExpandUrl exp = UnoRuntime.queryInterface( + XVndSunStarExpandUrl.class, + UriReferenceFactory.create(context).parse(url)); + String expurl; + if (exp == null) { + expurl = url; + } else { + XMacroExpander expander; + try { + expander = (XMacroExpander) AnyConverter.toObject( + XMacroExpander.class, + context.getValueByName( + "/singletons/com.sun.star.util.theMacroExpander")); + } catch (com.sun.star.lang.IllegalArgumentException e) { + throw new RuntimeException(e); + } + try { + expurl = exp.expand(expander); + } catch (com.sun.star.lang.IllegalArgumentException e) { + java.net.MalformedURLException e2 = + new java.net.MalformedURLException(e.toString()); + e2.initCause(e); + throw e2; + } + } + return new URL(expurl); + } + private URL createURL( String path ) throws java.net.MalformedURLException { URL url = null; |