Mode-independent Computer Aided Interviewing.

About JCaiF
The Java Computer Aided Interviewing Framework (JCaiF) is a collection of Java interfaces that define the common elements of a questionnaire or survey. These interfaces define what data is provided by these elements, and methods used to get and set that data. JCaiF also defines controlling interfaces, notably SurveyEngine which is responsible for the initialization and programatic flow control of a survey, and SurveyWindow which are responsible for the display of the survey and saving the data collected by the survey.

Included in the JCaiF library are implementations of some of the most common survey elements such as: Single/Multi-select questions, Open Ended questions, Responselists and list items. These Java classes are defined in the CoreComponents package, and can be used by any JCaiF survey.
Structure of a JCaiF survey
A JCaiF survey consists of a top-level ComponentContainer, with one or more child SurveyComponents, which may be either a SurveyQuestion, or another ComponentContainer. The resulting object tree represents a JCaiF survey.

Each SurveyComponent can be given an id and text to be displayed. Each provides an onLoad function and an onContinue function. onLoad is called before a component is displayed, and will return true if it should be displayed, or false if it should be skipped. Likewise, onContinue is called to determine if the survey can proceed to the next component.
JCaiF Containers
JCaiF surveys are hosted by specialized applications that implements the SurveyEngine and SurveyWindow interfaces. These applications are known as JCaiF Containers. Containers are responsible for loading and initializing your JCaiF survey, and presenting the data contained in them to the user. JCaiF Containers can be used for survey display, data collection, data analysis and reporting. These programs do not need to know anything about each other, all the information they need is contained in your JCaiF survey. JCaiF Containers are analogous to Servlet Containers in the J2EE specification.
What JCaiF does not do
Data Collection
JCaiF is not a data collection or survey administration program, rather it is used as the internal structure for data collection or survey administration programs called JCaiF Containers. JCaiF forms an interface with those programs to give them access to the underlying survey structures and data. This makes a JCaiF survey portable to any application that implements the JCaiF interfaces.
Display Formatting
JCaiF does not define how a survey should look, it defines only the questions to be used in a survey, the text of those questions and the skip logic (flow) of the the survey. JCaiF Containers are responsible for the interface between the survey and the respondent.