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

Reply via email to