You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bsf-dev@jakarta.apache.org by "Rony G. Flatscher" <Ro...@wu-wien.ac.at> on 2005/06/07 23:09:38 UTC
ooRexx, BSF4Rexx ...
Hi there,
for people who know Rexx (http://www.RexxLA.org) or the free opensource
ooRexx ("Open Object Rexx", http://www.ooRexx.org) an updated version of
BSF4Rexx has been made available at (see "readmeBSF4Rexx.txt" and
"changesBSF4Rexx.txt"):
http://wi.wu-wien.ac.at/rgf/rexx/bsf4rexx/
http://wi.wu-wien.ac.at/rgf/rexx/bsf4rexx/dist.20050607/
"dist.20050607" also contains a zip-archive to support OpenOffice.org in
an even simpler manner than was shown on the symposium. (It may serve as
a model for other BSF languages on how to automate OpenOffice.org 1.1,
even if the OOo developers don't know it or realize what BSF could do
for them.)
Enclosed you'll find a little ooRexx program using BSF4Rexx to checkout
a directory from a Subversion repository! Should be a little "teaser" as
that script should be executable on any platform with ooRexx and
BSF4Rexx on it. (The ooRexx message operator is the tilde '~', left of
it is the receiving object, right of it the message name.) Please note,
that no type information is necessary, if using ooRexx.
Regards,
---rony
P.S.: The source code of "ooRexx" was made available by IBM (from its
commercial product Object REXX) to the non-profit organisation "Rexx
Language Association" (a.k.a. RexxLA) at the end of 2004, which has made
it available in opensource (IBM's CPL 1.0 license) at
"http://www.ooRexx.org" in the spring of 2005.
ooRexx is available already for various Linuxes, Solaris and Windows
(including a full implementation of MS ActiveX scripting interfaces,
making it a full-blown WSH engine; so you can use it in place of
VBScript or JScript). Work has begun on further portings and enhancing
the language itself. Just follow the link to SourceForge from the ooRexx
homepage.
P.P.S.: A "teaser" ooRexx program that uses Java classes as if they were
ooRexx classes, sending ooRexx messages that yield the invocation of the
respective Java methods. (Please note: no type information necessary
thanks to BSF.) One can refer to ooRexx classes by prepending the class
name with a dot (.):
------------------------------------------------------------------------
/* ---rgf, 2005-06-07, needs BSF4Rexx as of 2005-06-07 or higher */
/* Java-svn classes from <http://tmate.org/svn/> (as of 2005-06-06)
CLASSPATH needs to have path to 'javasvn.jar' and 'jsch.jar'
*/
reposURL="http://72.9.228.230:8080/svn/jsvn/" -- home of the Java classes needed for this program
reposURL="http://72.9.228.230:8080/svn/jsvn/trunk" -- use only trunk, ~10 MB
-- check out only one particular, small directoy (~15 KB)
reposURL="http://72.9.228.230:8080/svn/jsvn/trunk/javasvn-test\svn-config"
targetDir=directory()"\jsvn" -- check out into current directory
-- create a blank delimited string of Java class names we wish to import into ooRexx
s = "org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory" -
"org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl" -
"org.tmatesoft.svn.core.internal.ws.fs.FSEntryFactory" -
"org.tmatesoft.svn.core.io.SVNRepositoryLocation" -
"org.tmatesoft.svn.core.ISVNWorkspace" -
"org.tmatesoft.svn.core.SVNWorkspaceManager" -
"java.io.File"
do i=1 to words(s) -- loop over words in string "s" (blank delimited)
w=word(s, i) -- extract the i'th word (delimited by blanks)
cn=substr(w, lastpos('.', w)+1) -- get unqualified class name (to use as ooRexx class name)
.bsf~bsf.import(w, cn) -- create an ooRexx proxy class to represent the Java class
end
say checkout(targetDir, reposURL) -- invoke the routine that does the checkout
::requires BSF.CLS -- load the camouflaging support
::routine checkout public -- check out the given directory to the given location
use arg path, url
path=adjust(path) -- make sure only forward slashes
url =adjust(url) -- make sure only forward slashes
.DAVRepositoryFactory~setup
.FSEntryFactory~setup
directory=adjust(.File~new(path)~getAbsolutePath())
workspace=.SVNWorkspaceManager~createWorkspace("file", directory)
location=.SVNRepositoryLocation~parseURL(url)
-- get a constant value
head=.bsf~bsf.getStaticValue("org.tmatesoft.svn.core.ISVNWorkspace", "HEAD")
say "checking out" pp(location~toString) "to" pp(directory) "..."
-- use invokeStrict, allowing us to define the signature (hence no guessing necessary on the Java side)
-- revision=workspace~bsf.invokeStrict("checkout", "obj", location, "long", head, "bo", .false)
-- since a bug-fix in {com.ibm|org.apache}.bsf.util.EngineUtils.java on 2005-06-07 possible:
revision=workspace~bsf.invoke("checkout", location, head, .false)
return "Checked out revision:" pp(revision)".";
::routine adjust public -- make sure only forward slashes used
return changestr("\", arg(1), "/")
::routine pp public -- enclose argument in square brackets
parse arg val
return "["val"]"