<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8343064177861395668</id><updated>2011-08-04T04:42:27.229-07:00</updated><category term='Openmrs'/><title type='text'>Dawang's Blog</title><subtitle type='html'>Blog for 2010 Google Summer code OpenMRS intern</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-3127444514616938142</id><published>2010-09-22T06:56:00.000-07:00</published><updated>2010-09-22T07:00:50.375-07:00</updated><title type='text'>Got my T-Shirt &amp; Cetificates :-)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4NhKAV5dKig/TJoMAjZsCLI/AAAAAAAAAAM/ycTCXN1k2LQ/s1600/IMG_1468.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_4NhKAV5dKig/TJoMAjZsCLI/AAAAAAAAAAM/ycTCXN1k2LQ/s320/IMG_1468.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5519737496938481842" /&gt;&lt;/a&gt;&lt;br /&gt;What a wonderful day!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks Google!!! Thanks OpenMRS!!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-3127444514616938142?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/3127444514616938142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/09/got-my-t-shirt-cetificates.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3127444514616938142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3127444514616938142'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/09/got-my-t-shirt-cetificates.html' title='Got my T-Shirt &amp; Cetificates :-)'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4NhKAV5dKig/TJoMAjZsCLI/AAAAAAAAAAM/ycTCXN1k2LQ/s72-c/IMG_1468.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-1211553533370758777</id><published>2010-08-20T16:13:00.001-07:00</published><updated>2010-08-20T16:14:09.344-07:00</updated><title type='text'>Final Evaluation Passed~~</title><content type='html'>Cheers~~&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-1211553533370758777?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/1211553533370758777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/08/final-evaluation-passed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1211553533370758777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1211553533370758777'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/08/final-evaluation-passed.html' title='Final Evaluation Passed~~'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-5003641834820670317</id><published>2010-08-10T13:59:00.000-07:00</published><updated>2010-08-10T14:00:47.777-07:00</updated><title type='text'>August 9th</title><content type='html'>Got patch for HTML-57 and  ticket 2087 committed to trunk!!!&lt;div&gt;Will summary this wonderful experience soon!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-5003641834820670317?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/5003641834820670317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/08/august-9th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5003641834820670317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5003641834820670317'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/08/august-9th.html' title='August 9th'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-9136377284077742695</id><published>2010-07-23T05:52:00.001-07:00</published><updated>2010-07-23T05:52:40.168-07:00</updated><title type='text'>July 23th</title><content type='html'>submitted patch for #2087&lt;div&gt;start working on #HTML-57&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-9136377284077742695?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/9136377284077742695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-23th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9136377284077742695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9136377284077742695'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-23th.html' title='July 23th'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-6715426965296486579</id><published>2010-07-19T06:27:00.001-07:00</published><updated>2010-07-19T06:27:56.423-07:00</updated><title type='text'>July 17th</title><content type='html'>Finish the first patch for #2087, the second task of my GSOC project&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-6715426965296486579?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/6715426965296486579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-17th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6715426965296486579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6715426965296486579'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-17th.html' title='July 17th'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-5758398110530804342</id><published>2010-07-11T07:13:00.000-07:00</published><updated>2010-07-11T07:15:49.959-07:00</updated><title type='text'>July 7th.</title><content type='html'>Provide a patch on adding support to get concept by mapping/by uuid to htmlFormEntry Module&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-5758398110530804342?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/5758398110530804342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-7th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5758398110530804342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5758398110530804342'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-7th.html' title='July 7th.'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-5754387841165836282</id><published>2010-07-02T12:57:00.000-07:00</published><updated>2010-07-02T12:59:05.131-07:00</updated><title type='text'>July 02</title><content type='html'>bug fixes/function renaming/ after the first code review&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-5754387841165836282?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/5754387841165836282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5754387841165836282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5754387841165836282'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/07/july-02.html' title='July 02'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-3206513018257852385</id><published>2010-06-16T19:30:00.000-07:00</published><updated>2010-06-16T19:31:25.791-07:00</updated><title type='text'>update June 16th:</title><content type='html'>finished the ticket #1318's implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-3206513018257852385?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/3206513018257852385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/06/update-june-16th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3206513018257852385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3206513018257852385'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/06/update-june-16th.html' title='update June 16th:'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-72480886561400634</id><published>2010-06-01T07:31:00.000-07:00</published><updated>2010-06-01T07:38:42.611-07:00</updated><title type='text'>Plan to crush #1318 part 1) form display/preview</title><content type='html'>Step 1:&lt;div&gt;add newrepeat tag handler&lt;/div&gt;&lt;div&gt;name the html control well&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-72480886561400634?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/72480886561400634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/06/plan-to-crush-1318-part-1-form.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/72480886561400634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/72480886561400634'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/06/plan-to-crush-1318-part-1-form.html' title='Plan to crush #1318 part 1) form display/preview'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-1505296063126008962</id><published>2010-05-28T06:14:00.000-07:00</published><updated>2010-05-31T13:08:39.732-07:00</updated><title type='text'>Plan to crush #1318</title><content type='html'>Goal: Get a new repeat tag working, the new repeat tag should incorporate jquery with the formentry module&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sub Goal:&lt;/div&gt;&lt;div&gt;1) Get new repeat tag display functioning&lt;/div&gt;&lt;div&gt;&lt;div&gt;the general move is use jquery to clone and insert the new row of html control , to work this out,&lt;/div&gt;&lt;div&gt;we need to consider how to copy and insert all html controls with in a repeat tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2)Get new repeat tag submit functioning&lt;br /&gt;&lt;div&gt;the module use a hashmap to store the {widget : htmlcontrol} name pair.  The problem is when a new html controller has been generated by jquery/javascript, the module has no way to know about their existence.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The possible flow:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Form Creation &lt;/b&gt;&lt;/div&gt;&lt;div&gt;  1) user edit a form, a tag &lt;/div&gt;&lt;div&gt;&lt;newrepeat&gt; &lt;/newrepeat&gt;&lt;/div&gt;&lt;div&gt;&lt;template&gt;&lt;/template&gt;&lt;/div&gt;&lt;div&gt;  &lt;obs conceptid="123"&gt;&lt;/obs&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; 2)user submit/save/edit the form&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Form Preview()&lt;/b&gt;&lt;/div&gt;&lt;div&gt;the html form is generated by  createForm in formentrysession&lt;/div&gt;&lt;div&gt;we can handle the &lt;newrepeat&gt; &lt;/newrepeat&gt; tag in line 247: applyTags function&lt;/div&gt;&lt;div&gt;The applyTagsHelper will do the job.&lt;/div&gt;&lt;div&gt;so&lt;/div&gt;&lt;div&gt;1) add a entry in the applicationContext.xml to relate &lt;newrepeat&gt; with a handler&lt;/newrepeat&gt;&lt;/div&gt;&lt;div&gt;     2)Create a new handler&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; the handler is used for generate required jquery/html for the newrepeat tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt; input:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt; newrepeat &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;lt; template &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&amp;lt; obs conceptid = "123" &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;lt; /template &amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt; /newrepeat &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Output(Mode = view):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;     &amp;lt;  script .... the javascript/jquery to clone and insert the template &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;/div&gt;&lt;div&gt;     &amp;lt; span ... the template html generated based on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;     &amp;lt; /span &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt; span ...  1 generated html on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;/span&gt;    &amp;lt; /span &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Form Enter&lt;/div&gt;&lt;div&gt;To handle new repeat tag  enter(save), 2 things needs to be done:&lt;/div&gt;&lt;div&gt;1) mapping a repeated widget with a htmlid&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;input Original:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt; newrepeat &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&amp;lt; template &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;  &lt;/span&gt;&amp;lt; obs conceptid = "123" &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&amp;lt; /template &amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt; /newrepeat &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;input intermidate:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Output(Mode = edit):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;  script .... the javascript/jquery to clone and insert the template &amp;gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;    &amp;lt; span any exsiting obs that are associated with this encounter &amp;gt;  &lt;/div&gt;&lt;div&gt;      ...&lt;/div&gt;&lt;div&gt;    &amp;lt; /span &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;/div&gt;&lt;div&gt;     &amp;lt; span ... the template html generated based on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;     &amp;lt; /span &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt; span ...  1 generated html on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;/span&gt;    &amp;lt; /span &amp;gt;  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Output(Mode = input):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;     &amp;lt;  script .... the javascript/jquery to clone and insert the template &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;/div&gt;&lt;div&gt;     &amp;lt; span ... the template html generated based on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;     &amp;lt; /span &amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt; span ...  1 generated html on concept with id="123"  &amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt; ....&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;/span&gt;    &amp;lt; /span &amp;gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-1505296063126008962?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/1505296063126008962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/plan-to-get-1318-step1-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1505296063126008962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1505296063126008962'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/plan-to-get-1318-step1-working.html' title='Plan to crush #1318'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-7337876244855209698</id><published>2010-05-23T08:25:00.000-07:00</published><updated>2010-05-28T06:14:15.831-07:00</updated><title type='text'>htmlform Entry Module</title><content type='html'>the doc is very clear about this:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://openmrs.org/wiki/HTML_Form_Entry_Module_Technical_Overview"&gt;http://openmrs.org/wiki/HTML_Form_Entry_Module_Technical_Overview&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-7337876244855209698?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/7337876244855209698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/htmlform-entry-module.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/7337876244855209698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/7337876244855209698'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/htmlform-entry-module.html' title='htmlform Entry Module'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-8657694901640224991</id><published>2010-05-22T05:43:00.000-07:00</published><updated>2010-05-23T08:23:57.426-07:00</updated><title type='text'>HTML Widget Model, the work flow</title><content type='html'>&lt;uri:...&gt;&lt;div&gt;1) HTML Widget flow &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a) jsp parser encounter a custom tag in a jsp page, i.e. &lt;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;b) trace back based on the tld &lt;&gt;, found the definition in&lt;/div&gt;&lt;div&gt; "/WEB-INF/view/module/htmlwidgets/resources/htmlwidgets.tld"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;c) the tag class in the tld file will lead to&lt;/div&gt;&lt;div&gt; &lt;tag-class&gt;org.openmrs.module.htmlwidgets.web.taglib.WidgetTag&lt;/tag-class&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; c1) WidgetTag class has properties named : name, object, property&lt;/div&gt;&lt;div&gt; this will populated by the attributes of the same name  based on demonstration.jsp:&lt;/div&gt;&lt;div&gt;    the known attributes are:&lt;/div&gt;&lt;div&gt;    id="defaultField${p.key}"  // represents the id of the input field&lt;/div&gt;&lt;div&gt;    name="${p.key}"            // represents the name of the input field&lt;/div&gt;&lt;div&gt;    object="${demo}"           // represents the object whose property  are editing&lt;/div&gt;&lt;div&gt;    property="${p.key}"        // represents the name of the property/field to edit&lt;/div&gt;&lt;div&gt;                               // on the object&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;d) in WidgetTag, the actual widget type will be figured out by reflection, then associate the tag with a Taghandle class.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;g) TagHandle itself is a abstract class,openmrs has a ulti method to match a subclass according to the actual type of the tag.&lt;/div&gt;&lt;div&gt;  This method works like this:&lt;/div&gt;&lt;div&gt;  it will call openmrs api to return a list of loaded spring beans.&lt;/div&gt;&lt;div&gt;  if a bean has a annotation and matches the type. it should be returned&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;f) why handler classes are treated as beans? &lt;/div&gt;&lt;div&gt;In ApplicationContext-Service. we see a line&lt;/div&gt;&lt;div&gt;  &lt; package="org.openmrs"&gt;    &lt; type="annotation" expression="org.openmrs.annotation.Handler"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;context:component-scan package="org.openmrs"&gt;&lt;context:include-filter type="annotation" expression="org.openmrs.annotation.Handler"&gt;... &lt; /context:include-filter&gt;&lt;/context:include-filter&gt;&lt;/context:component-scan&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; This line will let spring to include any class which has a @handler annotation and load them as beans into spring Context(finally figure it out, phew~~) when refreshing the context.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/uri:...&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-8657694901640224991?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/8657694901640224991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/html-html-widget-work-flow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/8657694901640224991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/8657694901640224991'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/html-html-widget-work-flow.html' title='HTML Widget Model, the work flow'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-1101368600367108687</id><published>2010-05-17T10:53:00.000-07:00</published><updated>2010-05-17T10:55:11.976-07:00</updated><title type='text'>Good Resources for Spring MVC3</title><content type='html'>1) official doc 3.x&lt;br /&gt;   http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html&lt;br /&gt;&lt;br /&gt;2) InfoQ doc 2.5&lt;br /&gt;http://www.infoq.com/articles/spring-2.5-ii-spring-mvc&lt;br /&gt;&lt;br /&gt;3) About 3.x REST style conversion&lt;br /&gt;http://blog.m1key.me/2010/01/rest-with-spring-30-spring-mvc-and-dojo.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-1101368600367108687?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/1101368600367108687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/good-resources-for-spring-mvc3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1101368600367108687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1101368600367108687'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/good-resources-for-spring-mvc3.html' title='Good Resources for Spring MVC3'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-4588978651925543190</id><published>2010-05-17T10:50:00.000-07:00</published><updated>2010-05-17T10:52:02.925-07:00</updated><title type='text'>Summary May 17th</title><content type='html'>1) a machine for future demonstration&lt;br /&gt;&lt;br /&gt;http://columbia.cs.uga.edu:8381/&lt;br /&gt;&lt;br /&gt;2) a simple application that using spring MVC3&lt;br /&gt;&lt;br /&gt;http://columbia.cs.uga.edu:8381/MyFirstSpringMVC3/&lt;br /&gt;&lt;br /&gt;Next, start learning jquery&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-4588978651925543190?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/4588978651925543190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/summary-may-17th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/4588978651925543190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/4588978651925543190'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/summary-may-17th.html' title='Summary May 17th'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-3912265542437245968</id><published>2010-05-04T16:19:00.000-07:00</published><updated>2010-05-04T16:22:12.880-07:00</updated><title type='text'>Weekly Summary May 04</title><content type='html'>Last week tasks:&lt;br /&gt;   1)Communicate with mentor.&lt;br /&gt;   2)Reading module source code&lt;br /&gt;   3)study the overview                &lt;br /&gt;    http://openmrs.org/wiki/HTML_Form_Entry_Module_Technical_Overview&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-3912265542437245968?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/3912265542437245968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/weekly-summary-may-04.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3912265542437245968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3912265542437245968'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/05/weekly-summary-may-04.html' title='Weekly Summary May 04'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-9214397013884747424</id><published>2010-04-27T07:23:00.001-07:00</published><updated>2010-04-29T12:52:22.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>GSOC'10 Proposal: "HTML Form Entry Module Enhancements"  Accepted!</title><content type='html'>Cheeeeeeeeeeeeeeeeeeeeeeers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-9214397013884747424?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/9214397013884747424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/mahahaha-proposal-accepted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9214397013884747424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9214397013884747424'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/mahahaha-proposal-accepted.html' title='GSOC&apos;10 Proposal: &quot;HTML Form Entry Module Enhancements&quot;  Accepted!'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-4557825192140433184</id><published>2010-04-08T13:30:00.001-07:00</published><updated>2010-04-29T12:54:01.973-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>jQuery</title><content type='html'>to be added&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-4557825192140433184?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/4557825192140433184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/4557825192140433184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/4557825192140433184'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/jquery.html' title='jQuery'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-5735589370032231995</id><published>2010-04-04T06:42:00.000-07:00</published><updated>2010-04-29T12:54:01.973-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Spring Annotation</title><content type='html'>good examples:&lt;br /&gt;&lt;br /&gt;1)http://stackoverflow.com/questions/803495/annotations-in-spring-mvc&lt;br /&gt;&lt;br /&gt;2)http://svn.openmrs.org/openmrs-modules/devexamples/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-5735589370032231995?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/5735589370032231995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/spring-annotation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5735589370032231995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/5735589370032231995'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/spring-annotation.html' title='Spring Annotation'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-8072668408502842561</id><published>2010-04-02T09:54:00.000-07:00</published><updated>2010-04-29T12:54:01.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Openmrs workflow (1)where to find</title><content type='html'>1) based on the the suffix of the target, find the fliter from Web.xml&lt;br /&gt;example: &lt;br /&gt; target:module.list&lt;br /&gt;step 1) &lt;br /&gt;   in web.xml: &lt;br /&gt;        &lt;servlet-mapping&gt;&lt;br /&gt;   &lt;servlet-name&gt;openmrs&lt;/servlet-name&gt;&lt;br /&gt;   &lt;url-pattern&gt;*.list&lt;/url-pattern&gt;&lt;br /&gt; &lt;/servlet-mapping&gt;&lt;br /&gt;step 2)&lt;br /&gt;now come to the openmrs-servlet.xml:&lt;br /&gt;      &lt;prop key="admin/modules/module.list"&gt;moduleListController&lt;/prop&gt;&lt;br /&gt;&lt;br /&gt;step 3)&lt;br /&gt;in the same file, we find:&lt;br /&gt; &lt;bean id="moduleListController"&lt;br /&gt;  class="org.openmrs.module.web.controller.ModuleListController"&gt;&lt;br /&gt;  &lt;property name="commandName"&gt;&lt;value&gt;moduleList&lt;/value&gt;&lt;/property&gt;&lt;br /&gt;  &lt;property name="formView"&gt;&lt;value&gt;/admin/modules/moduleList&lt;/value&gt;&lt;/property&gt;&lt;br /&gt;  &lt;property name="successView"&gt;&lt;value&gt;module.list&lt;/value&gt;&lt;/property&gt;&lt;br /&gt; &lt;/bean&gt;&lt;br /&gt;   then we know the target servlet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-8072668408502842561?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/8072668408502842561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/openmrs-workflow-1where-to-find.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/8072668408502842561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/8072668408502842561'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/openmrs-workflow-1where-to-find.html' title='Openmrs workflow (1)where to find'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-6002293896633001788</id><published>2010-04-01T06:58:00.000-07:00</published><updated>2010-04-29T12:54:01.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Learning OpenMrs Project, Source code(4)</title><content type='html'>1)org.openmrs.web.filter&lt;br /&gt;Gzip filter/startup filter/session filter&lt;br /&gt;&lt;br /&gt;2)org.openmrs.web.filter.initialization&lt;br /&gt;the setup wizard and webpage templates&lt;br /&gt;&lt;br /&gt;3)org.openmrs.web.filter.startuperror/update&lt;br /&gt;update liquibase&lt;br /&gt;&lt;br /&gt;4)org.openmrs.web.servlet&lt;br /&gt;servlet for login/out graph summary&lt;br /&gt;&lt;br /&gt;5)org.openmrs.web.taglib.*&lt;br /&gt;tags, for customized view&lt;br /&gt;&lt;br /&gt;6)org.openmrs.web.user&lt;br /&gt;for user property&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-6002293896633001788?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/6002293896633001788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/learning-openmrs-project-source-code4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6002293896633001788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6002293896633001788'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/04/learning-openmrs-project-source-code4.html' title='Learning OpenMrs Project, Source code(4)'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-3000641048714681547</id><published>2010-03-31T12:21:00.000-07:00</published><updated>2010-04-29T12:54:01.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Spring MVC(3) AOP advicer</title><content type='html'>http://www.javalobby.org/java/forums/t44746.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-3000641048714681547?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/3000641048714681547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc3-aop-advicer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3000641048714681547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/3000641048714681547'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc3-aop-advicer.html' title='Spring MVC(3) AOP advicer'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-1043369370554493042</id><published>2010-03-31T11:51:00.000-07:00</published><updated>2010-04-29T12:54:01.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Spring MVC(2) Property Editor</title><content type='html'>From http://www.shaunabram.com/data-binding-in-spring-mvc/&lt;br /&gt;Spring MVC allows the use of command objects (aka form backing objects, model attributes, domain model objects – basically the objects used to transport data between your view and your controller) using just about any type. However, the Servlet API deals with form parameters as Strings. Spring uses a technique called data binding to covert between the String representation and the real underlying type. This enables user input to be bound to the objects you use to process user input. In other words, the values entered by a user in a form can be used to set the property values on a chosen object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-1043369370554493042?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/1043369370554493042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc2-property-editor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1043369370554493042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1043369370554493042'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc2-property-editor.html' title='Spring MVC(2) Property Editor'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-6670996940676734314</id><published>2010-03-31T08:03:00.000-07:00</published><updated>2010-04-29T12:54:01.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Spring MVC(1) basic controller work flow</title><content type='html'>1)DispatcherServlet: the main servlet&lt;br /&gt;org.openmrs.web&lt;br /&gt;&lt;br /&gt;2)Controllers&lt;br /&gt;SimpleFormController&lt;br /&gt;&lt;br /&gt;Workflow from: &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#workflow"&gt;http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#workflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1)The controller receives a request for a new form (typically a Render Request only). The render phase will proceed to display the form as follows.&lt;br /&gt;&lt;br /&gt;2)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#formBackingObject(javax.portlet.PortletRequest)"&gt;formBackingObject()&lt;/a&gt; which by default, returns an instance of the commandClass that has been configured (see the properties the superclass exposes), but can also be overridden to e.g. retrieve an object from the database (that needs to be modified using the form).&lt;br /&gt;&lt;br /&gt;3) Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/BaseCommandController.html#initBinder(javax.portlet.PortletRequest,"&gt;initBinder()&lt;/a&gt; which allows you to register custom editors for certain fields (often properties of non- primitive or non-String types) of the command class. This will render appropriate Strings for those property values, e.g. locale-specific date strings.&lt;br /&gt;&lt;br /&gt;4)The &lt;a title="class in org.springframework.web.portlet.bind" href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/bind/PortletRequestDataBinder.html"&gt;PortletRequestDataBinder&lt;/a&gt; gets applied to populate the new form object with initial request parameters and the &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#onBindOnNewForm(javax.portlet.RenderRequest,"&gt;onBindOnNewForm(RenderRequest, Object, BindException)&lt;/a&gt; callback method is invoked. (only if bindOnNewForm is set to true) Make sure that the initial parameters do not include the parameter that indicates a form submission has occurred.&lt;br /&gt;&lt;br /&gt;5)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#showForm(javax.portlet.RenderRequest,"&gt;showForm&lt;/a&gt; to return a View that should be rendered (typically the view that renders the form). This method has to be implemented in subclasses.&lt;br /&gt;&lt;br /&gt;6)The showForm() implementation will call &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#referenceData(javax.portlet.PortletRequest,"&gt;referenceData&lt;/a&gt;, which you can implement to provide any relevant reference data you might need when editing a form (e.g. a List of Locale objects you're going to let the user select one from).&lt;br /&gt;&lt;br /&gt;7)Model gets exposed and view gets rendered, to let the user fill in the form.&lt;br /&gt;&lt;br /&gt;8)The controller receives a form submission (typically an Action Request). To use a different way of detecting a form submission, override the &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#isFormSubmission(javax.portlet.PortletRequest)"&gt;isFormSubmission&lt;/a&gt; method. The action phase will proceed to process the form submission as follows.&lt;br /&gt;&lt;br /&gt;9)If sessionForm is not set, &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#formBackingObject(javax.portlet.PortletRequest)"&gt;formBackingObject&lt;/a&gt; is called to retrieve a form object. Otherwise, the controller tries to find the command object which is already bound in the session. If it cannot find the object, the action phase does a call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#handleInvalidSubmit(javax.portlet.ActionRequest,"&gt;handleInvalidSubmit&lt;/a&gt; which - by default - tries to create a new form object and resubmit the form. It then sets a render parameter that will indicate to the render phase that this was an invalid submit.&lt;br /&gt;&lt;br /&gt;10)Still in the action phase of a valid submit, the &lt;a title="class in org.springframework.web.portlet.bind" href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/bind/PortletRequestDataBinder.html"&gt;PortletRequestDataBinder&lt;/a&gt; gets applied to populate the form object with current request parameters.&lt;br /&gt;&lt;br /&gt;11)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/BaseCommandController.html#onBind(javax.portlet.PortletRequest,"&gt;onBind(PortletRequest, Object, Errors)&lt;/a&gt; which allows you to do custom processing after binding but before validation (e.g. to manually bind request parameters to bean properties, to be seen by the Validator).&lt;br /&gt;&lt;br /&gt;12)If validateOnBinding is set, a registered Validator will be invoked. The Validator will check the form object properties, and register corresponding errors via the given &lt;a title="interface in org.springframework.validation" href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/validation/Errors.html"&gt;Errors&lt;/a&gt; object.&lt;br /&gt;&lt;br /&gt;13)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/BaseCommandController.html#onBindAndValidate(javax.portlet.PortletRequest,"&gt;onBindAndValidate&lt;/a&gt; which allows you to do custom processing after binding and validation (e.g. to manually bind request parameters, and to validate them outside a Validator).&lt;br /&gt;&lt;br /&gt;14)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#processFormSubmission(javax.portlet.ActionRequest,"&gt;processFormSubmission&lt;/a&gt; to process the submission, with or without binding errors. This method has to be implemented in subclasses and will be called only once per form submission.&lt;br /&gt;&lt;br /&gt;15)The portal will then call the render phase of processing the form submission. This phase will be called repeatedly by the portal every time the page is refreshed. All processing here should take this into account. Any one-time-only actions (such as modifying a database) must be done in the action phase.&lt;br /&gt;&lt;br /&gt;16)If the action phase indicated this is an invalid submit, the render phase calls &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#renderInvalidSubmit(javax.portlet.RenderRequest,"&gt;renderInvalidSubmit&lt;/a&gt; which – also by default – will render the results of the resubmitted form. Be sure to override both handleInvalidSubmit and renderInvalidSubmit if you want to change this overall behavior.&lt;br /&gt;&lt;br /&gt;17)Finally, call &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#renderFormSubmission(javax.portlet.RenderRequest,"&gt;renderFormSubmission&lt;/a&gt; to render the results of the submission, with or without binding errors. This method has to be implemented in subclasses and will be called repeatedly by the portal.&lt;br /&gt;&lt;br /&gt;&lt;a name="workflow"&gt;Workflow &lt;/a&gt;(&lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/AbstractFormController.html#workflow"&gt;in addition to the superclass&lt;/a&gt;):&lt;br /&gt;1)Call to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#processFormSubmission(javax.portlet.ActionRequest,"&gt;processFormSubmission&lt;/a&gt; which inspects the &lt;a title="interface in org.springframework.validation" href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/validation/Errors.html"&gt;Errors&lt;/a&gt; object to see if any errors have occurred during binding and validation.&lt;br /&gt;2)If errors occured, the controller will return the configured formView, showing the form again (possibly rendering according error messages).&lt;br /&gt;3)If &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#isFormChangeRequest(javax.portlet.PortletRequest)"&gt;isFormChangeRequest&lt;/a&gt; is overridden and returns true for the given request, the controller will return the formView too. In that case, the controller will also suppress validation. Before returning the formView, the controller will invoke &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onFormChange(javax.portlet.ActionRequest,"&gt;onFormChange(javax.portlet.ActionRequest, javax.portlet.ActionResponse, java.lang.Object, org.springframework.validation.BindException)&lt;/a&gt;, giving sub-classes a chance to make modification to the command object. This is intended for requests that change the structure of the form, which should not cause validation and show the form in any case.&lt;br /&gt;4)If no errors occurred, the controller will call &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onSubmitAction(javax.portlet.ActionRequest,"&gt;onSubmitAction&lt;/a&gt; during the action phase and then &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onSubmitRender(javax.portlet.RenderRequest,"&gt;onSubmitRender&lt;/a&gt; during the render phase, which in case of the default implementation delegate to &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onSubmitAction(java.lang.Object,"&gt;onSubmitAction&lt;/a&gt; and &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onSubmitRender(java.lang.Object,"&gt;onSubmitRender&lt;/a&gt; with just the command object. The default implementation of the latter method will return the configured successView. Consider just implementing &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#doSubmitAction(java.lang.Object)"&gt;doSubmitAction&lt;/a&gt; for simply performing a submit action during the action phase and then rendering the success view during the render phase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-6670996940676734314?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/6670996940676734314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6670996940676734314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/6670996940676734314'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/spring-mvc.html' title='Spring MVC(1) basic controller work flow'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-475964395073265248</id><published>2010-03-31T05:34:00.000-07:00</published><updated>2010-04-29T12:54:01.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Learning OpenMrs Project, Source code(3)</title><content type='html'>1) org.openmrs.h7.web.*: h7 controller, servlet&lt;br /&gt;&lt;br /&gt;2)org.openmrs.layout.web&lt;br /&gt;layout?&lt;br /&gt;&lt;br /&gt;3)org.openmrs.module.web&lt;br /&gt;&lt;strong&gt;servlet&lt;/strong&gt;?&lt;br /&gt;&lt;strong&gt;ModelAndView&lt;/strong&gt;?&lt;br /&gt;Module load unload,&lt;br /&gt;&lt;br /&gt;4)org.openmrs.module.controller&lt;br /&gt;controller&lt;br /&gt;&lt;br /&gt;5)org.openmrs.module.web.extension&lt;br /&gt;abstract class of extension op&lt;br /&gt;&lt;br /&gt;6)org.openmrs.module.web.extension.provider&lt;br /&gt;link?&lt;br /&gt;&lt;br /&gt;7)org.openmrs.module.web.filter&lt;br /&gt;to allow module defined filter to be loaded and excute&lt;br /&gt;&lt;br /&gt;8)org.openmrs.web.taglib&lt;br /&gt;tag parsing?&lt;br /&gt;&lt;br /&gt;9)org.openmrs.notification.web.*&lt;br /&gt;notification? &lt;strong&gt;initBind? processFormSubmission?&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;10)org.openmrs.sheduler.web&lt;br /&gt;&lt;strong&gt;formBackingObject?&lt;br /&gt;referenceData?&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;11)org.openmrs.summary.web&lt;br /&gt;PatientSummarySpecification&lt;br /&gt;&lt;br /&gt;12)org.openmrs.web.controller&lt;br /&gt;&lt;strong&gt;SimpleFormController?&lt;/strong&gt;&lt;br /&gt;webform controller &amp;amp; validator&lt;br /&gt;&lt;br /&gt;13)org.openmrs.web.dwr&lt;br /&gt;dwr?&lt;br /&gt;&lt;a class="external text" title="http://directwebremoting.com" href="http://directwebremoting.com/"&gt;Direct Web Remoting&lt;/a&gt; is a framework that allows us to translate java objects and methods to javascript objects and methods. Together with DOJO, DWR forms the basis of the AJAX in OpenMRS. The &lt;a class="extiw" title="source:openmrs/trunk/web/WEB-INF/dwr.xml" href="http://dev.openmrs.org/browser/openmrs/trunk/web/WEB-INF/dwr.xml"&gt;dwr.xml&lt;/a&gt; descriptor file describes which classes and methods are translated and made available to javascript calls. Most base DWR-able classes are placed into the org.openmrs.web.dwr package.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-475964395073265248?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/475964395073265248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/475964395073265248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/475964395073265248'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code3.html' title='Learning OpenMrs Project, Source code(3)'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-9191321483297775194</id><published>2010-03-30T05:51:00.001-07:00</published><updated>2010-04-29T12:54:01.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Learning OpenMrs Project, Source code(2)</title><content type='html'>1)org.openmrs.messagesource&lt;br /&gt;???&lt;br /&gt;&lt;br /&gt;2)org.openmrs.module&lt;br /&gt;module defintion, loader, factory&lt;br /&gt;&lt;br /&gt;3)org.openmrs.notification.*&lt;br /&gt;communication between users&lt;br /&gt;&lt;br /&gt;4)org.openmrs.ob.*&lt;br /&gt;observation?&lt;br /&gt;&lt;br /&gt;5)org.openmrs.order/org.openmrs.patient&lt;br /&gt;deal with order and patient&lt;br /&gt;&lt;br /&gt;6)org.openmrs.propertyeditor&lt;br /&gt;&lt;strong&gt;propertyeditor??&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;7)org.openmrs.report/reporting&lt;br /&gt;deprecated, deal with report&lt;br /&gt;&lt;br /&gt;8)org.openmrs.scheduler&lt;br /&gt;Task/scheduler&lt;br /&gt;&lt;br /&gt;9)org.openmrs.serilization&lt;br /&gt;serilization&lt;br /&gt;&lt;br /&gt;10)org.openmrs.util&lt;br /&gt;security, db ,etc.&lt;br /&gt;&lt;br /&gt;11)org.openmrs.validator&lt;br /&gt;validation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-9191321483297775194?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/9191321483297775194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9191321483297775194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/9191321483297775194'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code2.html' title='Learning OpenMrs Project, Source code(2)'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8343064177861395668.post-1250127003653098633</id><published>2010-03-29T12:14:00.000-07:00</published><updated>2010-04-29T12:54:01.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openmrs'/><title type='text'>Learning OpenMrs Project, Source code(1)</title><content type='html'>1)org.openmrs&lt;br /&gt;contain model definitions&lt;br /&gt;official notes:&lt;br /&gt;These classes represent the core domain objects for the OpenMRS project&lt;br /&gt;&lt;br /&gt;2)org.openmrs.annotation&lt;br /&gt;annotation definitions&lt;br /&gt;on:This package contains classes associated with the custom java 1.5+ annotations&lt;br /&gt;&lt;br /&gt;3)org.openmrs.aop&lt;br /&gt;&lt;strong&gt;Need to dig~~&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;what is advisor?&lt;/strong&gt;&lt;br /&gt;on:This package contains the classes associated with Aspect Oriented Programming&lt;br /&gt;&lt;br /&gt;4)org.openmrs.api&lt;br /&gt;containing interfaces, exceptions&lt;br /&gt;&lt;br /&gt;5)org.openmrs.context&lt;br /&gt;context contains user context(could be n) and service context(only1)&lt;br /&gt;On:This package describes the context framework through which authentication is performed and services provided for the OpenMRS system&lt;br /&gt;&lt;br /&gt;6)org.openmrs.api.db&lt;br /&gt;dao interface definition and exception definition&lt;br /&gt;&lt;br /&gt;7)org.openmrs.api.hibernate&lt;br /&gt;the hibernate implementation of org.openmrs.api.db&lt;br /&gt;&lt;br /&gt;8)org.openmrs.api.handler&lt;br /&gt;&lt;strong&gt;the handler class automatically called using AOP???&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;9)org.openmrs.api.imp&lt;br /&gt;the implementation of the api interfaces&lt;br /&gt;&lt;br /&gt;10)org.openmrs.arden&lt;br /&gt;&lt;strong&gt;logic??&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;11) h7&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;special format for medical info?&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;12)openmrs.logic&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;build criterials for query&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;to be continues&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8343064177861395668-1250127003653098633?l=dawangblackknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dawangblackknight.blogspot.com/feeds/1250127003653098633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1250127003653098633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8343064177861395668/posts/default/1250127003653098633'/><link rel='alternate' type='text/html' href='http://dawangblackknight.blogspot.com/2010/03/learning-openmrs-project-source-code1.html' title='Learning OpenMrs Project, Source code(1)'/><author><name>Dawang</name><uri>http://www.blogger.com/profile/06607618047592024384</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
