The big tree viewer is designed as a client/server application and utilizes Google Web Toolkit (GWT) for the browser based application. To manage the amount of data drawn, the client adapts a level-of-detail technique. Clades that contain too much data to be drawn at full detail are instead drawn using a visual abstraction (a triangle). This abstraction also allows the client to only ask the server for portions of the tree, thus decreasing the memory usage on the client. The communication between the client and server is primarily done using GWT's Remote Procedure Call (RPC) architecture.
The client has different rendering and layout strategies depending on the view type. Currently both the cladogram and radial layout have their own render and layout classes. Each render class uses an abstract graphics interface to draw primitives (points, lines, etc). This allows different graphics back-ends to be used. The client's only implementation of a graphics class at this time is for the HTML 5 canvas. As the user is navigating, the tree renderer decides whether or not to draw the children or to draw a placeholder. If the renderer determines that the children must be drawn, it then checks to see if the data for the children is contained in the client. If the data is local, then the children are drawn; if not, then a request is made to the server for the data. The placeholder is drawn until the data is received from the server. The renderer allows nodes and edges to be drawn with different styles (size, color,etc). This is low level support for using metadata to drive the tree's appearance. As of now, these styles are controlled with comma separated values entered by the user.
The server provides three main services: a service to upload a tree, one to retrieve an image for the overview, and another to retrieve tree and layout data. The services are described in more detail below.
1.3.1 Upload a tree
When a tree is uploaded, the layout is calculated and an overview image is generated. Then all the tree topology, layout information, and overview image is stored in a PostgreSQL database. The layout information consists of an x,y position and a bounding box at each node. The information is calculated and stored in the database when the tree is loaded because it is time consuming to retrieve the entire tree from the database in order to calculate the layout. The overview image is pre-rendered for the same reason.
1.3.2 Retrieve overview image
This service provides an image for the tree overview. The image is retrieved from the database and scaled to the requested size.
1.3.3 Retrieve tree and layout data
This service provides access to both tree data and layout data. This service provides methods to retrieve: a tree, children for a node, and position data for a node. When a tree is requested, only the root node is returned.