Hello, IMO (for now until there is no convenient way), you can also go the way that I have proposed here
http://api.openoffice.org/servlets/ReadMsg?listName=dev&msgNo=14040 Assuring a unique jar resource is IMO as hard as assuring a unique configuration key... HTH, -Daniel Jürgen Schmidt wrote: > Hi Manuel, > > first of all, we have already detected this as a missing functionality > and we will provide a simple API for detecting the package root in the > future. But i can't say when it will be available ... > > See my comments inline ... > > Manuel Odesser wrote: >> Hello, >> >> I am building an extension to OOo, using OOBasic and Java. I actually >> have two problems. >> >> 1) How to open in Java a file bundled in the UNO package ? I followed >> instruction from >> http://codesnippets.services.openoffice.org/Office/Office.ArbitraryDeploy.snip >> >> (and others). I cannot retrieve a path from a .xcu file for opening. I >> have the following code : >> >> private init() throws IOException,Exception { >> XComponentContext xContext; >> XMultiComponentFactory xServiceManager; >> XMultiServiceFactory xProvider; >> try { >> xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); >> } catch (BootstrapException e1) { >> e1.printStackTrace(); >> return false; >> } >> xServiceManager = xContext.getServiceManager(); >> Object mxConfigurationProvider = >> xServiceManager.createInstanceWithContext( >> "com.sun.star.configuration.ConfigurationProvider", >> xContext); >> try { >> xProvider = (XMultiServiceFactory) >> >> UnoRuntime.queryInterface(XMultiServiceFactory.class,mxConfigurationProvider); >> >> >> PropertyValue properties[] = new PropertyValue[1]; >> PropertyValue property = new PropertyValue(); >> property.Name = "nodepath"; >> property.Value = "my.package"; >> properties[0] = property; >> >> // create the view >> Object xViewRoot = >> xProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess",properties); >> >> > you have to query the new created object to the interface you want to > use, somehting like > > XNameAccess xNA = > (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, xViewRoot ); > >> dataPath = (String)xViewRoot.getByName("myvar"); >> } catch (Exception e) { >> e.printStackTrace(); >> return false; >> } >> >> // get data file >> // cut the "vnd.sun.star.expand:" protocol from the macrofied Url >> retrieved from the registry >> dataPath = dataPath.replace("vnd.sun.star.expand:",""); >> Object theExpander; >> theExpander = >> xContext.getValueByName("/singletons/com.sun.star.util.theMacroExpander"); >> XMacroExpander oMacroExpander = (XMacroExpander)theExpander; > you can't simply cast this object. "getValueByName" returns an "Any" > which of course is mapped in Java to Object. You have either to use the > "AnyConverter" or if you need a specific interface use again > 2queryInterface" which allows "Any" object directly. > >> dataPath = oMacroExpander.expandMacros(dataPath); >> BufferedReader buffer = new BufferedReader(new >> FileReader(dataPath)); >> .... >> } >> >> * problem 1 : xViewRoot is viewed as an Object, and therefore has no >> getByName() method. And I can't cast to >> com.sun.star.configuration.ConfigurationAccess because Eclipse couldn't >> locate the appropriate file. >> * problem 2 : An exception is throw at runtime during the cast of >> variable theExpander. >> * problem 3 : what is the typical .xcu file that could contain >> "%origin%/mypath/myfile.dat ? > > Currently you have to define your own package specific configuration > schema and you have to provide an appropriate xcu file depending on this > schema together with all other files in your package. In a second step > you can use the configuration API to work with your own configuration > and the MacroExpander to get a valid Url. > > Sorry that it is so complicate but we are working on improvements. > > Juergen > >> 2) I have a addons.xcu that begins with : >> >> <oor:component-data >> xmlns:oor="http://solstage2.sfo.collab.net/2001/registry" >> xmlns:xs="http://www.w3.org/2001/XMLSchema" >> oor:name="Addons" >> oor:package="org.openoffice.Office"> >> <node oor:name="AddonUI"> >> <node oor:name="AddonMenu"> >> <node >> oor:name="mypackage.myaddon" >> oor:op="replace"> >> >> >> Is "mypackage.myaddon" a suitable/valid name ? Should it begin with >> "org.openoffice...." or something else ? >> >> >> Sorry for this long email, and thank very much in advance for your >> answers ! >> >> -- >> Manuel >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]