Customizing Your Database
Overview
It is likely that you will want to add additional data fields to the VARS database. For annotations, the most likely data will be some sort of physical measurements or parameters. This can be accomplished by adding additional fields to the PhysicalData class, mapping file and database table. This document will outline the steps needed to modify your database.
Modifying PhysicalData
In this example we will add a field named 'density' to the VARS application
Modifying PhysicalData.java
Open up the file src\main\java\org\mbari\vars\annotation\model\PhysicalData.java in your favorite editor or IDE. You will need to add a private field with public accessor methods
private float density; public float getDensity() { return density; } public void setDensity(float density) { this.density = density; }
Modifying annotation_mapping.xml
Open up the file resources\conf\annotation_mapping.xml in a text editor. Locate the mapping for the PhysicalData class; it will start with <class name="org.mbari.vars.annotation.model.PhysicalData". Add the following lines to it:
<field name="density" type="float"> <sql name="Density" type="real" dirty="ignore"/> </field>
Modifying the PhysicalData Database Table
The next step is to add a density column to the PhysicalData table in the VARS database. The SQL to do this is:
ALTER TABLE PhysicalData ADD Density REAL
Modifying the Annotations View
The last step is to add density to the Annotations view. This allows the query application to query against and return density. No modifications to the query application is required since it generates it's user interface dynamically based on the Annotations view. Here is an example that alters the Annotations view and adds density:
ALTER VIEW Annotations AS SELECT Observation.ObservationDTG AS ObservationDate, Observation.Observer, Observation.ConceptName, Observation.Notes, VideoFrame.TapeTimeCode, VideoFrame.RecordedDtg AS RecordedDate, VideoFrame.InSequence, VideoArchive.videoArchiveName, VideoArchiveSet.TrackingNumber, VideoArchiveSet.ShipName, VideoArchiveSet.PlatformName AS RovName, VideoArchiveSet.FormatCode, CameraPlatformDeployment.SeqNumber AS DiveNumber, CameraPlatformDeployment.ChiefScientist, CameraPlatformDeployment.UsageStartDTG AS DiveStartDate, CameraPlatformDeployment.UsageEndDTG AS DiveEndDate, CameraData.Name AS CameraName, CameraData.Direction AS CameraDirection, CameraData.Zoom, CameraData.Focus, CameraData.Iris, CameraData.FieldWidth, CameraData.StillImageURL AS Image, PhysicalData.Depth, PhysicalData.Density PhysicalData.Temperature, PhysicalData.Salinity, PhysicalData.Oxygen, PhysicalData.Light, PhysicalData.Latitude, PhysicalData.Longitude, Observation.id AS ObservationID_FK, Association.id AS AssociationID_FK, Association.LinkName, Association.ToConcept, Association.LinkValue, Association.LinkName + ' | ' + Association.ToConcept + ' | ' + Association.LinkValue AS Associations, VideoFrame.id AS VideoFrameID_FK FROM Association LEFT OUTER JOIN Association_Child_Parent ON Association.id = Association_Child_Parent.Parent_AssociationID RIGHT OUTER JOIN Observation ON Association.ObservationID_FK = Observation.id LEFT OUTER JOIN PhysicalData RIGHT OUTER JOIN VideoFrame ON dbo.PhysicalData.VideoFrameID_FK = VideoFrame.id LEFT OUTER JOIN CameraData ON dbo.VideoFrame.id = CameraData.VideoFrameID_FK LEFT OUTER JOIN CameraPlatformDeployment RIGHT OUTER JOIN VideoArchiveSet ON CameraPlatformDeployment.VideoArchiveSetID_FK = VideoArchiveSet.id RIGHT OUTER JOIN VideoArchive ON dbo.VideoArchiveSet.id = VideoArchive.VideoArchiveSetID_FK ON VideoFrame.VideoArchiveID_FK = VideoArchive.id ON Observation.VideoFrameID_FK = VideoFrame.id