All-

First off, Special thanks to Peter Reilly for his last post. Im still
relatively new to Jython (and Ant dev for that matter!) so his last code
snippet got me thinking in the right direction about the extreme reflection in
Jython!

Allright. So I took Peter's code and tried to mimic the Ant Main() as much as
possible. This consisted of creating and configuring a project and logging.
Additionally, I changed the the reflection to use the Ant introspector to
create and configure the tasks. This means that instead of having a line like
this (Notice the destFile is case sensitive and the actual java.io.File object
being instantiated)

ant.jar(destFile=File("D:\\java\\jython_ant\\temp\\test.jar"),
basedir=File("D:\\java\\jython_ant\\src\\"))

you can write this (notice that destfile is NOT case sensitive due to the use
of the introspector. Also, notice that you can pass in a simple string instead
of a java.io.File instance)

ant.jar(destfile="D:\\java\\jython_ant\\temp\\test.jar",
BASEDIR="D:\\java\\jython_ant\\src\\")

So here is the Jython code (all of it) to get this all working: 

----------------------------------------------------------------------------

from java.io import File
from org.apache.tools.ant import *
from org.apache.tools.ant.util import *
from java.lang import *
from java.util import Locale
from org.apache.tools.ant.types import *

class _Method:
  def __init__(self, name, project):
    self.name = name
    self.project = project
  def __call__(self, **args):
    target = self.project.createTask(self.name)
    ih = IntrospectionHelper.getHelper(target.class)
    ph = ProjectHelper()
    for a in args.keys():
        value = ph.replaceProperties(self.project,
                        args[a],
                        self.project.properties)
        ih.setAttribute(self.project,
                        target,
                        a.lower(),
                        value)
    target.execute()

class Ant:
  myProject = Project()
  myProject.init()
  myProject.setUserProperty("ant.version", Main.getAntVersion());
  logger = DefaultLogger()
  logger.outputPrintStream = System.out
  logger.errorPrintStream = System.out
  logger.messageOutputLevel = 3
  myProject.addBuildListener(logger)
  def __getattr__(self, name):
    return _Method(name, self.myProject)
  def setLogLevel(logLevel):
    self.logger.messageOutputLevel = logLevel

---------------------------------------------------------------------------

Here are the outstading issues that I would like some feedback on. 

1) Sub-elements. I know that we need them. Just not sure how to do it. I am
having more trouble figuring out the introspector works with the subelements
than with the attributes ;-( If the introspectionworks, then you can just pass
a fileset instance in along with the otehr attributes. 

2) Properties. Properties are still good to have in XML. I want to take a look
at the best way to be able to reference XML property file from the Jython
scripts. 

So there you go. Any suggestions or comments? Give a shout!

Thanks.
-jonathan

  









=====
Jonathan Simon
Home - 732.777.0377  <----------- New!!!
Work - 646.674.2060
Cell - 732.718.8844
Music - www.mp3.com/jonathan_simon

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to