Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Data Structures in ICE
NiCE's Data Structures: Overview
Talk about the NiCE data structure Philosophy, why we do things, the patterns, etc.
NiCE Data Structure Diagram
The ability to transform data to one form to another is a common requirement within many modern day programs. The ICE program allows a majority of it's data structures to persist and load data with the hard disk. The eXtensive Markup Language (XML) handles these interactions through a process of binding the data from the data structures and converting it to a readable XML format. Java's API for XML Binding (JAXB) handles these interactions through a course of marshalling and unmarshalling of the data structures. The JAXB library is unique compared to many other forms of XML parsing because it does not require a major altering of the data structures in order for conversion process to work. With the help of annotations, the data is directly converted between XML and volatile running memory with ease. Since the XML conversion is added directly to the data structure, many other types of use cases for handling the data with the hard disk is solved fairly quickly.
ICE handles Database Manipulation through a library called Java's Persistence API (JPA). Very similarly to JAXB, JPA handles the queries to the database through the use of operations by passing the instances of the objects themselves on a database manager (EntityManager). Only Items, which contain links to other objects, can be called upon to be manipulated with a selected database. Items can be persisted, deleted, edited, or selected for the database. There are a few quirks and requirements needed for the database to run successfully within ICE. More information can be found in the JPA section.
ICE's Graphical User Interface (GUI) is generated based upon the implementation of specific ICE data structures, RCP, and JFACE/SWT widgets. An item contains a form, or a visual representation of a page within the ICE client. A form contains many components, or section parts, that can be either a combination of text boxes, radio buttons, lists, or tables. Usually, the component is a subsection in the form page that contains sub components that can be interacted with. For sections rendering with Datacomponents, lists of entries can be used to specify a menu of items, radio buttons to be checked, or a text box to be filled. For sections rendering with TableComponents, MatrixComponents, or OutputComponents, sections are rendered on the screen to represent a table of values.
There are multiple ways to create a form page (Create a ICE Item) within ICE.
- Create a plugin that subclasses Item.
- Create an ICEItem to be loaded internally
- Loading from specified, persisted xml files
The ways listed above reflect almost directly to creating specific data structures.