Mode-independent Computer Aided Interviewing.

A lot of time and effort has gone into making Sonar as feature-rich and flexible as it is. However, pre-existing solutions have been used whenever possible. These solutions have helped speed the development of Sonar by providing for some of it's most powerful features. No doubt that without the work put into these wonderful products, Sonar would not be as good as it is with them.

Therefore, I would like to thank each project for allowing me to build upon their accomplishments.
JDOM
http://www.jdom.org
"JDOM is, quite simply, a Java representation of an XML document. JDOM provides a way to represent that document for easy and efficient reading, manipulation, and writing. It has a straightforward API, is a lightweight and fast, and is optimized for the Java programmer. It's an alternative to DOM and SAX, although it integrates well with both DOM and SAX."
Apache Bean Scripting Framework  (BSF)
http://jakarta.apache.org/bsf
"Bean Scripting Framework (BSF) is a set of Java classes which provides scripting language support within Java applications, and access to Java objects and methods from scripting languages. BSF allows one to write JSPs in languages other than Java while providing access to the Java class library. In addition, BSF permits any Java application to be implemented in part (or dynamically extended) by a language that is embedded within it. This is achieved by providing an API that permits calling scripting language engines from within Java, as well as an object registry that exposes Java objects to these scripting language engines."
Apache Velocity
http://jakarta.apache.org/velocity
"Velocity is a simple yet powerful Java-based template engine that renders data from plain Java objects to text, xml, email, SQL, Post Script, HTML etc. The template syntax and rendering engine are both easy to understand and quick to learn and implement.

Capabilities reach well beyond the realm of the web (ex. xdoclet, middlegen, Intellij etc.) to enable programmers to focus on writing functional code, while in parallel, template designers can directly modify templates to create attractive output. In webapps, Model-View-Control (MVC) separation can be strongly enforced because templates do not contain "code". Or, at the programmers discretion "tools" can be made available in the template for more direct access to data."
Steady State CSS Parser
http://cssparser.sourceforge.net
"The CSS Parser is implemented as a package of Java classes, that inputs Cascading Style Sheets Level 2 source text and outputs a Document Object Model Level 2 Style tree. Alternatively, applications can use SAC: The Simple API for CSS. Its purpose is to allow developers working with Java to incorporate Cascading Style Sheet information, primarily in conjunction with XML application developments."
CHARVA  (CHAracter-mode JaVA)
http://charva.sourceforge.net
"CHARVA is a Java framework for presenting a "graphical" user interface, composed of elements such as windows, dialogs, menus, textfields and buttons, on a traditional character-cell ASCII terminal. It has an API based on that of "Swing" (a.k.a. the Java Foundation Classes). Programmers familiar with AWT and Swing will find programming CHARVA straightforward. User interfaces can be designed on a WYSIWYG IDE, and then easily converted to CHARVA merely by changing the "import" statements to import the "charva.awt and "charvax.swing" packages instead of the standard "java.awt" and "javax.swing" packages.

CHARVA was designed to bring the power and flexibility of Java to applications on Linux/Unix systems (and has also been ported to MS Windows). ASCII terminal-based applications can now benefit from Java features such as object orientation, multithreading, automatic garbage-collection, and a vast range of libraries."
JDesktop Integration Components  (JDIC)
https://jdic.dev.java.net
"The JDesktop Integration Components (JDIC) project aims to make Java™ technology-based applications ("Java applications") first-class citizens of current desktop platforms without sacrificing platform independence. Its mission is to enable seamless desktop/Java integration.

JDIC provides Java applications with access to functionalities and facilities provided by the native desktop. It consists of a collection of Java packages and tools. JDIC supports a variety of features such as embedding the native browser, launching the desktop applications, creating tray icons on the desktop, registering file type associations, creating JNLP installer packages, etc."