Package Manager ooRexx Scripting Engine Add Package Rony G. Flatscher How can I add a (global) package programmatically?

For automatic installation of (global) packages one needs a

means to install packages.

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

/* 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)~{%see com.sun.star.deployment.XPackageManagerFactory%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
Initial version Version with embedded link to IDL docu.