For those who view this as someone trying for a Google Summer of Code position in the future, this is a full example of an accepted proposal, based on the format requested by OpenMRS.
For others, this is just a description of the original plans for my OpenMRS work.
Title
Open Data Access Adapter and RESTful Web Service Module
Abstract
OpenMRS is a useful tool for gathering data about patients, but it needs a way to easily generate meaningful reports based on this data. BIRT is a standalone app or Eclipse plug-in that allows a user to design reports from data sources like SQL databases or static XML files. BIRT and other open-source reporting frameworks would be great tools to use in reporting data from an implementation of OpenMRS, but right now this is a non-trivial operation.
I propose the development of a BIRT Open Data Access driver, along with a simple RESTful web service that gives reporting frameworks a way to query into the OpenMRS database without having to manually piece together OpenMRS SQL tables. The ODA adapter and web service would allow BIRT and other frameworks to easily interact with OpenMRS’s database.
Detailed Description
Name: Michael Rudd Zwolinski (I go by my middle name, Rudd)
Webpage: http://www.people.cornell.edu/pages/mrz5/
Email: ruddzw@gmail.com
AIM: ~~
IRC: Occasionally I will be on freenode as ruddzw
Preferred: Email, though IM is fine. IRC is fine if I’m on.
Details:
* The first thing that would have to be agreed upon would be the kind of network protocol is being used. This will probably be some kind of XML structure. Also, most likely a “RESTful” web service would be implemented, which would make for simple transmissions from the driver to the web service, as opposed to full XML messages.
* The web service will be able to generate responses to standard HTTP queries like:
* * http://demo.openmrs.org/openmrs/getTokens?cohort=All Patients
* * http://demo.openmrs.org/openmrs/createDataSetDefinition?cohort=All Patients&token=CD4%COUNT&token=PATIENT%FIRST%NAME&token=PATIENT%LAST%NAME
* * http://demo.openmrs.org/openmrs/getData?cohort=All Patients&token=CD4%COUNT&token=PATIENT%FIRST%NAME&token=PATIENT%LAST%NAME (credit for these examples goes to Justin Miranda)
* It may be the case that parameters in the http string may not be parsed in the right order, so something may have to be done about making sure that the right columns are returned. Possible solutions include changing the tokens to specific names (i.e. token1..tokenN) and sorting the columns according to their headers/metadata on the driver side, if this even turns out to be a problem.
* The BIRT Open Data Access driver would be developed to the specifications of the Run-time API, probably based on the JDBC and CSV drivers, to give me a sort of idea of how the OpenMRS driver should be implemented. Since we are reading from a web service, it won’t be exactly like either one.
* In the future, other reporting frameworks will be able to take advantage of this web service. If my schedule runs quickly, I may also develop the drivers for applications like Pentaho and JasperReports to connect to the web service, which shouldn’t be too big of a task.
Deliverables:
* A web service as an addition to the OpenMRS system that can be connected to remotely by anything, but targeted at reporting frameworks.
* A BIRT ODA driver that connects to the OpenMRS web service.
* A clearly published specification of the XML protocol, so that other frameworks can implement the same type of extensions for other reporting frameworks or any other application that would take advantage of the feature (e.g. data backups).
Roadmap/Timeline:
1. Within the first week or two, develop what kind of protocol we’re going to use. Are we going to use SOAP/REST (most likely REST) and how will it work exactly?
2. Start implementing the web service as an OpenMRS Module.
3. Maybe a month or so in, the web service should be developed to the point of usefulness, and work will start on the BIRT ODA driver, to interface with the web service. Development will follow implementing the basic API functions, based on the implementations of JDBC and CSV drivers.
4. From here, support for more advanced queries will be built into both the web service and BIRT driver. A good amount of time should be left for this, as it is an integral part of the ODA implementation actually being useful!
5. If there is time left, I will start work on other drivers, for other reporting frameworks like Pentaho and JasperReports.
About me:
I am a 19-year-old Cornell University undergrad born and raised near New York. I am studying Computer Science, with an unofficial concentration in Linguistics, which may or may not become a double major as time allows. I have been excited about open software for a long time, though I have not committed code or bug reports to anything. In school, I have studied data structures, algorithms, low-level systems programming, along with a bunch of other things and projects, outlined by my resume (available on my webpage, available in HTML and PDF forms). In Java, I’ve worked with data structures & algorithms mostly, but have done projects with creating a GUI and creating a compiler for a C-like language into an Assembly-like language.
This task has little relation to other things I would say that I’m interested in, but the prospect of this project does get me excited. It was mostly explained to me by Justin Miranda on IRC, and I’m confident I can implement an ODA driver along with a basic Web service to deliver the content. In addition, I would be excited to help out on such a project as OpenMRS, knowing that the work I did could actually help save lives somewhere. I have familiarized myself with BIRT and the ODA Run-time API, along with a few Web service styles (REST, SOAP), and I believe I could build the addon to OpenMRS to connect to an OpenMRS ODA driver.
I don’t have any experience with the listed technologies (Spring/Hibernate/DWR/HL7/Tomcat/AOP), though I have some (limited) experience with MySQL, and I learn quickly. I also lack experience with Web interfaces, though I am trying to gain experience with them. I have experience with user interfaces in general, and again, can learn quickly. I won’t have any other major commitments for the summer, so I will be free to put in my full effort.
I fully intend to stay on with the project in any way I can, but I must point out that while classes are in session, my opportunity to participate won’t be at its peak. I spend almost all of my time either in class, working on coursework, or sleeping/eating. However, please don’t take this as a loophole; I fully intend to spend time involved in the project. Even if it’s only an hour or two on Saturdays or something, I will stay involved with OpenMRS, hopefully (at first) building on my SoC project and bringing the functionality further along. It could go on to other frameworks, and then other applications of such a web service. An organization like OpenMRS has the opportunity to change (or even save) the lives of millions, and I’d love to continue being a part of it for as long as I can. I like the people involved, I like the idea, and I like the product of our work.