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




























































</PRE>
</BODY>
</HTML>