Hi all,
I'd like to thank everyone I had answer from ! A problem remains : I
cannot find a practical sample to create a simple .xsd and its .xcu
counterpart. Here are my guess, could someone tell me if I cannot access
my values because of the xml or the java code ?
myaddon.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-schema
oor:name="Settings"
oor:package="org.mycomp.mypackage"
xsi:schemaLocation="http://openoffice.org/2001/registry
component-schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xml:lang='en-US'>
<import oor:component="org.openoffice.Office.Common"/>
<templates>
<group oor:name="URLs">
<prop oor:name="dataPath" oor:type="xs:string"/>
</group>
</templates>
<oor:component>
<group oor:name="URLs">
<prop oor:name="dataPath" oor:type="oor:string">
<value>%config%/data/terminologie_fr_FR.dat</value>
</prop>
</group>
</oor:component>
</oor:component-schema>
myaddon.xcu :
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
oor:name="Settings"
oor:package="org.mycomp.mypackage">
<node oor:name="URLs">
<prop oor:name="dataPath" oor:type="xs:string">
<value>%config%/data/terminologie_fr_FR.dat</value>
</prop>
</node>
</oor:component-data>
the code :
PropertyValue properties[] = new PropertyValue[1];
PropertyValue property = new PropertyValue();
property.Name = "nodepath";
property.Value = "/org.mycomp.mypackage/Settings";
properties[0] = property;
XInterface xViewRoot =
(XInterface)xConfigProvider.createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
properties);
XPropertySet xPropertySet =
(XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, xViewRoot );
dataPath = (String)xPropertySet.getPropertyValue("dataPath");
Thank you again,
--
Manuel Odesser
Jürgen Schmidt a écrit :
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]