OO-Snippets: Use the OOo package manager to add a package (the ooRexx scripting language ) globally to OpenOffice.

Commons

KeywordsPackage Manager, ooRexx, Scripting Engine, Add Package
LanguageooRexx
ApplicationOffice
AuthorsRony G. Flatscher (initial)
Supported Versions2.0.x  
Supported OSAll  
QuestionHow can I add a (global) package programmatically?

For automatic installation of (global) packages one needs a

means to install packages.

Answer

Use the built-in package manager singleton and related classes.

Code-Snippet-Listing (snippet-source)

  /* initialize connection to server, get XContext */
xContext    = UNO.connect()  -- connect to server and retrieve the XContext object
XMcf        = xContext~getServiceManager   -- retrieve XMultiComponentFactory

packageName = "ScriptProviderForooRexx.jar"
mediaType   = "application/vnd.sun.star.uno-component;type=Java"

tmpName     = stream(packageName, 'C', "QUERY EXISTS")   -- get fully qualified filename
if tmpName  = "" then
do
  .error~say("Cannot find" pp(packageName)", aborting...")
  exit -1
end
urlName     = ConvertToUrl(tmpName) -- turn into ucp compliant URL

  -- get the pre-registered package manager factory singleton object
pmName="/singletons/com.sun.star.deployment.thePackageManagerFactory"
xpmf=xContext~getValueByName(pmName)~XPackageManagerFactory

  -- make sure package is removed from "user" context
call removePackage xpmf~getPackageManager("user"), packageName

  -- work on "shared" (global) package context
xpmShared=xpmf~getPackageManager("shared")   -- get "shared" package manager
call removePackage xpmShared, packageName             -- remove old package
xpmShared~addPackage(urlName, mediaType, .nil, .nil)  -- add package

dp=getDeployedPackage(xpmShared, packageName)         -- query package
if .nil<>dp then  -- package object available?
  say "Is ["packageName"] registered?" "["dp~isRegistered(.nil,.nil)~value~value"]"
else
  say "["packageName"] could not be added!"



::requires UNO.CLS    -- get UNO support for ooRexx

::routine removePackage       -- remove a given package
 use arg xpmf, packageName

 signal on any      -- activate execption handling
 xpmf~removePackage(packageName, .nil, .nil)

 any: return        -- just return

::routine getDeployedPackage  -- get and return the deployed package object
 use arg xpm, packageName

 signal on any      -- activate exception handling
 return xpm~getDeployedPackage(packageName, .nil)

 any: return .nil   -- exception occurred return .nil 

Changelog

DateUserModification
2006-07-04RGFInitial version
2006-07-08RGFVersion with embedded link to IDL docu.

and