<?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-1048411582271228135</id><updated>2012-01-23T00:23:50.002-08:00</updated><title type='text'>journl do |post|</title><subtitle type='html'>programming - games - other</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-2534627747346641130</id><published>2012-01-22T23:31:00.000-08:00</published><updated>2012-01-23T00:23:50.018-08:00</updated><title type='text'>Spring Roo Entity Relationship Cheat Sheet</title><content type='html'>One-to-Many on one side and Many-to-One on the other:&lt;br /&gt;&lt;br /&gt;+------------------+&lt;br /&gt;| Tables_in_tokens |&lt;br /&gt;+------------------+&lt;br /&gt;| token            |&lt;br /&gt;| ymcamember       |&lt;br /&gt;+------------------+&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;project --topLevelPackage com.my.tokens&lt;br /&gt;persistence setup --provider HIBERNATE --database MYSQL --databaseName tokens --userName root&lt;br /&gt;// persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY&lt;br /&gt;&lt;br /&gt;entity --class ~.domain.Token&lt;br /&gt;entity --class ~.domain.YMCAMember&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;focus --class ~.domain.Token&lt;br /&gt;field string --fieldName name --notNull --unique&lt;br /&gt;field reference --fieldName ymcaMember --type ~.domain.YMCAMember&lt;br /&gt;&lt;br /&gt;focus --class ~.domain.YMCAMember&lt;br /&gt;field string --fieldName name --notNull --unique&lt;br /&gt;field set --type ~.domain.Token --fieldName tokens --mappedBy ymcaMember --cardinality ONE_TO_MANY&lt;br /&gt;&lt;br /&gt;controller all --package ~.web&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many-to-Many on both sides:&lt;br /&gt;This represented using a third Junction Table.&lt;br /&gt;Many-to-One from both tables into the new Junction Table which stores the unique-pairs.&lt;br /&gt;&lt;br /&gt;+--------------------+&lt;br /&gt;| Tables_in_meetups  |&lt;br /&gt;+--------------------+&lt;br /&gt;| community          |&lt;br /&gt;| person             |&lt;br /&gt;| person_communities |&lt;br /&gt;+--------------------+&lt;br /&gt;&lt;br /&gt;This works correctly from a hibernate/jpa standpoint unfortunately the roo UI doesn't acknowledge that one side is the relation owner and so erroneously lets you control it from both sides while persisting from only one. In this case the Person's create page persists properly to the communities table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;project --topLevelPackage com.foo.meetups&lt;br /&gt;persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY&lt;br /&gt;&lt;br /&gt;entity --class ~.domain.Community&lt;br /&gt;entity --class ~.domain.Person&lt;br /&gt;&lt;br /&gt;focus --class ~.domain.Community&lt;br /&gt;field string name&lt;br /&gt;field set --fieldName members --type ~.domain.Person --mappedBy communities --cardinality MANY_TO_MANY&lt;br /&gt;&lt;br /&gt;focus --class ~.domain.Person&lt;br /&gt;field string name&lt;br /&gt;field set --fieldName communities --type ~.domain.Community --cardinality MANY_TO_MANY &lt;br /&gt; &lt;br /&gt;controller all --package ~.web&lt;br /&gt;&lt;br /&gt;One-to-One on both sides:&lt;br /&gt;&lt;br /&gt;This is when each table has a reference to a single row in the other table.&lt;br /&gt;Again the following works well from a JPA/Hibernate point of view but the ui select box needs to be tweaked to allow a nullable field if you need that since it defaults to non nullable for some reason, not a big deal.&lt;br /&gt;&lt;br /&gt;+-----------------+&lt;br /&gt;| Tables_in_shoes |&lt;br /&gt;+-----------------+&lt;br /&gt;| left_shoe       |&lt;br /&gt;| right_shoe      |&lt;br /&gt;+-----------------+&lt;br /&gt;2 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; describe left_shoe;&lt;br /&gt;+---------+--------------+------+-----+---------+----------------+&lt;br /&gt;| Field   | Type         | Null | Key | Default | Extra          |&lt;br /&gt;+---------+--------------+------+-----+---------+----------------+&lt;br /&gt;| id      | bigint(20)   | NO   | PRI | NULL    | auto_increment |&lt;br /&gt;| name    | varchar(255) | NO   | UNI | NULL    |                |&lt;br /&gt;| version | int(11)      | YES  |     | NULL    |                |&lt;br /&gt;| partner | bigint(20)   | YES  | MUL | NULL    |                |&lt;br /&gt;+---------+--------------+------+-----+---------+----------------+&lt;br /&gt;&lt;br /&gt;project --topLevelPackage com.my.shoes&lt;br /&gt;persistence setup --provider HIBERNATE --database MYSQL --databaseName shoes --userName root&lt;br /&gt;entity --class ~.domain.LeftShoe&lt;br /&gt;entity --class ~.domain.RightShoe&lt;br /&gt;focus --class ~.domain.LeftShoe&lt;br /&gt;field string --fieldName name --notNull --unique&lt;br /&gt;field reference --fieldName partner --type ~.domain.RightShoe --cardinality ONE_TO_ONE &lt;br /&gt;focus --class ~.domain.RightShoe&lt;br /&gt;field string --fieldName name --notNull --unique&lt;br /&gt;field reference --fieldName partner --type ~.domain.LeftShoe --cardinality ONE_TO_ONE &lt;br /&gt;controller all --package ~.web&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-2534627747346641130?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/2534627747346641130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2012/01/spring-roo-entity-relationship-cheat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/2534627747346641130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/2534627747346641130'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2012/01/spring-roo-entity-relationship-cheat.html' title='Spring Roo Entity Relationship Cheat Sheet'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-5789371033654348117</id><published>2011-05-17T15:10:00.000-07:00</published><updated>2011-05-23T17:25:45.923-07:00</updated><title type='text'>Creating an Amazon S3 Post Policy and uploading via Curl Http Post and ruby.</title><content type='html'>This post shows you how to do the following:&lt;br /&gt;1. create an amazon file upload policy document to allow uploads by users of audio files visible to the world.&lt;br /&gt;2. using this policy document create a policy signature that can be used by web clients to http post/upload an mp3 file.&lt;br /&gt;3. a demo command line client that will upload a sample file to your amazon s3 bucket. &lt;br /&gt;&lt;br /&gt;K first off we're gonna assume you set up an amazon bucket, have an access_key and secret_access_key, pretty easy to do just head on over to the AWS management web console and set it up.&lt;br /&gt;We'll also assume you have some file named test.mp3 you want to upload to s3.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;In this demo I'll be using:&lt;br /&gt;bucket=dreamlogs&lt;br /&gt;sub_folder=folder # this is the subfolder where files will be uploaded.&lt;br /&gt;AMAZON_ACCESS_KEY_ID=your_key&lt;br /&gt;AMAZON_SECRET_ACCESS_KEY=you_secret_key&lt;br /&gt;filename=test.mp3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now we need to create an amazon s3 post policy that determines who has access to upload files to your bucket.  There are many different kinds of policies with amazon web services so in this case you need something like the following:&lt;br /&gt;&lt;br /&gt;This site got me started but seems to be pretty out of date, the doc links are dead: &lt;br /&gt;http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html&lt;br /&gt;&lt;br /&gt;Here's an example: &lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_ruby"&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;{&lt;/span&gt;&lt;span class="meta meta_syntax meta_syntax_ruby meta_syntax_ruby_start-block"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;expiration&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby"&gt;:&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_expiration&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;conditions&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby"&gt;:&lt;/span&gt; &lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;bucket&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby"&gt;:&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_bucket&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;acl&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby"&gt;:&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_acl&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;eq&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;$key&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_foldername/repl_username/repl_filename&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;content-length-range&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="constant constant_numeric constant_numeric_ruby"&gt;0&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_max_content_bytes&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;starts-with&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;$Content-Type&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_content_type&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;redirect&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby"&gt;:&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;repl_s3url/repl_bucket/repl_foldername/repl_username/repl_filename&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;every variable starting with the word repl shoul be replaced with whatever permission you are trying to allow, here's what I put in my java .properties file. &lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_java-props"&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;BUCKET&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;bucketname&lt;br /&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;UPLOADDIR&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;somedir&lt;br /&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;CONTENT_TYPE&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;application/octet-stream&lt;br /&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;S3URL&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;http://s3.amazonaws.com&lt;br /&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;ACL&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;public-read&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_java-props"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_java-props"&gt;#&lt;/span&gt; example 20 megabytes would be 20 * 1048576 = 20971520 bytes&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword keyword_other keyword_other_java-props"&gt;MAX_CONTENT_BYTES&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_java-props"&gt;=&lt;/span&gt;20971520&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next up we need to remove carriage returns / line feeds then B64 encode this policy.&lt;br /&gt;Finally sign it with our amazon secret key. The following is the main brain of my java web service its response is Json object with the policy and signature necessary for the client to then use to formulate a post file upload request to amazon s3. &lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_js"&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;package&lt;/span&gt; my&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;aws&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="entity entity_name entity_name_type entity_name_type_object entity_name_type_object_js entity_name_type_object_js_firebug"&gt;console&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;proj&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;text&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;SimpleDateFormat&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;Date&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;TimeZone&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; javax&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;management&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;timer&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Timer&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; javax&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;servlet&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;http&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;HttpServletRequest&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; my&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;aws&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="entity entity_name entity_name_type entity_name_type_object entity_name_type_object_js entity_name_type_object_js_firebug"&gt;console&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;proj&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;domain&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;PolicySignature&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; my&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;aws&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="entity entity_name entity_name_type entity_name_type_object entity_name_type_object_js entity_name_type_object_js_firebug"&gt;console&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;proj&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;tooling&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;PolicyGenerator&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;apache&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;log4j&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Logger&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;roo&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;addon&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;mvc&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;controller&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;RooWebScaffold&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;stereotype&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Controller&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;bind&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;annotation&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;RequestMapping&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;bind&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;annotation&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;RequestMethod&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;bind&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;annotation&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;RequestParam&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;springframework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;web&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;bind&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;annotation&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ResponseBody&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt; @RooWebScaffold&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;path &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;policysignatures&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;formBackingObject &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; PolicySignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;update &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_boolean constant_language_boolean_false constant_language_boolean_false_js"&gt;false&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;delete&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_boolean constant_language_boolean_false constant_language_boolean_false_js"&gt;false&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;create &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_boolean constant_language_boolean_false constant_language_boolean_false_js"&gt;false&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt; @RequestMapping&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/policysignatures&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt; @Controller&lt;br /&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt; PolicySignatureService &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   26&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   27&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;private&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_js"&gt;static&lt;/span&gt; Logger logger &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; Logger&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getLogger&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;PolicySignatureService&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   28&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   29&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   30&lt;/span&gt;     @RequestMapping&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;value &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/service&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;method &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; RequestMethod&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;GET&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;headers &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;Accept=application/json&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   31&lt;/span&gt;     @ResponseBody&lt;br /&gt;&lt;span class='linenum'&gt;   32&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;Object&lt;/span&gt; showJson&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;@RequestParam&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;value &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;facebook_id&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;required &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_boolean constant_language_boolean_true constant_language_boolean_true_js"&gt;true&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; facebook_id&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   33&lt;/span&gt;                             @RequestParam&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;value &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;filename&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;required &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_boolean constant_language_boolean_true constant_language_boolean_true_js"&gt;true&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; filename&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   34&lt;/span&gt;                             HttpServletRequest request&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   35&lt;/span&gt;         PolicyGenerator generator &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;PolicyGenerator&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   36&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; formattedExpirationDate &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; getFormattedExpirationDate&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;      &lt;br /&gt;&lt;span class='linenum'&gt;   37&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; makeAWSPostPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;facebook_id&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;filename&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;formattedExpirationDate&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   38&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; b64EncodedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;b64EncodePolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generatedPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   39&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; signature &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;signPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;AWSSECRETKEY&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;b64EncodedPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   40&lt;/span&gt;         PolicySignature policysignature &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; makePolicySignature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;facebook_id&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   41&lt;/span&gt;                 filename&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;b64EncodedPolicy&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;signature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   42&lt;/span&gt;         logger&lt;span class="support support_function support_function_js support_function_js_firebug"&gt;.info&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;request&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getRemoteAddr&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;,&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;,&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;toJson&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   43&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;toJson&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   44&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   45&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   46&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   47&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; PolicySignature makePolicySignature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; facebook_id&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   48&lt;/span&gt;             &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; filename&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;PolicyGenerator generator&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; b64EncodedPolicy&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   49&lt;/span&gt;             &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; signature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   50&lt;/span&gt;         PolicySignature policysignature &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;PolicySignature&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   51&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;b64EncodedPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   52&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setSignature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;signature&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   53&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setAWSAccessKeyId&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;AWSKEYID&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   54&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setBucket&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;BUCKET&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   55&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setFkey&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;UPLOADDIR&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;facebook_id&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt;filename&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   56&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setContent_type&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;CONTENT_TYPE&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   57&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setFile&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;@&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; filename&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   58&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setS3url&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;S3URL &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;BUCKET&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   59&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setRedirect&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;S3URL &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;BUCKET &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;UPLOADDIR &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; facebook_id &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; filename&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   60&lt;/span&gt;         policysignature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setAcl&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ACL&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   61&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; policysignature&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   62&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   63&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   64&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   65&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; makeAWSPostPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; facebook_id&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; filename&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   66&lt;/span&gt;             PolicyGenerator generator&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; formattedExpirationDate&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   67&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;generatePolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;AWSKEYID&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;AWSSECRETKEY&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;      &lt;br /&gt;&lt;span class='linenum'&gt;   68&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_expiration&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;formattedExpirationDate&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   69&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_bucket&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;BUCKET&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   70&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_acl&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ACL&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   71&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_filename&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;filename&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   72&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_content_type&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;CONTENT_TYPE&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   73&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_max_content_bytes&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;MAX_CONTENT_BYTES&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   74&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_foldername&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;UPLOADDIR&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   75&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_username&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;facebook_id&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   76&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;repl_s3url&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;generator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;S3URL&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   77&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_js"&gt;\r&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   78&lt;/span&gt;         generatedPolicy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; generatedPolicy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_js"&gt;\n&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   79&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; generatedPolicy&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   80&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   81&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   82&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   83&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; getFormattedExpirationDate&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   84&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;Date&lt;/span&gt; now &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Date&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   85&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;Date&lt;/span&gt; oneHourFromNow &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Date&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;now&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;getTime&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; Timer&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ONE_HOUR&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   86&lt;/span&gt;         TimeZone tz &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; TimeZone&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getTimeZone&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;UTC&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   87&lt;/span&gt;         SimpleDateFormat dfm &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;SimpleDateFormat&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;yyyy-MM-dd'T'HH:mm:ss.SSS'Z'&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   88&lt;/span&gt;         dfm&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;setTimeZone&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt; tz &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   89&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; formattedExpirationDate &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; dfm&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;format&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;oneHourFromNow&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   90&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; formattedExpirationDate&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   91&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;    &lt;br /&gt;&lt;span class='linenum'&gt;   92&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   93&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The signing code and base 64 code was modeled after this security doc: http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_js"&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;package&lt;/span&gt; my&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;aws&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="entity entity_name entity_name_type entity_name_type_object entity_name_type_object_js entity_name_type_object_js_firebug"&gt;console&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;proj&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;tooling&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;io&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;IOException&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;io&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;InputStream&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;security&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;SignatureException&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Properties&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt; PolicyGenerator &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; BUCKET&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; DEFAULT_AMAZON_POLICY&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; AWSKEYID&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; UPLOADDIR&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; CONTENT_TYPE&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; S3URL&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; AWSSECRETKEY&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; ACL&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; MAX_CONTENT_BYTES&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; PolicyGenerator&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;        InputStream policyInputStream &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; PolicyGenerator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getClassLoader&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getResourceAsStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;permissive.json&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        InputStream bucketingInputStream &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; PolicyGenerator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getClassLoader&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getResourceAsStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;amazon_bucketing.properties&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        InputStream credentialsInputStream &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; PolicyGenerator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getClassLoader&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getResourceAsStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;AwsCredentials.properties&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="storage storage_type storage_type_js"&gt;byte&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; bytes &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;try&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            bytes &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;byte&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[&lt;/span&gt;policyInputStream&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;available&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            policyInputStream&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;read&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;bytes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            DEFAULT_AMAZON_POLICY &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;bytes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            Properties awsprops &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Properties&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;load&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;bucketingInputStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            BUCKET &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;BUCKET&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            UPLOADDIR &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;UPLOADDIR&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            CONTENT_TYPE &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;CONTENT_TYPE&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            S3URL &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;S3URL&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            ACL &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;ACL&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            MAX_CONTENT_BYTES &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awsprops&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;MAX_CONTENT_BYTES&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            Properties awscreds &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Properties&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            awscreds&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;load&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;credentialsInputStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            AWSKEYID &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awscreds&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;accessKey&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            AWSSECRETKEY &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; awscreds&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getProperty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;secretKey&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;catch&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;IOException e&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            e&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;printStackTrace&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; generatePolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; awsid&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; awskey&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; DEFAULT_AMAZON_POLICY&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; signPolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; awskey&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; policy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;try&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt;  Signature&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;calculateRFC2104HMAC&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;policy&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;awskey&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;catch&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;SignatureException e&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            e&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;printStackTrace&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;error_signing_policy&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; b64EncodePolicy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; policy&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt;policy = policy.replaceAll("\n", ""); #this breaks it for some unknown reason&lt;br /&gt;&lt;/span&gt;        policy &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; policy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;replaceAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_js"&gt;\r&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; Encoding&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;EncodeBase64&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;policy&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getBytes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; readJsonFile&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; policyFile&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;        InputStream inputStream &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; PolicyGenerator&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getClassLoader&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;br /&gt;                &lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getResourceAsStream&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;policyFile&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="storage storage_type storage_type_js"&gt;byte&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; bytes &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;try&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            bytes &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;byte&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[&lt;/span&gt;inputStream&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;available&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;            inputStream&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;read&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;bytes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;catch&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;IOException e&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;            e&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;printStackTrace&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;bytes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As a test HTTP client we'll be using curl driven by ruby, its a pretty simple script you just have to set all the right curl flags and also worry about the order as amazon services are picky about that. &lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_ruby"&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt; this test will hit a server and then using the response upload a file to s3.&lt;br /&gt;&lt;/span&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="meta meta_require meta_require_ruby"&gt;&lt;span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby"&gt;require&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;json&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;server &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;http://192.168.254.6&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;port &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;8080&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;facebook_user &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;malcruzito&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;filename&lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;test.mp3&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt;assumes this file exists in the directory you run the script from&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt;hit the server to get the permissions to upload&lt;br /&gt;&lt;/span&gt;resp &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_interpolated string_interpolated_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;`&lt;/span&gt;curl -H Accept:application/json "&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;server&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;:&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;port&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;/proj/policysignatures/service?facebook_id=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;facebook_user&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;amp;filename=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;filename&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;"&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;parsed &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="support support_class support_class_ruby"&gt;JSON&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby"&gt;.&lt;/span&gt;parse&lt;span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby"&gt;(&lt;/span&gt;resp&lt;span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt;puts parsed&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby"&gt;#&lt;/span&gt;upload the file&lt;br /&gt;&lt;/span&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;curl -L -v -b cookiejar.txt -c cookiejar.txt &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;policy=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;policy&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;acl=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;acl&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;redirect=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;redirect&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;signature=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;signature&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;AWSAccessKeyId=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;AWSAccessKeyId&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;bucket=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;bucket&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;key=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;fkey&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;content-type=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;content_type&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; -F &lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;file=&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;file&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\"&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;curl_command &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby"&gt;+=&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt; &lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;parsed&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;[&lt;/span&gt;&lt;span class="string string_quoted string_quoted_single string_quoted_single_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;'&lt;/span&gt;s3url&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby"&gt;]&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;print curl_command &lt;span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby"&gt;+&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;"&lt;/span&gt;&lt;span class="constant constant_character constant_character_escape constant_character_escape_ruby"&gt;\n&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;result &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="string string_interpolated string_interpolated_ruby"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby"&gt;`&lt;/span&gt;&lt;span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"&gt;&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;#{&lt;/span&gt;curl_command&lt;span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;p result&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-5789371033654348117?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/5789371033654348117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/05/creating-policy-and-uploading-to-amazon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/5789371033654348117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/5789371033654348117'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/05/creating-policy-and-uploading-to-amazon.html' title='Creating an Amazon S3 Post Policy and uploading via Curl Http Post and ruby.'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-11038306670678972</id><published>2011-04-29T12:06:00.000-07:00</published><updated>2011-04-29T12:14:18.487-07:00</updated><title type='text'>script to spin up an amazon ec2 instance and deploy a tomcat war</title><content type='html'>It requires ec2-api-tools ssh scp curl and optionally xml2 to be installed somewhere on your machine.&lt;br /&gt;&lt;br /&gt;This one is a real gem:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_shell"&gt;&lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; EC2_HOME=/location/of/ec2-api-tools-1.3-42584&lt;br /&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; PATH=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;PATH&lt;/span&gt;:&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;EC2_HOME&lt;/span&gt;/bin &lt;br /&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; EC2_PRIVATE_KEY=&lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ec2/secretkeyhere.pem &lt;br /&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; EC2_CERT=&lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ec2/certhere.pem &lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home&lt;br /&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; curlflags=&lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;-L -v -b cookiejar.txt -c cookiejar.txt&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_shell"&gt;export&lt;/span&gt; appname=war_you_want_deployed_without_extension&lt;br /&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt; my_instance=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;ec2-run-instances ami-1515f67c -k gsg-keypair | grep INSTANCE | awk '{print $2}'&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt; echo &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;my_instance&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt; remotehost=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;ec2-describe-instances $my_instance | grep INSTANCE | awk '{print $4}'&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt; echo &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_shell"&gt;while&lt;/span&gt; [ &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; == &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;pending&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; ]&lt;br /&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_shell"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt;     remotehost=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;ec2-describe-instances $my_instance | grep INSTANCE | awk '{print $4}'&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt;     echo &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;    &lt;br /&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_shell"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt; ec2-authorize default -p 22&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt; ec2-authorize default -p 80&lt;br /&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt; ec2-authorize default -p 1194 -P udp&lt;br /&gt;&lt;span class='linenum'&gt;   26&lt;/span&gt; ec2-authorize default -p 1194 -P tcp&lt;br /&gt;&lt;span class='linenum'&gt;   27&lt;/span&gt; ec2-authorize default -p 8080&lt;br /&gt;&lt;span class='linenum'&gt;   28&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; -o StrictHostKeyChecking=no &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;sudo apt-get update -y&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   29&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;sudo apt-get install openjdk-6-jdk -y&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   30&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;java -version&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   31&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;wget http://apache.mirror.nexicom.net/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   32&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;tar -zxvf apache-tomcat-6.0.32.tar.gz&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   33&lt;/span&gt; ssh -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt; &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;apache-tomcat-6.0.32/bin/startup.sh&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   34&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   35&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;my_instance=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;my_instance&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   36&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;remotehost=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   37&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   38&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;curlflags&lt;/span&gt; http://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:8080 | html2&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   39&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;curlflags&lt;/span&gt; http://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:8080 &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   40&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   41&lt;/span&gt; scp -i &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;/.ssh/id_rsa-gsg-keypair &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;.war ubuntu@&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:apache-tomcat-6.0.32/webapps/&lt;br /&gt;&lt;span class='linenum'&gt;   42&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   43&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;curlflags&lt;/span&gt; http://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:8080/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt; | html2&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   44&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;curlflags&lt;/span&gt; http://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:8080/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   45&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   46&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   47&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;my_instance=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;my_instance&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   48&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;remotehost=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   49&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;server should be up at: http://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;remotehost&lt;/span&gt;:8080/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   50&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   51&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   52&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   53&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_single string_quoted_single_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;'&lt;/span&gt;dont forget to shut it down when youre done it costs money!&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   54&lt;/span&gt; echo &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;ec2-terminate-instances &lt;span class="variable variable_other variable_other_bracket variable_other_bracket_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;${&lt;/span&gt;my_instance&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   55&lt;/span&gt; &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-11038306670678972?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/11038306670678972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/04/script-to-spin-up-amazon-ec2-instance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/11038306670678972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/11038306670678972'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/04/script-to-spin-up-amazon-ec2-instance.html' title='script to spin up an amazon ec2 instance and deploy a tomcat war'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-2637090613660257511</id><published>2011-04-11T15:21:00.000-07:00</published><updated>2011-04-15T12:47:49.803-07:00</updated><title type='text'>curl + 2xml for simple http get post web test command line scripting</title><content type='html'>Web programming can get complicated pretty quickly. Everybody wishes they could automatically test their website when they make a change to ensure they haven't broken anything. For many websites this is a large and tedious task that screams out for automation. It would be nice if you could separate your web-application's functionality from the details of browser compatibility. Great strides have been taken to improve compatibility between browser versions but quirks still (and will probably always) exist. &lt;br /&gt;Some web automation tests really can and should be agnostic of the web browser being used at that point in time. Whichever version of Firefox, Chrome, Safari, Opera, IE , Lynx :), etc.. people are into at that moment.&lt;br /&gt;&lt;br /&gt;So to ensure your test automation doesn't rely on some test framework version or browser quirks, you must take the long view, you have to ensure you use only methods from the w3c http spec, get &amp;&amp; post with or without cookies. These are the web operations most likely to not change and remain compatible for the lifetime of your application.&lt;br /&gt;&lt;br /&gt;Two interesting ways of doing this are either via some curl library in your favorite programming language or alternatively via the handy curl executable compiled for your operating system, which is available on 99.99% of computers today. &lt;br /&gt;&lt;br /&gt;Let me get this out of the way. "You obviously cannot execute or test all client side JavaScript via curl." Nevertheless when any regular Javascript or even Ajax function communicates with the server it does so using standard http commands and curl can handle all of those operations. Here are some very useful sample commands that might surprise you by their simplicity and power. A consequence of building your website to be testable in this manner enforces a restful and simple design, regardless of whether you continue to test this way in future. Most higher level web testing frameworks are compatible with the operations I'm going to show you in curl, so once you've spiked out your test at the command line you'll see its trivial to convert this into another language/framework since these basic operations are universal to the web itself.&lt;br /&gt;&lt;br /&gt;If you add xml2 and the grep command you can easily prototype some test scenarios that could subsequently be scripted. The reason I'm doing this is that I often want to prototype new website designs and functions and I don't really want to have to manually log in and navigate to the page in question if this can be automated at the command-line.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you followed along with my previous post on federated login with spring-roo you'll have a copy of the same app I'm running my commands against. &lt;br /&gt;We'll assume you did and your server and app are: &lt;br /&gt;&lt;br /&gt;myserver=http://localhost:8080&lt;br /&gt;appname=openidlogin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;Most pages need redirection capability so this means add the -L flag to follow the location as it changes. &lt;br /&gt;Additionally we're gonna need to know where we've been redirected to, we'll also add the -v for verbose flag. &lt;br /&gt;&lt;br /&gt;myflags="-L -v"&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/" &lt;br /&gt;&lt;br /&gt;\\lots of html in here returned\\&lt;br /&gt;&lt;br /&gt;So that's a lot of xhtml that came back lets make that human friendly with xml2/html2 and grep&lt;br /&gt;xml2/html2 gives you an xpath representation of each xml element on a separate line which makes them grepable.  &lt;br /&gt;&lt;br /&gt;So for example:&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname" | xml2 &lt;br /&gt;&lt;br /&gt;on my app i get back something like this:&lt;br /&gt;&lt;br /&gt;/html/body/div/div/a/@title=Home&lt;br /&gt;/html/body/div/div/a/@href=/openidlogin/;jsessionid=F5E83F4ABC01CB1B0C8D222E6AE22B29&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=Create new Employee&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees;jsessionid=F5E83F4ABC01CB1B0C8D222E6AE22B29?form&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=List all Employees&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees;jsessionid=F5E83F4ABC01CB1B0C8D222E6AE22B29?page=1&amp;size=10&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=Find by Open Id Identifier&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees;jsessionid=F5E83F4ABC01CB1B0C8D222E6AE22B29?find=ByOpenIdIdentifier&amp;form&lt;br /&gt;/html/body/div/div/div/div/@id=_title_title_id&lt;br /&gt;&lt;br /&gt;This is not too bad actually. Right? And you were worried about not needing a web browser :). So you see here some link titles and hrefs for the basic CRUD operations on my app as well as a spring roo finder. &lt;br /&gt;We also received a &lt;br /&gt;Set-Cookie: JSESSIONID=F5E83F4ABC01CB1B0C8D222E6AE22B29; Path=/openidlogin&lt;br /&gt;command from the server. This is our unique session token, it's been appended to our urls. Yours would be different.&lt;br /&gt;&lt;br /&gt;To move forward from here, as is the case for many situations in life, we are going to need some cookies! Else every time we hit our server its going to think we are a different person. Curl gives us this functionality with two flags, one to store cookies, the other to send cookies. We store with a cookiejar -c flag. And we send with the -b flag. lets add those flags now.&lt;br /&gt;&lt;br /&gt;myflags="-L -v -b cookiejar.txt -c cookiejar.txt"&lt;br /&gt;&lt;br /&gt;Now if hit the site we only get a cookie the first time and it gets saved and sent along when necessary.&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/" | xml2 &lt;br /&gt;&lt;br /&gt;cat cookiejar.txt&lt;br /&gt;beastinator.local       FALSE   /openidlogin    FALSE   0       JSESSIONID      89CF82D8C4211D5C6913B9B911B67C2B&lt;br /&gt;&lt;br /&gt;That's our session. simple. And since we stored our cookies properly the jsessionid isn't appended to the url anymore which cleans things up a lot:&lt;br /&gt;&lt;br /&gt;/html/body/div/div/ul/@id=_menu&lt;br /&gt;/html/body/div/div/ul/li/@id=c_employee&lt;br /&gt;/html/body/div/div/ul/li/h2=Employee&lt;br /&gt;/html/body/div/div/ul/li/ul/li/@id=i_employee_new&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=Create new Employee&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees?form&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a=Create new Employee&lt;br /&gt;/html/body/div/div/ul/li/ul/li&lt;br /&gt;/html/body/div/div/ul/li/ul/li/@id=i_employee_list&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=List all Employees&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees?page=1&amp;size=10&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a=List all Employees&lt;br /&gt;/html/body/div/div/ul/li/ul/li&lt;br /&gt;/html/body/div/div/ul/li/ul/li/@id=fi_employee_openididentifier&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@title=Find by Open Id Identifier&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a/@href=/openidlogin/employees?find=ByOpenIdIdentifier&amp;form&lt;br /&gt;/html/body/div/div/ul/li/ul/li/a=Find by Open Id Identifier&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now lets try to go from here to the List operation on my Employee entity. namely the following link.&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/employees" | xml2 &lt;br /&gt;&lt;br /&gt;So here, based on the security settings for this app, we get redirected to a login page. As you can see in the header:&lt;br /&gt;&lt;br /&gt;&lt; HTTP/1.1 302 Moved Temporarily&lt;br /&gt;&lt; Server: Apache-Coyote/1.1&lt;br /&gt;&lt; Location: http://localhost:8080/openidlogin/login&lt;br /&gt;&lt;br /&gt;Now things get interesting. We have three options to log in. &lt;br /&gt;&lt;br /&gt;1. User/pass combo. In this case I've pre set up user1/password.&lt;br /&gt;2. Sign in with Google Federated Login. So we'll have to sign in via a prelinked google openid.&lt;br /&gt;3. Sign in with a more standard, Non-google openid provider. In this case I'll show you how to use myopenid.com.&lt;br /&gt;&lt;br /&gt;1. User/pass combo method using user1/password. Lets look the first form action.&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/login" | xml2 | grep -i form&lt;br /&gt;&lt;br /&gt;/html/body/div/div/div/div/form/@method=POST&lt;br /&gt;/html/body/div/div/div/div/form/@action=/openidlogin/resources/j_spring_security_check&lt;br /&gt;/html/body/div/div/div/div/form/@name=f&lt;br /&gt;/html/body/div/div/div/div/form/div/label/@for=j_username&lt;br /&gt;/html/body/div/div/div/div/form/div/label=Name&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@style=width:150px&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@name=j_username&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=text&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=j_username&lt;br /&gt;/html/body/div/div/div/div/form/div/script/@type=text/javascript&lt;br /&gt;/html/body/div/div/div/div/form/div/script=&lt;br /&gt;/html/body/div/div/div/div/form/div/script=          Spring.addDecoration(new Spring.ElementDecoration({elementId : "j_username", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : {promptMessage: "Enter your name", required : true}})); &lt;br /&gt;/html/body/div/div/div/div/form/div/script=        &lt;br /&gt;/html/body/div/div/div/div/form/br&lt;br /&gt;/html/body/div/div/div/div/form/div/label/@for=j_password&lt;br /&gt;/html/body/div/div/div/div/form/div/label=Password&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@style=width:150px&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@name=j_password&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=password&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=j_password&lt;br /&gt;/html/body/div/div/div/div/form/div/script/@type=text/javascript&lt;br /&gt;/html/body/div/div/div/div/form/div/script=&lt;br /&gt;/html/body/div/div/div/div/form/div/script=          Spring.addDecoration(new Spring.ElementDecoration({elementId : "j_password", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : {promptMessage: "Enter your password", required : true}})); &lt;br /&gt;/html/body/div/div/div/div/form/div/script=        &lt;br /&gt;/html/body/div/div/div/div/form/br&lt;br /&gt;/html/body/div/div/div/div/form/div/@class=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/script/@type=text/javascript&lt;br /&gt;/html/body/div/div/div/div/form/div/script=Spring.addDecoration(new Spring.ValidateAllDecoration({elementId:'proceed', event:'onclick'}));&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@value=Submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=proceed&lt;br /&gt;/html/body/div/div/div/div/form/div/input&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@value=Reset&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=reset&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=reset&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pretty simple. We have j_username and j_password fields with submit and reset buttons and the http method is post to this url /openidlogin/resources/j_spring_security_check.&lt;br /&gt;&lt;br /&gt;So in curl to make a post command all we have to do is add the data flag -d and point to the action url, like the following. &lt;br /&gt;&lt;br /&gt;curl $myflags -d "j_username=user1&amp;j_password=password" "$myserver/$appname/resources/j_spring_security_check" | xml2 &lt;br /&gt;&lt;br /&gt;thats it! we're in. we don't have to send the username and password again so we don't need to add this to $myflags since our session cookie keeps us authenticated.&lt;br /&gt;&lt;br /&gt;lets log out now and try the next method.&lt;br /&gt;curl $myflags "$myserver/$appname/resources/j_spring_security_logout" | html2&lt;br /&gt;&lt;br /&gt;2. lets try it for google. this is the part of the form we're interested in:&lt;br /&gt;visit google sign in page to get the GALX cookie&lt;br /&gt;curl $myflags http://gmail.com&lt;br /&gt;&lt;br /&gt;grab the GALX token from the cookie:&lt;br /&gt;GALX=`cat cookiejar.txt | grep www.google.com | grep GALX | awk '{print $NF}'`&lt;br /&gt;&lt;br /&gt;set a google user and pass&lt;br /&gt;goog_user=your_goog_email&lt;br /&gt;goog_pass=your_goog_pass&lt;br /&gt;&lt;br /&gt;login to google:&lt;br /&gt;curl $myflags -d "Email=$goog_user&amp;GALX=$GALX&amp;Passwd=$goog_pass&amp;asts=&amp;continue=https://mail.google.com/mail/?&amp;dnConn=&amp;dsh=$dsh&amp;hl=en&amp;ltmpl=default&amp;ltmplcache=2&amp;pstMsg=&amp;rm=false&amp;rmShown=1&amp;scc=1&amp;secTok&amp;service=mail&amp;signIn=Sign in&amp;ss=1&amp;timeStmp=" https://www.google.com/accounts/ServiceLoginAuth | html2&lt;br /&gt;&lt;br /&gt;you now have all the fancy google cookies you need for oauth. (also google is tracking you :) )&lt;br /&gt;&lt;br /&gt;So here's how we use the fancy cookies to log into our site. I'm going to assume you already granted permissions on the google account in question for this app.&lt;br /&gt;&lt;br /&gt;so lets look at the part of our form that does google oauth:&lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/login" | html2 | grep -i form&lt;br /&gt;&lt;br /&gt;/html/body/div/div/div/div/form/@method=post&lt;br /&gt;/html/body/div/div/div/div/form/@action=/openidlogin/j_spring_openid_security_check;jsessionid=00FD152C5918A248CD10CEC030C4F864&lt;br /&gt;/html/body/div/div/div/div/form/input/@value=http://www.google.com/accounts/o8/id&lt;br /&gt;/html/body/div/div/div/div/form/input/@type=hidden&lt;br /&gt;/html/body/div/div/div/div/form/input/@maxlength=100&lt;br /&gt;/html/body/div/div/div/div/form/input/@size=50&lt;br /&gt;/html/body/div/div/div/div/form/input/@name=openid_identifier&lt;br /&gt;/html/body/div/div/div/div/form/div/@class=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@value=Sign in with Google&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=proceed_google&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;looks like all we need to do is send on the hard coded openid_identifier http://www.google.com/accounts/o8/id &lt;br /&gt;&lt;br /&gt;curl $myflags -d "openid_identifier=http://www.google.com/accounts/o8/id" "$myserver/$appname/j_spring_openid_security_check" &lt;br /&gt;&lt;br /&gt;let all the fancy oauth redirecting do its thing with your cookies, then you can query employees since you are logged in!&lt;br /&gt; &lt;br /&gt;curl $myflags "$myserver/$appname/employees" | html2 | grep "/html/body/div/div/div/div/table/tr/td="&lt;br /&gt;&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=ACTIVE&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=ROLE_ADMIN&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=5e884898da&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=user1&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=ACTIVE&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=ROLE_USER&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=5e884898da&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=user2&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=Peter&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=RESIGNED&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=ROLE_USER&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=5e884898da&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=user3&lt;br /&gt;/html/body/div/div/div/div/table/tr/td=Christina&lt;br /&gt;/html/body/div/div/div/div/table/tr/td= &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;lets log out now and try the next method.&lt;br /&gt;curl $myflags "$myserver/$appname/resources/j_spring_security_logout" | html2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Sign in with a more standard, Non-google openid provider. In this case I'll show you how to use myopenid.com.&lt;br /&gt;head back to the login page and examine the third form action. &lt;br /&gt;&lt;br /&gt;curl $myflags "$myserver/$appname/login" | xml2 | grep -i form&lt;br /&gt; &lt;br /&gt;/html/body/div/div/div/div/form/@action=/openidlogin/j_spring_openid_security_check&lt;br /&gt;/html/body/div/div/div/div/form/div/label/@for=openid_identifier&lt;br /&gt;/html/body/div/div/div/div/form/div/label=OpenID&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@style=width:150px&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=text&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@name=openid_identifier&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=openid_identifier&lt;br /&gt;/html/body/div/div/div/div/form/br&lt;br /&gt;/html/body/div/div/div/div/form/div/@class=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@value=Submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@type=submit&lt;br /&gt;/html/body/div/div/div/div/form/div/input/@id=proceed_openid&lt;br /&gt;&lt;br /&gt;so as before once we have our openid provider's cookie, we just send our openid provider url as a form post parameter and direct curl to the j_spring_openid_security_check action .&lt;br /&gt;&lt;br /&gt;example for myopenid.com:&lt;br /&gt;&lt;br /&gt; curl $myflags -d "openid_identifier=https://thamster.myopenid.com" "$myserver/$appname/j_spring_openid_security_check" | html2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;so to sign in to myopenid.com you do the following:&lt;br /&gt;curl $myflags "https://www.myopenid.com/signin" &gt; myopenidsignin.html&lt;br /&gt;blank=`cat myopenidsignin.html | html2 | grep "=_$" -A 1 | grep value | awk -F"@value=" '{print $2}' | tail -n 1`&lt;br /&gt;tid=`cat myopenidsignin.html | html2 | grep "=tid$" -A 1 | grep value | awk -F"@value=" '{print $2}' | tail -n 1`&lt;br /&gt;token=`cat myopenidsignin.html | html2 | grep "=token$" -A 1 | grep value | awk -F"@value=" '{print $2}' | head -n 1`&lt;br /&gt;myopen_user=your_username&lt;br /&gt;myopen_pass=your_password&lt;br /&gt;&lt;br /&gt;curl $myflags -d "user_name=$myopen_user&amp;password=$myopen_pass&amp;_=$blank&amp;tid=$tid&amp;token=$token" "https://www.myopenid.com/signin_submit"&lt;br /&gt;&lt;br /&gt;curl $myflags -d "openid_identifier=https://$myopen_user.myopenid.com" "$myserver/$appname/j_spring_openid_security_check" | html2&lt;br /&gt;&lt;br /&gt;Thats it you're in. congrats, you didn't even need a browser.&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_shell"&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;# summary&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;# for those of you who read bash better than english. &lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt; myflags=&lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;-L -v -b cookiejar.txt -c cookiejar.txt&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt; myserver=http://localhost:8080&lt;br /&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt; appname=openidlogin&lt;br /&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;login with username and pass&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;j_username=user1&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;j_password=password&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myserver&lt;/span&gt;/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;/resources/j_spring_security_check&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;login with google oauth&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;simplified gmail oauth login&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; http://gmail.com&lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt; GALX=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;cat cookiejar.txt | grep www.google.com | grep GALX | awk '{print $NF}'&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt; goog_user=your_goog_user&lt;br /&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt; goog_pass=your_goog_pass&lt;br /&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;Email=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;goog_user&lt;/span&gt;&amp;amp;GALX=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;GALX&lt;/span&gt;&amp;amp;Passwd=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;goog_pass&lt;/span&gt;&amp;amp;asts=&amp;amp;continue=https://mail.google.com/mail/?&amp;amp;dnConn=&amp;amp;dsh=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;dsh&lt;/span&gt;&amp;amp;hl=en&amp;amp;ltmpl=default&amp;amp;ltmplcache=2&amp;amp;pstMsg=&amp;amp;rm=false&amp;amp;rmShown=1&amp;amp;scc=1&amp;amp;secTok&amp;amp;service=mail&amp;amp;signIn=Sign in&amp;amp;ss=1&amp;amp;timeStmp=&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; https://www.google.com/accounts/ServiceLoginAuth &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;openid_identifier=http://www.google.com/accounts/o8/id&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myserver&lt;/span&gt;/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;/j_spring_openid_security_check&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;login with myopenid.com&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;https://www.myopenid.com/signin&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_redirect keyword_operator_redirect_shell"&gt;&amp;gt;&lt;/span&gt; myopenidsignin.html&lt;br /&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt; blank=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;cat myopenidsignin.html | html2 | grep "=_$" -A 1 | grep value | awk -F"@value=" '{print $2}' | tail -n 1&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt; tid=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;cat myopenidsignin.html | html2 | grep "=tid$" -A 1 | grep value | awk -F"@value=" '{print $2}' | tail -n 1&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt; token=&lt;span class="string string_interpolated string_interpolated_backtick string_interpolated_backtick_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;`&lt;/span&gt;cat myopenidsignin.html | html2 | grep "=token$" -A 1 | grep value | awk -F"@value=" '{print $2}' | head -n 1&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   26&lt;/span&gt; myopen_user=username&lt;br /&gt;&lt;span class='linenum'&gt;   27&lt;/span&gt; myopen_pass=password&lt;br /&gt;&lt;span class='linenum'&gt;   28&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;user_name=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myopen_user&lt;/span&gt;&amp;amp;password=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myopen_pass&lt;/span&gt;&amp;amp;_=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;blank&lt;/span&gt;&amp;amp;tid=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;tid&lt;/span&gt;&amp;amp;token=&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;token&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;https://www.myopenid.com/signin_submit&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   29&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; -d &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;openid_identifier=https://&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myopen_user&lt;/span&gt;.myopenid.com&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myserver&lt;/span&gt;/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;/j_spring_openid_security_check&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   30&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   31&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;logout &lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   32&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myserver&lt;/span&gt;/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;/resources/j_spring_security_logout&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2&lt;br /&gt;&lt;span class='linenum'&gt;   33&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   34&lt;/span&gt; &lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt;list employees once logged in&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   35&lt;/span&gt; curl &lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myflags&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;myserver&lt;/span&gt;/&lt;span class="variable variable_other variable_other_normal variable_other_normal_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell"&gt;$&lt;/span&gt;appname&lt;/span&gt;/employees&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; html2 &lt;span class="keyword keyword_operator keyword_operator_pipe keyword_operator_pipe_shell"&gt;|&lt;/span&gt; grep &lt;span class="string string_quoted string_quoted_double string_quoted_double_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell"&gt;"&lt;/span&gt;/html/body/div/div/div/div/table/tr/td=&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   36&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   37&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;more info on curl can be found here: &lt;br /&gt;http://curl.haxx.se/docs/manual.html&lt;br /&gt;http://curl.haxx.se/docs/manpage.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-2637090613660257511?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/2637090613660257511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/04/curl-2xml-for-simple-http-get-post-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/2637090613660257511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/2637090613660257511'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/04/curl-2xml-for-simple-http-get-post-web.html' title='curl + 2xml for simple http get post web test command line scripting'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-7441743238509937692</id><published>2011-04-11T14:44:00.000-07:00</published><updated>2011-05-20T14:55:25.179-07:00</updated><title type='text'>myopenid + google federated login + with spring roo. dead simply.</title><content type='html'>##gonna clean up the formatting on this article soon.&lt;br /&gt;## this step by step guide is based on the following excellent article:&lt;br /&gt;http://bsgdev.wordpress.com/2011/01/18/exploring-google-and-openid-login-with-spring-security-and-spring-roo/&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_shell"&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Project&lt;br /&gt;&lt;/span&gt;project --topLevelPackage za.co.bsg.rnd.trf.openidlogin&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Persistence&lt;br /&gt;&lt;/span&gt;persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY --databaseName openidlogin --hostName localhost&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Dependencies&lt;br /&gt;&lt;/span&gt;dependency add --groupId org.springframework.security --artifactId spring-security-openid --version 3.0.5.RELEASE&lt;br /&gt;dependency add --groupId org.openid4java --artifactId openid4java --version 0.9.5&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Domain model&lt;br /&gt;&lt;/span&gt;enum type --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.UserRole&lt;br /&gt;enum constant --name ROLE_ADMIN&lt;br /&gt;enum constant --name ROLE_USER&lt;br /&gt;&lt;br /&gt;enum type --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.EmployeeStatus&lt;br /&gt;enum constant --name ACTIVE&lt;br /&gt;enum constant --name DORMANT&lt;br /&gt;enum constant --name RESIGNED&lt;br /&gt;enum constant --name TERMINATED&lt;br /&gt;&lt;br /&gt;entity --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.Employee --table employee --identifierColumn employee_id&lt;br /&gt;field string --fieldName username --column username --notNull&lt;br /&gt;field string --fieldName password --column password --notNull&lt;br /&gt;field enum --type &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.UserRole --fieldName userRole --notNull --enumType STRING&lt;br /&gt;field string --fieldName openIdIdentifier --column openid_identifier&lt;br /&gt;field string --fieldName firstName --column first_name&lt;br /&gt;field string --fieldName lastName --column last_name&lt;br /&gt;field string --fieldName emailAddress --column email_address&lt;br /&gt;field enum --type &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.EmployeeStatus --fieldName status --notNull --enumType STRING&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; we will also need a finder&lt;br /&gt;&lt;/span&gt;finder add --finderName findEmployeesByOpenIdIdentifier --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.domain.Employee&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Scaffold the web frontend&lt;br /&gt;&lt;/span&gt;controller all --package &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.web&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Spring Security&lt;br /&gt;&lt;/span&gt;security setup&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell"&gt;#&lt;/span&gt; Other classes&lt;br /&gt;&lt;/span&gt;class --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.InsertTestData&lt;br /&gt;class --class &lt;span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell"&gt;~&lt;/span&gt;.OpenIdUserDetailsService&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now implement these two java classes InsertTestData.java simply populates an initial db with data.&lt;br /&gt;OpenIdUserDetailsService is our implementation of spring UserDetailsService that uses our finder to query the db using openid and return the right employee which we've augmented to be a fully fledged UserDetails Object by implementing that interface.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="source source_java"&gt;&lt;br /&gt;&lt;span class="meta meta_package meta_package_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;package&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_package entity_name_function_package_java"&gt;za.co.bsg.rnd.trf.openidlogin&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;java.security.MessageDigest&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;java.security.NoSuchAlgorithmException&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.apache.commons.codec.binary.Hex&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.beans.factory.annotation.Configurable&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.context.ApplicationEvent&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.context.ApplicationListener&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.context.event.ContextRefreshedEvent&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.stereotype.Component&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;za.co.bsg.rnd.trf.openidlogin.domain.Employee&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;za.co.bsg.rnd.trf.openidlogin.domain.EmployeeStatus&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;za.co.bsg.rnd.trf.openidlogin.domain.UserRole&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Component&lt;/span&gt;&lt;br /&gt;@&lt;span class="storage storage_type storage_type_java"&gt;Configurable&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_class meta_definition_class_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;class&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_java"&gt;InsertTestData&lt;/span&gt; &lt;span class="meta meta_definition meta_definition_class meta_definition_class_implements meta_definition_class_implements_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;implements&lt;/span&gt;&lt;br /&gt;&lt;span class="storage storage_type storage_type_java"&gt;ApplicationListener&lt;/span&gt;&amp;lt;contextrefreshedevent&amp;gt; &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;&lt;span class="storage storage_modifier storage_modifier_access-control storage_modifier_access-control_java"&gt;public&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_java"&gt;static&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_java"&gt;final&lt;/span&gt; &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;String&lt;/span&gt; &lt;span class="constant constant_other constant_other_java"&gt;PASSWORD&lt;/span&gt; = &lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;password&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;void&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;onApplicationEvent&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;span class="storage storage_type storage_type_java"&gt;ContextRefreshedEvent&lt;/span&gt; event&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt;init();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;private &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;void&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;init&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_java"&gt;if&lt;/span&gt; (&lt;span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_java"&gt;!&lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt;.findAllEmployees().isEmpty()) {&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt; employeeAdminActive = &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt;();&lt;br /&gt;employeeAdminActive.setUsername(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;user1&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employeeAdminActive.setPassword(hexSha256(&lt;span class="constant constant_other constant_other_java"&gt;PASSWORD&lt;/span&gt;));&lt;br /&gt;employeeAdminActive.setUserRole(&lt;span class="storage storage_type storage_type_java"&gt;UserRole&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ROLE_ADMIN&lt;/span&gt;);&lt;br /&gt;employeeAdminActive.setStatus(&lt;span class="storage storage_type storage_type_java"&gt;EmployeeStatus&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ACTIVE&lt;/span&gt;);&lt;br /&gt;employeeAdminActive.setOpenIdIdentifier(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;https://you.myopenid.com/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employeeAdminActive.persist();&lt;br /&gt;&lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt; employee2 = &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt;();&lt;br /&gt;employee2.setUsername(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;user2&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee2.setPassword(hexSha256(&lt;span class="constant constant_other constant_other_java"&gt;PASSWORD&lt;/span&gt;));&lt;br /&gt;employee2.setUserRole(&lt;span class="storage storage_type storage_type_java"&gt;UserRole&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ROLE_USER&lt;/span&gt;);&lt;br /&gt;employee2.setFirstName(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;Peter&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee2.setLastName(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;Jones&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee2.setStatus(&lt;span class="storage storage_type storage_type_java"&gt;EmployeeStatus&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ACTIVE&lt;/span&gt;);&lt;br /&gt;employee2.setOpenIdIdentifier("https://www.google.com/accounts/o8/id?id=your_id_goes_here");&lt;br /&gt;employee2.persist();&lt;br /&gt;&lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt; employee3 = &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt;();&lt;br /&gt;employee3.setUsername(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;user3&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee3.setPassword(hexSha256(&lt;span class="constant constant_other constant_other_java"&gt;PASSWORD&lt;/span&gt;));&lt;br /&gt;employee3.setUserRole(&lt;span class="storage storage_type storage_type_java"&gt;UserRole&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ROLE_USER&lt;/span&gt;);&lt;br /&gt;employee3.setFirstName(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;Christina&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee3.setLastName(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;Applegate&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;employee3.setStatus(&lt;span class="storage storage_type storage_type_java"&gt;EmployeeStatus&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;RESIGNED&lt;/span&gt;);&lt;br /&gt;employee3.persist();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;private &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;String&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;hexSha256&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;String&lt;/span&gt; password2&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt;&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;MessageDigest&lt;/span&gt; md;&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_catch-exception keyword_control_catch-exception_java"&gt;try&lt;/span&gt; {&lt;br /&gt;md = &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;MessageDigest&lt;/span&gt;.getInstance(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;SHA-256&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;md.update(&lt;span class="constant constant_other constant_other_java"&gt;password2&lt;/span&gt;.getBytes());&lt;br /&gt;&lt;span class="storage storage_type storage_type_java"&gt;byte&lt;/span&gt; byteData[] = md.digest();&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;String&lt;/span&gt;(&lt;span class="storage storage_type storage_type_java"&gt;Hex&lt;/span&gt;.encodeHex(byteData));&lt;br /&gt;&lt;br /&gt;} &lt;span class="keyword keyword_control keyword_control_catch-exception keyword_control_catch-exception_java"&gt;catch&lt;/span&gt; (&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;NoSuchAlgorithmException&lt;/span&gt; e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;&lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; password2;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span class="meta meta_package meta_package_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;package&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_package entity_name_function_package_java"&gt;za.co.bsg.rnd.trf.openidlogin&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.security.authentication.DisabledException&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.security.core.userdetails.UserDetails&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.security.core.userdetails.UserDetailsService&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;org.springframework.security.core.userdetails.UsernameNotFoundException&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;za.co.bsg.rnd.trf.openidlogin.domain.Employee&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_import meta_import_java"&gt;&lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;import&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_import entity_name_type_import_java"&gt;java.util.List&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_class meta_definition_class_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;class&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_java"&gt;OpenIdUserDetailsService&lt;/span&gt; &lt;span class="meta meta_definition meta_definition_class meta_definition_class_implements meta_definition_class_implements_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;implements&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;UserDetailsService&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt; &lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;UserDetails&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;loadUserByUsername&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;String&lt;/span&gt; openIdIdentifier&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt;     &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;List&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_java"&gt;&amp;lt;&lt;/span&gt;employee&lt;span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_java"&gt;&amp;gt;&lt;/span&gt; employeeList =&lt;br /&gt;             &lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt;.findEmployeesByOpenIdIdentifier(openIdIdentifier).getResultList();&lt;br /&gt;     &lt;span class="storage storage_type storage_type_java"&gt;Employee&lt;/span&gt; employee = employeeList.size() &lt;span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_java"&gt;==&lt;/span&gt; &lt;span class="constant constant_numeric constant_numeric_java"&gt;0&lt;/span&gt; ? &lt;span class="constant constant_language constant_language_java"&gt;null&lt;/span&gt; : employeeList.get(&lt;span class="constant constant_numeric constant_numeric_java"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;     &lt;span class="keyword keyword_control keyword_control_java"&gt;if&lt;/span&gt; (employee &lt;span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_java"&gt;==&lt;/span&gt; &lt;span class="constant constant_language constant_language_java"&gt;null&lt;/span&gt;) {&lt;br /&gt;         &lt;span class="keyword keyword_control keyword_control_catch-exception keyword_control_catch-exception_java"&gt;throw&lt;/span&gt; &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;UsernameNotFoundException&lt;/span&gt;(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;User not found for OpenID: &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_java"&gt;+&lt;/span&gt; openIdIdentifier);&lt;br /&gt;     } &lt;span class="keyword keyword_control keyword_control_java"&gt;else&lt;/span&gt; {&lt;br /&gt;         &lt;span class="keyword keyword_control keyword_control_java"&gt;if&lt;/span&gt; (&lt;span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_java"&gt;!&lt;/span&gt;employee.isEnabled()) {&lt;br /&gt;             &lt;span class="keyword keyword_control keyword_control_catch-exception keyword_control_catch-exception_java"&gt;throw&lt;/span&gt; &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;DisabledException&lt;/span&gt;(&lt;span class="string string_quoted string_quoted_double string_quoted_double_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_java"&gt;"&lt;/span&gt;User is disabled&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_java"&gt;"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;         }&lt;br /&gt;         &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; employee;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment comment_block comment_block_java"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_java"&gt;/*&lt;/span&gt;Now make sure Employee.java implements the UserDetails Interface.&lt;br /&gt;&lt;br /&gt;public class Employee implements UserDetails&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and add the following interface method implementations.&lt;br /&gt;(you need to leave roo running to correct the aspect j getters for username and password.)&lt;br /&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_java"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;String&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;getUsername&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="variable variable_language variable_language_java"&gt;this&lt;/span&gt;.username;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;String&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;getPassword&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="variable variable_language variable_language_java"&gt;this&lt;/span&gt;.password;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;boolean&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;isAccountNonExpired&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="constant constant_language constant_language_java"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;boolean&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;isAccountNonLocked&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="constant constant_language constant_language_java"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;boolean&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;isCredentialsNonExpired&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="constant constant_language constant_language_java"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;boolean&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;isEnabled&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; &lt;span class="variable variable_language variable_language_java"&gt;this&lt;/span&gt;.status &lt;span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_java"&gt;==&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;EmployeeStatus&lt;/span&gt;.&lt;span class="constant constant_other constant_other_java"&gt;ACTIVE&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@&lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Override&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_definition meta_definition_method meta_definition_method_java"&gt;&lt;span class="storage storage_modifier storage_modifier_java"&gt;public &lt;/span&gt;&lt;span class="storage storage_type storage_type_java"&gt;Collection&lt;/span&gt; &lt;span class="entity entity_name entity_name_function entity_name_function_java"&gt;getAuthorities&lt;/span&gt;&lt;span class="meta meta_definition meta_definition_param-list meta_definition_param-list_java"&gt;(&lt;/span&gt;) &lt;/span&gt;{&lt;br /&gt; &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;Collection&lt;/span&gt; grantedAuthorities = &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="support support_type support_type_built-ins support_type_built-ins_java"&gt;HashSet&lt;/span&gt;();&lt;br /&gt; grantedAuthorities.add(&lt;br /&gt;         &lt;span class="keyword keyword_other keyword_other_class-fns keyword_other_class-fns_java"&gt;new&lt;/span&gt; &lt;span class="storage storage_type storage_type_java"&gt;GrantedAuthorityImpl&lt;/span&gt;(&lt;span class="variable variable_language variable_language_java"&gt;this&lt;/span&gt;.userRole.name()));&lt;br /&gt; &lt;span class="keyword keyword_control keyword_control_java"&gt;return&lt;/span&gt; grantedAuthorities;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class="text text_html text_html_basic"&gt;&lt;br /&gt;in applicationContext-securtity&lt;br /&gt;change&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;intercept&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;pattern&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/**&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;access&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;permitAll&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;to &lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;intercept&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;pattern&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;access&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;permitAll&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;intercept&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;pattern&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/login/**&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;access&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;permitAll&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;intercept&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;pattern&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/**&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;access&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;isAuthenticated()&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;openid&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-login&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;authentication-failure-url&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/login?login_error=t&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;user-service-ref&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;openIdUserService&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and change &lt;br /&gt;         &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;user&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-service&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;             &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;user&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;name&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;admin&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;password&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;authorities&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;ROLE_ADMIN&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;user&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;name&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;user&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;password&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;authorities&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;ROLE_USER&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;user&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-service&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;to &lt;br /&gt;&lt;br /&gt;      &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;jdbc&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-user-service&lt;/span&gt;&lt;br /&gt;    &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;data-source-ref&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;dataSource&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;users-by-username-query&lt;/span&gt;=&lt;br /&gt;                        &lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;SELECT&lt;br /&gt;                            U.username,&lt;br /&gt;                            U.password,&lt;br /&gt;                            U.status = 'ACTIVE'&lt;br /&gt;                         FROM&lt;br /&gt;                            employee U&lt;br /&gt;                         WHERE&lt;br /&gt;                            U.username=?&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;authorities-by-username-query&lt;/span&gt;=&lt;br /&gt;                        &lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;SELECT&lt;br /&gt;                            U.username,&lt;br /&gt;                            U.user_role as authority&lt;br /&gt;                         FROM&lt;br /&gt;                            employee U&lt;br /&gt;                         WHERE&lt;br /&gt;                            U.username=?&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;after &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;authentication&lt;/span&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;-manager&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; add:&lt;br /&gt; &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;beans:bean&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;openIdUserService&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;class&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;za.co.bsg.rnd.trf.openidlogin.OpenIdUserDetailsService&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;add the google and open id form actions to the autogenerated login.jspx after &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;util:panel&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;spring:url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/j_spring_openid_security_check&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;var&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;form_url_openid&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;spring:url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;var&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;google&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/resources/images/google-account-logo.png&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;spring:url&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;var&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;openid&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;/resources/images/openid-logo.png&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; /&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;util:panel&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;title_google&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;title&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;Google Login&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;img&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;src&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;${google}&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;style&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;float:right&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;p&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;style&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;height:0.25em&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;form&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;action&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;${fn:escapeXml(form_url_openid)}&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;method&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;post&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;input&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;name&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;openid_identifier&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;size&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;50&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;maxlength&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;100&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;type&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;hidden&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;http://www.google.com/accounts/o8/id&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;class&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;submit&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;           &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;input&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;proceed_google&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;type&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;submit&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;Sign in with Google&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;form&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;br&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;p&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;util:panel&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;util:panel&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;title_openid&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;title&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;OpenID Login&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;a&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;href&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;http://openid.net/get-an-openid/&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;target&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;_blank&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;title&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;Where do I get one?&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;img&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;src&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;${openid}&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;style&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;float:right&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;a&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;p&lt;/span&gt;/&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;form&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;action&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;${fn:escapeXml(form_url_openid)}&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;method&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;post&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;label&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;for&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;openid_identifier&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;OpenID&lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;label&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;input&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;openid_identifier&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;name&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;openid_identifier&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;type&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;text&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;style&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;width:150px&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;br&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;class&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;submit&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html"&gt;input&lt;/span&gt; &lt;span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"&gt;&lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html"&gt;id&lt;/span&gt;&lt;span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html"&gt;=&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;&lt;span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html"&gt;proceed_openid&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;type&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;submit&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html"&gt;value&lt;/span&gt;=&lt;span class="string string_quoted string_quoted_double string_quoted_double_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html"&gt;"&lt;/span&gt;${fn:escapeXml(submit_label)}&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;div&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html"&gt;form&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="meta meta_tag meta_tag_other meta_tag_other_html"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="entity entity_name entity_name_tag entity_name_tag_other entity_name_tag_other_html"&gt;util:panel&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Just change you.myopenid.com to whatever provider you prefer for that user in the insert test data method and you are good to go.&lt;/employee&gt;&lt;/contextrefreshedevent&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-7441743238509937692?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/7441743238509937692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/04/myopenid-google-federated-login-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/7441743238509937692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/7441743238509937692'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/04/myopenid-google-federated-login-with.html' title='myopenid + google federated login + with spring roo. dead simply.'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-1217183383607793156</id><published>2011-03-29T18:11:00.000-07:00</published><updated>2011-05-06T11:38:58.292-07:00</updated><title type='text'>0 to RestFul Resource in 17seconds.</title><content type='html'>Lets see some rails people figure out how to do this as dead simply as in spring-roo on java.&lt;br /&gt;&lt;br /&gt;spring-roo commands:&lt;br /&gt;&lt;br /&gt;mkdir myrestful_resource&lt;br /&gt;cd myrestful_resource&lt;br /&gt;roo&lt;br /&gt;project --topLevelPackage com.my.web.my.restful.resources&lt;br /&gt;persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY&lt;br /&gt;entity --class ~.domain.Resource1&lt;br /&gt;field string --fieldName myfirstfield&lt;br /&gt;field string --fieldName mysecondfield&lt;br /&gt;controller all --package ~.controllers&lt;br /&gt;osgi start --url http://spring-roo-addons.googlecode.com/files/net.tzolov.httprepresentations.roo.addon-1.1.7.jar&lt;br /&gt;http resource representation setup&lt;br /&gt;http resource add oxm --class ~.domain.Resource1&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;json/html conversion works out of the box without modification however you need to annotate the model objects you want converted to xml by jaxb with @XmlRootElement so it knows what you want returned.&lt;br /&gt;&lt;br /&gt;vi src/main/java/com/my/web/my/restful/resources/domain/Resource1.java &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-D1BR448bnkg/TZKLVIJKyTI/AAAAAAAAAaM/Ht7cLgnMK1c/s1600/Screen%2Bshot%2B2011-03-29%2Bat%2B6.45.35%2BPM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 303px; height: 208px;" src="http://3.bp.blogspot.com/-D1BR448bnkg/TZKLVIJKyTI/AAAAAAAAAaM/Ht7cLgnMK1c/s400/Screen%2Bshot%2B2011-03-29%2Bat%2B6.45.35%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5589683282599659826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mvn tomcat:run&lt;br /&gt;&lt;br /&gt;open up http://localhost:8080/resources in your browser and create some data on the auto-generated controllers.&lt;br /&gt;&lt;br /&gt;access it via your browser or curl by simply appending .json .xml extensions to the url.&lt;br /&gt;&lt;br /&gt;curl http://localhost:8080/resources/resource1s/1.json&lt;br /&gt;curl http://localhost:8080/resources/resource1s/1.xml&lt;br /&gt;curl http://localhost:8080/resources/resource1s/1.html&lt;br /&gt;&lt;br /&gt;Pow!&lt;br /&gt;&lt;br /&gt;also check out this springsource post about hitting json rest based services with curl.&lt;br /&gt;http://www.springsource.org/roo/guide?w=base-json&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-1217183383607793156?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/1217183383607793156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/03/0-to-restful-resource-in-17seconds.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/1217183383607793156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/1217183383607793156'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/03/0-to-restful-resource-in-17seconds.html' title='0 to RestFul Resource in 17seconds.'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-D1BR448bnkg/TZKLVIJKyTI/AAAAAAAAAaM/Ht7cLgnMK1c/s72-c/Screen%2Bshot%2B2011-03-29%2Bat%2B6.45.35%2BPM.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-5183527821245009025</id><published>2011-02-03T15:47:00.000-08:00</published><updated>2011-02-05T11:11:47.251-08:00</updated><title type='text'>Binary Trees In Java - Non Recursively Revisited</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_L5qZZpYV3O0/TUu05Pp4P1I/AAAAAAAAAZg/1a5zJGVTJHo/s1600/Screen%2Bshot%2B2011-02-04%2Bat%2B12.07.20%2BAM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 240px; height: 185px;" src="http://2.bp.blogspot.com/_L5qZZpYV3O0/TUu05Pp4P1I/AAAAAAAAAZg/1a5zJGVTJHo/s400/Screen%2Bshot%2B2011-02-04%2Bat%2B12.07.20%2BAM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569744259721477970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following is a demonstration of simple Binary Search Tree traversals in Java working off the following diagram. Simple recursive call solutions exist and are often used but they can create a rather large call stack for large binary trees. &lt;br /&gt;Here I've instead favored finding non-recursive solutions for the standard BFS, and 3 types of DFS (preorder, inorder, postorder) which are a little trickier to understand but result in easier memory management for large trees. &lt;br /&gt;&lt;br /&gt;To follow along download the 6k source for this article:&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B-nUK7qQ4yhIY2EzMjRjYmQtOTkxMy00ZGMxLTlmM2EtYmM0MTAxNzNjZmY1&amp;export=download&amp;hl=en"&gt;TreeTraversal.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="screen"&gt;#unzip:&lt;br /&gt;&lt;span class="command"&gt;&lt;strong&gt;tar -zxvf TreeTraversal.tar.gz&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="screen"&gt;#configure the eclipse project using maven:&lt;br /&gt;&lt;span class="command"&gt;&lt;strong&gt;mvn eclipse:eclipse&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;then simply import as an existing project into eclipse&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_js"&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;package&lt;/span&gt; Prep&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;TreeTraversal&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ArrayList&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;HashSet&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;LinkedHashSet&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;List&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Queue&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Set&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Stack&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;concurrent&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ConcurrentLinkedQueue&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; lombok&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;ToString&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;apache&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;log4j&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Logger&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt; @ToString&lt;br /&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt; TreeTraversal &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;private&lt;/span&gt; Set&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; treeNodes &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;LinkedHashSet&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;static&lt;/span&gt; Logger log &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; Logger&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getLogger&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;TreeTraversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt;     &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; Node Struct&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt; Node &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; -- yes i know public fields - suck it, this is only a Struct.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node parent&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   26&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node self&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   27&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; name&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   28&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node leftChild&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   29&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node rightChild&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   30&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; name&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   31&lt;/span&gt;             &lt;span class="variable variable_language variable_language_js"&gt;this&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; name&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   32&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   33&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt; &lt;span class="support support_function support_function_js"&gt;toString&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   34&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; &lt;span class="variable variable_language variable_language_js"&gt;this&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   35&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   36&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   37&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   38&lt;/span&gt;     &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; traversal methods&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   39&lt;/span&gt;     &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   40&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; bfsTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   41&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; basically this uses a queue (first in first out)&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   42&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 1. start by queuing the root node&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   43&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 2. dequeue the first element.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   44&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 2.5 process it/ add it to the traversal list/ whatever you're&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   45&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; trying to do&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   46&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 3. enqueue its children in order left then right if they exist.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   47&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 4. return to step 2 if queue still has elements&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   48&lt;/span&gt;         Queue&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; queue &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ConcurrentLinkedQueue&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   49&lt;/span&gt;         queue&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;getRoot&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   50&lt;/span&gt;         ArrayList&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; result &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   51&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;while&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;!&lt;/span&gt;queue&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;isEmpty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   52&lt;/span&gt;             Node thisNode &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; queue&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;remove&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   53&lt;/span&gt;             log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;processing &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   54&lt;/span&gt;             result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   55&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   56&lt;/span&gt;                 queue&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   57&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   58&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   59&lt;/span&gt;                 queue&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   60&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   61&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   62&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; result&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   63&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   64&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   65&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; dfsPreorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   66&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; uses a stack (last in first out).&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   67&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 1. push the root node&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   68&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 2. pop the next node &amp;amp; process it, print it, whatever you like&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   69&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 3. push the right_child then the left_child if either exist.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   70&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 4. repeat step 2 till stack is empty.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   71&lt;/span&gt;         Stack&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; mystack &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Stack&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   72&lt;/span&gt;         mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;getRoot&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   73&lt;/span&gt;         ArrayList&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; result &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   74&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;while&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;!&lt;/span&gt;mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;isEmpty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   75&lt;/span&gt;             Node thisNode &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;pop&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   76&lt;/span&gt;             log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;processing &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   77&lt;/span&gt;             result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   78&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   79&lt;/span&gt;                 mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   80&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   81&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   82&lt;/span&gt;                 mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   83&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   84&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   85&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; result&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   86&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   87&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   88&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; dfsInorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   89&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; uses a stack (last in first out).&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   90&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 1. push the root node and all left sub-children&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   91&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 2. pop the next node &amp;amp; process it, print it, whatever you like&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   92&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 3. if there is a right_child push it and all it's left&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   93&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; sub-children onto the stack.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   94&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 4. repeat step 2 till stack is empty.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   95&lt;/span&gt;         Stack&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; mystack &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Stack&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   96&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;for&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node node : getAllLeftSubChildresn&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;getRoot&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()))&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   97&lt;/span&gt;             mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;node&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   98&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   99&lt;/span&gt;         ArrayList&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; result &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  100&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;while&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;!&lt;/span&gt;mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;isEmpty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  101&lt;/span&gt;             Node thisNode &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;pop&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  102&lt;/span&gt;             log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;processing &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  103&lt;/span&gt;             result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  104&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  105&lt;/span&gt;                 &lt;span class="keyword keyword_control keyword_control_js"&gt;for&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node node : getAllLeftSubChildresn&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;))&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  106&lt;/span&gt;                     mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;node&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  107&lt;/span&gt;                 &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  108&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  109&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  110&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; result&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  111&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  112&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  113&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; dfsPostorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  114&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; uses a stack (last in first out).&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  115&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 1. push the root node and all left sub-children&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  116&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 2. peek at the top of the stack&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  117&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 3. if that node has an unvisited right_child add it and all its&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  118&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; left sub-children&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  119&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 4. else pop it, mark it visited and process it.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  120&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; step 5. repeat step 2 till stack is empty.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  121&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  122&lt;/span&gt;         Stack&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; mystack &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Stack&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  123&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;for&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node node : getAllLeftSubChildresn&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;getRoot&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()))&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  124&lt;/span&gt;             mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;node&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  125&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  126&lt;/span&gt;         ArrayList&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; result &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  127&lt;/span&gt;         Set&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; visited &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;HashSet&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  128&lt;/span&gt;         Node thisNode&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  129&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;while&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;!&lt;/span&gt;mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;isEmpty&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;())&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  130&lt;/span&gt;             thisNode &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;peek&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  131&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  132&lt;/span&gt;                     &lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!&lt;/span&gt;visited&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;contains&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;))&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  133&lt;/span&gt;                 &lt;span class="keyword keyword_control keyword_control_js"&gt;for&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node node : getAllLeftSubChildresn&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;))&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  134&lt;/span&gt;                     mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;push&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;node&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  135&lt;/span&gt;                 &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  136&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;else&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  137&lt;/span&gt;                 log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;processing &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; &lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;, curr stack: &lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  138&lt;/span&gt;                         &lt;span class="keyword keyword_operator keyword_operator_js"&gt;+&lt;/span&gt; mystack&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  139&lt;/span&gt;                 thisNode &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; mystack&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_js"&gt;pop&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  140&lt;/span&gt;                 visited&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  141&lt;/span&gt;                 result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;thisNode&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_dom support_constant_dom_js"&gt;name&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  142&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  143&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  144&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; result&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  145&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  146&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  147&lt;/span&gt;     &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt; Tree helper methods&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  148&lt;/span&gt;     &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  149&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Node getRoot&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  150&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;for&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node node : treeNodes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  151&lt;/span&gt;             &lt;span class="keyword keyword_control keyword_control_js"&gt;if&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;node&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;==&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  152&lt;/span&gt;                 &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; node&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  153&lt;/span&gt;             &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  154&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  155&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;throw&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;RuntimeException&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;These nodes don't form a valid tree since there is no root&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  156&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  157&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  158&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;private&lt;/span&gt; List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; getAllLeftSubChildresn&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Node root&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  159&lt;/span&gt;         ArrayList&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; result &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  160&lt;/span&gt;         result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;root&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  161&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;while&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;root&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;!=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  162&lt;/span&gt;             result&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_function support_function_dom support_function_dom_js"&gt;add&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;root&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  163&lt;/span&gt;             root &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; root&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  164&lt;/span&gt;         &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  165&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; result&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  166&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  167&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  168&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; Set&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;Node&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; getTreeNodes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  169&lt;/span&gt;         &lt;span class="keyword keyword_control keyword_control_js"&gt;return&lt;/span&gt; treeNodes&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  170&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;  171&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;  172&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;  173&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And some test cases:&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_js"&gt;&lt;span class="keyword keyword_control keyword_control_js"&gt;package&lt;/span&gt; Prep&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;TreeTraversal&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Arrays&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; &lt;span class="support support_class support_class_js"&gt;java&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;util&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;List&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; junit&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;framework&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Assert&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;apache&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;log4j&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Logger&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;junit&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Before&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; org&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;junit&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Test&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt; &lt;span class="keyword keyword_control keyword_control_js"&gt;import&lt;/span&gt; Prep&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;TreeTraversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;TreeTraversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;Node&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt; &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt; TreeTraversalTest &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;private&lt;/span&gt; TreeTraversal traversal&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;static&lt;/span&gt; Logger log &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; Logger&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getLogger&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;TreeTraversalTest&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="storage storage_type storage_type_js"&gt;class&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt;     @Before&lt;br /&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;void&lt;/span&gt; setUp&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt;         traversal &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;TreeTraversal&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt;         Node nA &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;A&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt;         Node nB &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;B&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt;         Node nC &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;C&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   26&lt;/span&gt;         Node nD &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;D&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   27&lt;/span&gt;         Node nE &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;E&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   28&lt;/span&gt;         Node nF &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;F&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   29&lt;/span&gt;         Node nH &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;H&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   30&lt;/span&gt;         Node nG &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;G&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   31&lt;/span&gt;         Node nI &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="meta meta_class meta_class_instance meta_class_instance_constructor"&gt;&lt;span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js"&gt;new&lt;/span&gt; &lt;span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js"&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;I&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   32&lt;/span&gt;         &lt;br /&gt;&lt;span class='linenum'&gt;   33&lt;/span&gt;         nF&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nB&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   34&lt;/span&gt;         nF&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nG&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;             &lt;br /&gt;&lt;span class='linenum'&gt;   35&lt;/span&gt;         nB&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nA&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   36&lt;/span&gt;         nB&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nD&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   37&lt;/span&gt;         nG&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nI&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   38&lt;/span&gt;         nD&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nC&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   39&lt;/span&gt;         nD&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;rightChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nE&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   40&lt;/span&gt;         nI&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;leftChild &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nH&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   41&lt;/span&gt;         &lt;br /&gt;&lt;span class='linenum'&gt;   42&lt;/span&gt;         nA&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nB&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   43&lt;/span&gt;         nB&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nF&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   44&lt;/span&gt;         nC&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nD&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   45&lt;/span&gt;         nD&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nB&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   46&lt;/span&gt;         nE&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nD&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   47&lt;/span&gt;         nF&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="constant constant_language constant_language_null constant_language_null_js"&gt;null&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   48&lt;/span&gt;         nG&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nF&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   49&lt;/span&gt;         nH&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nI&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   50&lt;/span&gt;         nI&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;&lt;span class="support support_constant support_constant_js"&gt;parent&lt;/span&gt; &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; nG&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   51&lt;/span&gt;         &lt;br /&gt;&lt;span class='linenum'&gt;   52&lt;/span&gt;         &lt;span class="storage storage_modifier storage_modifier_js"&gt;final&lt;/span&gt; Node&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; nodesArr &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;nA&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nB&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nC&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nD&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nE&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nF&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nG&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nH&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;nI&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   53&lt;/span&gt;         traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;getTreeNodes&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;addAll&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;((&lt;/span&gt;Arrays&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;asList&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;nodesArr&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)))&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   54&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   55&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   56&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   57&lt;/span&gt;     @Test&lt;br /&gt;&lt;span class='linenum'&gt;   58&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;void&lt;/span&gt; testBFS&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   59&lt;/span&gt;         log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;traversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   60&lt;/span&gt;         List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; actualOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;bfsTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   61&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; expectedOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;F&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;B&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;G&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;A&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;D&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;I&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;C&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;E&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;H&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   62&lt;/span&gt;         Assert&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;assertEquals&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Arrays&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;asList&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;expectedOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;actualOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   63&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   64&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   65&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   66&lt;/span&gt;     @Test&lt;br /&gt;&lt;span class='linenum'&gt;   67&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;void&lt;/span&gt; testDFSPreorder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   68&lt;/span&gt;         log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;traversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   69&lt;/span&gt;         List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; actualOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;dfsPreorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   70&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; expectedOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;F&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;B&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;A&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;D&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;C&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;E&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;G&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;I&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;H&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   71&lt;/span&gt;         Assert&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;assertEquals&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Arrays&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;asList&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;expectedOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;actualOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   72&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   73&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   74&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   75&lt;/span&gt;     @Test&lt;br /&gt;&lt;span class='linenum'&gt;   76&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;void&lt;/span&gt; testDFSInorder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   77&lt;/span&gt;         log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;traversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   78&lt;/span&gt;         List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; actualOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;dfsInorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   79&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; expectedOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;A&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;B&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;C&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;D&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;E&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;F&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;G&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;H&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;I&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   80&lt;/span&gt;         Assert&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;assertEquals&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Arrays&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;asList&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;expectedOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;actualOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   81&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   82&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   83&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   84&lt;/span&gt;     @Test&lt;br /&gt;&lt;span class='linenum'&gt;   85&lt;/span&gt;     &lt;span class="storage storage_modifier storage_modifier_js"&gt;public&lt;/span&gt; &lt;span class="storage storage_type storage_type_js"&gt;void&lt;/span&gt; testDFSPostorder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   86&lt;/span&gt;         log&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;debug&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;traversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   87&lt;/span&gt;         List&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;lt;&lt;/span&gt;&lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="keyword keyword_operator keyword_operator_js"&gt;&amp;gt;&lt;/span&gt; actualOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; traversal&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;dfsPostorderTraversal&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;()&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   88&lt;/span&gt;         &lt;span class="support support_class support_class_js"&gt;String&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_square meta_brace_square_js"&gt;[]&lt;/span&gt; expectedOrder &lt;span class="keyword keyword_operator keyword_operator_js"&gt;=&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;{&lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;A&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;C&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;E&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;D&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;B&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;H&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;I&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;G&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;&lt;span class="string string_quoted string_quoted_double string_quoted_double_js"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js"&gt;"&lt;/span&gt;F&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   89&lt;/span&gt;         Assert&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;assertEquals&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;Arrays&lt;span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js"&gt;.&lt;/span&gt;asList&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;(&lt;/span&gt;expectedOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js"&gt;, &lt;/span&gt;actualOrder&lt;span class="meta meta_brace meta_brace_round meta_brace_round_js"&gt;)&lt;/span&gt;&lt;span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   90&lt;/span&gt; &lt;br /&gt;&lt;span class='linenum'&gt;   91&lt;/span&gt;     &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class='linenum'&gt;   92&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   93&lt;/span&gt; &lt;span class="meta meta_brace meta_brace_curly meta_brace_curly_js"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   94&lt;/span&gt; &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-5183527821245009025?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/5183527821245009025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2011/02/binary-trees-in-java-non-recursively.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/5183527821245009025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/5183527821245009025'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2011/02/binary-trees-in-java-non-recursively.html' title='Binary Trees In Java - Non Recursively Revisited'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_L5qZZpYV3O0/TUu05Pp4P1I/AAAAAAAAAZg/1a5zJGVTJHo/s72-c/Screen%2Bshot%2B2011-02-04%2Bat%2B12.07.20%2BAM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-7247670904592056132</id><published>2010-12-05T14:36:00.000-08:00</published><updated>2010-12-05T14:39:57.606-08:00</updated><title type='text'>Announcing Software-Licensing-System-for-Ubercart a Drupal Module!</title><content type='html'>Available here:&lt;br /&gt;&lt;a href="http://github.com/Thamster/Software-Licensing-System-for-Ubercart"&gt;http://github.com/Thamster/Software-Licensing-System-for-Ubercart&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- About this module:&lt;br /&gt; This Drupal module allows someone who uses Ubercart to sell a software license &lt;br /&gt; and generate license keys by having their application, written in any language, &lt;br /&gt; communicate back to their Drupal site to retrieve and or generate SSL keys over http&lt;br /&gt; in a secure manner with a simple set of usage limitations. &lt;br /&gt;&lt;br /&gt; This is my first module release for Drupal. &lt;br /&gt; Any refactoring or code style suggestions are highly encouraged.&lt;br /&gt; thamster20 at gmail dot com&lt;br /&gt;&lt;br /&gt; This module was build for drupal 6, which is the version i was using when writing this,&lt;br /&gt; however I didn't code any specific function that would not work with other drupal versions.&lt;br /&gt; Testers for other drupal versions are more than welcome to contact me.&lt;br /&gt;&lt;br /&gt; This module is made for people with at least a rudimentary understanding of php code and ssl&lt;br /&gt; keypairs. Part of the security of this system is in the customization you add to the code&lt;br /&gt; yourself. The unique tokens you choose to use and hash/obfuscation algorithms you can optionally&lt;br /&gt; add make this harder to crack. &lt;br /&gt; Think of this as a functional baseline implementation you can tailor to your own security needs.&lt;br /&gt;&lt;br /&gt; In time I may try to dummy proof the install but for now you'll probably need to read a bit of code &lt;br /&gt; to get this to work for you properly.&lt;br /&gt; Code submissions for improvements are also welcome.&lt;br /&gt;&lt;br /&gt; This module depends on the following ubercart core modules.&lt;br /&gt;  Cart, Conditional Actions, Order, Product, Token, Store&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- High Level Design of the Ubercart software licensing system:&lt;br /&gt;&lt;br /&gt;Server Side:&lt;br /&gt; Sets up a simple keygen php page to listen for http get requests from your software product.&lt;br /&gt;  The required get request parameter is named "data" and &lt;br /&gt;  should be a unique string identifying the purchased software license. &lt;br /&gt;  for example: customer_name combined with macaddress, email and order_number  &lt;br /&gt;  You can use any unique string you like. This request parameter can be sent &lt;br /&gt;  from your software application in the clear or hashed beforehand, whatever your preference. &lt;br /&gt;  It is not necessary for it to be a secret based on how keypair ssl works.&lt;br /&gt; Verifies that a ubercart order matching the keygen request exists and has been paid for.&lt;br /&gt; Verifies a revocation list in revoked_license_t for licenses you no longer wish to generate keys for. &lt;br /&gt;  (in case of a refunded order for example)&lt;br /&gt; Verifies if a key has already been returned for this specific unique identifying string.&lt;br /&gt;  if so looks up the previously generated key and returns that instead of generating a new key.&lt;br /&gt; Verifies if the usage limit is exceeded. (counting entries in the license_t matching that order)&lt;br /&gt;  In this version we default to maximum 5 keys generated per year for a given order.&lt;br /&gt; If the above verifications pass it then generates a license key using a 2048 bit ssl public/private &lt;br /&gt;  keypair you place on the server in a protected directory that isn't web accessible.&lt;br /&gt;  It then stores the key in license_t to keep track of usage limits.&lt;br /&gt; A simple http text response is returned to be parsed by your software application.&lt;br /&gt;&lt;br /&gt; Step 1. &lt;br /&gt;  Place the uc_license_key_system in the standard /sites/all/modules folder.&lt;br /&gt; Step 2.&lt;br /&gt;  Run the drupal module installer from the admin page of your site. This will create&lt;br /&gt;  the necessary databases.&lt;br /&gt; Step 3. &lt;br /&gt;  Create a new content page from the admin section of drupal and paste in the &lt;br /&gt;  contents of the page.ph_p file. (you can of course tailor it to your needs before hand)&lt;br /&gt;  * be sure to set the page's content type to "php code". &lt;br /&gt;&lt;br /&gt;Client Side:&lt;br /&gt;&lt;br /&gt; You need to implement this yourself in whatever language your software application is written.&lt;br /&gt; I personally have my clients enter their order email and order number into a trial&lt;br /&gt; application they download from my website to unlock the full version. &lt;br /&gt; You can obviously change that around to be a downloaded key or some file&lt;br /&gt; they place in a certain folder or whatever you like. We just need a way of linking the user&lt;br /&gt; to the order placed in ubercart in a unique manner. &lt;br /&gt; If the user shares their information with others they will run out of licenses &lt;br /&gt; and that is how you will prevent piracy of your software product.&lt;br /&gt;&lt;br /&gt; Step 1. &lt;br /&gt;  Create a unique string identifying your user.&lt;br /&gt;  ex: "order_num:email@address.com:mac:address:username";&lt;br /&gt; Step 2. &lt;br /&gt;  Send a request to the above mentioned server php file to retrieve a license key.&lt;br /&gt; Step 3. &lt;br /&gt;  Verify the response using the public key (which you store somewhere in your app).&lt;br /&gt;  The public key can be hardcoded or obfuscated completely up to you.&lt;br /&gt;  You just have to make it hard for pirates to swap in their own public key to &lt;br /&gt;  crack your software.&lt;br /&gt;  The difficulty of this step varies depending on the language you coded in. &lt;br /&gt;  For Example, in C++ a great writeup on this is here: &lt;br /&gt;  http://www.zabkat.com/blog/27Jun10-openssl-keygen.htm&lt;br /&gt; Step 4. &lt;br /&gt;   Once a successful verification takes place you should store the license somewhere in the &lt;br /&gt;  app to remove the need to query the server for your license every time you want to &lt;br /&gt;  verify it. Alternatively you can permanently unlock the software after the first&lt;br /&gt;  successful verification completely up to you. &lt;br /&gt;&lt;br /&gt;Customization:&lt;br /&gt; Here are a few things you will need or want to change.&lt;br /&gt; in file uc_license_key_system.module:&lt;br /&gt;  line 105:&lt;br /&gt;   $filename = "/home/you/yoursite.com/openssl/private.pem";&lt;br /&gt;   #(change this to the safe non web accessible location of your private key on the server)&lt;br /&gt;  line 94:&lt;br /&gt;   $result = array(&lt;br /&gt;         "email" =&gt; $tokens[0],&lt;br /&gt;      "order_num" =&gt; $tokens[1],&lt;br /&gt;         "mac_addr" =&gt; $tokens[2],&lt;br /&gt;         "username" =&gt; $tokens[3],   &lt;br /&gt;     );&lt;br /&gt;   #(make this reflect the tokens you chose to be your unique identification string, if different)&lt;br /&gt;  line 91:&lt;br /&gt;   print t(" status : Error: Please contact customersupport@yoursite.com \n key : \n");&lt;br /&gt;   #(put in your own customer support address or just remove the line)&lt;br /&gt;  line 19:&lt;br /&gt;   $usage_limit = 5; //times per year per order&lt;br /&gt;   #(set this to whatever you want the yearly license limit to be).&lt;br /&gt;  line 22:&lt;br /&gt;    AND   n.create_date &gt; \'%s\'', $order_number, strtotime("1 year ago"));&lt;br /&gt;   #(change this to be whatever time limit you prefer)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048411582271228135-7247670904592056132?l=eigenclass.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eigenclass.blogspot.com/feeds/7247670904592056132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://eigenclass.blogspot.com/2010/12/announcing-software-licensing-system.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/7247670904592056132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048411582271228135/posts/default/7247670904592056132'/><link rel='alternate' type='text/html' href='http://eigenclass.blogspot.com/2010/12/announcing-software-licensing-system.html' title='Announcing Software-Licensing-System-for-Ubercart a Drupal Module!'/><author><name>Thamster</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_L5qZZpYV3O0/Swj6GPfem7I/AAAAAAAAAWI/vSox8h_OnRo/S220/Banner_125x125_0003_D.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048411582271228135.post-1712754923557889462</id><published>2010-12-05T13:58:00.000-08:00</published><updated>2011-04-14T11:22:52.097-07:00</updated><title type='text'>Merging  Wav Files in Objective C.</title><content type='html'>On a recent Mac Development project I had to merge two audio inputs into a single file which was an interesting exercise in understanding the rfc wav spec. While concatenation of wav files is simpler since you just have to remove the header from one file and update the header in the other file to reflect the new file size, merging two sounds so that they play simultaneously is a little bit trickier. I've decided to post my objC implementation here in case someone else ever runs into a similar need. Suggestions and comments as usual are always welcome. Especially in regards to clamping the new values uint values to a max which I've ignored in this implementation since it didn't seem to affect the output merged sound I was creating negatively.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="textmate-source all_hallow_s_eve"&gt;&lt;span class='linenum'&gt;    1&lt;/span&gt; &lt;span class="source source_objc++"&gt;-(&lt;span class="storage storage_type storage_type_c"&gt;void&lt;/span&gt;)mixSkypeWavFile:(&lt;span class="support support_class support_class_cocoa"&gt;NSString&lt;/span&gt;*)wav1 withWavFile:(&lt;span class="support support_class support_class_cocoa"&gt;NSString&lt;/span&gt;*)wav2 intoNewWavFile:(&lt;span class="support support_class support_class_cocoa"&gt;NSString&lt;/span&gt;*)outWav{&lt;br /&gt;&lt;span class='linenum'&gt;    2&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;the format of our wav files is ("Subchunk1Size = Hex 12/Dec 18" plus 2 bytes ExtraParamSize hex "0000"&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    3&lt;/span&gt;       &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;instead of the standard ("Subchunk1Size = Hex 10/Dec 16")&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    4&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;    5&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;a good breakdown for the wave spec bytes https://ccrma.stanford.edu/courses/422/projects/WaveFormat/&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    6&lt;/span&gt;       &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;turns out the ones here are little endian for numbers and bigendian for strings. go figure.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    7&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;    8&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;once you understand that you can make sense of this nice comment on stack overflow from lucius&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;    9&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;http://stackoverflow.com/questions/1540380/how-to-lower-sound-on-the-iphones-sdk-audioqueue&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   10&lt;/span&gt;       &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt; the strat is to add each 2byte sample together and then divide by two to get the average sound at that time.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   11&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt; this has the adverse effect of lowering the volume too but shouldn't bee to bad since we only need to do this once.&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   12&lt;/span&gt;     &lt;span class="support support_class support_class_cocoa"&gt;NSData&lt;/span&gt; * wav1Data = &lt;span class="meta meta_bracketed meta_bracketed_objc"&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;[&lt;/span&gt;&lt;span class="support support_class support_class_cocoa"&gt;NSData&lt;/span&gt; &lt;span class="meta meta_function-call meta_function-call_objc"&gt;&lt;span class="support support_function support_function_any-method support_function_any-method_objc"&gt;dataWithContentsOfFile&lt;span class="punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc"&gt;:&lt;/span&gt;&lt;/span&gt;wav1&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class='linenum'&gt;   13&lt;/span&gt;     &lt;span class="support support_class support_class_cocoa"&gt;NSData&lt;/span&gt; * wav2Data = &lt;span class="meta meta_bracketed meta_bracketed_objc"&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;[&lt;/span&gt;&lt;span class="support support_class support_class_cocoa"&gt;NSData&lt;/span&gt; &lt;span class="meta meta_function-call meta_function-call_objc"&gt;&lt;span class="support support_function support_function_any-method support_function_any-method_objc"&gt;dataWithContentsOfFile&lt;span class="punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc"&gt;:&lt;/span&gt;&lt;/span&gt;wav2&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class='linenum'&gt;   14&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   15&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;grab one of the 46 byte headers from these files (assume they are identical which they should be for this to work.)&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   16&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;grab data from wav1 without headers&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   17&lt;/span&gt;       &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;grab data from wav2 without headers&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   18&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt; you don't have to modify the header if you don't append the files one after the other and change the total file size!&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   19&lt;/span&gt;         &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt; divide each 2byte sample which is just a number then add them together to create the mixed outWav data. &lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   20&lt;/span&gt;       &lt;span class="comment comment_line comment_line_double-slash comment_line_double-slash_c++"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c"&gt;//&lt;/span&gt;keep in mind these numbers need to be little endian. but at 2 byte blocks little endian and big endian seem to be equiv. (we'll test this now.)&lt;br /&gt;&lt;/span&gt;&lt;span class='linenum'&gt;   21&lt;/span&gt;     &lt;br /&gt;&lt;span class='linenum'&gt;   22&lt;/span&gt;     &lt;span class="storage storage_type storage_type_c"&gt;int&lt;/span&gt; wav1DataSize = &lt;span class="meta meta_bracketed meta_bracketed_objc"&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;[&lt;/span&gt;wav1Data &lt;span class="meta meta_function-call meta_function-call_objc"&gt;&lt;span class="support support_function support_function_any-method support_function_any-method_objc"&gt;length&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;]&lt;/span&gt;&lt;/span&gt; - &lt;span class="constant constant_numeric constant_numeric_c"&gt;46&lt;/span&gt;;  &lt;br /&gt;&lt;span class='linenum'&gt;   23&lt;/span&gt;     &lt;span class="storage storage_type storage_type_c"&gt;int&lt;/span&gt; wav2DataSize = &lt;span class="meta meta_bracketed meta_bracketed_objc"&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;[&lt;/span&gt;wav2Data &lt;span class="meta meta_function-call meta_function-call_objc"&gt;&lt;span class="support support_function support_function_any-method support_function_any-method_objc"&gt;length&lt;/span&gt;&lt;/span&gt;&lt;span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_objc"&gt;]&lt;/span&gt;&lt;/span&gt; - &lt;span class="constant constant_numeric constant_numeric_c"&gt;46&lt;/span&gt;;&lt;br /&gt;&lt;span class='linenum'&gt;   24&lt;/span&gt;     &lt;span class="keyword keyword_control keyword_control_c"&gt;if&lt;/span&gt;&lt;span class="meta meta_function meta_function_c"&gt; &lt;span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_c"&gt;(&lt;/span&gt;wav1DataSize &amp;lt;= &lt;span class="constant constant_numeric constant_numeric_c"&gt;0&lt;/span&gt; ||  wav2DataSize &amp;lt;= &lt;span class="constant constant_numeric constant_numeric_c"&gt;0&lt;/span&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_c"&gt;)&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span class='linenum'&gt;   25&lt;/span&gt;         &lt;span class="support support_function support_function_cocoa"&gt;NSLog&lt;/span&gt;(&lt;span class="string string_quoted string_quoted_double string_quoted_double_objc"&gt;&lt;span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc"&gt;@"&lt;/span&gt;error merging wav sources for now just error out of sound mixing.&lt;span class="punctuation punctuation_definition punctuation_definition_stri
