Message-ID: <675920648.1345.1495537016277.JavaMail.confluence@gw81> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_1344_547803791.1495537016277" ------=_Part_1344_547803791.1495537016277 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html Enhance Module Maven Archetype (Design Page)

Enhance Module Maven Archetype (Design Page)

=20 =20
=20

The outcome of this project can be viewed/used here: Using the Module Maven Archetype

=20
=20
=20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20

Primary mentor

=EF=BB=BF= Matthew Blanchette

Backup mentor

=EF=BB=BFBen Wolfe<= /a>

Assigned to

=EF=BB=BFGoutham= Vasireddi

=20

Background=20


OpenMRS is built on an ex= tensible architecture. Anyone can create a
Modules to add new functionality. A module is able to add ne= w pages, add database tables, modify data, etc. The problem is that the sta= rtup time for developers is sometimes prohibitive. See the Creating Your First Module wiki pa= ge for the current process.
We recently switched from using ant to bu= ild projects to maven. With maven you c= an create "wizards" or what they call archetypes= . The archetype should ask the developer a few simple questions (eg module = name, module id, etc) then create the module folder and file project hierar= chy with all the right names.

=20

By the time GSOC starts, there will probably be a very basic maven arche= type written. See the TRUNK-1733 ticket for more on that. (TODO= : link to wiki page for basic archetype when it is completed)

=20

A great example to look at as far as short startup time is the Atlassian SDK for some of their projects. Its as easy as = downloading a zip file from them and running one maven command. This comman= d runs a wizard to walk you through creating the the atlassian plugin + run= ning the atlassian project with that plugin already installed and running.&= nbsp; Note that this SDK is an end goal for all of OpenMRS, not for this ar= chetype project. This archetype will potentially be one piece of the larger= SDK goal.

=20

Purpose

=20

The purpose of this is to speed up developer startup time when creating = modules. Creating a module is currently a laborious process that includes a= lot of file renaming and copy/pasting from other module templates. A maven= wizard (archetype) that walked a user through creating the different types= of modules to create and naming things correctly would help to at least sp= eed up the initial creation time.

=20

= Domain Expert(s) / User(s)

=20 =20

Required/Preferred Skills

=20 =20

Design

=20

The archetype should not be IDE dependent.  Use the maven command l= ine tools / execution of the wizard/archetype to do the different types of = functions.

=20

There is no need for extra OS dependent scripts.  The wiki page abo= ut this archetype should tell the user the different options/flags/mavenmod= ules for how to do the different options.

=20

A utopia would be that someone could simply run "mvn module:module&= quot; (or some better maven goal and target name) and the archetype wizard = asks them what to name the module, their username, etc, etc, if they want a= service, if they want an admin link, etc.  The module id/user name/et= c data goes into the config.xml file.  See the current basic archetype= for an example of that. The output is a module filestructure with all thos= e things in it.

=20

A bonus would be able to run them separately so that someone could run t= hat on an already-built module to add in a service, eg.

=20

Objectives=20

The archetype should allow for multiple

=20
    =20
  1. Wizard/archetype that asks developers for the basic module info:=20
      =20
    1. Module name, module id, module package, module description
    2. =20
    3. See the basicmodule for the barebones filestructure that a module needs= .
    4. =20
  2. =20
  3. Wizard should ask dev if they want to create a service/serviceimpl/dao/= hibernatedao=20
      =20
    1. See the https://github.com/= OpenMRS/openmrs-module-example-jsp-and-service for a module that has th= e service files added (warning: not mavenized)
    2. =20
  4. =20
  5. Wizard should ask dev if they want an admin page link and what that lin= k should be named=20
      =20
    1. See the extension point in config.xml: https://github.com/OpenMRS= /openmrs-module-htmlformentry/tree/master/omod/src/main/resources/config.xm= l
    2. =20
    3. And the class that it points to: https://github.com/OpenMRS/openmrs-module-htmlformentry/t= ree/master/api/src/main/java/org/openmrs/module/formentry/extension/html/Fo= rmEntryAdminExt.java
    4. =20
  6. =20
  7. Wizard should ask dev if they want to add some example annotation drive= n mvc pages=20
      =20
    1. See https://github.co= m/OpenMRS/openmrs-module-example-spring-mvc-annotation for web controll= ers that are annotated instead of xml-based (warning: not mavenized)
    2. =20
  8. =20
  9. Wiki page describing all aspects of the archetype and how a module deve= loper would use it
  10. =20
  11. Wiki page describing how to update the maven archetype if/when the modu= le structure changes or a new wizard option is needed.
  12. =20
=20

Extra Credit=

=20
    =20
  1. Turn this archetype into one part of an "OpenMRS Module SDK" = (see paragraph in Background section about Atlassian SDK)=20
      =20
    1. Create a downloadable (or git check-out-able) package that allows the u= ser to walk through the archetype/wizard and then jetty:run openmrs
    2. =20
    3. There will need to be a maven archetype or some other function that is = able to install the openmrs module into the newly running openmrs automatic= ally
    4. =20
  2. =20
=20

Project Plan=

=20 =20

Timeline

= =20
=20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20

May 23 - May 30

Creation of archetype, which creates a basic= module with complete bare bone structure.

May 31 - June 3

Improvising the archetype on suggestions.

June 4 - June 10

Implementation of Service and ServiceImpl in= archetype.

June 11 - June 17

Implementation of Dao/hibernateDao in archet= ype.

June 18 - June 24

Implementation of admin page link in archety= pe.

June 25 - July 1st

Documentation

July 2th - July 10th

Polishing the code for Midterm evaluations. =

July 11 - July 16th

Implementation of Annotation driven mvc page= s.

July 14

Presentation on the things completed and yet= to be completed.

July 17th - July 24th

Code testing

July 25th - August 15th

Concentrating on extra credits.

August 15 - August 22th

Scrub code, write tests, improve documentati= on and submit code to mentor.

August 25

Final presentation of project

=20

Resources

= =20
------=_Part_1344_547803791.1495537016277 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: file:///C:/53db7b3de77a5ba4a62dac49d3a6fb1c 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 ------=_Part_1344_547803791.1495537016277--