On 07.06.2012 18:02, Oliver Brinzing wrote:
> Hi,
>
>> I write a extention.
>> In my extention how can I get openoffice program path.
> Sub Test
> Dim oService as Object
> oService = CreateUnoService("com.sun.star.util.PathSubstitution")
> ' see
> http://www.openoffice.org/api/docs/common/ref/com/sun/star/util/PathSubstitution.html
> for details
> MsgBox oService.getSubstituteVariableValue("inst")
>
> ' get your Extension Path
> '
> http://www.openoffice.org/api/docs/common/ref/com/sun/star/deployment/PackageInformationProvider.html
> oService =
> getDefaultContext().getByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
> MsgBox oService. getPackageLocation("my.extension.identifier")
> End Sub
>
>
> Regards
>
> Oliver
>
Here is an example (ooRexx, "listPathSettings.rxo") which lists all path
settings available in AOO
to .stdout:
xContext = UNO.connect() -- connect to server and retrieve the
XContext object
XMcf = xContext~getServiceManager -- retrieve XMultiComponentFactory
oPathSettings=XMcf~createInstanceWithContext("com.sun.star.util.PathSettings",
xContext)
xpaths=oPathSettings~XPropertySet -- get XPropertySet interface
paths=xpaths~getPropertySetInfo~getProperties -- get the sequence of
properties
do i=1 to paths~items -- iterate over all properties (all
path names)
name=paths[i]~name -- get the Property's name
call printPathSetting i, name, xpaths~getPropertyValue(name) -- display
on .stdout
end
-- end of program, start of directives (each led in by two colons '::')
::requires UNO.CLS -- get the UNO/OOo support, which itself gets the Java
support
::routine printPathSetting /* print the PathSetting name with its
value(s) */
use arg i, name, propValue
tmpStr=i~right(3)":" pp(name)
resArr=processPathUrls(propValue) -- returns array
say tmpStr || detTabs(tmpStr) pp(resArr[1])
do k=2 to resArr~items
say "090909"x pp(resArr[k])
end
return
detTabs: procedure /* determine indentation, depends on length of path name
*/
parse arg string
len=length(string)
if len<8 then return "090909"x -- three tabs
else if len<16 then return "0909"x -- two tabs
else if len<24 then return "09"x -- one tab
else return "" -- no tab (empty string)
/* take care of special case that multiple paths are encoded in a single
value (instead of defining them as an array of java.lang.String;
the URL-style will delimit different paths with the semi-colon char
(;)
on all platforms; will return a Rexx array of strings representing the
defined URLs rendered to the operating system's file system
representation. */
processPathUrls: procedure
use arg propValue
resArr=.array~new
if propValue~string~left(18)=="[Ljava.lang.String" then -- a String
array in hand
do
if propValue~items=0 then -- empty array
resArr~append("")
else
do k=1 to propValue~items
resArr~appendAll(convertPathUrl(propValue[k]))
end
end
else -- value is a string already
(representing single path)
do
resArr~appendAll(convertPathUrl(propValue))
end
return resArr
/* parse string, could be that more than one path is encoded and
delimited by semi-colon,
return an array of converted strings */
convertPathUrl: procedure
parse arg str
arr=.array~new
if str="" then -- path is explicitly an empty string
arr~append(str)
else
do while str<>""
parse var str before ";" str -- parse using ";" as delimiter
arr~append(uno.convertFromUrl(before)) -- turn URL into opsys' path
notation
end
return arr
You'll get the idea looking at the code, such that you can map it to your
preferred programming
language.
---rony