XUL Titan Interview With R.J. Keller (of MozCreater XUL Parser fame)
Gerald Bauer <[email protected]> Mon, 2 May 2005 16:42:51 -0700
| Newsgroups | gmane.comp.lang.xul.announce |
|---|---|
| Message-ID | <[email protected]> |
Hello,
Welcome back to the XUL Titan Interview series. Today let's
welcome MozCreater XUL Parser project lead R.J. Keller.
Q: Can you tell us a little bit about yourself?
R.J. Keller: My name is R.J. Keller and I work as web coordinator of
TRF Environmental Inc. My primary expertise is in HTML, CSS, PHP, ASP,
MySQL and Java programming (although I tend to do some C# and Visual
Basic programming from time to time).
My main work on Mozilla includes being former module owner of the
Help Systems module, the creation of the Firefox Help Viewer API, and
coordinating development around it. After my resignation as module
owner, I now do general patch work on Firefox and Mozilla Suite when I
have time.
Q: How did you get started on the MozCreator XulParser? Did you look
into any existing open source XUL parsers in Java before starting
work on the MozCreator XulParser? Can you tell us a little bit about
the MozCreator XulParser's history?
R.J. Keller: The MozCreator XUL Parser came about when we wanted the
entire GUI to
be written in XUL but with the back-end code written in Java. We
looked at several ways to possibly create a bridge between Mozilla and
Java but few of them worked or were stable enough for our needs.
After that, we decided to look at XUL parsers written in Java. The
issue with those was that they were difficult to use and didn't really
suit the Java programmer well. We needed a compact and easy-to-use
solution. Swing turned out to be a nice GUI platform to build a XUL
parser on top of. We did run into some issues where some core Java
GUI features weren't available, so we created a XUL add-on called
JXUL to
get some of those features available through out XUL interface. The
language ended up being very nice to work with considering we had all
of the Java language features in an easy-to-use XML format with
little performance hit. It's also very easy to make a GUI class use
XUL, by
simply running the code "new XulFrame("C:\myFile.xul")", you have a
JFrame object containing all of the GUI elements parsed by the XUL
parser. Or if someone doesn't feel like moving all of their GUI code
to XUL but just some of it (for example, just the menubar or toolbar),
then you could use the main parser interface to parse only those
elements.
Q: Can you briefly sketch out XulParser's architecture and its
building blocks?
R.J. Keller: For usage, you don't need to know much. Basically
XulFrame takes in a file name through the constructor plus an array
of Event objects, which basically associates a string with an
ActionListener so you can set "onclick" fields in your XUL file. The
only other class you might
need to use is XulParser, which contains functions for getting a JAXP
XML Document object and using that to parse only certain tags of your
document individually. This is useful if someone wants only the
<menubar> tag. Usually it's a bit tough to use so using XulFrame will
make your life easier.
Going a bit more deep down inside the parser, we contain abstract
class GuiParser that can be used to implement any XML-based GUI
language. XulParser is an implementation of this class. GuiParser
parses tags based on objects of the ITag interface. ITag interface
defines functions that, if you implement yourself, can return a
component that implements JComponent to use in the parser plus make it
easier for attribute and child tag parsing. Generally to add your own
tag, it takes very little effort. Basically uniting this interface
anyone could create their own XUL-based language with relatively
little effort.
Q: Can you tell us how you handle the mapping from XML tags/
attributes to Swing classes/properties?
Do you use reflection? Do you use hand-coded glue code?
R.J. Keller: Yes, we do use reflection in some places. Basically what
happens is you implement the ITag interface. When you implement
GuiParser, you provide it with an array of class objects for each of
your ITags. These are used by the GuiParser to create new instances.
Then once GuiParser creates the new instances, it runs the parse
method which basically returns the JComponent. Additional information
like the
GuiParser interface and the parent and main window elements are
provided through parameters to the parse method.
For attributes, you can extend the IAttributeHolder interface (which
extends ITag). This provides an extra method called setAttribute that
sends JAXP Attr objects so you can set the swing properties of your
JComponents. Just using a simple if statement, it checks to see if the
attr equals one of the valid attributes and if so, sets the swing
element appropriately.
If your tag can contain other elements, you can extend the
IContainerTag interface, which adds method "add". This takes in a DOM
Element which you can use the GuiParser instance given in the parse
method to parse this element and add it to your container in about 1
or 2 lines of code depending on the container.
Generally the parser handles all the rest. Overall it's easy to add
your own tags to XUL if you wanted to or add support to a previously
unsupported tag. What I like about this parser is that, if you run
into about 10% of tags that are difficult to add support to in the
parser, you can get around that problem easily with little
performance hit. I've yet to run into a situation where a XUL tag
couldn't in any
way fit this interface.
Q: Can you tell us some challenges you faced creating XulParser?
R.J. Keller: Getting some of those strange tags to work. <tabpanel>
was extremely difficult to implement and adding support for the
<wizard> tag was difficult due to the fact that you couldn't use
XulFrame. The wizard problem was solved by creating a XulWizard class
but it's difficult to
make custom window solutions.
At first, the interface was based on ITag only without the extra
attribute and container interfaces. That caused for a ton of for loops
and if statements. Now that is all handled through the new interfaces
(IAttributeHolder and IContainerTag) and have saved us a tremendous
amount of time.
The only main challenge we still see now with XulParser is having
100% perfect XUL be parsed in both Mozilla and XulParser. I'm hoping one
day you could make a complex XUL file work both in Java Swing and
Mozilla. It's difficult to do that with swing elements, but is
definitely possible.
Also a lack of JavaScript or CSS support has caused huge issues with
getting styles and scripts to XUL tags. I do have a separate project
I'm working on that integrates Rhino with XulParer. To fix the CSS
problem, we've converted CSS attributes to XUL tag attributes, which
is very messy but adds the functionality. I'm planning on adding a
ICssHolder interface to add some basic CSS support to hopefully
improve support for XUL in XulParser.
Q: Can you tell us what the MozCreator XulParser can do today? What
works and what needs to be done?
R.J. Keller: Currently, it can take a basic XUL file and run it in
swing decently. MozCreator IDE is written entirely in XUL and runs good.
What needs to be done is CSS support. This should fix a ton of bugs
in the parser and could make a Mozilla/Java cross-XUL platform
realistic.
We also need to improve our layout of XUL in general to be more
precise with Mozilla's layout.
A XulWriter is also in the works to be used with MozCreator's GUI
editor. We'll have more on that at a later date.
Q: Do you have a favorite scripting language for the Java runtime?
Any plans for adding support for
scripting to XulParser?
R.J. Keller: Yes, as mentioned above, we are planning on adding Rhino
+ XUL integration to make a full version of the Mozilla Platform
available
to Java users.
Q: Any plans of supporting different UI toolkits such as SWT, wx4j or
Java Gnome, for example? Or do you plan to stick to Swing?
R.J. Keller: Actually yes, recent modifications in the XulParser 2.0
spec make Eclipse SWT support possible. Progress is slow, however,
due to a lack of contributors.
With the current parser, if someone wanted, they could easily port a
Java GUI toolkit to XulParser. The issue is getting the manpower for it.
Q: Can you tell us how popular the MozCreator XulParser is? (e.g.
How many downloads? Are there any applications/projects using
XulParser? What's the interest in the Mozilla or in the Java Swing
community? etc.)
R.J. Keller: It's difficult to track downloads because the project
has been jumping FTPs often. I do know that the number of downloads
is way higher than we've expected. Just seeing the surge in bandwidth
usage on my FTP since MozCreator was added makes me confident that
we're getting a
large number of downloads. Maybe in the future we might be able to
give some numbers.
Q: Who else is behind XulParser? Do you work on your own? How much
time do you spend on XulParser development? How can someone get
involved in the MozCreator XulParser project?
R.J. Keller: The team is small and we need contributors badly!
Currently I'm the only programmer but Brant Gurganus and Ryan
Probosco along with others have made contributions and ideas to the
specification.
Currently I spend about 3 to 4 hours a week on MozCreator and the XUL
Parser.
Q: Does the XUL handled by the MozCreator XulParser differ from
Mozilla's "classic" XUL? Do you envision XulParser to run Mozilla XUL
apps out-of-the-box?
R.J. Keller: JXUL is the main difference. We definitely hope to have
any Mozilla XUL file run out of the box on MozCreator.
Q: What's next for the MozCreator XulParser?
R.J. Keller: As for the parser itself, better layout and easier GUI
parser support.
Thank you R.J. Keller for taking time out to share your thoughts.
Keep up the great work on the MozCreator XUL Parser project.
Links:
* MozCreator XUL Parser - http://mozcreator.mozdev.org/xulParser.html
* R.J. Keller's Blog - http://rjkeller.blogspot.com/2005/04/xul-
parser-interview.html
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20