<!DOCTYPE html>
<html lang='en'>
<head>
<title>controllers « app - redmine.git - Mirror of redmine code source: https://github.com/redmine/redmine</title>
<meta name='generator' content='cgit v1.2.3'/>
<meta name='robots' content='index, nofollow'/>
<link rel='stylesheet' type='text/css' href='/cgit.css'/>
<link rel='shortcut icon' href='/favicon.ico'/>
<link rel='alternate' title='Atom feed' href='https://source.dussan.org/redmine.git/atom/app/controllers?h=swistak' type='application/atom+xml'/>
</head>
<body>
<div id='cgit'><table id='header'>
<tr>
<td class='logo' rowspan='2'><a href='/'><img src='/cgit.png' alt='cgit logo'/></a></td>
<td class='main'><a href='/'>index</a> : <a href='/redmine.git/'>redmine.git</a></td><td class='form'><form method='get'>
<select name='h' onchange='this.form.submit();'>
<option value='0.6-stable'>0.6-stable</option>
<option value='0.7-stable'>0.7-stable</option>
<option value='0.8-stable'>0.8-stable</option>
<option value='0.9-stable'>0.9-stable</option>
<option value='1.0-stable'>1.0-stable</option>
<option value='1.1-stable'>1.1-stable</option>
<option value='1.2-stable'>1.2-stable</option>
<option value='1.3-stable'>1.3-stable</option>
<option value='1.4-stable'>1.4-stable</option>
<option value='2.0-stable'>2.0-stable</option>
<option value='2.1-stable'>2.1-stable</option>
<option value='2.2-stable'>2.2-stable</option>
<option value='2.3-stable'>2.3-stable</option>
<option value='2.4-stable'>2.4-stable</option>
<option value='2.5-stable'>2.5-stable</option>
<option value='2.6-stable'>2.6-stable</option>
<option value='3.0-stable'>3.0-stable</option>
<option value='3.1-stable'>3.1-stable</option>
<option value='3.2-stable'>3.2-stable</option>
<option value='3.3-stable'>3.3-stable</option>
<option value='3.4-stable'>3.4-stable</option>
<option value='4.0-stable'>4.0-stable</option>
<option value='4.1-stable'>4.1-stable</option>
<option value='4.2-stable'>4.2-stable</option>
<option value='5.0-stable'>5.0-stable</option>
<option value='5.1-stable'>5.1-stable</option>
<option value='6.0-stable'>6.0-stable</option>
<option value='integration-to-svn-stable-1.0'>integration-to-svn-stable-1.0</option>
<option value='integration-to-svn-trunk'>integration-to-svn-trunk</option>
<option value='master'>master</option>
<option value='nbc'>nbc</option>
<option value='plugin-hooks'>plugin-hooks</option>
<option value='swistak' selected='selected'>swistak</option>
<option value='work'>work</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Mirror of redmine code source: https://github.com/redmine/redmine</td><td class='sub right'>www-data</td></tr></table>
<table class='tabs'><tr><td>
<a href='/redmine.git/?h=swistak'>summary</a><a href='/redmine.git/refs/?h=swistak'>refs</a><a href='/redmine.git/log/app/controllers?h=swistak'>log</a><a class='active' href='/redmine.git/tree/app/controllers?h=swistak'>tree</a><a href='/redmine.git/commit/app/controllers?h=swistak'>commit</a><a href='/redmine.git/diff/app/controllers?h=swistak'>diff</a><a href='/redmine.git/stats/app/controllers?h=swistak'>stats</a></td><td class='form'><form class='right' method='get' action='/redmine.git/log/app/controllers'>
<input type='hidden' name='h' value='swistak'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/redmine.git/tree/?h=swistak'>root</a>/<a href='/redmine.git/tree/app?h=swistak'>app</a>/<a href='/redmine.git/tree/app/controllers?h=swistak'>controllers</a></div><div class='content'><table summary='tree listing' class='list'>
<tr class='nohover'><th class='left'>Mode</th><th class='left'>Name</th><th class='right'>Size</th><th/></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/account_controller.rb?h=swistak'>account_controller.rb</a></td><td class='ls-size'>6612</td><td><a class='button' href='/redmine.git/log/app/controllers/account_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/account_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/account_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/admin_controller.rb?h=swistak'>admin_controller.rb</a></td><td class='ls-size'>3125</td><td><a class='button' href='/redmine.git/log/app/controllers/admin_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/admin_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/admin_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/application.rb?h=swistak'>application.rb</a></td><td class='ls-size'>7062</td><td><a class='button' href='/redmine.git/log/app/controllers/application.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/application.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/application.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/attachments_controller.rb?h=swistak'>attachments_controller.rb</a></td><td class='ls-size'>1455</td><td><a class='button' href='/redmine.git/log/app/controllers/attachments_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/attachments_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/attachments_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/auth_sources_controller.rb?h=swistak'>auth_sources_controller.rb</a></td><td class='ls-size'>2479</td><td><a class='button' href='/redmine.git/log/app/controllers/auth_sources_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/auth_sources_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/auth_sources_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/boards_controller.rb?h=swistak'>boards_controller.rb</a></td><td class='ls-size'>2939</td><td><a class='button' href='/redmine.git/log/app/controllers/boards_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/boards_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/boards_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/custom_fields_controller.rb?h=swistak'>custom_fields_controller.rb</a></td><td class='ls-size'>3046</td><td><a class='button' href='/redmine.git/log/app/controllers/custom_fields_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/custom_fields_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/custom_fields_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/documents_controller.rb?h=swistak'>documents_controller.rb</a></td><td class='ls-size'>3573</td><td><a class='button' href='/redmine.git/log/app/controllers/documents_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/documents_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/documents_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/enumerations_controller.rb?h=swistak'>enumerations_controller.rb</a></td><td class='ls-size'>2461</td><td><a class='button' href='/redmine.git/log/app/controllers/enumerations_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/enumerations_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/enumerations_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/issue_categories_controller.rb?h=swistak'>issue_categories_controller.rb</a></td><td class='ls-size'>2014</td><td><a class='button' href='/redmine.git/log/app/controllers/issue_categories_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/issue_categories_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/issue_categories_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/issue_relations_controller.rb?h=swistak'>issue_relations_controller.rb</a></td><td class='ls-size'>2069</td><td><a class='button' href='/redmine.git/log/app/controllers/issue_relations_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/issue_relations_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/issue_relations_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/issue_statuses_controller.rb?h=swistak'>issue_statuses_controller.rb</a></td><td class='ls-size'>2480</td><td><a class='button' href='/redmine.git/log/app/controllers/issue_statuses_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/issue_statuses_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/issue_statuses_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/issues_controller.rb?h=swistak'>issues_controller.rb</a></td><td class='ls-size'>19279</td><td><a class='button' href='/redmine.git/log/app/controllers/issues_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/issues_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/issues_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/journals_controller.rb?h=swistak'>journals_controller.rb</a></td><td class='ls-size'>1545</td><td><a class='button' href='/redmine.git/log/app/controllers/journals_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/journals_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/journals_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/members_controller.rb?h=swistak'>members_controller.rb</a></td><td class='ls-size'>2296</td><td><a class='button' href='/redmine.git/log/app/controllers/members_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/members_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/members_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/messages_controller.rb?h=swistak'>messages_controller.rb</a></td><td class='ls-size'>3579</td><td><a class='button' href='/redmine.git/log/app/controllers/messages_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/messages_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/messages_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/my_controller.rb?h=swistak'>my_controller.rb</a></td><td class='ls-size'>5867</td><td><a class='button' href='/redmine.git/log/app/controllers/my_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/my_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/my_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/news_controller.rb?h=swistak'>news_controller.rb</a></td><td class='ls-size'>3580</td><td><a class='button' href='/redmine.git/log/app/controllers/news_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/news_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/news_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/projects_controller.rb?h=swistak'>projects_controller.rb</a></td><td class='ls-size'>20416</td><td><a class='button' href='/redmine.git/log/app/controllers/projects_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/projects_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/projects_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/queries_controller.rb?h=swistak'>queries_controller.rb</a></td><td class='ls-size'>3077</td><td><a class='button' href='/redmine.git/log/app/controllers/queries_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/queries_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/queries_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/reports_controller.rb?h=swistak'>reports_controller.rb</a></td><td class='ls-size'>10934</td><td><a class='button' href='/redmine.git/log/app/controllers/reports_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/reports_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/reports_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/repositories_controller.rb?h=swistak'>repositories_controller.rb</a></td><td class='ls-size'>9729</td><td><a class='button' href='/redmine.git/log/app/controllers/repositories_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/repositories_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/repositories_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/roles_controller.rb?h=swistak'>roles_controller.rb</a></td><td class='ls-size'>3815</td><td><a class='button' href='/redmine.git/log/app/controllers/roles_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/roles_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/roles_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/search_controller.rb?h=swistak'>search_controller.rb</a></td><td class='ls-size'>4398</td><td><a class='button' href='/redmine.git/log/app/controllers/search_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/search_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/search_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/settings_controller.rb?h=swistak'>settings_controller.rb</a></td><td class='ls-size'>2099</td><td><a class='button' href='/redmine.git/log/app/controllers/settings_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/settings_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/settings_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/sys_controller.rb?h=swistak'>sys_controller.rb</a></td><td class='ls-size'>1670</td><td><a class='button' href='/redmine.git/log/app/controllers/sys_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/sys_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/sys_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/timelog_controller.rb?h=swistak'>timelog_controller.rb</a></td><td class='ls-size'>9704</td><td><a class='button' href='/redmine.git/log/app/controllers/timelog_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/timelog_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/timelog_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/trackers_controller.rb?h=swistak'>trackers_controller.rb</a></td><td class='ls-size'>2558</td><td><a class='button' href='/redmine.git/log/app/controllers/trackers_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/trackers_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/trackers_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/users_controller.rb?h=swistak'>users_controller.rb</a></td><td class='ls-size'>4753</td><td><a class='button' href='/redmine.git/log/app/controllers/users_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/users_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/users_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/versions_controller.rb?h=swistak'>versions_controller.rb</a></td><td class='ls-size'>2445</td><td><a class='button' href='/redmine.git/log/app/controllers/versions_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/versions_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/versions_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/watchers_controller.rb?h=swistak'>watchers_controller.rb</a></td><td class='ls-size'>1765</td><td><a class='button' href='/redmine.git/log/app/controllers/watchers_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/watchers_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/watchers_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/welcome_controller.rb?h=swistak'>welcome_controller.rb</a></td><td class='ls-size'>960</td><td><a class='button' href='/redmine.git/log/app/controllers/welcome_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/welcome_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/welcome_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/wiki_controller.rb?h=swistak'>wiki_controller.rb</a></td><td class='ls-size'>6552</td><td><a class='button' href='/redmine.git/log/app/controllers/wiki_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/wiki_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/wiki_controller.rb?h=swistak'>plain</a></td></tr>
<tr><td class='ls-mode'>-rw-r--r--</td><td><a class='ls-blob rb' href='/redmine.git/tree/app/controllers/wikis_controller.rb?h=swistak'>wikis_controller.rb</a></td><td class='ls-size'>1595</td><td><a class='button' href='/redmine.git/log/app/controllers/wikis_controller.rb?h=swistak'>log</a><a class='button' href='/redmine.git/stats/app/controllers/wikis_controller.rb?h=swistak'>stats</a><a class='button' href='/redmine.git/plain/app/controllers/wikis_controller.rb?h=swistak'>plain</a></td></tr>
</table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-07-26 07:37:16 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
n class="nn">com.gitblit.utils.XssFilter</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.utils.XssFilter.AllowXssFilter</span><span class="p">;</span>

<span class="cm">/**</span>
<span class="cm"> * A command-line tool to move all tickets from one ticket service to another.</span>
<span class="cm"> *</span>
<span class="cm"> * @author James Moger</span>
<span class="cm"> *</span>
<span class="cm"> */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MigrateTickets</span><span class="w"> </span><span class="p">{</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="p">...</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">MigrateTickets</span><span class="w"> </span><span class="n">migrate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">MigrateTickets</span><span class="p">();</span>

<span class="w">		</span><span class="c1">// filter out the baseFolder parameter</span>
<span class="w">		</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">filtered</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">folder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;data&quot;</span><span class="p">;</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">args</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">String</span><span class="w"> </span><span class="n">arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">args</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">;</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">arg</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="s">&quot;--baseFolder&quot;</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">args</span><span class="p">.</span><span class="na">length</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Invalid --baseFolder parameter!&quot;</span><span class="p">);</span>
<span class="w">					</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="w">				</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="s">&quot;.&quot;</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">args</span><span class="o">[</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="o">]</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">folder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">args</span><span class="o">[</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="o">]</span><span class="p">;</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">				</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w">			</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="n">filtered</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">arg</span><span class="p">);</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">Params</span><span class="p">.</span><span class="na">baseFolder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">folder</span><span class="p">;</span>
<span class="w">		</span><span class="n">Params</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Params</span><span class="p">();</span>
<span class="w">		</span><span class="n">CmdLineParser</span><span class="w"> </span><span class="n">parser</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CmdLineParser</span><span class="p">(</span><span class="n">params</span><span class="p">);</span>
<span class="w">		</span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">parser</span><span class="p">.</span><span class="na">parseArgument</span><span class="p">(</span><span class="n">filtered</span><span class="p">);</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">params</span><span class="p">.</span><span class="na">help</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="n">migrate</span><span class="p">.</span><span class="na">usage</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">);</span>
<span class="w">				</span><span class="k">return</span><span class="p">;</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">CmdLineException</span><span class="w"> </span><span class="n">t</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">migrate</span><span class="p">.</span><span class="na">usage</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">);</span>
<span class="w">			</span><span class="k">return</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="c1">// load the settings</span>
<span class="w">		</span><span class="n">FileSettings</span><span class="w"> </span><span class="n">settings</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="na">FILESETTINGS</span><span class="p">;</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">(</span><span class="n">params</span><span class="p">.</span><span class="na">settingsfile</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">params</span><span class="p">.</span><span class="na">settingsfile</span><span class="p">).</span><span class="na">exists</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="n">settings</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileSettings</span><span class="p">(</span><span class="n">params</span><span class="p">.</span><span class="na">settingsfile</span><span class="p">);</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="c1">// migrate tickets</span>
<span class="w">		</span><span class="n">migrate</span><span class="p">.</span><span class="na">migrate</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">Params</span><span class="p">.</span><span class="na">baseFolder</span><span class="p">),</span><span class="w"> </span><span class="n">settings</span><span class="p">,</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="na">outputServiceName</span><span class="p">);</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Display the command line usage of MigrateTickets.</span>
<span class="cm">	 *</span>
<span class="cm">	 * @param parser</span>
<span class="cm">	 * @param t</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">usage</span><span class="p">(</span><span class="n">CmdLineParser</span><span class="w"> </span><span class="n">parser</span><span class="p">,</span><span class="w"> </span><span class="n">CmdLineException</span><span class="w"> </span><span class="n">t</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">Constants</span><span class="p">.</span><span class="na">BORDER</span><span class="p">);</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">Constants</span><span class="p">.</span><span class="na">getGitBlitVersion</span><span class="p">());</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">Constants</span><span class="p">.</span><span class="na">BORDER</span><span class="p">);</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">();</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="na">getMessage</span><span class="p">());</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">();</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">parser</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">parser</span><span class="p">.</span><span class="na">printUsage</span><span class="p">(</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">);</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">out</span>
<span class="w">					</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;\nExample:\n  java -gitblit.jar com.gitblit.MigrateTickets com.gitblit.tickets.RedisTicketService --baseFolder c:\\gitblit-data&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Migrate all tickets</span>
<span class="cm">	 *</span>
<span class="cm">	 * @param baseFolder</span>
<span class="cm">	 * @param settings</span>
<span class="cm">	 * @param outputServiceName</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">migrate</span><span class="p">(</span><span class="n">File</span><span class="w"> </span><span class="n">baseFolder</span><span class="p">,</span><span class="w"> </span><span class="n">IStoredSettings</span><span class="w"> </span><span class="n">settings</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">outputServiceName</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="c1">// disable some services</span>
<span class="w">		</span><span class="n">settings</span><span class="p">.</span><span class="na">overrideSetting</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">web</span><span class="p">.</span><span class="na">allowLuceneIndexing</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">);</span>
<span class="w">		</span><span class="n">settings</span><span class="p">.</span><span class="na">overrideSetting</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">enableGarbageCollection</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">);</span>
<span class="w">		</span><span class="n">settings</span><span class="p">.</span><span class="na">overrideSetting</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">enableMirroring</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">);</span>
<span class="w">		</span><span class="n">settings</span><span class="p">.</span><span class="na">overrideSetting</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">web</span><span class="p">.</span><span class="na">activityCacheDays</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w">		</span><span class="n">settings</span><span class="p">.</span><span class="na">overrideSetting</span><span class="p">(</span><span class="n">ITicketService</span><span class="p">.</span><span class="na">SETTING_UPDATE_DIFFSTATS</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">);</span>

<span class="w">		</span><span class="n">XssFilter</span><span class="w"> </span><span class="n">xssFilter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">AllowXssFilter</span><span class="p">();</span>
<span class="w">		</span><span class="n">IRuntimeManager</span><span class="w"> </span><span class="n">runtimeManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RuntimeManager</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span><span class="w"> </span><span class="n">xssFilter</span><span class="p">,</span><span class="w"> </span><span class="n">baseFolder</span><span class="p">).</span><span class="na">start</span><span class="p">();</span>
<span class="w">		</span><span class="n">IRepositoryManager</span><span class="w"> </span><span class="n">repositoryManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RepositoryManager</span><span class="p">(</span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">).</span><span class="na">start</span><span class="p">();</span>

<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">inputServiceName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getString</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">tickets</span><span class="p">.</span><span class="na">service</span><span class="p">,</span><span class="w"> </span><span class="n">BranchTicketService</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getSimpleName</span><span class="p">());</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">(</span><span class="n">inputServiceName</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;Please define a ticket service in \&quot;{0}\&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">Keys</span><span class="p">.</span><span class="na">tickets</span><span class="p">.</span><span class="na">service</span><span class="p">));</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">ITicketService</span><span class="w"> </span><span class="n">inputService</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">		</span><span class="n">ITicketService</span><span class="w"> </span><span class="n">outputService</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">		</span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">inputService</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getService</span><span class="p">(</span><span class="n">inputServiceName</span><span class="p">,</span><span class="w"> </span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">);</span>
<span class="w">			</span><span class="n">outputService</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getService</span><span class="p">(</span><span class="n">outputServiceName</span><span class="p">,</span><span class="w"> </span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">inputService</span><span class="p">.</span><span class="na">isReady</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;%s INPUT service is not ready, check config.&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">inputService</span><span class="p">.</span><span class="na">getClass</span><span class="p">().</span><span class="na">getSimpleName</span><span class="p">()));</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">outputService</span><span class="p">.</span><span class="na">isReady</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;%s OUTPUT service is not ready, check config.&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">outputService</span><span class="p">.</span><span class="na">getClass</span><span class="p">().</span><span class="na">getSimpleName</span><span class="p">()));</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="c1">// migrate tickets</span>
<span class="w">		</span><span class="kt">long</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">nanoTime</span><span class="p">();</span>
<span class="w">		</span><span class="kt">long</span><span class="w"> </span><span class="n">totalTickets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w">		</span><span class="kt">long</span><span class="w"> </span><span class="n">totalChanges</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">.</span><span class="na">getRepositoryModels</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">Set</span><span class="o">&lt;</span><span class="n">Long</span><span class="o">&gt;</span><span class="w"> </span><span class="n">ids</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inputService</span><span class="p">.</span><span class="na">getIds</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ids</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">ids</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="c1">// nothing to migrate</span>
<span class="w">				</span><span class="k">continue</span><span class="p">;</span>
<span class="w">			</span><span class="p">}</span>

<span class="w">			</span><span class="c1">// delete any tickets we may have in the output ticket service</span>
<span class="w">			</span><span class="n">outputService</span><span class="p">.</span><span class="na">deleteAll</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>

<span class="w">			</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">ids</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="n">List</span><span class="o">&lt;</span><span class="n">Change</span><span class="o">&gt;</span><span class="w"> </span><span class="n">journal</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inputService</span><span class="p">.</span><span class="na">getJournal</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">);</span>
<span class="w">				</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">journal</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">journal</span><span class="p">.</span><span class="na">size</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="k">continue</span><span class="p">;</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">				</span><span class="n">TicketModel</span><span class="w"> </span><span class="n">ticket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">outputService</span><span class="p">.</span><span class="na">createTicket</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">journal</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
<span class="w">				</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ticket</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;Failed to migrate %s #%s&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">repository</span><span class="p">.</span><span class="na">name</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">));</span>
<span class="w">					</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">				</span><span class="n">totalTickets</span><span class="o">++</span><span class="p">;</span>
<span class="w">				</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;%s #%s: %s&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">repository</span><span class="p">.</span><span class="na">name</span><span class="p">,</span><span class="w"> </span><span class="n">ticket</span><span class="p">.</span><span class="na">number</span><span class="p">,</span><span class="w"> </span><span class="n">ticket</span><span class="p">.</span><span class="na">title</span><span class="p">));</span>
<span class="w">				</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">journal</span><span class="p">.</span><span class="na">size</span><span class="p">();</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">TicketModel</span><span class="w"> </span><span class="n">updated</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">outputService</span><span class="p">.</span><span class="na">updateTicket</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">ticket</span><span class="p">.</span><span class="na">number</span><span class="p">,</span><span class="w"> </span><span class="n">journal</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">i</span><span class="p">));</span>
<span class="w">					</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">updated</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">						</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;   applied change %d&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">));</span>
<span class="w">						</span><span class="n">totalChanges</span><span class="o">++</span><span class="p">;</span>
<span class="w">					</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">						</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;Failed to apply change %d:\n%s&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">journal</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">i</span><span class="p">)));</span>
<span class="w">						</span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w">					</span><span class="p">}</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">inputService</span><span class="p">.</span><span class="na">stop</span><span class="p">();</span>
<span class="w">		</span><span class="n">outputService</span><span class="p">.</span><span class="na">stop</span><span class="p">();</span>

<span class="w">		</span><span class="n">repositoryManager</span><span class="p">.</span><span class="na">stop</span><span class="p">();</span>
<span class="w">		</span><span class="n">runtimeManager</span><span class="p">.</span><span class="na">stop</span><span class="p">();</span>

<span class="w">		</span><span class="kt">long</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">nanoTime</span><span class="p">();</span>

<span class="w">		</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;Migrated %d tickets composed of %d journal entries in %d seconds&quot;</span><span class="p">,</span>
<span class="w">				</span><span class="n">totalTickets</span><span class="p">,</span><span class="w"> </span><span class="n">totalTickets</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">totalChanges</span><span class="p">,</span><span class="w"> </span><span class="n">TimeUnit</span><span class="p">.</span><span class="na">NANOSECONDS</span><span class="p">.</span><span class="na">toSeconds</span><span class="p">(</span><span class="n">end</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">start</span><span class="p">)));</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="n">ITicketService</span><span class="w"> </span><span class="nf">getService</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">serviceName</span><span class="p">,</span><span class="w"> </span><span class="n">IRuntimeManager</span><span class="w"> </span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="n">IRepositoryManager</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">ITicketService</span><span class="w"> </span><span class="n">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">		</span><span class="n">Class</span><span class="o">&lt;?&gt;</span><span class="w"> </span><span class="n">serviceClass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Class</span><span class="p">.</span><span class="na">forName</span><span class="p">(</span><span class="n">serviceName</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">RedisTicketService</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">isAssignableFrom</span><span class="p">(</span><span class="n">serviceClass</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// Redis ticket service</span>
<span class="w">			</span><span class="n">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RedisTicketService</span><span class="p">(</span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">).</span><span class="na">start</span><span class="p">();</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">BranchTicketService</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">isAssignableFrom</span><span class="p">(</span><span class="n">serviceClass</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// Branch ticket service</span>
<span class="w">			</span><span class="n">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BranchTicketService</span><span class="p">(</span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">).</span><span class="na">start</span><span class="p">();</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">FileTicketService</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">isAssignableFrom</span><span class="p">(</span><span class="n">serviceClass</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// File ticket service</span>
<span class="w">			</span><span class="n">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileTicketService</span><span class="p">(</span><span class="n">runtimeManager</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">).</span><span class="na">start</span><span class="p">();</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">System</span><span class="p">.</span><span class="na">err</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Unknown ticket service &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">serviceName</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">service</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Parameters.</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Params</span><span class="w"> </span><span class="p">{</span>

<span class="w">		</span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">baseFolder</span><span class="p">;</span>

<span class="w">		</span><span class="nd">@Option</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;--help&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">aliases</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s">&quot;-h&quot;</span><span class="p">},</span><span class="w"> </span><span class="n">usage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;Show this help&quot;</span><span class="p">)</span>
<span class="w">		</span><span class="kd">public</span><span class="w"> </span><span class="n">Boolean</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>

<span class="w">		</span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">FileSettings</span><span class="w"> </span><span class="n">FILESETTINGS</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileSettings</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">baseFolder</span><span class="p">,</span><span class="w"> </span><span class="n">Constants</span><span class="p">.</span><span class="na">PROPERTIES_FILE</span><span class="p">).</span><span class="na">getAbsolutePath</span><span class="p">());</span>

<span class="w">		</span><span class="nd">@Option</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;--repositoriesFolder&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">usage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;Git Repositories Folder&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">metaVar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;PATH&quot;</span><span class="p">)</span>
<span class="w">		</span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">repositoriesFolder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FILESETTINGS</span><span class="p">.</span><span class="na">getString</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">repositoriesFolder</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;git&quot;</span><span class="p">);</span>

<span class="w">		</span><span class="nd">@Option</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;--settings&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">usage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;Path to alternative settings&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">metaVar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;FILE&quot;</span><span class="p">)</span>
<span class="w">		</span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">settingsfile</span><span class="p">;</span>

<span class="w">		</span><span class="nd">@Argument</span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">required</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="n">metaVar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;OUTPUTSERVICE&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">usage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;The destination/output ticket service&quot;</span><span class="p">)</span>
<span class="w">		</span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">outputServiceName</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-07-26 07:37:16 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
