I've seen a lot of installers for a lot of layered applications on various flavors of Unix and Windows. Getting a download containing everything, and having an installer do handy things like automatic configuration, wiring apps together, desktop integration, etc. is great. No argument there. But often times, especially in the unix deployment scenarios, the administrator needs to install on a system without graphics support (e.g. a server in a closet, or over a low-bandwidth connection where graphics are just too painfully slow).
Most installers will tell you to revert to either a batch mode, where you have to create some kind of "answer file" containing installer configuration, or for more complex situations, use a clunky interactive quesiton/answer session. If you get an answer wrong (or flub up and type in a wrong value), its usually next to impossible to get back and correct your mistake. In most cases, you end up pressing CTRL-C, and starting over. For complex situations, this is just irritating.
openInstaller has come up with a revolutionary way for developers to achieve GUI and CUI functional parity virtually for free. By using a combination of several open source projects, including SwiXML, Charva, and nCurses, the install developer can simply create their UI layout once, in a single descriptive XML file (more to come there, a GUI designer tool is in the works). This single descriptive file is then rendered at install time into the various view modes that openInstaller supports. Most of the basic UI widgets (textfields, buttons, etc) are supported, and a few more complex widgets as you will see in the below screenshots.
For example, here's a typical license screen in GUI:

Here's the same screen rendered in CUI:
The openInstaller code to render this is a single UI Visual Control Definition file (syntax used is the same as in the Java Desktop System configurator, we borrowed that project's schema):
<apt:section apt:name="license" apt:label="LICENSE" >
<apt:property apt:name="LICENSE_TEXT1"
apt:dataPath=""
apt:type="xs:string">
<apt:prop-value>$License_LICENSE_TEXT1</apt:prop-value>
<apt:visual>
<apt:htmlPanel/>
</apt:visual>
</apt:property>
<apt:property apt:name="LICENSE_TEXT2"
apt:dataPath=""
apt:type="xs:string">
<apt:prop-value>$License_LICENSE_TEXT2</apt:prop-value>
<apt:visual>
<apt:textArea apt:rows="9" apt:columns="33"/>
</apt:visual>
</apt:property>
As you can see, a
htmlPanel and textArea are two visual types that openInstaller supports. This XML is rendered using SwiXML, which normally turns it into Java Swing. In openInstaller, this is either turned into Swing and rendered using Java Swing, or turned into Charva, and rendered using nCurses. The developer, of course, has to to nothing special to achieve this, and it gives them ultimate functional parity for users of GUIs and CUIs (btw, openInstaller also supports silent mode in a traditional way).
Pop-Up dialogs (e.g. a JOptionPane) are easy too:

JOptionPane in CUI:
File Browser? You betcha:

FileBrowser in CUI:
ListChooser? Yep:

ListChooser in CUI:
Tabs? Sure:

Tabs in CUI:

For more information on how to use or contribute to openInstaller, visit http://openinstaller.dev.java.net
