These are my notes for getting on with future development on the RIF.
if you want to run any automated test cases, they will be located in the src/test/java directory. To run tests, you can do one of three things:
If you’re wondering what is calling what, the most useful command is to highlight a method name, right click and choose “Call Hierarchy”. This will tell you what might be calling the method in the code base. If nothing is calling it, then it might be a piece of dead code that you can comment out and then later remove.
This is a legacy project from the early development of RIF v4.0. It’s built using Java Swing and was initially created to help me figure out what kinds of API methods should exist in a service that is letting scientists specify study submissions for the RIF. It has done its job but now it should be deleted from the tree. The old tool will now appear incomplete because we never invested in giving map manipulation features. It now presents a maintenance overhead in that whenever the APIs defined in rifServices change, you’d have to change code in the rifJobSubmissionTool, even though nobody uses it.
My suggestions:
This project has been designed to be as independent of the RIF as possible. Much of its source code draws upon generic code found in the rifGenericLibrary. The taxonomyServices project will not be affected by Porting issues.
This is the only likely taxonomy service the RIF will need in the near future.
Advice:
rifGenericLibrary.taxonomyServices.TaxonomyTermManager. This class provides the code that will support a lot of the methods that are required by the rifGenericLibrary.taxonomyServices.TaxonomyServiceAPI API.
Early in development, rifServices contains classes to help support taxonomy services. These were later moved to an independent web application as a way of ensuring that the RIF would not be tied to changes in the way individual taxonomies evolved. There should be no need for HealthOutcomeManager, because everything the main RIF web application needs from taxonomies is supported by the taxonomyServices web application.
My suggestion is that you change the package rifServices.dataStorageLayer to rifServices.dataStorageLayer.ps, to make it mirrow what will be done for the rifGenericLibrary and rifDataLoaderTool projects. Then I would copy all of those classes into a new package called rifServices.dataStorageLayer.ms. Rename all of the classes in this directory so they begin with MS - for Microsoft SQL Server. In each of these classes, change references to underlying rifGenericLibrary.pg.* classes to rifGenericLibrary.ms.* classes. From then on, you’ll have to coordinate changes for porting. If you end up with classes that are common to both, put them into the package rifServices.dataStorageLayer.
Early in development, I tried making two independent services, one for each type of task: study submission or study result retrieval. They largely divided along the lines that:
rifServices.businessConceptlayer.*.
Over time, it turned out that the study submission tool and the study result retrieval tools would need many of the same things. It also turned out that production and test versions of the same services would also share many of the same things. This explains why rifServices.restfulWebServiceResource is so large - it ended up supporting most of the same behaviour shared by the different services. It should be refactored so that many smaller web services are created. For example, you could have one for Investigations, another for retrieving data for the interactive map display etc.
The most important class is rifDataLoaderTool.presentationLayer.interactive.RIFDataLoaderToolApplication. This contains the main class that will create the RIF Data Loader Tool dialog.