<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
<span class="sourceLineNo">002</span>package org.apache.archiva.configuration.io.registry;<a name="line.2"></a>
<span class="sourceLineNo">003</span><a name="line.3"></a>
<span class="sourceLineNo">004</span>import org.apache.archiva.redback.components.registry.Registry;<a name="line.4"></a>
<span class="sourceLineNo">005</span><a name="line.5"></a>
<span class="sourceLineNo">006</span>// Util imports<a name="line.6"></a>
<span class="sourceLineNo">007</span>import java.util.*;<a name="line.7"></a>
<span class="sourceLineNo">008</span><a name="line.8"></a>
<span class="sourceLineNo">009</span>// Model class imports<a name="line.9"></a>
<span class="sourceLineNo">010</span>import org.apache.archiva.configuration.Configuration;<a name="line.10"></a>
<span class="sourceLineNo">011</span>import org.apache.archiva.configuration.AbstractRepositoryConfiguration;<a name="line.11"></a>
<span class="sourceLineNo">012</span>import org.apache.archiva.configuration.RemoteRepositoryConfiguration;<a name="line.12"></a>
<span class="sourceLineNo">013</span>import org.apache.archiva.configuration.ManagedRepositoryConfiguration;<a name="line.13"></a>
<span class="sourceLineNo">014</span>import org.apache.archiva.configuration.V1RepositoryConfiguration;<a name="line.14"></a>
<span class="sourceLineNo">015</span>import org.apache.archiva.configuration.LegacyArtifactPath;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import org.apache.archiva.configuration.RepositoryGroupConfiguration;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import org.apache.archiva.configuration.RepositoryCheckPath;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import org.apache.archiva.configuration.AbstractRepositoryConnectorConfiguration;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.archiva.configuration.ProxyConnectorConfiguration;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.archiva.configuration.SyncConnectorConfiguration;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.configuration.NetworkProxyConfiguration;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.configuration.RepositoryScanningConfiguration;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.configuration.FileType;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.configuration.OrganisationInformation;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.configuration.WebappConfiguration;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.configuration.UserInterfaceOptions;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.configuration.NetworkConfiguration;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.configuration.RedbackRuntimeConfiguration;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.configuration.ArchivaDefaultConfiguration;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.archiva.configuration.LdapConfiguration;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.archiva.configuration.FileLockConfiguration;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.archiva.configuration.CacheConfiguration;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.archiva.configuration.LdapGroupMapping;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span><a name="line.39"></a>
<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
<span class="sourceLineNo">041</span> * Generate Redback Registry input mechanism for model 'Configuration'.<a name="line.41"></a>
<span class="sourceLineNo">042</span> */<a name="line.42"></a>
<span class="sourceLineNo">043</span>public class ConfigurationRegistryReader<a name="line.43"></a>
<span class="sourceLineNo">044</span>{<a name="line.44"></a>
<span class="sourceLineNo">045</span>    public Configuration read( Registry registry )<a name="line.45"></a>
<span class="sourceLineNo">046</span>    {<a name="line.46"></a>
<span class="sourceLineNo">047</span>        return readConfiguration( "", registry );<a name="line.47"></a>
<span class="sourceLineNo">048</span>    }<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span>    private Configuration readConfiguration( String prefix, Registry registry )<a name="line.50"></a>
<span class="sourceLineNo">051</span>    {<a name="line.51"></a>
<span class="sourceLineNo">052</span>        Configuration value = new Configuration();<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>    //String version = registry.getString( prefix + "version", value.getVersion() );<a name="line.54"></a>
<span class="sourceLineNo">055</span><a name="line.55"></a>
<span class="sourceLineNo">056</span>    List&lt;String&gt; versionList = registry.getList( prefix + "version" );<a name="line.56"></a>
<span class="sourceLineNo">057</span>    String version = value.getVersion();<a name="line.57"></a>
<span class="sourceLineNo">058</span>    if (versionList != null &amp;&amp; !versionList.isEmpty() )<a name="line.58"></a>
<span class="sourceLineNo">059</span>    {<a name="line.59"></a>
<span class="sourceLineNo">060</span>        StringBuilder sb = new StringBuilder(  );<a name="line.60"></a>
<span class="sourceLineNo">061</span>        for (int i = 0,size = versionList.size();i&lt;size;i++)<a name="line.61"></a>
<span class="sourceLineNo">062</span>        {<a name="line.62"></a>
<span class="sourceLineNo">063</span>            sb.append( versionList.get( i ) );<a name="line.63"></a>
<span class="sourceLineNo">064</span>            if (i&lt;size - 1)<a name="line.64"></a>
<span class="sourceLineNo">065</span>            {<a name="line.65"></a>
<span class="sourceLineNo">066</span>                sb.append( ',' );<a name="line.66"></a>
<span class="sourceLineNo">067</span>            }<a name="line.67"></a>
<span class="sourceLineNo">068</span>        }<a name="line.68"></a>
<span class="sourceLineNo">069</span>        version = sb.toString();<a name="line.69"></a>
<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>        value.setVersion( version );<a name="line.72"></a>
<span class="sourceLineNo">073</span>        java.util.List repositories = new java.util.ArrayList/*&lt;V1RepositoryConfiguration&gt;*/();<a name="line.73"></a>
<span class="sourceLineNo">074</span>        List repositoriesSubsets = registry.getSubsetList( prefix + "repositories.repository" );<a name="line.74"></a>
<span class="sourceLineNo">075</span>        for ( Iterator i = repositoriesSubsets.iterator(); i.hasNext(); )<a name="line.75"></a>
<span class="sourceLineNo">076</span>        {<a name="line.76"></a>
<span class="sourceLineNo">077</span>            V1RepositoryConfiguration v = readV1RepositoryConfiguration( "", (Registry) i.next() );<a name="line.77"></a>
<span class="sourceLineNo">078</span>            repositories.add( v );<a name="line.78"></a>
<span class="sourceLineNo">079</span>        }<a name="line.79"></a>
<span class="sourceLineNo">080</span>        value.setRepositories( repositories );<a name="line.80"></a>
<span class="sourceLineNo">081</span>        java.util.List repositoryGroups = new java.util.ArrayList/*&lt;RepositoryGroupConfiguration&gt;*/();<a name="line.81"></a>
<span class="sourceLineNo">082</span>        List repositoryGroupsSubsets = registry.getSubsetList( prefix + "repositoryGroups.repositoryGroup" );<a name="line.82"></a>
<span class="sourceLineNo">083</span>        for ( Iterator i = repositoryGroupsSubsets.iterator(); i.hasNext(); )<a name="line.83"></a>
<span class="sourceLineNo">084</span>        {<a name="line.84"></a>
<span class="sourceLineNo">085</span>            RepositoryGroupConfiguration v = readRepositoryGroupConfiguration( "", (Registry) i.next() );<a name="line.85"></a>
<span class="sourceLineNo">086</span>            repositoryGroups.add( v );<a name="line.86"></a>
<span class="sourceLineNo">087</span>        }<a name="line.87"></a>
<span class="sourceLineNo">088</span>        value.setRepositoryGroups( repositoryGroups );<a name="line.88"></a>
<span class="sourceLineNo">089</span>        java.util.List managedRepositories = new java.util.ArrayList/*&lt;ManagedRepositoryConfiguration&gt;*/();<a name="line.89"></a>
<span class="sourceLineNo">090</span>        List managedRepositoriesSubsets = registry.getSubsetList( prefix + "managedRepositories.managedRepository" );<a name="line.90"></a>
<span class="sourceLineNo">091</span>        for ( Iterator i = managedRepositoriesSubsets.iterator(); i.hasNext(); )<a name="line.91"></a>
<span class="sourceLineNo">092</span>        {<a name="line.92"></a>
<span class="sourceLineNo">093</span>            ManagedRepositoryConfiguration v = readManagedRepositoryConfiguration( "", (Registry) i.next() );<a name="line.93"></a>
<span class="sourceLineNo">094</span>            managedRepositories.add( v );<a name="line.94"></a>
<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
<span class="sourceLineNo">096</span>        value.setManagedRepositories( managedRepositories );<a name="line.96"></a>
<span class="sourceLineNo">097</span>        java.util.List remoteRepositories = new java.util.ArrayList/*&lt;RemoteRepositoryConfiguration&gt;*/();<a name="line.97"></a>
<span class="sourceLineNo">098</span>        List remoteRepositoriesSubsets = registry.getSubsetList( prefix + "remoteRepositories.remoteRepository" );<a name="line.98"></a>
<span class="sourceLineNo">099</span>        for ( Iterator i = remoteRepositoriesSubsets.iterator(); i.hasNext(); )<a name="line.99"></a>
<span class="sourceLineNo">100</span>        {<a name="line.100"></a>
<span class="sourceLineNo">101</span>            RemoteRepositoryConfiguration v = readRemoteRepositoryConfiguration( "", (Registry) i.next() );<a name="line.101"></a>
<span class="sourceLineNo">102</span>            remoteRepositories.add( v );<a name="line.102"></a>
<span class="sourceLineNo">103</span>        }<a name="line.103"></a>
<span class="sourceLineNo">104</span>        value.setRemoteRepositories( remoteRepositories );<a name="line.104"></a>
<span class="sourceLineNo">105</span>        java.util.List proxyConnectors = new java.util.ArrayList/*&lt;ProxyConnectorConfiguration&gt;*/();<a name="line.105"></a>
<span class="sourceLineNo">106</span>        List proxyConnectorsSubsets = registry.getSubsetList( prefix + "proxyConnectors.proxyConnector" );<a name="line.106"></a>
<span class="sourceLineNo">107</span>        for ( Iterator i = proxyConnectorsSubsets.iterator(); i.hasNext(); )<a name="line.107"></a>
<span class="sourceLineNo">108</span>        {<a name="line.108"></a>
<span class="sourceLineNo">109</span>            ProxyConnectorConfiguration v = readProxyConnectorConfiguration( "", (Registry) i.next() );<a name="line.109"></a>
<span class="sourceLineNo">110</span>            proxyConnectors.add( v );<a name="line.110"></a>
<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
<span class="sourceLineNo">112</span>        value.setProxyConnectors( proxyConnectors );<a name="line.112"></a>
<span class="sourceLineNo">113</span>        java.util.List networkProxies = new java.util.ArrayList/*&lt;NetworkProxyConfiguration&gt;*/();<a name="line.113"></a>
<span class="sourceLineNo">114</span>        List networkProxiesSubsets = registry.getSubsetList( prefix + "networkProxies.networkProxy" );<a name="line.114"></a>
<span class="sourceLineNo">115</span>        for ( Iterator i = networkProxiesSubsets.iterator(); i.hasNext(); )<a name="line.115"></a>
<span class="sourceLineNo">116</span>        {<a name="line.116"></a>
<span class="sourceLineNo">117</span>            NetworkProxyConfiguration v = readNetworkProxyConfiguration( "", (Registry) i.next() );<a name="line.117"></a>
<span class="sourceLineNo">118</span>            networkProxies.add( v );<a name="line.118"></a>
<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
<span class="sourceLineNo">120</span>        value.setNetworkProxies( networkProxies );<a name="line.120"></a>
<span class="sourceLineNo">121</span>        java.util.List legacyArtifactPaths = new java.util.ArrayList/*&lt;LegacyArtifactPath&gt;*/();<a name="line.121"></a>
<span class="sourceLineNo">122</span>        List legacyArtifactPathsSubsets = registry.getSubsetList( prefix + "legacyArtifactPaths.legacyArtifactPath" );<a name="line.122"></a>
<span class="sourceLineNo">123</span>        for ( Iterator i = legacyArtifactPathsSubsets.iterator(); i.hasNext(); )<a name="line.123"></a>
<span class="sourceLineNo">124</span>        {<a name="line.124"></a>
<span class="sourceLineNo">125</span>            LegacyArtifactPath v = readLegacyArtifactPath( "", (Registry) i.next() );<a name="line.125"></a>
<span class="sourceLineNo">126</span>            legacyArtifactPaths.add( v );<a name="line.126"></a>
<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
<span class="sourceLineNo">128</span>        value.setLegacyArtifactPaths( legacyArtifactPaths );<a name="line.128"></a>
<span class="sourceLineNo">129</span>        RepositoryScanningConfiguration repositoryScanning = readRepositoryScanningConfiguration( prefix + "repositoryScanning.", registry );<a name="line.129"></a>
<span class="sourceLineNo">130</span>        value.setRepositoryScanning( repositoryScanning );<a name="line.130"></a>
<span class="sourceLineNo">131</span>        WebappConfiguration webapp = readWebappConfiguration( prefix + "webapp.", registry );<a name="line.131"></a>
<span class="sourceLineNo">132</span>        value.setWebapp( webapp );<a name="line.132"></a>
<span class="sourceLineNo">133</span>        OrganisationInformation organisationInfo = readOrganisationInformation( prefix + "organisationInfo.", registry );<a name="line.133"></a>
<span class="sourceLineNo">134</span>        value.setOrganisationInfo( organisationInfo );<a name="line.134"></a>
<span class="sourceLineNo">135</span>        NetworkConfiguration networkConfiguration = readNetworkConfiguration( prefix + "networkConfiguration.", registry );<a name="line.135"></a>
<span class="sourceLineNo">136</span>        value.setNetworkConfiguration( networkConfiguration );<a name="line.136"></a>
<span class="sourceLineNo">137</span>        RedbackRuntimeConfiguration redbackRuntimeConfiguration = readRedbackRuntimeConfiguration( prefix + "redbackRuntimeConfiguration.", registry );<a name="line.137"></a>
<span class="sourceLineNo">138</span>        value.setRedbackRuntimeConfiguration( redbackRuntimeConfiguration );<a name="line.138"></a>
<span class="sourceLineNo">139</span>        ArchivaRuntimeConfiguration archivaRuntimeConfiguration = readArchivaRuntimeConfiguration( prefix + "archivaRuntimeConfiguration.", registry );<a name="line.139"></a>
<span class="sourceLineNo">140</span>        value.setArchivaRuntimeConfiguration( archivaRuntimeConfiguration );<a name="line.140"></a>
<span class="sourceLineNo">141</span>        java.util.List proxyConnectorRuleConfigurations = new java.util.ArrayList/*&lt;ProxyConnectorRuleConfiguration&gt;*/();<a name="line.141"></a>
<span class="sourceLineNo">142</span>        List proxyConnectorRuleConfigurationsSubsets = registry.getSubsetList( prefix + "proxyConnectorRuleConfigurations.proxyConnectorRuleConfiguration" );<a name="line.142"></a>
<span class="sourceLineNo">143</span>        for ( Iterator i = proxyConnectorRuleConfigurationsSubsets.iterator(); i.hasNext(); )<a name="line.143"></a>
<span class="sourceLineNo">144</span>        {<a name="line.144"></a>
<span class="sourceLineNo">145</span>            ProxyConnectorRuleConfiguration v = readProxyConnectorRuleConfiguration( "", (Registry) i.next() );<a name="line.145"></a>
<span class="sourceLineNo">146</span>            proxyConnectorRuleConfigurations.add( v );<a name="line.146"></a>
<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
<span class="sourceLineNo">148</span>        value.setProxyConnectorRuleConfigurations( proxyConnectorRuleConfigurations );<a name="line.148"></a>
<span class="sourceLineNo">149</span>        ArchivaDefaultConfiguration archivaDefaultConfiguration = readArchivaDefaultConfiguration( prefix + "archivaDefaultConfiguration.", registry );<a name="line.149"></a>
<span class="sourceLineNo">150</span>        value.setArchivaDefaultConfiguration( archivaDefaultConfiguration );<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>        return value;<a name="line.152"></a>
<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
<span class="sourceLineNo">154</span>    <a name="line.154"></a>
<span class="sourceLineNo">155</span>    private AbstractRepositoryConfiguration readAbstractRepositoryConfiguration( String prefix, Registry registry )<a name="line.155"></a>
<span class="sourceLineNo">156</span>    {<a name="line.156"></a>
<span class="sourceLineNo">157</span>        AbstractRepositoryConfiguration value = new AbstractRepositoryConfiguration();<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.161"></a>
<span class="sourceLineNo">162</span>    String id = value.getId();<a name="line.162"></a>
<span class="sourceLineNo">163</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.163"></a>
<span class="sourceLineNo">164</span>    {<a name="line.164"></a>
<span class="sourceLineNo">165</span>        StringBuilder sb = new StringBuilder(  );<a name="line.165"></a>
<span class="sourceLineNo">166</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.166"></a>
<span class="sourceLineNo">167</span>        {<a name="line.167"></a>
<span class="sourceLineNo">168</span>            sb.append( idList.get( i ) );<a name="line.168"></a>
<span class="sourceLineNo">169</span>            if (i&lt;size - 1)<a name="line.169"></a>
<span class="sourceLineNo">170</span>            {<a name="line.170"></a>
<span class="sourceLineNo">171</span>                sb.append( ',' );<a name="line.171"></a>
<span class="sourceLineNo">172</span>            }<a name="line.172"></a>
<span class="sourceLineNo">173</span>        }<a name="line.173"></a>
<span class="sourceLineNo">174</span>        id = sb.toString();<a name="line.174"></a>
<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>        value.setId( id );<a name="line.177"></a>
<span class="sourceLineNo">178</span>    //String name = registry.getString( prefix + "name", value.getName() );<a name="line.178"></a>
<span class="sourceLineNo">179</span><a name="line.179"></a>
<span class="sourceLineNo">180</span>    List&lt;String&gt; nameList = registry.getList( prefix + "name" );<a name="line.180"></a>
<span class="sourceLineNo">181</span>    String name = value.getName();<a name="line.181"></a>
<span class="sourceLineNo">182</span>    if (nameList != null &amp;&amp; !nameList.isEmpty() )<a name="line.182"></a>
<span class="sourceLineNo">183</span>    {<a name="line.183"></a>
<span class="sourceLineNo">184</span>        StringBuilder sb = new StringBuilder(  );<a name="line.184"></a>
<span class="sourceLineNo">185</span>        for (int i = 0,size = nameList.size();i&lt;size;i++)<a name="line.185"></a>
<span class="sourceLineNo">186</span>        {<a name="line.186"></a>
<span class="sourceLineNo">187</span>            sb.append( nameList.get( i ) );<a name="line.187"></a>
<span class="sourceLineNo">188</span>            if (i&lt;size - 1)<a name="line.188"></a>
<span class="sourceLineNo">189</span>            {<a name="line.189"></a>
<span class="sourceLineNo">190</span>                sb.append( ',' );<a name="line.190"></a>
<span class="sourceLineNo">191</span>            }<a name="line.191"></a>
<span class="sourceLineNo">192</span>        }<a name="line.192"></a>
<span class="sourceLineNo">193</span>        name = sb.toString();<a name="line.193"></a>
<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>        value.setName( name );<a name="line.196"></a>
<span class="sourceLineNo">197</span>    //String layout = registry.getString( prefix + "layout", value.getLayout() );<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>    List&lt;String&gt; layoutList = registry.getList( prefix + "layout" );<a name="line.199"></a>
<span class="sourceLineNo">200</span>    String layout = value.getLayout();<a name="line.200"></a>
<span class="sourceLineNo">201</span>    if (layoutList != null &amp;&amp; !layoutList.isEmpty() )<a name="line.201"></a>
<span class="sourceLineNo">202</span>    {<a name="line.202"></a>
<span class="sourceLineNo">203</span>        StringBuilder sb = new StringBuilder(  );<a name="line.203"></a>
<span class="sourceLineNo">204</span>        for (int i = 0,size = layoutList.size();i&lt;size;i++)<a name="line.204"></a>
<span class="sourceLineNo">205</span>        {<a name="line.205"></a>
<span class="sourceLineNo">206</span>            sb.append( layoutList.get( i ) );<a name="line.206"></a>
<span class="sourceLineNo">207</span>            if (i&lt;size - 1)<a name="line.207"></a>
<span class="sourceLineNo">208</span>            {<a name="line.208"></a>
<span class="sourceLineNo">209</span>                sb.append( ',' );<a name="line.209"></a>
<span class="sourceLineNo">210</span>            }<a name="line.210"></a>
<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
<span class="sourceLineNo">212</span>        layout = sb.toString();<a name="line.212"></a>
<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>        value.setLayout( layout );<a name="line.215"></a>
<span class="sourceLineNo">216</span>    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );<a name="line.216"></a>
<span class="sourceLineNo">217</span><a name="line.217"></a>
<span class="sourceLineNo">218</span>    List&lt;String&gt; indexDirList = registry.getList( prefix + "indexDir" );<a name="line.218"></a>
<span class="sourceLineNo">219</span>    String indexDir = value.getIndexDir();<a name="line.219"></a>
<span class="sourceLineNo">220</span>    if (indexDirList != null &amp;&amp; !indexDirList.isEmpty() )<a name="line.220"></a>
<span class="sourceLineNo">221</span>    {<a name="line.221"></a>
<span class="sourceLineNo">222</span>        StringBuilder sb = new StringBuilder(  );<a name="line.222"></a>
<span class="sourceLineNo">223</span>        for (int i = 0,size = indexDirList.size();i&lt;size;i++)<a name="line.223"></a>
<span class="sourceLineNo">224</span>        {<a name="line.224"></a>
<span class="sourceLineNo">225</span>            sb.append( indexDirList.get( i ) );<a name="line.225"></a>
<span class="sourceLineNo">226</span>            if (i&lt;size - 1)<a name="line.226"></a>
<span class="sourceLineNo">227</span>            {<a name="line.227"></a>
<span class="sourceLineNo">228</span>                sb.append( ',' );<a name="line.228"></a>
<span class="sourceLineNo">229</span>            }<a name="line.229"></a>
<span class="sourceLineNo">230</span>        }<a name="line.230"></a>
<span class="sourceLineNo">231</span>        indexDir = sb.toString();<a name="line.231"></a>
<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>        value.setIndexDir( indexDir );<a name="line.234"></a>
<span class="sourceLineNo">235</span>    //String description = registry.getString( prefix + "description", value.getDescription() );<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>    List&lt;String&gt; descriptionList = registry.getList( prefix + "description" );<a name="line.237"></a>
<span class="sourceLineNo">238</span>    String description = value.getDescription();<a name="line.238"></a>
<span class="sourceLineNo">239</span>    if (descriptionList != null &amp;&amp; !descriptionList.isEmpty() )<a name="line.239"></a>
<span class="sourceLineNo">240</span>    {<a name="line.240"></a>
<span class="sourceLineNo">241</span>        StringBuilder sb = new StringBuilder(  );<a name="line.241"></a>
<span class="sourceLineNo">242</span>        for (int i = 0,size = descriptionList.size();i&lt;size;i++)<a name="line.242"></a>
<span class="sourceLineNo">243</span>        {<a name="line.243"></a>
<span class="sourceLineNo">244</span>            sb.append( descriptionList.get( i ) );<a name="line.244"></a>
<span class="sourceLineNo">245</span>            if (i&lt;size - 1)<a name="line.245"></a>
<span class="sourceLineNo">246</span>            {<a name="line.246"></a>
<span class="sourceLineNo">247</span>                sb.append( ',' );<a name="line.247"></a>
<span class="sourceLineNo">248</span>            }<a name="line.248"></a>
<span class="sourceLineNo">249</span>        }<a name="line.249"></a>
<span class="sourceLineNo">250</span>        description = sb.toString();<a name="line.250"></a>
<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>        value.setDescription( description );<a name="line.253"></a>
<span class="sourceLineNo">254</span><a name="line.254"></a>
<span class="sourceLineNo">255</span>        return value;<a name="line.255"></a>
<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
<span class="sourceLineNo">257</span>    <a name="line.257"></a>
<span class="sourceLineNo">258</span>    private RemoteRepositoryConfiguration readRemoteRepositoryConfiguration( String prefix, Registry registry )<a name="line.258"></a>
<span class="sourceLineNo">259</span>    {<a name="line.259"></a>
<span class="sourceLineNo">260</span>        RemoteRepositoryConfiguration value = new RemoteRepositoryConfiguration();<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>    //String url = registry.getString( prefix + "url", value.getUrl() );<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>    List&lt;String&gt; urlList = registry.getList( prefix + "url" );<a name="line.264"></a>
<span class="sourceLineNo">265</span>    String url = value.getUrl();<a name="line.265"></a>
<span class="sourceLineNo">266</span>    if (urlList != null &amp;&amp; !urlList.isEmpty() )<a name="line.266"></a>
<span class="sourceLineNo">267</span>    {<a name="line.267"></a>
<span class="sourceLineNo">268</span>        StringBuilder sb = new StringBuilder(  );<a name="line.268"></a>
<span class="sourceLineNo">269</span>        for (int i = 0,size = urlList.size();i&lt;size;i++)<a name="line.269"></a>
<span class="sourceLineNo">270</span>        {<a name="line.270"></a>
<span class="sourceLineNo">271</span>            sb.append( urlList.get( i ) );<a name="line.271"></a>
<span class="sourceLineNo">272</span>            if (i&lt;size - 1)<a name="line.272"></a>
<span class="sourceLineNo">273</span>            {<a name="line.273"></a>
<span class="sourceLineNo">274</span>                sb.append( ',' );<a name="line.274"></a>
<span class="sourceLineNo">275</span>            }<a name="line.275"></a>
<span class="sourceLineNo">276</span>        }<a name="line.276"></a>
<span class="sourceLineNo">277</span>        url = sb.toString();<a name="line.277"></a>
<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>        value.setUrl( url );<a name="line.280"></a>
<span class="sourceLineNo">281</span>    //String username = registry.getString( prefix + "username", value.getUsername() );<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>    List&lt;String&gt; usernameList = registry.getList( prefix + "username" );<a name="line.283"></a>
<span class="sourceLineNo">284</span>    String username = value.getUsername();<a name="line.284"></a>
<span class="sourceLineNo">285</span>    if (usernameList != null &amp;&amp; !usernameList.isEmpty() )<a name="line.285"></a>
<span class="sourceLineNo">286</span>    {<a name="line.286"></a>
<span class="sourceLineNo">287</span>        StringBuilder sb = new StringBuilder(  );<a name="line.287"></a>
<span class="sourceLineNo">288</span>        for (int i = 0,size = usernameList.size();i&lt;size;i++)<a name="line.288"></a>
<span class="sourceLineNo">289</span>        {<a name="line.289"></a>
<span class="sourceLineNo">290</span>            sb.append( usernameList.get( i ) );<a name="line.290"></a>
<span class="sourceLineNo">291</span>            if (i&lt;size - 1)<a name="line.291"></a>
<span class="sourceLineNo">292</span>            {<a name="line.292"></a>
<span class="sourceLineNo">293</span>                sb.append( ',' );<a name="line.293"></a>
<span class="sourceLineNo">294</span>            }<a name="line.294"></a>
<span class="sourceLineNo">295</span>        }<a name="line.295"></a>
<span class="sourceLineNo">296</span>        username = sb.toString();<a name="line.296"></a>
<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>        value.setUsername( username );<a name="line.299"></a>
<span class="sourceLineNo">300</span>    //String password = registry.getString( prefix + "password", value.getPassword() );<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>    List&lt;String&gt; passwordList = registry.getList( prefix + "password" );<a name="line.302"></a>
<span class="sourceLineNo">303</span>    String password = value.getPassword();<a name="line.303"></a>
<span class="sourceLineNo">304</span>    if (passwordList != null &amp;&amp; !passwordList.isEmpty() )<a name="line.304"></a>
<span class="sourceLineNo">305</span>    {<a name="line.305"></a>
<span class="sourceLineNo">306</span>        StringBuilder sb = new StringBuilder(  );<a name="line.306"></a>
<span class="sourceLineNo">307</span>        for (int i = 0,size = passwordList.size();i&lt;size;i++)<a name="line.307"></a>
<span class="sourceLineNo">308</span>        {<a name="line.308"></a>
<span class="sourceLineNo">309</span>            sb.append( passwordList.get( i ) );<a name="line.309"></a>
<span class="sourceLineNo">310</span>            if (i&lt;size - 1)<a name="line.310"></a>
<span class="sourceLineNo">311</span>            {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                sb.append( ',' );<a name="line.312"></a>
<span class="sourceLineNo">313</span>            }<a name="line.313"></a>
<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
<span class="sourceLineNo">315</span>        password = sb.toString();<a name="line.315"></a>
<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>        value.setPassword( password );<a name="line.318"></a>
<span class="sourceLineNo">319</span>    int timeout = registry.getInt( prefix + "timeout", value.getTimeout() );<a name="line.319"></a>
<span class="sourceLineNo">320</span>        value.setTimeout( timeout );<a name="line.320"></a>
<span class="sourceLineNo">321</span>    //String refreshCronExpression = registry.getString( prefix + "refreshCronExpression", value.getRefreshCronExpression() );<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>    List&lt;String&gt; refreshCronExpressionList = registry.getList( prefix + "refreshCronExpression" );<a name="line.323"></a>
<span class="sourceLineNo">324</span>    String refreshCronExpression = value.getRefreshCronExpression();<a name="line.324"></a>
<span class="sourceLineNo">325</span>    if (refreshCronExpressionList != null &amp;&amp; !refreshCronExpressionList.isEmpty() )<a name="line.325"></a>
<span class="sourceLineNo">326</span>    {<a name="line.326"></a>
<span class="sourceLineNo">327</span>        StringBuilder sb = new StringBuilder(  );<a name="line.327"></a>
<span class="sourceLineNo">328</span>        for (int i = 0,size = refreshCronExpressionList.size();i&lt;size;i++)<a name="line.328"></a>
<span class="sourceLineNo">329</span>        {<a name="line.329"></a>
<span class="sourceLineNo">330</span>            sb.append( refreshCronExpressionList.get( i ) );<a name="line.330"></a>
<span class="sourceLineNo">331</span>            if (i&lt;size - 1)<a name="line.331"></a>
<span class="sourceLineNo">332</span>            {<a name="line.332"></a>
<span class="sourceLineNo">333</span>                sb.append( ',' );<a name="line.333"></a>
<span class="sourceLineNo">334</span>            }<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span>        refreshCronExpression = sb.toString();<a name="line.336"></a>
<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>        value.setRefreshCronExpression( refreshCronExpression );<a name="line.339"></a>
<span class="sourceLineNo">340</span>        boolean downloadRemoteIndex = registry.getBoolean( prefix + "downloadRemoteIndex", value.isDownloadRemoteIndex() );<a name="line.340"></a>
<span class="sourceLineNo">341</span>        value.setDownloadRemoteIndex( downloadRemoteIndex );<a name="line.341"></a>
<span class="sourceLineNo">342</span>    //String remoteIndexUrl = registry.getString( prefix + "remoteIndexUrl", value.getRemoteIndexUrl() );<a name="line.342"></a>
<span class="sourceLineNo">343</span><a name="line.343"></a>
<span class="sourceLineNo">344</span>    List&lt;String&gt; remoteIndexUrlList = registry.getList( prefix + "remoteIndexUrl" );<a name="line.344"></a>
<span class="sourceLineNo">345</span>    String remoteIndexUrl = value.getRemoteIndexUrl();<a name="line.345"></a>
<span class="sourceLineNo">346</span>    if (remoteIndexUrlList != null &amp;&amp; !remoteIndexUrlList.isEmpty() )<a name="line.346"></a>
<span class="sourceLineNo">347</span>    {<a name="line.347"></a>
<span class="sourceLineNo">348</span>        StringBuilder sb = new StringBuilder(  );<a name="line.348"></a>
<span class="sourceLineNo">349</span>        for (int i = 0,size = remoteIndexUrlList.size();i&lt;size;i++)<a name="line.349"></a>
<span class="sourceLineNo">350</span>        {<a name="line.350"></a>
<span class="sourceLineNo">351</span>            sb.append( remoteIndexUrlList.get( i ) );<a name="line.351"></a>
<span class="sourceLineNo">352</span>            if (i&lt;size - 1)<a name="line.352"></a>
<span class="sourceLineNo">353</span>            {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                sb.append( ',' );<a name="line.354"></a>
<span class="sourceLineNo">355</span>            }<a name="line.355"></a>
<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
<span class="sourceLineNo">357</span>        remoteIndexUrl = sb.toString();<a name="line.357"></a>
<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
<span class="sourceLineNo">359</span><a name="line.359"></a>
<span class="sourceLineNo">360</span>        value.setRemoteIndexUrl( remoteIndexUrl );<a name="line.360"></a>
<span class="sourceLineNo">361</span>    //String remoteDownloadNetworkProxyId = registry.getString( prefix + "remoteDownloadNetworkProxyId", value.getRemoteDownloadNetworkProxyId() );<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>    List&lt;String&gt; remoteDownloadNetworkProxyIdList = registry.getList( prefix + "remoteDownloadNetworkProxyId" );<a name="line.363"></a>
<span class="sourceLineNo">364</span>    String remoteDownloadNetworkProxyId = value.getRemoteDownloadNetworkProxyId();<a name="line.364"></a>
<span class="sourceLineNo">365</span>    if (remoteDownloadNetworkProxyIdList != null &amp;&amp; !remoteDownloadNetworkProxyIdList.isEmpty() )<a name="line.365"></a>
<span class="sourceLineNo">366</span>    {<a name="line.366"></a>
<span class="sourceLineNo">367</span>        StringBuilder sb = new StringBuilder(  );<a name="line.367"></a>
<span class="sourceLineNo">368</span>        for (int i = 0,size = remoteDownloadNetworkProxyIdList.size();i&lt;size;i++)<a name="line.368"></a>
<span class="sourceLineNo">369</span>        {<a name="line.369"></a>
<span class="sourceLineNo">370</span>            sb.append( remoteDownloadNetworkProxyIdList.get( i ) );<a name="line.370"></a>
<span class="sourceLineNo">371</span>            if (i&lt;size - 1)<a name="line.371"></a>
<span class="sourceLineNo">372</span>            {<a name="line.372"></a>
<span class="sourceLineNo">373</span>                sb.append( ',' );<a name="line.373"></a>
<span class="sourceLineNo">374</span>            }<a name="line.374"></a>
<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
<span class="sourceLineNo">376</span>        remoteDownloadNetworkProxyId = sb.toString();<a name="line.376"></a>
<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
<span class="sourceLineNo">378</span><a name="line.378"></a>
<span class="sourceLineNo">379</span>        value.setRemoteDownloadNetworkProxyId( remoteDownloadNetworkProxyId );<a name="line.379"></a>
<span class="sourceLineNo">380</span>    int remoteDownloadTimeout = registry.getInt( prefix + "remoteDownloadTimeout", value.getRemoteDownloadTimeout() );<a name="line.380"></a>
<span class="sourceLineNo">381</span>        value.setRemoteDownloadTimeout( remoteDownloadTimeout );<a name="line.381"></a>
<span class="sourceLineNo">382</span>        boolean downloadRemoteIndexOnStartup = registry.getBoolean( prefix + "downloadRemoteIndexOnStartup", value.isDownloadRemoteIndexOnStartup() );<a name="line.382"></a>
<span class="sourceLineNo">383</span>        value.setDownloadRemoteIndexOnStartup( downloadRemoteIndexOnStartup );<a name="line.383"></a>
<span class="sourceLineNo">384</span>        java.util.Map extraParameters = registry.getProperties( prefix + "extraParameters" );<a name="line.384"></a>
<span class="sourceLineNo">385</span>        value.setExtraParameters( extraParameters );<a name="line.385"></a>
<span class="sourceLineNo">386</span>        java.util.Map extraHeaders = registry.getProperties( prefix + "extraHeaders" );<a name="line.386"></a>
<span class="sourceLineNo">387</span>        value.setExtraHeaders( extraHeaders );<a name="line.387"></a>
<span class="sourceLineNo">388</span>    //String checkPath = registry.getString( prefix + "checkPath", value.getCheckPath() );<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>    List&lt;String&gt; checkPathList = registry.getList( prefix + "checkPath" );<a name="line.390"></a>
<span class="sourceLineNo">391</span>    String checkPath = value.getCheckPath();<a name="line.391"></a>
<span class="sourceLineNo">392</span>    if (checkPathList != null &amp;&amp; !checkPathList.isEmpty() )<a name="line.392"></a>
<span class="sourceLineNo">393</span>    {<a name="line.393"></a>
<span class="sourceLineNo">394</span>        StringBuilder sb = new StringBuilder(  );<a name="line.394"></a>
<span class="sourceLineNo">395</span>        for (int i = 0,size = checkPathList.size();i&lt;size;i++)<a name="line.395"></a>
<span class="sourceLineNo">396</span>        {<a name="line.396"></a>
<span class="sourceLineNo">397</span>            sb.append( checkPathList.get( i ) );<a name="line.397"></a>
<span class="sourceLineNo">398</span>            if (i&lt;size - 1)<a name="line.398"></a>
<span class="sourceLineNo">399</span>            {<a name="line.399"></a>
<span class="sourceLineNo">400</span>                sb.append( ',' );<a name="line.400"></a>
<span class="sourceLineNo">401</span>            }<a name="line.401"></a>
<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
<span class="sourceLineNo">403</span>        checkPath = sb.toString();<a name="line.403"></a>
<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
<span class="sourceLineNo">405</span><a name="line.405"></a>
<span class="sourceLineNo">406</span>        value.setCheckPath( checkPath );<a name="line.406"></a>
<span class="sourceLineNo">407</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.409"></a>
<span class="sourceLineNo">410</span>    String id = value.getId();<a name="line.410"></a>
<span class="sourceLineNo">411</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.411"></a>
<span class="sourceLineNo">412</span>    {<a name="line.412"></a>
<span class="sourceLineNo">413</span>        StringBuilder sb = new StringBuilder(  );<a name="line.413"></a>
<span class="sourceLineNo">414</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.414"></a>
<span class="sourceLineNo">415</span>        {<a name="line.415"></a>
<span class="sourceLineNo">416</span>            sb.append( idList.get( i ) );<a name="line.416"></a>
<span class="sourceLineNo">417</span>            if (i&lt;size - 1)<a name="line.417"></a>
<span class="sourceLineNo">418</span>            {<a name="line.418"></a>
<span class="sourceLineNo">419</span>                sb.append( ',' );<a name="line.419"></a>
<span class="sourceLineNo">420</span>            }<a name="line.420"></a>
<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
<span class="sourceLineNo">422</span>        id = sb.toString();<a name="line.422"></a>
<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
<span class="sourceLineNo">424</span><a name="line.424"></a>
<span class="sourceLineNo">425</span>        value.setId( id );<a name="line.425"></a>
<span class="sourceLineNo">426</span>    //String name = registry.getString( prefix + "name", value.getName() );<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>    List&lt;String&gt; nameList = registry.getList( prefix + "name" );<a name="line.428"></a>
<span class="sourceLineNo">429</span>    String name = value.getName();<a name="line.429"></a>
<span class="sourceLineNo">430</span>    if (nameList != null &amp;&amp; !nameList.isEmpty() )<a name="line.430"></a>
<span class="sourceLineNo">431</span>    {<a name="line.431"></a>
<span class="sourceLineNo">432</span>        StringBuilder sb = new StringBuilder(  );<a name="line.432"></a>
<span class="sourceLineNo">433</span>        for (int i = 0,size = nameList.size();i&lt;size;i++)<a name="line.433"></a>
<span class="sourceLineNo">434</span>        {<a name="line.434"></a>
<span class="sourceLineNo">435</span>            sb.append( nameList.get( i ) );<a name="line.435"></a>
<span class="sourceLineNo">436</span>            if (i&lt;size - 1)<a name="line.436"></a>
<span class="sourceLineNo">437</span>            {<a name="line.437"></a>
<span class="sourceLineNo">438</span>                sb.append( ',' );<a name="line.438"></a>
<span class="sourceLineNo">439</span>            }<a name="line.439"></a>
<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
<span class="sourceLineNo">441</span>        name = sb.toString();<a name="line.441"></a>
<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>        value.setName( name );<a name="line.444"></a>
<span class="sourceLineNo">445</span>    //String layout = registry.getString( prefix + "layout", value.getLayout() );<a name="line.445"></a>
<span class="sourceLineNo">446</span><a name="line.446"></a>
<span class="sourceLineNo">447</span>    List&lt;String&gt; layoutList = registry.getList( prefix + "layout" );<a name="line.447"></a>
<span class="sourceLineNo">448</span>    String layout = value.getLayout();<a name="line.448"></a>
<span class="sourceLineNo">449</span>    if (layoutList != null &amp;&amp; !layoutList.isEmpty() )<a name="line.449"></a>
<span class="sourceLineNo">450</span>    {<a name="line.450"></a>
<span class="sourceLineNo">451</span>        StringBuilder sb = new StringBuilder(  );<a name="line.451"></a>
<span class="sourceLineNo">452</span>        for (int i = 0,size = layoutList.size();i&lt;size;i++)<a name="line.452"></a>
<span class="sourceLineNo">453</span>        {<a name="line.453"></a>
<span class="sourceLineNo">454</span>            sb.append( layoutList.get( i ) );<a name="line.454"></a>
<span class="sourceLineNo">455</span>            if (i&lt;size - 1)<a name="line.455"></a>
<span class="sourceLineNo">456</span>            {<a name="line.456"></a>
<span class="sourceLineNo">457</span>                sb.append( ',' );<a name="line.457"></a>
<span class="sourceLineNo">458</span>            }<a name="line.458"></a>
<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
<span class="sourceLineNo">460</span>        layout = sb.toString();<a name="line.460"></a>
<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>        value.setLayout( layout );<a name="line.463"></a>
<span class="sourceLineNo">464</span>    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );<a name="line.464"></a>
<span class="sourceLineNo">465</span><a name="line.465"></a>
<span class="sourceLineNo">466</span>    List&lt;String&gt; indexDirList = registry.getList( prefix + "indexDir" );<a name="line.466"></a>
<span class="sourceLineNo">467</span>    String indexDir = value.getIndexDir();<a name="line.467"></a>
<span class="sourceLineNo">468</span>    if (indexDirList != null &amp;&amp; !indexDirList.isEmpty() )<a name="line.468"></a>
<span class="sourceLineNo">469</span>    {<a name="line.469"></a>
<span class="sourceLineNo">470</span>        StringBuilder sb = new StringBuilder(  );<a name="line.470"></a>
<span class="sourceLineNo">471</span>        for (int i = 0,size = indexDirList.size();i&lt;size;i++)<a name="line.471"></a>
<span class="sourceLineNo">472</span>        {<a name="line.472"></a>
<span class="sourceLineNo">473</span>            sb.append( indexDirList.get( i ) );<a name="line.473"></a>
<span class="sourceLineNo">474</span>            if (i&lt;size - 1)<a name="line.474"></a>
<span class="sourceLineNo">475</span>            {<a name="line.475"></a>
<span class="sourceLineNo">476</span>                sb.append( ',' );<a name="line.476"></a>
<span class="sourceLineNo">477</span>            }<a name="line.477"></a>
<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
<span class="sourceLineNo">479</span>        indexDir = sb.toString();<a name="line.479"></a>
<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>        value.setIndexDir( indexDir );<a name="line.482"></a>
<span class="sourceLineNo">483</span>    //String description = registry.getString( prefix + "description", value.getDescription() );<a name="line.483"></a>
<span class="sourceLineNo">484</span><a name="line.484"></a>
<span class="sourceLineNo">485</span>    List&lt;String&gt; descriptionList = registry.getList( prefix + "description" );<a name="line.485"></a>
<span class="sourceLineNo">486</span>    String description = value.getDescription();<a name="line.486"></a>
<span class="sourceLineNo">487</span>    if (descriptionList != null &amp;&amp; !descriptionList.isEmpty() )<a name="line.487"></a>
<span class="sourceLineNo">488</span>    {<a name="line.488"></a>
<span class="sourceLineNo">489</span>        StringBuilder sb = new StringBuilder(  );<a name="line.489"></a>
<span class="sourceLineNo">490</span>        for (int i = 0,size = descriptionList.size();i&lt;size;i++)<a name="line.490"></a>
<span class="sourceLineNo">491</span>        {<a name="line.491"></a>
<span class="sourceLineNo">492</span>            sb.append( descriptionList.get( i ) );<a name="line.492"></a>
<span class="sourceLineNo">493</span>            if (i&lt;size - 1)<a name="line.493"></a>
<span class="sourceLineNo">494</span>            {<a name="line.494"></a>
<span class="sourceLineNo">495</span>                sb.append( ',' );<a name="line.495"></a>
<span class="sourceLineNo">496</span>            }<a name="line.496"></a>
<span class="sourceLineNo">497</span>        }<a name="line.497"></a>
<span class="sourceLineNo">498</span>        description = sb.toString();<a name="line.498"></a>
<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>        value.setDescription( description );<a name="line.501"></a>
<span class="sourceLineNo">502</span><a name="line.502"></a>
<span class="sourceLineNo">503</span>        return value;<a name="line.503"></a>
<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
<span class="sourceLineNo">505</span>    <a name="line.505"></a>
<span class="sourceLineNo">506</span>    private ManagedRepositoryConfiguration readManagedRepositoryConfiguration( String prefix, Registry registry )<a name="line.506"></a>
<span class="sourceLineNo">507</span>    {<a name="line.507"></a>
<span class="sourceLineNo">508</span>        ManagedRepositoryConfiguration value = new ManagedRepositoryConfiguration();<a name="line.508"></a>
<span class="sourceLineNo">509</span><a name="line.509"></a>
<span class="sourceLineNo">510</span>    //String location = registry.getString( prefix + "location", value.getLocation() );<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>    List&lt;String&gt; locationList = registry.getList( prefix + "location" );<a name="line.512"></a>
<span class="sourceLineNo">513</span>    String location = value.getLocation();<a name="line.513"></a>
<span class="sourceLineNo">514</span>    if (locationList != null &amp;&amp; !locationList.isEmpty() )<a name="line.514"></a>
<span class="sourceLineNo">515</span>    {<a name="line.515"></a>
<span class="sourceLineNo">516</span>        StringBuilder sb = new StringBuilder(  );<a name="line.516"></a>
<span class="sourceLineNo">517</span>        for (int i = 0,size = locationList.size();i&lt;size;i++)<a name="line.517"></a>
<span class="sourceLineNo">518</span>        {<a name="line.518"></a>
<span class="sourceLineNo">519</span>            sb.append( locationList.get( i ) );<a name="line.519"></a>
<span class="sourceLineNo">520</span>            if (i&lt;size - 1)<a name="line.520"></a>
<span class="sourceLineNo">521</span>            {<a name="line.521"></a>
<span class="sourceLineNo">522</span>                sb.append( ',' );<a name="line.522"></a>
<span class="sourceLineNo">523</span>            }<a name="line.523"></a>
<span class="sourceLineNo">524</span>        }<a name="line.524"></a>
<span class="sourceLineNo">525</span>        location = sb.toString();<a name="line.525"></a>
<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>        value.setLocation( location );<a name="line.528"></a>
<span class="sourceLineNo">529</span>        boolean releases = registry.getBoolean( prefix + "releases", value.isReleases() );<a name="line.529"></a>
<span class="sourceLineNo">530</span>        value.setReleases( releases );<a name="line.530"></a>
<span class="sourceLineNo">531</span>        boolean blockRedeployments = registry.getBoolean( prefix + "blockRedeployments", value.isBlockRedeployments() );<a name="line.531"></a>
<span class="sourceLineNo">532</span>        value.setBlockRedeployments( blockRedeployments );<a name="line.532"></a>
<span class="sourceLineNo">533</span>        boolean snapshots = registry.getBoolean( prefix + "snapshots", value.isSnapshots() );<a name="line.533"></a>
<span class="sourceLineNo">534</span>        value.setSnapshots( snapshots );<a name="line.534"></a>
<span class="sourceLineNo">535</span>        boolean scanned = registry.getBoolean( prefix + "scanned", value.isScanned() );<a name="line.535"></a>
<span class="sourceLineNo">536</span>        value.setScanned( scanned );<a name="line.536"></a>
<span class="sourceLineNo">537</span>    //String refreshCronExpression = registry.getString( prefix + "refreshCronExpression", value.getRefreshCronExpression() );<a name="line.537"></a>
<span class="sourceLineNo">538</span><a name="line.538"></a>
<span class="sourceLineNo">539</span>    List&lt;String&gt; refreshCronExpressionList = registry.getList( prefix + "refreshCronExpression" );<a name="line.539"></a>
<span class="sourceLineNo">540</span>    String refreshCronExpression = value.getRefreshCronExpression();<a name="line.540"></a>
<span class="sourceLineNo">541</span>    if (refreshCronExpressionList != null &amp;&amp; !refreshCronExpressionList.isEmpty() )<a name="line.541"></a>
<span class="sourceLineNo">542</span>    {<a name="line.542"></a>
<span class="sourceLineNo">543</span>        StringBuilder sb = new StringBuilder(  );<a name="line.543"></a>
<span class="sourceLineNo">544</span>        for (int i = 0,size = refreshCronExpressionList.size();i&lt;size;i++)<a name="line.544"></a>
<span class="sourceLineNo">545</span>        {<a name="line.545"></a>
<span class="sourceLineNo">546</span>            sb.append( refreshCronExpressionList.get( i ) );<a name="line.546"></a>
<span class="sourceLineNo">547</span>            if (i&lt;size - 1)<a name="line.547"></a>
<span class="sourceLineNo">548</span>            {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                sb.append( ',' );<a name="line.549"></a>
<span class="sourceLineNo">550</span>            }<a name="line.550"></a>
<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
<span class="sourceLineNo">552</span>        refreshCronExpression = sb.toString();<a name="line.552"></a>
<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
<span class="sourceLineNo">554</span><a name="line.554"></a>
<span class="sourceLineNo">555</span>        value.setRefreshCronExpression( refreshCronExpression );<a name="line.555"></a>
<span class="sourceLineNo">556</span>    int retentionCount = registry.getInt( prefix + "retentionCount", value.getRetentionCount() );<a name="line.556"></a>
<span class="sourceLineNo">557</span>        value.setRetentionCount( retentionCount );<a name="line.557"></a>
<span class="sourceLineNo">558</span>    int daysOlder = registry.getInt( prefix + "daysOlder", value.getDaysOlder() );<a name="line.558"></a>
<span class="sourceLineNo">559</span>        value.setDaysOlder( daysOlder );<a name="line.559"></a>
<span class="sourceLineNo">560</span>        boolean deleteReleasedSnapshots = registry.getBoolean( prefix + "deleteReleasedSnapshots", value.isDeleteReleasedSnapshots() );<a name="line.560"></a>
<span class="sourceLineNo">561</span>        value.setDeleteReleasedSnapshots( deleteReleasedSnapshots );<a name="line.561"></a>
<span class="sourceLineNo">562</span>        boolean skipPackedIndexCreation = registry.getBoolean( prefix + "skipPackedIndexCreation", value.isSkipPackedIndexCreation() );<a name="line.562"></a>
<span class="sourceLineNo">563</span>        value.setSkipPackedIndexCreation( skipPackedIndexCreation );<a name="line.563"></a>
<span class="sourceLineNo">564</span>        boolean stageRepoNeeded = registry.getBoolean( prefix + "stageRepoNeeded", value.isStageRepoNeeded() );<a name="line.564"></a>
<span class="sourceLineNo">565</span>        value.setStageRepoNeeded( stageRepoNeeded );<a name="line.565"></a>
<span class="sourceLineNo">566</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.568"></a>
<span class="sourceLineNo">569</span>    String id = value.getId();<a name="line.569"></a>
<span class="sourceLineNo">570</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.570"></a>
<span class="sourceLineNo">571</span>    {<a name="line.571"></a>
<span class="sourceLineNo">572</span>        StringBuilder sb = new StringBuilder(  );<a name="line.572"></a>
<span class="sourceLineNo">573</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.573"></a>
<span class="sourceLineNo">574</span>        {<a name="line.574"></a>
<span class="sourceLineNo">575</span>            sb.append( idList.get( i ) );<a name="line.575"></a>
<span class="sourceLineNo">576</span>            if (i&lt;size - 1)<a name="line.576"></a>
<span class="sourceLineNo">577</span>            {<a name="line.577"></a>
<span class="sourceLineNo">578</span>                sb.append( ',' );<a name="line.578"></a>
<span class="sourceLineNo">579</span>            }<a name="line.579"></a>
<span class="sourceLineNo">580</span>        }<a name="line.580"></a>
<span class="sourceLineNo">581</span>        id = sb.toString();<a name="line.581"></a>
<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
<span class="sourceLineNo">583</span><a name="line.583"></a>
<span class="sourceLineNo">584</span>        value.setId( id );<a name="line.584"></a>
<span class="sourceLineNo">585</span>    //String name = registry.getString( prefix + "name", value.getName() );<a name="line.585"></a>
<span class="sourceLineNo">586</span><a name="line.586"></a>
<span class="sourceLineNo">587</span>    List&lt;String&gt; nameList = registry.getList( prefix + "name" );<a name="line.587"></a>
<span class="sourceLineNo">588</span>    String name = value.getName();<a name="line.588"></a>
<span class="sourceLineNo">589</span>    if (nameList != null &amp;&amp; !nameList.isEmpty() )<a name="line.589"></a>
<span class="sourceLineNo">590</span>    {<a name="line.590"></a>
<span class="sourceLineNo">591</span>        StringBuilder sb = new StringBuilder(  );<a name="line.591"></a>
<span class="sourceLineNo">592</span>        for (int i = 0,size = nameList.size();i&lt;size;i++)<a name="line.592"></a>
<span class="sourceLineNo">593</span>        {<a name="line.593"></a>
<span class="sourceLineNo">594</span>            sb.append( nameList.get( i ) );<a name="line.594"></a>
<span class="sourceLineNo">595</span>            if (i&lt;size - 1)<a name="line.595"></a>
<span class="sourceLineNo">596</span>            {<a name="line.596"></a>
<span class="sourceLineNo">597</span>                sb.append( ',' );<a name="line.597"></a>
<span class="sourceLineNo">598</span>            }<a name="line.598"></a>
<span class="sourceLineNo">599</span>        }<a name="line.599"></a>
<span class="sourceLineNo">600</span>        name = sb.toString();<a name="line.600"></a>
<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
<span class="sourceLineNo">602</span><a name="line.602"></a>
<span class="sourceLineNo">603</span>        value.setName( name );<a name="line.603"></a>
<span class="sourceLineNo">604</span>    //String layout = registry.getString( prefix + "layout", value.getLayout() );<a name="line.604"></a>
<span class="sourceLineNo">605</span><a name="line.605"></a>
<span class="sourceLineNo">606</span>    List&lt;String&gt; layoutList = registry.getList( prefix + "layout" );<a name="line.606"></a>
<span class="sourceLineNo">607</span>    String layout = value.getLayout();<a name="line.607"></a>
<span class="sourceLineNo">608</span>    if (layoutList != null &amp;&amp; !layoutList.isEmpty() )<a name="line.608"></a>
<span class="sourceLineNo">609</span>    {<a name="line.609"></a>
<span class="sourceLineNo">610</span>        StringBuilder sb = new StringBuilder(  );<a name="line.610"></a>
<span class="sourceLineNo">611</span>        for (int i = 0,size = layoutList.size();i&lt;size;i++)<a name="line.611"></a>
<span class="sourceLineNo">612</span>        {<a name="line.612"></a>
<span class="sourceLineNo">613</span>            sb.append( layoutList.get( i ) );<a name="line.613"></a>
<span class="sourceLineNo">614</span>            if (i&lt;size - 1)<a name="line.614"></a>
<span class="sourceLineNo">615</span>            {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                sb.append( ',' );<a name="line.616"></a>
<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
<span class="sourceLineNo">618</span>        }<a name="line.618"></a>
<span class="sourceLineNo">619</span>        layout = sb.toString();<a name="line.619"></a>
<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
<span class="sourceLineNo">621</span><a name="line.621"></a>
<span class="sourceLineNo">622</span>        value.setLayout( layout );<a name="line.622"></a>
<span class="sourceLineNo">623</span>    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );<a name="line.623"></a>
<span class="sourceLineNo">624</span><a name="line.624"></a>
<span class="sourceLineNo">625</span>    List&lt;String&gt; indexDirList = registry.getList( prefix + "indexDir" );<a name="line.625"></a>
<span class="sourceLineNo">626</span>    String indexDir = value.getIndexDir();<a name="line.626"></a>
<span class="sourceLineNo">627</span>    if (indexDirList != null &amp;&amp; !indexDirList.isEmpty() )<a name="line.627"></a>
<span class="sourceLineNo">628</span>    {<a name="line.628"></a>
<span class="sourceLineNo">629</span>        StringBuilder sb = new StringBuilder(  );<a name="line.629"></a>
<span class="sourceLineNo">630</span>        for (int i = 0,size = indexDirList.size();i&lt;size;i++)<a name="line.630"></a>
<span class="sourceLineNo">631</span>        {<a name="line.631"></a>
<span class="sourceLineNo">632</span>            sb.append( indexDirList.get( i ) );<a name="line.632"></a>
<span class="sourceLineNo">633</span>            if (i&lt;size - 1)<a name="line.633"></a>
<span class="sourceLineNo">634</span>            {<a name="line.634"></a>
<span class="sourceLineNo">635</span>                sb.append( ',' );<a name="line.635"></a>
<span class="sourceLineNo">636</span>            }<a name="line.636"></a>
<span class="sourceLineNo">637</span>        }<a name="line.637"></a>
<span class="sourceLineNo">638</span>        indexDir = sb.toString();<a name="line.638"></a>
<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
<span class="sourceLineNo">640</span><a name="line.640"></a>
<span class="sourceLineNo">641</span>        value.setIndexDir( indexDir );<a name="line.641"></a>
<span class="sourceLineNo">642</span>    //String description = registry.getString( prefix + "description", value.getDescription() );<a name="line.642"></a>
<span class="sourceLineNo">643</span><a name="line.643"></a>
<span class="sourceLineNo">644</span>    List&lt;String&gt; descriptionList = registry.getList( prefix + "description" );<a name="line.644"></a>
<span class="sourceLineNo">645</span>    String description = value.getDescription();<a name="line.645"></a>
<span class="sourceLineNo">646</span>    if (descriptionList != null &amp;&amp; !descriptionList.isEmpty() )<a name="line.646"></a>
<span class="sourceLineNo">647</span>    {<a name="line.647"></a>
<span class="sourceLineNo">648</span>        StringBuilder sb = new StringBuilder(  );<a name="line.648"></a>
<span class="sourceLineNo">649</span>        for (int i = 0,size = descriptionList.size();i&lt;size;i++)<a name="line.649"></a>
<span class="sourceLineNo">650</span>        {<a name="line.650"></a>
<span class="sourceLineNo">651</span>            sb.append( descriptionList.get( i ) );<a name="line.651"></a>
<span class="sourceLineNo">652</span>            if (i&lt;size - 1)<a name="line.652"></a>
<span class="sourceLineNo">653</span>            {<a name="line.653"></a>
<span class="sourceLineNo">654</span>                sb.append( ',' );<a name="line.654"></a>
<span class="sourceLineNo">655</span>            }<a name="line.655"></a>
<span class="sourceLineNo">656</span>        }<a name="line.656"></a>
<span class="sourceLineNo">657</span>        description = sb.toString();<a name="line.657"></a>
<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
<span class="sourceLineNo">659</span><a name="line.659"></a>
<span class="sourceLineNo">660</span>        value.setDescription( description );<a name="line.660"></a>
<span class="sourceLineNo">661</span><a name="line.661"></a>
<span class="sourceLineNo">662</span>        return value;<a name="line.662"></a>
<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
<span class="sourceLineNo">664</span>    <a name="line.664"></a>
<span class="sourceLineNo">665</span>    private V1RepositoryConfiguration readV1RepositoryConfiguration( String prefix, Registry registry )<a name="line.665"></a>
<span class="sourceLineNo">666</span>    {<a name="line.666"></a>
<span class="sourceLineNo">667</span>        V1RepositoryConfiguration value = new V1RepositoryConfiguration();<a name="line.667"></a>
<span class="sourceLineNo">668</span><a name="line.668"></a>
<span class="sourceLineNo">669</span>    //String url = registry.getString( prefix + "url", value.getUrl() );<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>    List&lt;String&gt; urlList = registry.getList( prefix + "url" );<a name="line.671"></a>
<span class="sourceLineNo">672</span>    String url = value.getUrl();<a name="line.672"></a>
<span class="sourceLineNo">673</span>    if (urlList != null &amp;&amp; !urlList.isEmpty() )<a name="line.673"></a>
<span class="sourceLineNo">674</span>    {<a name="line.674"></a>
<span class="sourceLineNo">675</span>        StringBuilder sb = new StringBuilder(  );<a name="line.675"></a>
<span class="sourceLineNo">676</span>        for (int i = 0,size = urlList.size();i&lt;size;i++)<a name="line.676"></a>
<span class="sourceLineNo">677</span>        {<a name="line.677"></a>
<span class="sourceLineNo">678</span>            sb.append( urlList.get( i ) );<a name="line.678"></a>
<span class="sourceLineNo">679</span>            if (i&lt;size - 1)<a name="line.679"></a>
<span class="sourceLineNo">680</span>            {<a name="line.680"></a>
<span class="sourceLineNo">681</span>                sb.append( ',' );<a name="line.681"></a>
<span class="sourceLineNo">682</span>            }<a name="line.682"></a>
<span class="sourceLineNo">683</span>        }<a name="line.683"></a>
<span class="sourceLineNo">684</span>        url = sb.toString();<a name="line.684"></a>
<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
<span class="sourceLineNo">686</span><a name="line.686"></a>
<span class="sourceLineNo">687</span>        value.setUrl( url );<a name="line.687"></a>
<span class="sourceLineNo">688</span>        boolean indexed = registry.getBoolean( prefix + "indexed", value.isIndexed() );<a name="line.688"></a>
<span class="sourceLineNo">689</span>        value.setIndexed( indexed );<a name="line.689"></a>
<span class="sourceLineNo">690</span>    //String location = registry.getString( prefix + "location", value.getLocation() );<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>    List&lt;String&gt; locationList = registry.getList( prefix + "location" );<a name="line.692"></a>
<span class="sourceLineNo">693</span>    String location = value.getLocation();<a name="line.693"></a>
<span class="sourceLineNo">694</span>    if (locationList != null &amp;&amp; !locationList.isEmpty() )<a name="line.694"></a>
<span class="sourceLineNo">695</span>    {<a name="line.695"></a>
<span class="sourceLineNo">696</span>        StringBuilder sb = new StringBuilder(  );<a name="line.696"></a>
<span class="sourceLineNo">697</span>        for (int i = 0,size = locationList.size();i&lt;size;i++)<a name="line.697"></a>
<span class="sourceLineNo">698</span>        {<a name="line.698"></a>
<span class="sourceLineNo">699</span>            sb.append( locationList.get( i ) );<a name="line.699"></a>
<span class="sourceLineNo">700</span>            if (i&lt;size - 1)<a name="line.700"></a>
<span class="sourceLineNo">701</span>            {<a name="line.701"></a>
<span class="sourceLineNo">702</span>                sb.append( ',' );<a name="line.702"></a>
<span class="sourceLineNo">703</span>            }<a name="line.703"></a>
<span class="sourceLineNo">704</span>        }<a name="line.704"></a>
<span class="sourceLineNo">705</span>        location = sb.toString();<a name="line.705"></a>
<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>        value.setLocation( location );<a name="line.708"></a>
<span class="sourceLineNo">709</span>        boolean releases = registry.getBoolean( prefix + "releases", value.isReleases() );<a name="line.709"></a>
<span class="sourceLineNo">710</span>        value.setReleases( releases );<a name="line.710"></a>
<span class="sourceLineNo">711</span>        boolean blockRedeployments = registry.getBoolean( prefix + "blockRedeployments", value.isBlockRedeployments() );<a name="line.711"></a>
<span class="sourceLineNo">712</span>        value.setBlockRedeployments( blockRedeployments );<a name="line.712"></a>
<span class="sourceLineNo">713</span>        boolean snapshots = registry.getBoolean( prefix + "snapshots", value.isSnapshots() );<a name="line.713"></a>
<span class="sourceLineNo">714</span>        value.setSnapshots( snapshots );<a name="line.714"></a>
<span class="sourceLineNo">715</span>        boolean scanned = registry.getBoolean( prefix + "scanned", value.isScanned() );<a name="line.715"></a>
<span class="sourceLineNo">716</span>        value.setScanned( scanned );<a name="line.716"></a>
<span class="sourceLineNo">717</span>    //String refreshCronExpression = registry.getString( prefix + "refreshCronExpression", value.getRefreshCronExpression() );<a name="line.717"></a>
<span class="sourceLineNo">718</span><a name="line.718"></a>
<span class="sourceLineNo">719</span>    List&lt;String&gt; refreshCronExpressionList = registry.getList( prefix + "refreshCronExpression" );<a name="line.719"></a>
<span class="sourceLineNo">720</span>    String refreshCronExpression = value.getRefreshCronExpression();<a name="line.720"></a>
<span class="sourceLineNo">721</span>    if (refreshCronExpressionList != null &amp;&amp; !refreshCronExpressionList.isEmpty() )<a name="line.721"></a>
<span class="sourceLineNo">722</span>    {<a name="line.722"></a>
<span class="sourceLineNo">723</span>        StringBuilder sb = new StringBuilder(  );<a name="line.723"></a>
<span class="sourceLineNo">724</span>        for (int i = 0,size = refreshCronExpressionList.size();i&lt;size;i++)<a name="line.724"></a>
<span class="sourceLineNo">725</span>        {<a name="line.725"></a>
<span class="sourceLineNo">726</span>            sb.append( refreshCronExpressionList.get( i ) );<a name="line.726"></a>
<span class="sourceLineNo">727</span>            if (i&lt;size - 1)<a name="line.727"></a>
<span class="sourceLineNo">728</span>            {<a name="line.728"></a>
<span class="sourceLineNo">729</span>                sb.append( ',' );<a name="line.729"></a>
<span class="sourceLineNo">730</span>            }<a name="line.730"></a>
<span class="sourceLineNo">731</span>        }<a name="line.731"></a>
<span class="sourceLineNo">732</span>        refreshCronExpression = sb.toString();<a name="line.732"></a>
<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
<span class="sourceLineNo">734</span><a name="line.734"></a>
<span class="sourceLineNo">735</span>        value.setRefreshCronExpression( refreshCronExpression );<a name="line.735"></a>
<span class="sourceLineNo">736</span>    int retentionCount = registry.getInt( prefix + "retentionCount", value.getRetentionCount() );<a name="line.736"></a>
<span class="sourceLineNo">737</span>        value.setRetentionCount( retentionCount );<a name="line.737"></a>
<span class="sourceLineNo">738</span>    int daysOlder = registry.getInt( prefix + "daysOlder", value.getDaysOlder() );<a name="line.738"></a>
<span class="sourceLineNo">739</span>        value.setDaysOlder( daysOlder );<a name="line.739"></a>
<span class="sourceLineNo">740</span>        boolean deleteReleasedSnapshots = registry.getBoolean( prefix + "deleteReleasedSnapshots", value.isDeleteReleasedSnapshots() );<a name="line.740"></a>
<span class="sourceLineNo">741</span>        value.setDeleteReleasedSnapshots( deleteReleasedSnapshots );<a name="line.741"></a>
<span class="sourceLineNo">742</span>        boolean skipPackedIndexCreation = registry.getBoolean( prefix + "skipPackedIndexCreation", value.isSkipPackedIndexCreation() );<a name="line.742"></a>
<span class="sourceLineNo">743</span>        value.setSkipPackedIndexCreation( skipPackedIndexCreation );<a name="line.743"></a>
<span class="sourceLineNo">744</span>        boolean stageRepoNeeded = registry.getBoolean( prefix + "stageRepoNeeded", value.isStageRepoNeeded() );<a name="line.744"></a>
<span class="sourceLineNo">745</span>        value.setStageRepoNeeded( stageRepoNeeded );<a name="line.745"></a>
<span class="sourceLineNo">746</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.748"></a>
<span class="sourceLineNo">749</span>    String id = value.getId();<a name="line.749"></a>
<span class="sourceLineNo">750</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.750"></a>
<span class="sourceLineNo">751</span>    {<a name="line.751"></a>
<span class="sourceLineNo">752</span>        StringBuilder sb = new StringBuilder(  );<a name="line.752"></a>
<span class="sourceLineNo">753</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.753"></a>
<span class="sourceLineNo">754</span>        {<a name="line.754"></a>
<span class="sourceLineNo">755</span>            sb.append( idList.get( i ) );<a name="line.755"></a>
<span class="sourceLineNo">756</span>            if (i&lt;size - 1)<a name="line.756"></a>
<span class="sourceLineNo">757</span>            {<a name="line.757"></a>
<span class="sourceLineNo">758</span>                sb.append( ',' );<a name="line.758"></a>
<span class="sourceLineNo">759</span>            }<a name="line.759"></a>
<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
<span class="sourceLineNo">761</span>        id = sb.toString();<a name="line.761"></a>
<span class="sourceLineNo">762</span>    }<a name="line.762"></a>
<span class="sourceLineNo">763</span><a name="line.763"></a>
<span class="sourceLineNo">764</span>        value.setId( id );<a name="line.764"></a>
<span class="sourceLineNo">765</span>    //String name = registry.getString( prefix + "name", value.getName() );<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>    List&lt;String&gt; nameList = registry.getList( prefix + "name" );<a name="line.767"></a>
<span class="sourceLineNo">768</span>    String name = value.getName();<a name="line.768"></a>
<span class="sourceLineNo">769</span>    if (nameList != null &amp;&amp; !nameList.isEmpty() )<a name="line.769"></a>
<span class="sourceLineNo">770</span>    {<a name="line.770"></a>
<span class="sourceLineNo">771</span>        StringBuilder sb = new StringBuilder(  );<a name="line.771"></a>
<span class="sourceLineNo">772</span>        for (int i = 0,size = nameList.size();i&lt;size;i++)<a name="line.772"></a>
<span class="sourceLineNo">773</span>        {<a name="line.773"></a>
<span class="sourceLineNo">774</span>            sb.append( nameList.get( i ) );<a name="line.774"></a>
<span class="sourceLineNo">775</span>            if (i&lt;size - 1)<a name="line.775"></a>
<span class="sourceLineNo">776</span>            {<a name="line.776"></a>
<span class="sourceLineNo">777</span>                sb.append( ',' );<a name="line.777"></a>
<span class="sourceLineNo">778</span>            }<a name="line.778"></a>
<span class="sourceLineNo">779</span>        }<a name="line.779"></a>
<span class="sourceLineNo">780</span>        name = sb.toString();<a name="line.780"></a>
<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
<span class="sourceLineNo">782</span><a name="line.782"></a>
<span class="sourceLineNo">783</span>        value.setName( name );<a name="line.783"></a>
<span class="sourceLineNo">784</span>    //String layout = registry.getString( prefix + "layout", value.getLayout() );<a name="line.784"></a>
<span class="sourceLineNo">785</span><a name="line.785"></a>
<span class="sourceLineNo">786</span>    List&lt;String&gt; layoutList = registry.getList( prefix + "layout" );<a name="line.786"></a>
<span class="sourceLineNo">787</span>    String layout = value.getLayout();<a name="line.787"></a>
<span class="sourceLineNo">788</span>    if (layoutList != null &amp;&amp; !layoutList.isEmpty() )<a name="line.788"></a>
<span class="sourceLineNo">789</span>    {<a name="line.789"></a>
<span class="sourceLineNo">790</span>        StringBuilder sb = new StringBuilder(  );<a name="line.790"></a>
<span class="sourceLineNo">791</span>        for (int i = 0,size = layoutList.size();i&lt;size;i++)<a name="line.791"></a>
<span class="sourceLineNo">792</span>        {<a name="line.792"></a>
<span class="sourceLineNo">793</span>            sb.append( layoutList.get( i ) );<a name="line.793"></a>
<span class="sourceLineNo">794</span>            if (i&lt;size - 1)<a name="line.794"></a>
<span class="sourceLineNo">795</span>            {<a name="line.795"></a>
<span class="sourceLineNo">796</span>                sb.append( ',' );<a name="line.796"></a>
<span class="sourceLineNo">797</span>            }<a name="line.797"></a>
<span class="sourceLineNo">798</span>        }<a name="line.798"></a>
<span class="sourceLineNo">799</span>        layout = sb.toString();<a name="line.799"></a>
<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
<span class="sourceLineNo">801</span><a name="line.801"></a>
<span class="sourceLineNo">802</span>        value.setLayout( layout );<a name="line.802"></a>
<span class="sourceLineNo">803</span>    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );<a name="line.803"></a>
<span class="sourceLineNo">804</span><a name="line.804"></a>
<span class="sourceLineNo">805</span>    List&lt;String&gt; indexDirList = registry.getList( prefix + "indexDir" );<a name="line.805"></a>
<span class="sourceLineNo">806</span>    String indexDir = value.getIndexDir();<a name="line.806"></a>
<span class="sourceLineNo">807</span>    if (indexDirList != null &amp;&amp; !indexDirList.isEmpty() )<a name="line.807"></a>
<span class="sourceLineNo">808</span>    {<a name="line.808"></a>
<span class="sourceLineNo">809</span>        StringBuilder sb = new StringBuilder(  );<a name="line.809"></a>
<span class="sourceLineNo">810</span>        for (int i = 0,size = indexDirList.size();i&lt;size;i++)<a name="line.810"></a>
<span class="sourceLineNo">811</span>        {<a name="line.811"></a>
<span class="sourceLineNo">812</span>            sb.append( indexDirList.get( i ) );<a name="line.812"></a>
<span class="sourceLineNo">813</span>            if (i&lt;size - 1)<a name="line.813"></a>
<span class="sourceLineNo">814</span>            {<a name="line.814"></a>
<span class="sourceLineNo">815</span>                sb.append( ',' );<a name="line.815"></a>
<span class="sourceLineNo">816</span>            }<a name="line.816"></a>
<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
<span class="sourceLineNo">818</span>        indexDir = sb.toString();<a name="line.818"></a>
<span class="sourceLineNo">819</span>    }<a name="line.819"></a>
<span class="sourceLineNo">820</span><a name="line.820"></a>
<span class="sourceLineNo">821</span>        value.setIndexDir( indexDir );<a name="line.821"></a>
<span class="sourceLineNo">822</span>    //String description = registry.getString( prefix + "description", value.getDescription() );<a name="line.822"></a>
<span class="sourceLineNo">823</span><a name="line.823"></a>
<span class="sourceLineNo">824</span>    List&lt;String&gt; descriptionList = registry.getList( prefix + "description" );<a name="line.824"></a>
<span class="sourceLineNo">825</span>    String description = value.getDescription();<a name="line.825"></a>
<span class="sourceLineNo">826</span>    if (descriptionList != null &amp;&amp; !descriptionList.isEmpty() )<a name="line.826"></a>
<span class="sourceLineNo">827</span>    {<a name="line.827"></a>
<span class="sourceLineNo">828</span>        StringBuilder sb = new StringBuilder(  );<a name="line.828"></a>
<span class="sourceLineNo">829</span>        for (int i = 0,size = descriptionList.size();i&lt;size;i++)<a name="line.829"></a>
<span class="sourceLineNo">830</span>        {<a name="line.830"></a>
<span class="sourceLineNo">831</span>            sb.append( descriptionList.get( i ) );<a name="line.831"></a>
<span class="sourceLineNo">832</span>            if (i&lt;size - 1)<a name="line.832"></a>
<span class="sourceLineNo">833</span>            {<a name="line.833"></a>
<span class="sourceLineNo">834</span>                sb.append( ',' );<a name="line.834"></a>
<span class="sourceLineNo">835</span>            }<a name="line.835"></a>
<span class="sourceLineNo">836</span>        }<a name="line.836"></a>
<span class="sourceLineNo">837</span>        description = sb.toString();<a name="line.837"></a>
<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
<span class="sourceLineNo">839</span><a name="line.839"></a>
<span class="sourceLineNo">840</span>        value.setDescription( description );<a name="line.840"></a>
<span class="sourceLineNo">841</span><a name="line.841"></a>
<span class="sourceLineNo">842</span>        return value;<a name="line.842"></a>
<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
<span class="sourceLineNo">844</span>    <a name="line.844"></a>
<span class="sourceLineNo">845</span>    private LegacyArtifactPath readLegacyArtifactPath( String prefix, Registry registry )<a name="line.845"></a>
<span class="sourceLineNo">846</span>    {<a name="line.846"></a>
<span class="sourceLineNo">847</span>        LegacyArtifactPath value = new LegacyArtifactPath();<a name="line.847"></a>
<span class="sourceLineNo">848</span><a name="line.848"></a>
<span class="sourceLineNo">849</span>    //String path = registry.getString( prefix + "path", value.getPath() );<a name="line.849"></a>
<span class="sourceLineNo">850</span><a name="line.850"></a>
<span class="sourceLineNo">851</span>    List&lt;String&gt; pathList = registry.getList( prefix + "path" );<a name="line.851"></a>
<span class="sourceLineNo">852</span>    String path = value.getPath();<a name="line.852"></a>
<span class="sourceLineNo">853</span>    if (pathList != null &amp;&amp; !pathList.isEmpty() )<a name="line.853"></a>
<span class="sourceLineNo">854</span>    {<a name="line.854"></a>
<span class="sourceLineNo">855</span>        StringBuilder sb = new StringBuilder(  );<a name="line.855"></a>
<span class="sourceLineNo">856</span>        for (int i = 0,size = pathList.size();i&lt;size;i++)<a name="line.856"></a>
<span class="sourceLineNo">857</span>        {<a name="line.857"></a>
<span class="sourceLineNo">858</span>            sb.append( pathList.get( i ) );<a name="line.858"></a>
<span class="sourceLineNo">859</span>            if (i&lt;size - 1)<a name="line.859"></a>
<span class="sourceLineNo">860</span>            {<a name="line.860"></a>
<span class="sourceLineNo">861</span>                sb.append( ',' );<a name="line.861"></a>
<span class="sourceLineNo">862</span>            }<a name="line.862"></a>
<span class="sourceLineNo">863</span>        }<a name="line.863"></a>
<span class="sourceLineNo">864</span>        path = sb.toString();<a name="line.864"></a>
<span class="sourceLineNo">865</span>    }<a name="line.865"></a>
<span class="sourceLineNo">866</span><a name="line.866"></a>
<span class="sourceLineNo">867</span>        value.setPath( path );<a name="line.867"></a>
<span class="sourceLineNo">868</span>    //String artifact = registry.getString( prefix + "artifact", value.getArtifact() );<a name="line.868"></a>
<span class="sourceLineNo">869</span><a name="line.869"></a>
<span class="sourceLineNo">870</span>    List&lt;String&gt; artifactList = registry.getList( prefix + "artifact" );<a name="line.870"></a>
<span class="sourceLineNo">871</span>    String artifact = value.getArtifact();<a name="line.871"></a>
<span class="sourceLineNo">872</span>    if (artifactList != null &amp;&amp; !artifactList.isEmpty() )<a name="line.872"></a>
<span class="sourceLineNo">873</span>    {<a name="line.873"></a>
<span class="sourceLineNo">874</span>        StringBuilder sb = new StringBuilder(  );<a name="line.874"></a>
<span class="sourceLineNo">875</span>        for (int i = 0,size = artifactList.size();i&lt;size;i++)<a name="line.875"></a>
<span class="sourceLineNo">876</span>        {<a name="line.876"></a>
<span class="sourceLineNo">877</span>            sb.append( artifactList.get( i ) );<a name="line.877"></a>
<span class="sourceLineNo">878</span>            if (i&lt;size - 1)<a name="line.878"></a>
<span class="sourceLineNo">879</span>            {<a name="line.879"></a>
<span class="sourceLineNo">880</span>                sb.append( ',' );<a name="line.880"></a>
<span class="sourceLineNo">881</span>            }<a name="line.881"></a>
<span class="sourceLineNo">882</span>        }<a name="line.882"></a>
<span class="sourceLineNo">883</span>        artifact = sb.toString();<a name="line.883"></a>
<span class="sourceLineNo">884</span>    }<a name="line.884"></a>
<span class="sourceLineNo">885</span><a name="line.885"></a>
<span class="sourceLineNo">886</span>        value.setArtifact( artifact );<a name="line.886"></a>
<span class="sourceLineNo">887</span><a name="line.887"></a>
<span class="sourceLineNo">888</span>        return value;<a name="line.888"></a>
<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
<span class="sourceLineNo">890</span>    <a name="line.890"></a>
<span class="sourceLineNo">891</span>    private RepositoryGroupConfiguration readRepositoryGroupConfiguration( String prefix, Registry registry )<a name="line.891"></a>
<span class="sourceLineNo">892</span>    {<a name="line.892"></a>
<span class="sourceLineNo">893</span>        RepositoryGroupConfiguration value = new RepositoryGroupConfiguration();<a name="line.893"></a>
<span class="sourceLineNo">894</span><a name="line.894"></a>
<span class="sourceLineNo">895</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.895"></a>
<span class="sourceLineNo">896</span><a name="line.896"></a>
<span class="sourceLineNo">897</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.897"></a>
<span class="sourceLineNo">898</span>    String id = value.getId();<a name="line.898"></a>
<span class="sourceLineNo">899</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.899"></a>
<span class="sourceLineNo">900</span>    {<a name="line.900"></a>
<span class="sourceLineNo">901</span>        StringBuilder sb = new StringBuilder(  );<a name="line.901"></a>
<span class="sourceLineNo">902</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.902"></a>
<span class="sourceLineNo">903</span>        {<a name="line.903"></a>
<span class="sourceLineNo">904</span>            sb.append( idList.get( i ) );<a name="line.904"></a>
<span class="sourceLineNo">905</span>            if (i&lt;size - 1)<a name="line.905"></a>
<span class="sourceLineNo">906</span>            {<a name="line.906"></a>
<span class="sourceLineNo">907</span>                sb.append( ',' );<a name="line.907"></a>
<span class="sourceLineNo">908</span>            }<a name="line.908"></a>
<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
<span class="sourceLineNo">910</span>        id = sb.toString();<a name="line.910"></a>
<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
<span class="sourceLineNo">912</span><a name="line.912"></a>
<span class="sourceLineNo">913</span>        value.setId( id );<a name="line.913"></a>
<span class="sourceLineNo">914</span>    //String mergedIndexPath = registry.getString( prefix + "mergedIndexPath", value.getMergedIndexPath() );<a name="line.914"></a>
<span class="sourceLineNo">915</span><a name="line.915"></a>
<span class="sourceLineNo">916</span>    List&lt;String&gt; mergedIndexPathList = registry.getList( prefix + "mergedIndexPath" );<a name="line.916"></a>
<span class="sourceLineNo">917</span>    String mergedIndexPath = value.getMergedIndexPath();<a name="line.917"></a>
<span class="sourceLineNo">918</span>    if (mergedIndexPathList != null &amp;&amp; !mergedIndexPathList.isEmpty() )<a name="line.918"></a>
<span class="sourceLineNo">919</span>    {<a name="line.919"></a>
<span class="sourceLineNo">920</span>        StringBuilder sb = new StringBuilder(  );<a name="line.920"></a>
<span class="sourceLineNo">921</span>        for (int i = 0,size = mergedIndexPathList.size();i&lt;size;i++)<a name="line.921"></a>
<span class="sourceLineNo">922</span>        {<a name="line.922"></a>
<span class="sourceLineNo">923</span>            sb.append( mergedIndexPathList.get( i ) );<a name="line.923"></a>
<span class="sourceLineNo">924</span>            if (i&lt;size - 1)<a name="line.924"></a>
<span class="sourceLineNo">925</span>            {<a name="line.925"></a>
<span class="sourceLineNo">926</span>                sb.append( ',' );<a name="line.926"></a>
<span class="sourceLineNo">927</span>            }<a name="line.927"></a>
<span class="sourceLineNo">928</span>        }<a name="line.928"></a>
<span class="sourceLineNo">929</span>        mergedIndexPath = sb.toString();<a name="line.929"></a>
<span class="sourceLineNo">930</span>    }<a name="line.930"></a>
<span class="sourceLineNo">931</span><a name="line.931"></a>
<span class="sourceLineNo">932</span>        value.setMergedIndexPath( mergedIndexPath );<a name="line.932"></a>
<span class="sourceLineNo">933</span>    int mergedIndexTtl = registry.getInt( prefix + "mergedIndexTtl", value.getMergedIndexTtl() );<a name="line.933"></a>
<span class="sourceLineNo">934</span>        value.setMergedIndexTtl( mergedIndexTtl );<a name="line.934"></a>
<span class="sourceLineNo">935</span>    //String cronExpression = registry.getString( prefix + "cronExpression", value.getCronExpression() );<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>    List&lt;String&gt; cronExpressionList = registry.getList( prefix + "cronExpression" );<a name="line.937"></a>
<span class="sourceLineNo">938</span>    String cronExpression = value.getCronExpression();<a name="line.938"></a>
<span class="sourceLineNo">939</span>    if (cronExpressionList != null &amp;&amp; !cronExpressionList.isEmpty() )<a name="line.939"></a>
<span class="sourceLineNo">940</span>    {<a name="line.940"></a>
<span class="sourceLineNo">941</span>        StringBuilder sb = new StringBuilder(  );<a name="line.941"></a>
<span class="sourceLineNo">942</span>        for (int i = 0,size = cronExpressionList.size();i&lt;size;i++)<a name="line.942"></a>
<span class="sourceLineNo">943</span>        {<a name="line.943"></a>
<span class="sourceLineNo">944</span>            sb.append( cronExpressionList.get( i ) );<a name="line.944"></a>
<span class="sourceLineNo">945</span>            if (i&lt;size - 1)<a name="line.945"></a>
<span class="sourceLineNo">946</span>            {<a name="line.946"></a>
<span class="sourceLineNo">947</span>                sb.append( ',' );<a name="line.947"></a>
<span class="sourceLineNo">948</span>            }<a name="line.948"></a>
<span class="sourceLineNo">949</span>        }<a name="line.949"></a>
<span class="sourceLineNo">950</span>        cronExpression = sb.toString();<a name="line.950"></a>
<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
<span class="sourceLineNo">952</span><a name="line.952"></a>
<span class="sourceLineNo">953</span>        value.setCronExpression( cronExpression );<a name="line.953"></a>
<span class="sourceLineNo">954</span>        java.util.List repositories = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.954"></a>
<span class="sourceLineNo">955</span>        repositories.addAll( registry.getList( prefix + "repositories.repository" ) );<a name="line.955"></a>
<span class="sourceLineNo">956</span>        value.setRepositories( repositories );<a name="line.956"></a>
<span class="sourceLineNo">957</span><a name="line.957"></a>
<span class="sourceLineNo">958</span>        return value;<a name="line.958"></a>
<span class="sourceLineNo">959</span>    }<a name="line.959"></a>
<span class="sourceLineNo">960</span>    <a name="line.960"></a>
<span class="sourceLineNo">961</span>    private RepositoryCheckPath readRepositoryCheckPath( String prefix, Registry registry )<a name="line.961"></a>
<span class="sourceLineNo">962</span>    {<a name="line.962"></a>
<span class="sourceLineNo">963</span>        RepositoryCheckPath value = new RepositoryCheckPath();<a name="line.963"></a>
<span class="sourceLineNo">964</span><a name="line.964"></a>
<span class="sourceLineNo">965</span>    //String url = registry.getString( prefix + "url", value.getUrl() );<a name="line.965"></a>
<span class="sourceLineNo">966</span><a name="line.966"></a>
<span class="sourceLineNo">967</span>    List&lt;String&gt; urlList = registry.getList( prefix + "url" );<a name="line.967"></a>
<span class="sourceLineNo">968</span>    String url = value.getUrl();<a name="line.968"></a>
<span class="sourceLineNo">969</span>    if (urlList != null &amp;&amp; !urlList.isEmpty() )<a name="line.969"></a>
<span class="sourceLineNo">970</span>    {<a name="line.970"></a>
<span class="sourceLineNo">971</span>        StringBuilder sb = new StringBuilder(  );<a name="line.971"></a>
<span class="sourceLineNo">972</span>        for (int i = 0,size = urlList.size();i&lt;size;i++)<a name="line.972"></a>
<span class="sourceLineNo">973</span>        {<a name="line.973"></a>
<span class="sourceLineNo">974</span>            sb.append( urlList.get( i ) );<a name="line.974"></a>
<span class="sourceLineNo">975</span>            if (i&lt;size - 1)<a name="line.975"></a>
<span class="sourceLineNo">976</span>            {<a name="line.976"></a>
<span class="sourceLineNo">977</span>                sb.append( ',' );<a name="line.977"></a>
<span class="sourceLineNo">978</span>            }<a name="line.978"></a>
<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
<span class="sourceLineNo">980</span>        url = sb.toString();<a name="line.980"></a>
<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
<span class="sourceLineNo">982</span><a name="line.982"></a>
<span class="sourceLineNo">983</span>        value.setUrl( url );<a name="line.983"></a>
<span class="sourceLineNo">984</span>    //String path = registry.getString( prefix + "path", value.getPath() );<a name="line.984"></a>
<span class="sourceLineNo">985</span><a name="line.985"></a>
<span class="sourceLineNo">986</span>    List&lt;String&gt; pathList = registry.getList( prefix + "path" );<a name="line.986"></a>
<span class="sourceLineNo">987</span>    String path = value.getPath();<a name="line.987"></a>
<span class="sourceLineNo">988</span>    if (pathList != null &amp;&amp; !pathList.isEmpty() )<a name="line.988"></a>
<span class="sourceLineNo">989</span>    {<a name="line.989"></a>
<span class="sourceLineNo">990</span>        StringBuilder sb = new StringBuilder(  );<a name="line.990"></a>
<span class="sourceLineNo">991</span>        for (int i = 0,size = pathList.size();i&lt;size;i++)<a name="line.991"></a>
<span class="sourceLineNo">992</span>        {<a name="line.992"></a>
<span class="sourceLineNo">993</span>            sb.append( pathList.get( i ) );<a name="line.993"></a>
<span class="sourceLineNo">994</span>            if (i&lt;size - 1)<a name="line.994"></a>
<span class="sourceLineNo">995</span>            {<a name="line.995"></a>
<span class="sourceLineNo">996</span>                sb.append( ',' );<a name="line.996"></a>
<span class="sourceLineNo">997</span>            }<a name="line.997"></a>
<span class="sourceLineNo">998</span>        }<a name="line.998"></a>
<span class="sourceLineNo">999</span>        path = sb.toString();<a name="line.999"></a>
<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
<span class="sourceLineNo">1001</span><a name="line.1001"></a>
<span class="sourceLineNo">1002</span>        value.setPath( path );<a name="line.1002"></a>
<span class="sourceLineNo">1003</span><a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        return value;<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>    }<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    <a name="line.1006"></a>
<span class="sourceLineNo">1007</span>    private AbstractRepositoryConnectorConfiguration readAbstractRepositoryConnectorConfiguration( String prefix, Registry registry )<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    {<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>        AbstractRepositoryConnectorConfiguration value = new AbstractRepositoryConnectorConfiguration();<a name="line.1009"></a>
<span class="sourceLineNo">1010</span><a name="line.1010"></a>
<span class="sourceLineNo">1011</span>    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );<a name="line.1011"></a>
<span class="sourceLineNo">1012</span><a name="line.1012"></a>
<span class="sourceLineNo">1013</span>    List&lt;String&gt; sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>    String sourceRepoId = value.getSourceRepoId();<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>    if (sourceRepoIdList != null &amp;&amp; !sourceRepoIdList.isEmpty() )<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>    {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>        for (int i = 0,size = sourceRepoIdList.size();i&lt;size;i++)<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>        {<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>            sb.append( sourceRepoIdList.get( i ) );<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>            if (i&lt;size - 1)<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>            {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                sb.append( ',' );<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>            }<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>        sourceRepoId = sb.toString();<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>    }<a name="line.1027"></a>
<span class="sourceLineNo">1028</span><a name="line.1028"></a>
<span class="sourceLineNo">1029</span>        value.setSourceRepoId( sourceRepoId );<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );<a name="line.1030"></a>
<span class="sourceLineNo">1031</span><a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    List&lt;String&gt; targetRepoIdList = registry.getList( prefix + "targetRepoId" );<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>    String targetRepoId = value.getTargetRepoId();<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>    if (targetRepoIdList != null &amp;&amp; !targetRepoIdList.isEmpty() )<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>    {<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>        for (int i = 0,size = targetRepoIdList.size();i&lt;size;i++)<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>        {<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>            sb.append( targetRepoIdList.get( i ) );<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>            if (i&lt;size - 1)<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>            {<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                sb.append( ',' );<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>        }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>        targetRepoId = sb.toString();<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span><a name="line.1047"></a>
<span class="sourceLineNo">1048</span>        value.setTargetRepoId( targetRepoId );<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );<a name="line.1049"></a>
<span class="sourceLineNo">1050</span><a name="line.1050"></a>
<span class="sourceLineNo">1051</span>    List&lt;String&gt; proxyIdList = registry.getList( prefix + "proxyId" );<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>    String proxyId = value.getProxyId();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>    if (proxyIdList != null &amp;&amp; !proxyIdList.isEmpty() )<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    {<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>        for (int i = 0,size = proxyIdList.size();i&lt;size;i++)<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>        {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>            sb.append( proxyIdList.get( i ) );<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>            if (i&lt;size - 1)<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>            {<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                sb.append( ',' );<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>            }<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>        }<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>        proxyId = sb.toString();<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
<span class="sourceLineNo">1066</span><a name="line.1066"></a>
<span class="sourceLineNo">1067</span>        value.setProxyId( proxyId );<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>        java.util.List blackListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>        value.setBlackListPatterns( blackListPatterns );<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>        java.util.List whiteListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>        value.setWhiteListPatterns( whiteListPatterns );<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>        java.util.Map policies = registry.getProperties( prefix + "policies" );<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>        value.setPolicies( policies );<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>        java.util.Map properties = registry.getProperties( prefix + "properties" );<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>        value.setProperties( properties );<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>        value.setDisabled( disabled );<a name="line.1079"></a>
<span class="sourceLineNo">1080</span><a name="line.1080"></a>
<span class="sourceLineNo">1081</span>        return value;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>    <a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    private ProxyConnectorRuleConfiguration readProxyConnectorRuleConfiguration( String prefix, Registry registry )<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>    {<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>        ProxyConnectorRuleConfiguration value = new ProxyConnectorRuleConfiguration();<a name="line.1086"></a>
<span class="sourceLineNo">1087</span><a name="line.1087"></a>
<span class="sourceLineNo">1088</span>    //String ruleType = registry.getString( prefix + "ruleType", value.getRuleType() );<a name="line.1088"></a>
<span class="sourceLineNo">1089</span><a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    List&lt;String&gt; ruleTypeList = registry.getList( prefix + "ruleType" );<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    String ruleType = value.getRuleType();<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>    if (ruleTypeList != null &amp;&amp; !ruleTypeList.isEmpty() )<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>    {<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>        for (int i = 0,size = ruleTypeList.size();i&lt;size;i++)<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>        {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>            sb.append( ruleTypeList.get( i ) );<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>            if (i&lt;size - 1)<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>            {<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>                sb.append( ',' );<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>            }<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>        ruleType = sb.toString();<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>    }<a name="line.1104"></a>
<span class="sourceLineNo">1105</span><a name="line.1105"></a>
<span class="sourceLineNo">1106</span>        value.setRuleType( ruleType );<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    //String pattern = registry.getString( prefix + "pattern", value.getPattern() );<a name="line.1107"></a>
<span class="sourceLineNo">1108</span><a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    List&lt;String&gt; patternList = registry.getList( prefix + "pattern" );<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    String pattern = value.getPattern();<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    if (patternList != null &amp;&amp; !patternList.isEmpty() )<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        for (int i = 0,size = patternList.size();i&lt;size;i++)<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>        {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>            sb.append( patternList.get( i ) );<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>            if (i&lt;size - 1)<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>            {<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                sb.append( ',' );<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>            }<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>        }<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>        pattern = sb.toString();<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>    }<a name="line.1123"></a>
<span class="sourceLineNo">1124</span><a name="line.1124"></a>
<span class="sourceLineNo">1125</span>        value.setPattern( pattern );<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>        java.util.List proxyConnectors = new java.util.ArrayList/*&lt;ProxyConnectorConfiguration&gt;*/();<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>        List proxyConnectorsSubsets = registry.getSubsetList( prefix + "proxyConnectors.proxyConnector" );<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>        for ( Iterator i = proxyConnectorsSubsets.iterator(); i.hasNext(); )<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>        {<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>            ProxyConnectorConfiguration v = readProxyConnectorConfiguration( "", (Registry) i.next() );<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>            proxyConnectors.add( v );<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>        }<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>        value.setProxyConnectors( proxyConnectors );<a name="line.1133"></a>
<span class="sourceLineNo">1134</span><a name="line.1134"></a>
<span class="sourceLineNo">1135</span>        return value;<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>    <a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    private ProxyConnectorConfiguration readProxyConnectorConfiguration( String prefix, Registry registry )<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>    {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>        ProxyConnectorConfiguration value = new ProxyConnectorConfiguration();<a name="line.1140"></a>
<span class="sourceLineNo">1141</span><a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    int order = registry.getInt( prefix + "order", value.getOrder() );<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>        value.setOrder( order );<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );<a name="line.1144"></a>
<span class="sourceLineNo">1145</span><a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    List&lt;String&gt; sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>    String sourceRepoId = value.getSourceRepoId();<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>    if (sourceRepoIdList != null &amp;&amp; !sourceRepoIdList.isEmpty() )<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>    {<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>        for (int i = 0,size = sourceRepoIdList.size();i&lt;size;i++)<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>        {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>            sb.append( sourceRepoIdList.get( i ) );<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>            if (i&lt;size - 1)<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>            {<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                sb.append( ',' );<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>            }<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>        }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>        sourceRepoId = sb.toString();<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>    }<a name="line.1160"></a>
<span class="sourceLineNo">1161</span><a name="line.1161"></a>
<span class="sourceLineNo">1162</span>        value.setSourceRepoId( sourceRepoId );<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );<a name="line.1163"></a>
<span class="sourceLineNo">1164</span><a name="line.1164"></a>
<span class="sourceLineNo">1165</span>    List&lt;String&gt; targetRepoIdList = registry.getList( prefix + "targetRepoId" );<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>    String targetRepoId = value.getTargetRepoId();<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    if (targetRepoIdList != null &amp;&amp; !targetRepoIdList.isEmpty() )<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>    {<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>        for (int i = 0,size = targetRepoIdList.size();i&lt;size;i++)<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>        {<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>            sb.append( targetRepoIdList.get( i ) );<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>            if (i&lt;size - 1)<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>            {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                sb.append( ',' );<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>            }<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>        }<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        targetRepoId = sb.toString();<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
<span class="sourceLineNo">1180</span><a name="line.1180"></a>
<span class="sourceLineNo">1181</span>        value.setTargetRepoId( targetRepoId );<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );<a name="line.1182"></a>
<span class="sourceLineNo">1183</span><a name="line.1183"></a>
<span class="sourceLineNo">1184</span>    List&lt;String&gt; proxyIdList = registry.getList( prefix + "proxyId" );<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>    String proxyId = value.getProxyId();<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>    if (proxyIdList != null &amp;&amp; !proxyIdList.isEmpty() )<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>    {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>        for (int i = 0,size = proxyIdList.size();i&lt;size;i++)<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>        {<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>            sb.append( proxyIdList.get( i ) );<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>            if (i&lt;size - 1)<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>            {<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                sb.append( ',' );<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>            }<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>        }<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>        proxyId = sb.toString();<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    }<a name="line.1198"></a>
<span class="sourceLineNo">1199</span><a name="line.1199"></a>
<span class="sourceLineNo">1200</span>        value.setProxyId( proxyId );<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>        java.util.List blackListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>        value.setBlackListPatterns( blackListPatterns );<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>        java.util.List whiteListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>        value.setWhiteListPatterns( whiteListPatterns );<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>        java.util.Map policies = registry.getProperties( prefix + "policies" );<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>        value.setPolicies( policies );<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>        java.util.Map properties = registry.getProperties( prefix + "properties" );<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        value.setProperties( properties );<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>        value.setDisabled( disabled );<a name="line.1212"></a>
<span class="sourceLineNo">1213</span><a name="line.1213"></a>
<span class="sourceLineNo">1214</span>        return value;<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>    }<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    <a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    private SyncConnectorConfiguration readSyncConnectorConfiguration( String prefix, Registry registry )<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>    {<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>        SyncConnectorConfiguration value = new SyncConnectorConfiguration();<a name="line.1219"></a>
<span class="sourceLineNo">1220</span><a name="line.1220"></a>
<span class="sourceLineNo">1221</span>    //String cronExpression = registry.getString( prefix + "cronExpression", value.getCronExpression() );<a name="line.1221"></a>
<span class="sourceLineNo">1222</span><a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    List&lt;String&gt; cronExpressionList = registry.getList( prefix + "cronExpression" );<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>    String cronExpression = value.getCronExpression();<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>    if (cronExpressionList != null &amp;&amp; !cronExpressionList.isEmpty() )<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>    {<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        for (int i = 0,size = cronExpressionList.size();i&lt;size;i++)<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>        {<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>            sb.append( cronExpressionList.get( i ) );<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>            if (i&lt;size - 1)<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>            {<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                sb.append( ',' );<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>            }<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>        }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        cronExpression = sb.toString();<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span><a name="line.1238"></a>
<span class="sourceLineNo">1239</span>        value.setCronExpression( cronExpression );<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>    //String method = registry.getString( prefix + "method", value.getMethod() );<a name="line.1240"></a>
<span class="sourceLineNo">1241</span><a name="line.1241"></a>
<span class="sourceLineNo">1242</span>    List&lt;String&gt; methodList = registry.getList( prefix + "method" );<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>    String method = value.getMethod();<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>    if (methodList != null &amp;&amp; !methodList.isEmpty() )<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>    {<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>        for (int i = 0,size = methodList.size();i&lt;size;i++)<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>        {<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>            sb.append( methodList.get( i ) );<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>            if (i&lt;size - 1)<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>            {<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>                sb.append( ',' );<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>            }<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>        method = sb.toString();<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
<span class="sourceLineNo">1257</span><a name="line.1257"></a>
<span class="sourceLineNo">1258</span>        value.setMethod( method );<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );<a name="line.1259"></a>
<span class="sourceLineNo">1260</span><a name="line.1260"></a>
<span class="sourceLineNo">1261</span>    List&lt;String&gt; sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>    String sourceRepoId = value.getSourceRepoId();<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>    if (sourceRepoIdList != null &amp;&amp; !sourceRepoIdList.isEmpty() )<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>    {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>        for (int i = 0,size = sourceRepoIdList.size();i&lt;size;i++)<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>        {<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>            sb.append( sourceRepoIdList.get( i ) );<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>            if (i&lt;size - 1)<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>            {<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>                sb.append( ',' );<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>            }<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>        sourceRepoId = sb.toString();<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>    }<a name="line.1275"></a>
<span class="sourceLineNo">1276</span><a name="line.1276"></a>
<span class="sourceLineNo">1277</span>        value.setSourceRepoId( sourceRepoId );<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );<a name="line.1278"></a>
<span class="sourceLineNo">1279</span><a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    List&lt;String&gt; targetRepoIdList = registry.getList( prefix + "targetRepoId" );<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>    String targetRepoId = value.getTargetRepoId();<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>    if (targetRepoIdList != null &amp;&amp; !targetRepoIdList.isEmpty() )<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    {<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>        for (int i = 0,size = targetRepoIdList.size();i&lt;size;i++)<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>        {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>            sb.append( targetRepoIdList.get( i ) );<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>            if (i&lt;size - 1)<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>            {<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                sb.append( ',' );<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>            }<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>        }<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>        targetRepoId = sb.toString();<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    }<a name="line.1294"></a>
<span class="sourceLineNo">1295</span><a name="line.1295"></a>
<span class="sourceLineNo">1296</span>        value.setTargetRepoId( targetRepoId );<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );<a name="line.1297"></a>
<span class="sourceLineNo">1298</span><a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    List&lt;String&gt; proxyIdList = registry.getList( prefix + "proxyId" );<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>    String proxyId = value.getProxyId();<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>    if (proxyIdList != null &amp;&amp; !proxyIdList.isEmpty() )<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>    {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>        for (int i = 0,size = proxyIdList.size();i&lt;size;i++)<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>        {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>            sb.append( proxyIdList.get( i ) );<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>            if (i&lt;size - 1)<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>            {<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                sb.append( ',' );<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>            }<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>        }<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>        proxyId = sb.toString();<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
<span class="sourceLineNo">1314</span><a name="line.1314"></a>
<span class="sourceLineNo">1315</span>        value.setProxyId( proxyId );<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>        java.util.List blackListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>        value.setBlackListPatterns( blackListPatterns );<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>        java.util.List whiteListPatterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>        value.setWhiteListPatterns( whiteListPatterns );<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>        java.util.Map policies = registry.getProperties( prefix + "policies" );<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>        value.setPolicies( policies );<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>        java.util.Map properties = registry.getProperties( prefix + "properties" );<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        value.setProperties( properties );<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>        value.setDisabled( disabled );<a name="line.1327"></a>
<span class="sourceLineNo">1328</span><a name="line.1328"></a>
<span class="sourceLineNo">1329</span>        return value;<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>    <a name="line.1331"></a>
<span class="sourceLineNo">1332</span>    private NetworkProxyConfiguration readNetworkProxyConfiguration( String prefix, Registry registry )<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>    {<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>        NetworkProxyConfiguration value = new NetworkProxyConfiguration();<a name="line.1334"></a>
<span class="sourceLineNo">1335</span><a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.1336"></a>
<span class="sourceLineNo">1337</span><a name="line.1337"></a>
<span class="sourceLineNo">1338</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>    String id = value.getId();<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>    {<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        {<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>            sb.append( idList.get( i ) );<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>            if (i&lt;size - 1)<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>            {<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>                sb.append( ',' );<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>            }<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>        }<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>        id = sb.toString();<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>    }<a name="line.1352"></a>
<span class="sourceLineNo">1353</span><a name="line.1353"></a>
<span class="sourceLineNo">1354</span>        value.setId( id );<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>    //String protocol = registry.getString( prefix + "protocol", value.getProtocol() );<a name="line.1355"></a>
<span class="sourceLineNo">1356</span><a name="line.1356"></a>
<span class="sourceLineNo">1357</span>    List&lt;String&gt; protocolList = registry.getList( prefix + "protocol" );<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>    String protocol = value.getProtocol();<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    if (protocolList != null &amp;&amp; !protocolList.isEmpty() )<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    {<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        for (int i = 0,size = protocolList.size();i&lt;size;i++)<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>        {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>            sb.append( protocolList.get( i ) );<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>            if (i&lt;size - 1)<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>            {<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>                sb.append( ',' );<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>            }<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>        }<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>        protocol = sb.toString();<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>    }<a name="line.1371"></a>
<span class="sourceLineNo">1372</span><a name="line.1372"></a>
<span class="sourceLineNo">1373</span>        value.setProtocol( protocol );<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>    //String host = registry.getString( prefix + "host", value.getHost() );<a name="line.1374"></a>
<span class="sourceLineNo">1375</span><a name="line.1375"></a>
<span class="sourceLineNo">1376</span>    List&lt;String&gt; hostList = registry.getList( prefix + "host" );<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>    String host = value.getHost();<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>    if (hostList != null &amp;&amp; !hostList.isEmpty() )<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>    {<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>        for (int i = 0,size = hostList.size();i&lt;size;i++)<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>        {<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>            sb.append( hostList.get( i ) );<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>            if (i&lt;size - 1)<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>            {<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                sb.append( ',' );<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>            }<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>        }<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>        host = sb.toString();<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    }<a name="line.1390"></a>
<span class="sourceLineNo">1391</span><a name="line.1391"></a>
<span class="sourceLineNo">1392</span>        value.setHost( host );<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>    int port = registry.getInt( prefix + "port", value.getPort() );<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>        value.setPort( port );<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>    //String username = registry.getString( prefix + "username", value.getUsername() );<a name="line.1395"></a>
<span class="sourceLineNo">1396</span><a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    List&lt;String&gt; usernameList = registry.getList( prefix + "username" );<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>    String username = value.getUsername();<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>    if (usernameList != null &amp;&amp; !usernameList.isEmpty() )<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>    {<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>        for (int i = 0,size = usernameList.size();i&lt;size;i++)<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>        {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>            sb.append( usernameList.get( i ) );<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>            if (i&lt;size - 1)<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>            {<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                sb.append( ',' );<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>            }<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>        }<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>        username = sb.toString();<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>    }<a name="line.1411"></a>
<span class="sourceLineNo">1412</span><a name="line.1412"></a>
<span class="sourceLineNo">1413</span>        value.setUsername( username );<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>    //String password = registry.getString( prefix + "password", value.getPassword() );<a name="line.1414"></a>
<span class="sourceLineNo">1415</span><a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    List&lt;String&gt; passwordList = registry.getList( prefix + "password" );<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>    String password = value.getPassword();<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>    if (passwordList != null &amp;&amp; !passwordList.isEmpty() )<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>    {<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>        for (int i = 0,size = passwordList.size();i&lt;size;i++)<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>        {<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>            sb.append( passwordList.get( i ) );<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>            if (i&lt;size - 1)<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>            {<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>                sb.append( ',' );<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>            }<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>        }<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>        password = sb.toString();<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>    }<a name="line.1430"></a>
<span class="sourceLineNo">1431</span><a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        value.setPassword( password );<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>        boolean useNtlm = registry.getBoolean( prefix + "useNtlm", value.isUseNtlm() );<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>        value.setUseNtlm( useNtlm );<a name="line.1434"></a>
<span class="sourceLineNo">1435</span><a name="line.1435"></a>
<span class="sourceLineNo">1436</span>        return value;<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>    }<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>    <a name="line.1438"></a>
<span class="sourceLineNo">1439</span>    private RepositoryScanningConfiguration readRepositoryScanningConfiguration( String prefix, Registry registry )<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>    {<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>        RepositoryScanningConfiguration value = new RepositoryScanningConfiguration();<a name="line.1441"></a>
<span class="sourceLineNo">1442</span><a name="line.1442"></a>
<span class="sourceLineNo">1443</span>        java.util.List fileTypes = new java.util.ArrayList/*&lt;FileType&gt;*/();<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>        List fileTypesSubsets = registry.getSubsetList( prefix + "fileTypes.fileType" );<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>        for ( Iterator i = fileTypesSubsets.iterator(); i.hasNext(); )<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        {<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>            FileType v = readFileType( "", (Registry) i.next() );<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>            fileTypes.add( v );<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>        value.setFileTypes( fileTypes );<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>        java.util.List knownContentConsumers = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>        knownContentConsumers.addAll( registry.getList( prefix + "knownContentConsumers.knownContentConsumer" ) );<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>        value.setKnownContentConsumers( knownContentConsumers );<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>        java.util.List invalidContentConsumers = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>        invalidContentConsumers.addAll( registry.getList( prefix + "invalidContentConsumers.invalidContentConsumer" ) );<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>        value.setInvalidContentConsumers( invalidContentConsumers );<a name="line.1456"></a>
<span class="sourceLineNo">1457</span><a name="line.1457"></a>
<span class="sourceLineNo">1458</span>        return value;<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>    <a name="line.1460"></a>
<span class="sourceLineNo">1461</span>    private FileType readFileType( String prefix, Registry registry )<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>    {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        FileType value = new FileType();<a name="line.1463"></a>
<span class="sourceLineNo">1464</span><a name="line.1464"></a>
<span class="sourceLineNo">1465</span>    //String id = registry.getString( prefix + "id", value.getId() );<a name="line.1465"></a>
<span class="sourceLineNo">1466</span><a name="line.1466"></a>
<span class="sourceLineNo">1467</span>    List&lt;String&gt; idList = registry.getList( prefix + "id" );<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>    String id = value.getId();<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>    if (idList != null &amp;&amp; !idList.isEmpty() )<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>    {<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>        for (int i = 0,size = idList.size();i&lt;size;i++)<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>        {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>            sb.append( idList.get( i ) );<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>            if (i&lt;size - 1)<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>            {<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>                sb.append( ',' );<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>            }<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>        }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>        id = sb.toString();<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>    }<a name="line.1481"></a>
<span class="sourceLineNo">1482</span><a name="line.1482"></a>
<span class="sourceLineNo">1483</span>        value.setId( id );<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>        java.util.List patterns = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>        patterns.addAll( registry.getList( prefix + "patterns.pattern" ) );<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>        value.setPatterns( patterns );<a name="line.1486"></a>
<span class="sourceLineNo">1487</span><a name="line.1487"></a>
<span class="sourceLineNo">1488</span>        return value;<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>    <a name="line.1490"></a>
<span class="sourceLineNo">1491</span>    private OrganisationInformation readOrganisationInformation( String prefix, Registry registry )<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>    {<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>        OrganisationInformation value = new OrganisationInformation();<a name="line.1493"></a>
<span class="sourceLineNo">1494</span><a name="line.1494"></a>
<span class="sourceLineNo">1495</span>    //String name = registry.getString( prefix + "name", value.getName() );<a name="line.1495"></a>
<span class="sourceLineNo">1496</span><a name="line.1496"></a>
<span class="sourceLineNo">1497</span>    List&lt;String&gt; nameList = registry.getList( prefix + "name" );<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>    String name = value.getName();<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>    if (nameList != null &amp;&amp; !nameList.isEmpty() )<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>    {<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>        for (int i = 0,size = nameList.size();i&lt;size;i++)<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>        {<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>            sb.append( nameList.get( i ) );<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>            if (i&lt;size - 1)<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>            {<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>                sb.append( ',' );<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>            }<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>        name = sb.toString();<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
<span class="sourceLineNo">1512</span><a name="line.1512"></a>
<span class="sourceLineNo">1513</span>        value.setName( name );<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>    //String url = registry.getString( prefix + "url", value.getUrl() );<a name="line.1514"></a>
<span class="sourceLineNo">1515</span><a name="line.1515"></a>
<span class="sourceLineNo">1516</span>    List&lt;String&gt; urlList = registry.getList( prefix + "url" );<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>    String url = value.getUrl();<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>    if (urlList != null &amp;&amp; !urlList.isEmpty() )<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>    {<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>        for (int i = 0,size = urlList.size();i&lt;size;i++)<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>        {<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>            sb.append( urlList.get( i ) );<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>            if (i&lt;size - 1)<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>            {<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>                sb.append( ',' );<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>            }<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>        }<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>        url = sb.toString();<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>    }<a name="line.1530"></a>
<span class="sourceLineNo">1531</span><a name="line.1531"></a>
<span class="sourceLineNo">1532</span>        value.setUrl( url );<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>    //String logoLocation = registry.getString( prefix + "logoLocation", value.getLogoLocation() );<a name="line.1533"></a>
<span class="sourceLineNo">1534</span><a name="line.1534"></a>
<span class="sourceLineNo">1535</span>    List&lt;String&gt; logoLocationList = registry.getList( prefix + "logoLocation" );<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>    String logoLocation = value.getLogoLocation();<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>    if (logoLocationList != null &amp;&amp; !logoLocationList.isEmpty() )<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>    {<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>        for (int i = 0,size = logoLocationList.size();i&lt;size;i++)<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>        {<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>            sb.append( logoLocationList.get( i ) );<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>            if (i&lt;size - 1)<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>            {<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>                sb.append( ',' );<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>            }<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>        }<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>        logoLocation = sb.toString();<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>    }<a name="line.1549"></a>
<span class="sourceLineNo">1550</span><a name="line.1550"></a>
<span class="sourceLineNo">1551</span>        value.setLogoLocation( logoLocation );<a name="line.1551"></a>
<span class="sourceLineNo">1552</span><a name="line.1552"></a>
<span class="sourceLineNo">1553</span>        return value;<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>    }<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>    <a name="line.1555"></a>
<span class="sourceLineNo">1556</span>    private WebappConfiguration readWebappConfiguration( String prefix, Registry registry )<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>    {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>        WebappConfiguration value = new WebappConfiguration();<a name="line.1558"></a>
<span class="sourceLineNo">1559</span><a name="line.1559"></a>
<span class="sourceLineNo">1560</span>        UserInterfaceOptions ui = readUserInterfaceOptions( prefix + "ui.", registry );<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>        value.setUi( ui );<a name="line.1561"></a>
<span class="sourceLineNo">1562</span><a name="line.1562"></a>
<span class="sourceLineNo">1563</span>        return value;<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>    <a name="line.1565"></a>
<span class="sourceLineNo">1566</span>    private UserInterfaceOptions readUserInterfaceOptions( String prefix, Registry registry )<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>    {<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>        UserInterfaceOptions value = new UserInterfaceOptions();<a name="line.1568"></a>
<span class="sourceLineNo">1569</span><a name="line.1569"></a>
<span class="sourceLineNo">1570</span>        boolean showFindArtifacts = registry.getBoolean( prefix + "showFindArtifacts", value.isShowFindArtifacts() );<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>        value.setShowFindArtifacts( showFindArtifacts );<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>        boolean appletFindEnabled = registry.getBoolean( prefix + "appletFindEnabled", value.isAppletFindEnabled() );<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>        value.setAppletFindEnabled( appletFindEnabled );<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>        boolean disableEasterEggs = registry.getBoolean( prefix + "disableEasterEggs", value.isDisableEasterEggs() );<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>        value.setDisableEasterEggs( disableEasterEggs );<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>    //String applicationUrl = registry.getString( prefix + "applicationUrl", value.getApplicationUrl() );<a name="line.1576"></a>
<span class="sourceLineNo">1577</span><a name="line.1577"></a>
<span class="sourceLineNo">1578</span>    List&lt;String&gt; applicationUrlList = registry.getList( prefix + "applicationUrl" );<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>    String applicationUrl = value.getApplicationUrl();<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>    if (applicationUrlList != null &amp;&amp; !applicationUrlList.isEmpty() )<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>    {<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>        for (int i = 0,size = applicationUrlList.size();i&lt;size;i++)<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>        {<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>            sb.append( applicationUrlList.get( i ) );<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>            if (i&lt;size - 1)<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>            {<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>                sb.append( ',' );<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>            }<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>        applicationUrl = sb.toString();<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
<span class="sourceLineNo">1593</span><a name="line.1593"></a>
<span class="sourceLineNo">1594</span>        value.setApplicationUrl( applicationUrl );<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>        boolean disableRegistration = registry.getBoolean( prefix + "disableRegistration", value.isDisableRegistration() );<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>        value.setDisableRegistration( disableRegistration );<a name="line.1596"></a>
<span class="sourceLineNo">1597</span><a name="line.1597"></a>
<span class="sourceLineNo">1598</span>        return value;<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>    <a name="line.1600"></a>
<span class="sourceLineNo">1601</span>    private NetworkConfiguration readNetworkConfiguration( String prefix, Registry registry )<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>    {<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>        NetworkConfiguration value = new NetworkConfiguration();<a name="line.1603"></a>
<span class="sourceLineNo">1604</span><a name="line.1604"></a>
<span class="sourceLineNo">1605</span>    int maxTotal = registry.getInt( prefix + "maxTotal", value.getMaxTotal() );<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>        value.setMaxTotal( maxTotal );<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>    int maxTotalPerHost = registry.getInt( prefix + "maxTotalPerHost", value.getMaxTotalPerHost() );<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>        value.setMaxTotalPerHost( maxTotalPerHost );<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>        boolean usePooling = registry.getBoolean( prefix + "usePooling", value.isUsePooling() );<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        value.setUsePooling( usePooling );<a name="line.1610"></a>
<span class="sourceLineNo">1611</span><a name="line.1611"></a>
<span class="sourceLineNo">1612</span>        return value;<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>    }<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>    <a name="line.1614"></a>
<span class="sourceLineNo">1615</span>    private ArchivaRuntimeConfiguration readArchivaRuntimeConfiguration( String prefix, Registry registry )<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>    {<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>        ArchivaRuntimeConfiguration value = new ArchivaRuntimeConfiguration();<a name="line.1617"></a>
<span class="sourceLineNo">1618</span><a name="line.1618"></a>
<span class="sourceLineNo">1619</span>        CacheConfiguration urlFailureCacheConfiguration = readCacheConfiguration( prefix + "urlFailureCacheConfiguration.", registry );<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>        value.setUrlFailureCacheConfiguration( urlFailureCacheConfiguration );<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>        FileLockConfiguration fileLockConfiguration = readFileLockConfiguration( prefix + "fileLockConfiguration.", registry );<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>        value.setFileLockConfiguration( fileLockConfiguration );<a name="line.1622"></a>
<span class="sourceLineNo">1623</span><a name="line.1623"></a>
<span class="sourceLineNo">1624</span>        return value;<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>    <a name="line.1626"></a>
<span class="sourceLineNo">1627</span>    private RedbackRuntimeConfiguration readRedbackRuntimeConfiguration( String prefix, Registry registry )<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>    {<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>        RedbackRuntimeConfiguration value = new RedbackRuntimeConfiguration();<a name="line.1629"></a>
<span class="sourceLineNo">1630</span><a name="line.1630"></a>
<span class="sourceLineNo">1631</span>        boolean migratedFromRedbackConfiguration = registry.getBoolean( prefix + "migratedFromRedbackConfiguration", value.isMigratedFromRedbackConfiguration() );<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>        value.setMigratedFromRedbackConfiguration( migratedFromRedbackConfiguration );<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>        java.util.List userManagerImpls = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>        userManagerImpls.addAll( registry.getList( prefix + "userManagerImpls.userManagerImpl" ) );<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>        value.setUserManagerImpls( userManagerImpls );<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>        java.util.List rbacManagerImpls = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>        rbacManagerImpls.addAll( registry.getList( prefix + "rbacManagerImpls.rbacManagerImpl" ) );<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>        value.setRbacManagerImpls( rbacManagerImpls );<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>        LdapConfiguration ldapConfiguration = readLdapConfiguration( prefix + "ldapConfiguration.", registry );<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>        value.setLdapConfiguration( ldapConfiguration );<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>        java.util.List ldapGroupMappings = new java.util.ArrayList/*&lt;LdapGroupMapping&gt;*/();<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>        List ldapGroupMappingsSubsets = registry.getSubsetList( prefix + "ldapGroupMappings.ldapGroupMapping" );<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>        for ( Iterator i = ldapGroupMappingsSubsets.iterator(); i.hasNext(); )<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>        {<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>            LdapGroupMapping v = readLdapGroupMapping( "", (Registry) i.next() );<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>            ldapGroupMappings.add( v );<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>        }<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>        value.setLdapGroupMappings( ldapGroupMappings );<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>        java.util.Map configurationProperties = registry.getProperties( prefix + "configurationProperties" );<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>        value.setConfigurationProperties( configurationProperties );<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>        boolean useUsersCache = registry.getBoolean( prefix + "useUsersCache", value.isUseUsersCache() );<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        value.setUseUsersCache( useUsersCache );<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>        CacheConfiguration usersCacheConfiguration = readCacheConfiguration( prefix + "usersCacheConfiguration.", registry );<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>        value.setUsersCacheConfiguration( usersCacheConfiguration );<a name="line.1654"></a>
<span class="sourceLineNo">1655</span><a name="line.1655"></a>
<span class="sourceLineNo">1656</span>        return value;<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>    <a name="line.1658"></a>
<span class="sourceLineNo">1659</span>    private ArchivaDefaultConfiguration readArchivaDefaultConfiguration( String prefix, Registry registry )<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>    {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>        ArchivaDefaultConfiguration value = new ArchivaDefaultConfiguration();<a name="line.1661"></a>
<span class="sourceLineNo">1662</span><a name="line.1662"></a>
<span class="sourceLineNo">1663</span>        java.util.List defaultCheckPaths = new java.util.ArrayList/*&lt;RepositoryCheckPath&gt;*/();<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>        List defaultCheckPathsSubsets = registry.getSubsetList( prefix + "defaultCheckPaths.defaultCheckPath" );<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>        for ( Iterator i = defaultCheckPathsSubsets.iterator(); i.hasNext(); )<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>        {<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>            RepositoryCheckPath v = readRepositoryCheckPath( "", (Registry) i.next() );<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>            defaultCheckPaths.add( v );<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>        }<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>        value.setDefaultCheckPaths( defaultCheckPaths );<a name="line.1670"></a>
<span class="sourceLineNo">1671</span><a name="line.1671"></a>
<span class="sourceLineNo">1672</span>        return value;<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>    <a name="line.1674"></a>
<span class="sourceLineNo">1675</span>    private LdapConfiguration readLdapConfiguration( String prefix, Registry registry )<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>    {<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>        LdapConfiguration value = new LdapConfiguration();<a name="line.1677"></a>
<span class="sourceLineNo">1678</span><a name="line.1678"></a>
<span class="sourceLineNo">1679</span>    //String hostName = registry.getString( prefix + "hostName", value.getHostName() );<a name="line.1679"></a>
<span class="sourceLineNo">1680</span><a name="line.1680"></a>
<span class="sourceLineNo">1681</span>    List&lt;String&gt; hostNameList = registry.getList( prefix + "hostName" );<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>    String hostName = value.getHostName();<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>    if (hostNameList != null &amp;&amp; !hostNameList.isEmpty() )<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>    {<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>        for (int i = 0,size = hostNameList.size();i&lt;size;i++)<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>        {<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>            sb.append( hostNameList.get( i ) );<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>            if (i&lt;size - 1)<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>            {<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>                sb.append( ',' );<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>            }<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>        }<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>        hostName = sb.toString();<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
<span class="sourceLineNo">1696</span><a name="line.1696"></a>
<span class="sourceLineNo">1697</span>        value.setHostName( hostName );<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>    int port = registry.getInt( prefix + "port", value.getPort() );<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>        value.setPort( port );<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        boolean ssl = registry.getBoolean( prefix + "ssl", value.isSsl() );<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>        value.setSsl( ssl );<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>    //String baseDn = registry.getString( prefix + "baseDn", value.getBaseDn() );<a name="line.1702"></a>
<span class="sourceLineNo">1703</span><a name="line.1703"></a>
<span class="sourceLineNo">1704</span>    List&lt;String&gt; baseDnList = registry.getList( prefix + "baseDn" );<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>    String baseDn = value.getBaseDn();<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>    if (baseDnList != null &amp;&amp; !baseDnList.isEmpty() )<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>    {<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>        for (int i = 0,size = baseDnList.size();i&lt;size;i++)<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>        {<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>            sb.append( baseDnList.get( i ) );<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>            if (i&lt;size - 1)<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>            {<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>                sb.append( ',' );<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>            }<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        }<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>        baseDn = sb.toString();<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
<span class="sourceLineNo">1719</span><a name="line.1719"></a>
<span class="sourceLineNo">1720</span>        value.setBaseDn( baseDn );<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>    //String baseGroupsDn = registry.getString( prefix + "baseGroupsDn", value.getBaseGroupsDn() );<a name="line.1721"></a>
<span class="sourceLineNo">1722</span><a name="line.1722"></a>
<span class="sourceLineNo">1723</span>    List&lt;String&gt; baseGroupsDnList = registry.getList( prefix + "baseGroupsDn" );<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>    String baseGroupsDn = value.getBaseGroupsDn();<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>    if (baseGroupsDnList != null &amp;&amp; !baseGroupsDnList.isEmpty() )<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>    {<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>        for (int i = 0,size = baseGroupsDnList.size();i&lt;size;i++)<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>        {<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>            sb.append( baseGroupsDnList.get( i ) );<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>            if (i&lt;size - 1)<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>            {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>                sb.append( ',' );<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>            }<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>        }<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>        baseGroupsDn = sb.toString();<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
<span class="sourceLineNo">1738</span><a name="line.1738"></a>
<span class="sourceLineNo">1739</span>        value.setBaseGroupsDn( baseGroupsDn );<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>    //String contextFactory = registry.getString( prefix + "contextFactory", value.getContextFactory() );<a name="line.1740"></a>
<span class="sourceLineNo">1741</span><a name="line.1741"></a>
<span class="sourceLineNo">1742</span>    List&lt;String&gt; contextFactoryList = registry.getList( prefix + "contextFactory" );<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>    String contextFactory = value.getContextFactory();<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>    if (contextFactoryList != null &amp;&amp; !contextFactoryList.isEmpty() )<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>    {<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>        for (int i = 0,size = contextFactoryList.size();i&lt;size;i++)<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>        {<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>            sb.append( contextFactoryList.get( i ) );<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>            if (i&lt;size - 1)<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>            {<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>                sb.append( ',' );<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>            }<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>        }<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>        contextFactory = sb.toString();<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>    }<a name="line.1756"></a>
<span class="sourceLineNo">1757</span><a name="line.1757"></a>
<span class="sourceLineNo">1758</span>        value.setContextFactory( contextFactory );<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>    //String bindDn = registry.getString( prefix + "bindDn", value.getBindDn() );<a name="line.1759"></a>
<span class="sourceLineNo">1760</span><a name="line.1760"></a>
<span class="sourceLineNo">1761</span>    List&lt;String&gt; bindDnList = registry.getList( prefix + "bindDn" );<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>    String bindDn = value.getBindDn();<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>    if (bindDnList != null &amp;&amp; !bindDnList.isEmpty() )<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>    {<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>        for (int i = 0,size = bindDnList.size();i&lt;size;i++)<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>        {<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>            sb.append( bindDnList.get( i ) );<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>            if (i&lt;size - 1)<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>            {<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>                sb.append( ',' );<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>            }<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>        }<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>        bindDn = sb.toString();<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>    }<a name="line.1775"></a>
<span class="sourceLineNo">1776</span><a name="line.1776"></a>
<span class="sourceLineNo">1777</span>        value.setBindDn( bindDn );<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    //String password = registry.getString( prefix + "password", value.getPassword() );<a name="line.1778"></a>
<span class="sourceLineNo">1779</span><a name="line.1779"></a>
<span class="sourceLineNo">1780</span>    List&lt;String&gt; passwordList = registry.getList( prefix + "password" );<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>    String password = value.getPassword();<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>    if (passwordList != null &amp;&amp; !passwordList.isEmpty() )<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>    {<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>        for (int i = 0,size = passwordList.size();i&lt;size;i++)<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>        {<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>            sb.append( passwordList.get( i ) );<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>            if (i&lt;size - 1)<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>            {<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>                sb.append( ',' );<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>            }<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>        }<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>        password = sb.toString();<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
<span class="sourceLineNo">1795</span><a name="line.1795"></a>
<span class="sourceLineNo">1796</span>        value.setPassword( password );<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>    //String authenticationMethod = registry.getString( prefix + "authenticationMethod", value.getAuthenticationMethod() );<a name="line.1797"></a>
<span class="sourceLineNo">1798</span><a name="line.1798"></a>
<span class="sourceLineNo">1799</span>    List&lt;String&gt; authenticationMethodList = registry.getList( prefix + "authenticationMethod" );<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>    String authenticationMethod = value.getAuthenticationMethod();<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>    if (authenticationMethodList != null &amp;&amp; !authenticationMethodList.isEmpty() )<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>    {<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>        for (int i = 0,size = authenticationMethodList.size();i&lt;size;i++)<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>        {<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>            sb.append( authenticationMethodList.get( i ) );<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>            if (i&lt;size - 1)<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>            {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                sb.append( ',' );<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>            }<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>        }<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>        authenticationMethod = sb.toString();<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>    }<a name="line.1813"></a>
<span class="sourceLineNo">1814</span><a name="line.1814"></a>
<span class="sourceLineNo">1815</span>        value.setAuthenticationMethod( authenticationMethod );<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>        boolean bindAuthenticatorEnabled = registry.getBoolean( prefix + "bindAuthenticatorEnabled", value.isBindAuthenticatorEnabled() );<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>        value.setBindAuthenticatorEnabled( bindAuthenticatorEnabled );<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>        boolean writable = registry.getBoolean( prefix + "writable", value.isWritable() );<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>        value.setWritable( writable );<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>        boolean useRoleNameAsGroup = registry.getBoolean( prefix + "useRoleNameAsGroup", value.isUseRoleNameAsGroup() );<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>        value.setUseRoleNameAsGroup( useRoleNameAsGroup );<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>        java.util.Map extraProperties = registry.getProperties( prefix + "extraProperties" );<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>        value.setExtraProperties( extraProperties );<a name="line.1823"></a>
<span class="sourceLineNo">1824</span><a name="line.1824"></a>
<span class="sourceLineNo">1825</span>        return value;<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>    <a name="line.1827"></a>
<span class="sourceLineNo">1828</span>    private FileLockConfiguration readFileLockConfiguration( String prefix, Registry registry )<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>    {<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>        FileLockConfiguration value = new FileLockConfiguration();<a name="line.1830"></a>
<span class="sourceLineNo">1831</span><a name="line.1831"></a>
<span class="sourceLineNo">1832</span>        boolean skipLocking = registry.getBoolean( prefix + "skipLocking", value.isSkipLocking() );<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>        value.setSkipLocking( skipLocking );<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>    int lockingTimeout = registry.getInt( prefix + "lockingTimeout", value.getLockingTimeout() );<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>        value.setLockingTimeout( lockingTimeout );<a name="line.1835"></a>
<span class="sourceLineNo">1836</span><a name="line.1836"></a>
<span class="sourceLineNo">1837</span>        return value;<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>    <a name="line.1839"></a>
<span class="sourceLineNo">1840</span>    private CacheConfiguration readCacheConfiguration( String prefix, Registry registry )<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    {<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>        CacheConfiguration value = new CacheConfiguration();<a name="line.1842"></a>
<span class="sourceLineNo">1843</span><a name="line.1843"></a>
<span class="sourceLineNo">1844</span>    int timeToIdleSeconds = registry.getInt( prefix + "timeToIdleSeconds", value.getTimeToIdleSeconds() );<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>        value.setTimeToIdleSeconds( timeToIdleSeconds );<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>    int timeToLiveSeconds = registry.getInt( prefix + "timeToLiveSeconds", value.getTimeToLiveSeconds() );<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>        value.setTimeToLiveSeconds( timeToLiveSeconds );<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>    int maxElementsInMemory = registry.getInt( prefix + "maxElementsInMemory", value.getMaxElementsInMemory() );<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>        value.setMaxElementsInMemory( maxElementsInMemory );<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>    int maxElementsOnDisk = registry.getInt( prefix + "maxElementsOnDisk", value.getMaxElementsOnDisk() );<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>        value.setMaxElementsOnDisk( maxElementsOnDisk );<a name="line.1851"></a>
<span class="sourceLineNo">1852</span><a name="line.1852"></a>
<span class="sourceLineNo">1853</span>        return value;<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>    }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>    <a name="line.1855"></a>
<span class="sourceLineNo">1856</span>    private LdapGroupMapping readLdapGroupMapping( String prefix, Registry registry )<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>    {<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>        LdapGroupMapping value = new LdapGroupMapping();<a name="line.1858"></a>
<span class="sourceLineNo">1859</span><a name="line.1859"></a>
<span class="sourceLineNo">1860</span>    //String group = registry.getString( prefix + "group", value.getGroup() );<a name="line.1860"></a>
<span class="sourceLineNo">1861</span><a name="line.1861"></a>
<span class="sourceLineNo">1862</span>    List&lt;String&gt; groupList = registry.getList( prefix + "group" );<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>    String group = value.getGroup();<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>    if (groupList != null &amp;&amp; !groupList.isEmpty() )<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>    {<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>        StringBuilder sb = new StringBuilder(  );<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>        for (int i = 0,size = groupList.size();i&lt;size;i++)<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>        {<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>            sb.append( groupList.get( i ) );<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>            if (i&lt;size - 1)<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>            {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                sb.append( ',' );<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>            }<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>        group = sb.toString();<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>    }<a name="line.1876"></a>
<span class="sourceLineNo">1877</span><a name="line.1877"></a>
<span class="sourceLineNo">1878</span>        value.setGroup( group );<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>        java.util.List roleNames = new java.util.ArrayList/*&lt;String&gt;*/();<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>        roleNames.addAll( registry.getList( prefix + "roleNames.roleName" ) );<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>        value.setRoleNames( roleNames );<a name="line.1881"></a>
<span class="sourceLineNo">1882</span><a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        return value;<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>    }<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>    <a name="line.1885"></a>
<span class="sourceLineNo">1886</span>}<a name="line.1886"></a>




























































</pre>
</div>
</body>
</html>
