<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.admin.repository.group;<a name="line.1"></a>
<span class="sourceLineNo">002</span>/*<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<span class="sourceLineNo">012</span> *<a name="line.12"></a>
<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * software distributed under the License is distributed on an<a name="line.14"></a>
<span class="sourceLineNo">015</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<span class="sourceLineNo">016</span> * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<span class="sourceLineNo">017</span> * specific language governing permissions and limitations<a name="line.17"></a>
<span class="sourceLineNo">018</span> * under the License.<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.archiva.admin.model.AuditInformation;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.admin.model.RepositoryAdminException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.admin.model.beans.ManagedRepository;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.admin.model.beans.RepositoryGroup;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.configuration.Configuration;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.configuration.RepositoryGroupConfiguration;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.metadata.model.facets.AuditEvent;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.scheduler.MergedRemoteIndexesScheduler;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.commons.lang.StringUtils;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.slf4j.Logger;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.slf4j.LoggerFactory;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.springframework.stereotype.Service;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>import javax.annotation.PostConstruct;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import javax.inject.Inject;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.io.File;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.ArrayList;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.Arrays;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.Collections;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.HashMap;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.util.List;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.Map;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.regex.Matcher;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.regex.Pattern;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
<span class="sourceLineNo">050</span> * @author Olivier Lamy<a name="line.50"></a>
<span class="sourceLineNo">051</span> */<a name="line.51"></a>
<span class="sourceLineNo">052</span>@Service("repositoryGroupAdmin#default")<a name="line.52"></a>
<span class="sourceLineNo">053</span>public class DefaultRepositoryGroupAdmin<a name="line.53"></a>
<span class="sourceLineNo">054</span>    extends AbstractRepositoryAdmin<a name="line.54"></a>
<span class="sourceLineNo">055</span>    implements RepositoryGroupAdmin<a name="line.55"></a>
<span class="sourceLineNo">056</span>{<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>    private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>    private static final Pattern REPO_GROUP_ID_PATTERN = Pattern.compile( "[A-Za-z0-9\\._\\-]+" );<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>    @Inject<a name="line.62"></a>
<span class="sourceLineNo">063</span>    private ManagedRepositoryAdmin managedRepositoryAdmin;<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>    @Inject<a name="line.65"></a>
<span class="sourceLineNo">066</span>    private MergedRemoteIndexesScheduler mergedRemoteIndexesScheduler;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>    private File groupsDirectory;<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    @PostConstruct<a name="line.70"></a>
<span class="sourceLineNo">071</span>    public void initialize()<a name="line.71"></a>
<span class="sourceLineNo">072</span>    {<a name="line.72"></a>
<span class="sourceLineNo">073</span>        String appServerBase = getRegistry().getString( "appserver.base" );<a name="line.73"></a>
<span class="sourceLineNo">074</span>        groupsDirectory = new File( appServerBase + File.separatorChar + "groups" );<a name="line.74"></a>
<span class="sourceLineNo">075</span>        if ( !groupsDirectory.exists() )<a name="line.75"></a>
<span class="sourceLineNo">076</span>        {<a name="line.76"></a>
<span class="sourceLineNo">077</span>            groupsDirectory.mkdirs();<a name="line.77"></a>
<span class="sourceLineNo">078</span>        }<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>        try<a name="line.80"></a>
<span class="sourceLineNo">081</span>        {<a name="line.81"></a>
<span class="sourceLineNo">082</span>            for ( RepositoryGroup repositoryGroup : getRepositoriesGroups() )<a name="line.82"></a>
<span class="sourceLineNo">083</span>            {<a name="line.83"></a>
<span class="sourceLineNo">084</span>                mergedRemoteIndexesScheduler.schedule( repositoryGroup,<a name="line.84"></a>
<span class="sourceLineNo">085</span>                                                       getMergedIndexDirectory( repositoryGroup.getId() ) );<a name="line.85"></a>
<span class="sourceLineNo">086</span>                // create the directory for each group if not exists<a name="line.86"></a>
<span class="sourceLineNo">087</span>                File groupPath = new File( groupsDirectory, repositoryGroup.getId() );<a name="line.87"></a>
<span class="sourceLineNo">088</span>                if ( !groupPath.exists() )<a name="line.88"></a>
<span class="sourceLineNo">089</span>                {<a name="line.89"></a>
<span class="sourceLineNo">090</span>                    groupPath.mkdirs();<a name="line.90"></a>
<span class="sourceLineNo">091</span>                }<a name="line.91"></a>
<span class="sourceLineNo">092</span>            }<a name="line.92"></a>
<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
<span class="sourceLineNo">094</span>        catch ( RepositoryAdminException e )<a name="line.94"></a>
<span class="sourceLineNo">095</span>        {<a name="line.95"></a>
<span class="sourceLineNo">096</span>            log.warn( "fail to getRepositoriesGroups {}", e.getMessage(), e );<a name="line.96"></a>
<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>    @Override<a name="line.102"></a>
<span class="sourceLineNo">103</span>    public File getMergedIndexDirectory( String repositoryGroupId )<a name="line.103"></a>
<span class="sourceLineNo">104</span>    {<a name="line.104"></a>
<span class="sourceLineNo">105</span>        return new File( groupsDirectory, repositoryGroupId );<a name="line.105"></a>
<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>    @Override<a name="line.108"></a>
<span class="sourceLineNo">109</span>    public List&lt;RepositoryGroup&gt; getRepositoriesGroups()<a name="line.109"></a>
<span class="sourceLineNo">110</span>        throws RepositoryAdminException<a name="line.110"></a>
<span class="sourceLineNo">111</span>    {<a name="line.111"></a>
<span class="sourceLineNo">112</span>        List&lt;RepositoryGroup&gt; repositoriesGroups =<a name="line.112"></a>
<span class="sourceLineNo">113</span>            new ArrayList&lt;&gt;( getArchivaConfiguration().getConfiguration().getRepositoryGroups().size() );<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>        for ( RepositoryGroupConfiguration repositoryGroupConfiguration : getArchivaConfiguration().getConfiguration().getRepositoryGroups() )<a name="line.115"></a>
<span class="sourceLineNo">116</span>        {<a name="line.116"></a>
<span class="sourceLineNo">117</span>            repositoriesGroups.add( new RepositoryGroup( repositoryGroupConfiguration.getId(), new ArrayList&lt;String&gt;(<a name="line.117"></a>
<span class="sourceLineNo">118</span>                repositoryGroupConfiguration.getRepositories() ) ).mergedIndexPath(<a name="line.118"></a>
<span class="sourceLineNo">119</span>                repositoryGroupConfiguration.getMergedIndexPath() ).mergedIndexTtl(<a name="line.119"></a>
<span class="sourceLineNo">120</span>                repositoryGroupConfiguration.getMergedIndexTtl() ).cronExpression(<a name="line.120"></a>
<span class="sourceLineNo">121</span>                repositoryGroupConfiguration.getCronExpression() ) );<a name="line.121"></a>
<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>        return repositoriesGroups;<a name="line.124"></a>
<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>    @Override<a name="line.127"></a>
<span class="sourceLineNo">128</span>    public RepositoryGroup getRepositoryGroup( String repositoryGroupId )<a name="line.128"></a>
<span class="sourceLineNo">129</span>        throws RepositoryAdminException<a name="line.129"></a>
<span class="sourceLineNo">130</span>    {<a name="line.130"></a>
<span class="sourceLineNo">131</span>        List&lt;RepositoryGroup&gt; repositoriesGroups = getRepositoriesGroups();<a name="line.131"></a>
<span class="sourceLineNo">132</span>        for ( RepositoryGroup repositoryGroup : repositoriesGroups )<a name="line.132"></a>
<span class="sourceLineNo">133</span>        {<a name="line.133"></a>
<span class="sourceLineNo">134</span>            if ( StringUtils.equals( repositoryGroupId, repositoryGroup.getId() ) )<a name="line.134"></a>
<span class="sourceLineNo">135</span>            {<a name="line.135"></a>
<span class="sourceLineNo">136</span>                return repositoryGroup;<a name="line.136"></a>
<span class="sourceLineNo">137</span>            }<a name="line.137"></a>
<span class="sourceLineNo">138</span>        }<a name="line.138"></a>
<span class="sourceLineNo">139</span>        return null;<a name="line.139"></a>
<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
<span class="sourceLineNo">143</span>    public Boolean addRepositoryGroup( RepositoryGroup repositoryGroup, AuditInformation auditInformation )<a name="line.143"></a>
<span class="sourceLineNo">144</span>        throws RepositoryAdminException<a name="line.144"></a>
<span class="sourceLineNo">145</span>    {<a name="line.145"></a>
<span class="sourceLineNo">146</span>        validateRepositoryGroup( repositoryGroup, false );<a name="line.146"></a>
<span class="sourceLineNo">147</span>        validateManagedRepositoriesExists( repositoryGroup.getRepositories() );<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>        RepositoryGroupConfiguration repositoryGroupConfiguration = new RepositoryGroupConfiguration();<a name="line.149"></a>
<span class="sourceLineNo">150</span>        repositoryGroupConfiguration.setId( repositoryGroup.getId() );<a name="line.150"></a>
<span class="sourceLineNo">151</span>        repositoryGroupConfiguration.setRepositories( repositoryGroup.getRepositories() );<a name="line.151"></a>
<span class="sourceLineNo">152</span>        repositoryGroupConfiguration.setMergedIndexPath( repositoryGroup.getMergedIndexPath() );<a name="line.152"></a>
<span class="sourceLineNo">153</span>        repositoryGroupConfiguration.setMergedIndexTtl( repositoryGroup.getMergedIndexTtl() );<a name="line.153"></a>
<span class="sourceLineNo">154</span>        repositoryGroupConfiguration.setCronExpression( repositoryGroup.getCronExpression() );<a name="line.154"></a>
<span class="sourceLineNo">155</span>        Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.155"></a>
<span class="sourceLineNo">156</span>        configuration.addRepositoryGroup( repositoryGroupConfiguration );<a name="line.156"></a>
<span class="sourceLineNo">157</span>        saveConfiguration( configuration );<a name="line.157"></a>
<span class="sourceLineNo">158</span>        triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.ADD_REPO_GROUP, auditInformation );<a name="line.158"></a>
<span class="sourceLineNo">159</span>        mergedRemoteIndexesScheduler.schedule( repositoryGroup, getMergedIndexDirectory( repositoryGroup.getId() ) );<a name="line.159"></a>
<span class="sourceLineNo">160</span>        return Boolean.TRUE;<a name="line.160"></a>
<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>    @Override<a name="line.163"></a>
<span class="sourceLineNo">164</span>    public Boolean deleteRepositoryGroup( String repositoryGroupId, AuditInformation auditInformation )<a name="line.164"></a>
<span class="sourceLineNo">165</span>        throws RepositoryAdminException<a name="line.165"></a>
<span class="sourceLineNo">166</span>    {<a name="line.166"></a>
<span class="sourceLineNo">167</span>        Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.167"></a>
<span class="sourceLineNo">168</span>        RepositoryGroupConfiguration repositoryGroupConfiguration =<a name="line.168"></a>
<span class="sourceLineNo">169</span>            configuration.getRepositoryGroupsAsMap().get( repositoryGroupId );<a name="line.169"></a>
<span class="sourceLineNo">170</span>        mergedRemoteIndexesScheduler.unschedule(<a name="line.170"></a>
<span class="sourceLineNo">171</span>            new RepositoryGroup( repositoryGroupId, Collections.&lt;String&gt;emptyList() ) );<a name="line.171"></a>
<span class="sourceLineNo">172</span>        if ( repositoryGroupConfiguration == null )<a name="line.172"></a>
<span class="sourceLineNo">173</span>        {<a name="line.173"></a>
<span class="sourceLineNo">174</span>            throw new RepositoryAdminException(<a name="line.174"></a>
<span class="sourceLineNo">175</span>                "repositoryGroup with id " + repositoryGroupId + " doesn't not exists so cannot remove" );<a name="line.175"></a>
<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
<span class="sourceLineNo">177</span>        configuration.removeRepositoryGroup( repositoryGroupConfiguration );<a name="line.177"></a>
<span class="sourceLineNo">178</span>        triggerAuditEvent( repositoryGroupId, null, AuditEvent.DELETE_REPO_GROUP, auditInformation );<a name="line.178"></a>
<span class="sourceLineNo">179</span><a name="line.179"></a>
<span class="sourceLineNo">180</span>        return Boolean.TRUE;<a name="line.180"></a>
<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>    @Override<a name="line.183"></a>
<span class="sourceLineNo">184</span>    public Boolean updateRepositoryGroup( RepositoryGroup repositoryGroup, AuditInformation auditInformation )<a name="line.184"></a>
<span class="sourceLineNo">185</span>        throws RepositoryAdminException<a name="line.185"></a>
<span class="sourceLineNo">186</span>    {<a name="line.186"></a>
<span class="sourceLineNo">187</span>        return updateRepositoryGroup( repositoryGroup, auditInformation, true );<a name="line.187"></a>
<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>    private Boolean updateRepositoryGroup( RepositoryGroup repositoryGroup, AuditInformation auditInformation,<a name="line.190"></a>
<span class="sourceLineNo">191</span>                                           boolean triggerAuditEvent )<a name="line.191"></a>
<span class="sourceLineNo">192</span>        throws RepositoryAdminException<a name="line.192"></a>
<span class="sourceLineNo">193</span>    {<a name="line.193"></a>
<span class="sourceLineNo">194</span>        validateRepositoryGroup( repositoryGroup, true );<a name="line.194"></a>
<span class="sourceLineNo">195</span>        validateManagedRepositoriesExists( repositoryGroup.getRepositories() );<a name="line.195"></a>
<span class="sourceLineNo">196</span>        Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.196"></a>
<span class="sourceLineNo">197</span><a name="line.197"></a>
<span class="sourceLineNo">198</span>        RepositoryGroupConfiguration repositoryGroupConfiguration =<a name="line.198"></a>
<span class="sourceLineNo">199</span>            configuration.getRepositoryGroupsAsMap().get( repositoryGroup.getId() );<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>        configuration.removeRepositoryGroup( repositoryGroupConfiguration );<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>        repositoryGroupConfiguration.setRepositories( repositoryGroup.getRepositories() );<a name="line.203"></a>
<span class="sourceLineNo">204</span>        repositoryGroupConfiguration.setMergedIndexPath( repositoryGroup.getMergedIndexPath() );<a name="line.204"></a>
<span class="sourceLineNo">205</span>        repositoryGroupConfiguration.setMergedIndexTtl( repositoryGroup.getMergedIndexTtl() );<a name="line.205"></a>
<span class="sourceLineNo">206</span>        repositoryGroupConfiguration.setCronExpression( repositoryGroup.getCronExpression() );<a name="line.206"></a>
<span class="sourceLineNo">207</span>        configuration.addRepositoryGroup( repositoryGroupConfiguration );<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>        saveConfiguration( configuration );<a name="line.209"></a>
<span class="sourceLineNo">210</span>        if ( triggerAuditEvent )<a name="line.210"></a>
<span class="sourceLineNo">211</span>        {<a name="line.211"></a>
<span class="sourceLineNo">212</span>            triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.MODIFY_REPO_GROUP, auditInformation );<a name="line.212"></a>
<span class="sourceLineNo">213</span>        }<a name="line.213"></a>
<span class="sourceLineNo">214</span>        mergedRemoteIndexesScheduler.unschedule( repositoryGroup );<a name="line.214"></a>
<span class="sourceLineNo">215</span>        mergedRemoteIndexesScheduler.schedule( repositoryGroup, getMergedIndexDirectory( repositoryGroup.getId() ) );<a name="line.215"></a>
<span class="sourceLineNo">216</span>        return Boolean.TRUE;<a name="line.216"></a>
<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span>    @Override<a name="line.220"></a>
<span class="sourceLineNo">221</span>    public Boolean addRepositoryToGroup( String repositoryGroupId, String repositoryId,<a name="line.221"></a>
<span class="sourceLineNo">222</span>                                         AuditInformation auditInformation )<a name="line.222"></a>
<span class="sourceLineNo">223</span>        throws RepositoryAdminException<a name="line.223"></a>
<span class="sourceLineNo">224</span>    {<a name="line.224"></a>
<span class="sourceLineNo">225</span>        RepositoryGroup repositoryGroup = getRepositoryGroup( repositoryGroupId );<a name="line.225"></a>
<span class="sourceLineNo">226</span>        if ( repositoryGroup == null )<a name="line.226"></a>
<span class="sourceLineNo">227</span>        {<a name="line.227"></a>
<span class="sourceLineNo">228</span>            throw new RepositoryAdminException(<a name="line.228"></a>
<span class="sourceLineNo">229</span>                "repositoryGroup with id " + repositoryGroupId + " doesn't not exists so cannot add repository to it" );<a name="line.229"></a>
<span class="sourceLineNo">230</span>        }<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>        if ( repositoryGroup.getRepositories().contains( repositoryId ) )<a name="line.232"></a>
<span class="sourceLineNo">233</span>        {<a name="line.233"></a>
<span class="sourceLineNo">234</span>            throw new RepositoryAdminException(<a name="line.234"></a>
<span class="sourceLineNo">235</span>                "repositoryGroup with id " + repositoryGroupId + " already contain repository with id" + repositoryId );<a name="line.235"></a>
<span class="sourceLineNo">236</span>        }<a name="line.236"></a>
<span class="sourceLineNo">237</span>        validateManagedRepositoriesExists( Arrays.asList( repositoryId ) );<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>        repositoryGroup.addRepository( repositoryId );<a name="line.239"></a>
<span class="sourceLineNo">240</span>        updateRepositoryGroup( repositoryGroup, auditInformation, false );<a name="line.240"></a>
<span class="sourceLineNo">241</span>        triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.ADD_REPO_TO_GROUP, auditInformation );<a name="line.241"></a>
<span class="sourceLineNo">242</span>        return Boolean.TRUE;<a name="line.242"></a>
<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
<span class="sourceLineNo">244</span><a name="line.244"></a>
<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
<span class="sourceLineNo">246</span>    public Boolean deleteRepositoryFromGroup( String repositoryGroupId, String repositoryId,<a name="line.246"></a>
<span class="sourceLineNo">247</span>                                              AuditInformation auditInformation )<a name="line.247"></a>
<span class="sourceLineNo">248</span>        throws RepositoryAdminException<a name="line.248"></a>
<span class="sourceLineNo">249</span>    {<a name="line.249"></a>
<span class="sourceLineNo">250</span>        RepositoryGroup repositoryGroup = getRepositoryGroup( repositoryGroupId );<a name="line.250"></a>
<span class="sourceLineNo">251</span>        if ( repositoryGroup == null )<a name="line.251"></a>
<span class="sourceLineNo">252</span>        {<a name="line.252"></a>
<span class="sourceLineNo">253</span>            throw new RepositoryAdminException( "repositoryGroup with id " + repositoryGroupId<a name="line.253"></a>
<span class="sourceLineNo">254</span>                                                    + " doesn't not exists so cannot remove repository from it" );<a name="line.254"></a>
<span class="sourceLineNo">255</span>        }<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>        if ( !repositoryGroup.getRepositories().contains( repositoryId ) )<a name="line.257"></a>
<span class="sourceLineNo">258</span>        {<a name="line.258"></a>
<span class="sourceLineNo">259</span>            throw new RepositoryAdminException(<a name="line.259"></a>
<span class="sourceLineNo">260</span>                "repositoryGroup with id " + repositoryGroupId + " doesn't not contains repository with id"<a name="line.260"></a>
<span class="sourceLineNo">261</span>                    + repositoryId<a name="line.261"></a>
<span class="sourceLineNo">262</span>            );<a name="line.262"></a>
<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>        repositoryGroup.removeRepository( repositoryId );<a name="line.265"></a>
<span class="sourceLineNo">266</span>        updateRepositoryGroup( repositoryGroup, auditInformation, false );<a name="line.266"></a>
<span class="sourceLineNo">267</span>        triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.DELETE_REPO_FROM_GROUP, auditInformation );<a name="line.267"></a>
<span class="sourceLineNo">268</span>        return Boolean.TRUE;<a name="line.268"></a>
<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>    @Override<a name="line.271"></a>
<span class="sourceLineNo">272</span>    public Map&lt;String, RepositoryGroup&gt; getRepositoryGroupsAsMap()<a name="line.272"></a>
<span class="sourceLineNo">273</span>        throws RepositoryAdminException<a name="line.273"></a>
<span class="sourceLineNo">274</span>    {<a name="line.274"></a>
<span class="sourceLineNo">275</span>        List&lt;RepositoryGroup&gt; repositoriesGroups = getRepositoriesGroups();<a name="line.275"></a>
<span class="sourceLineNo">276</span>        Map&lt;String, RepositoryGroup&gt; map = new HashMap&lt;&gt;( repositoriesGroups.size() );<a name="line.276"></a>
<span class="sourceLineNo">277</span>        for ( RepositoryGroup repositoryGroup : repositoriesGroups )<a name="line.277"></a>
<span class="sourceLineNo">278</span>        {<a name="line.278"></a>
<span class="sourceLineNo">279</span>            map.put( repositoryGroup.getId(), repositoryGroup );<a name="line.279"></a>
<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
<span class="sourceLineNo">281</span>        return map;<a name="line.281"></a>
<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
<span class="sourceLineNo">283</span><a name="line.283"></a>
<span class="sourceLineNo">284</span>    @Override<a name="line.284"></a>
<span class="sourceLineNo">285</span>    public Map&lt;String, List&lt;String&gt;&gt; getGroupToRepositoryMap()<a name="line.285"></a>
<span class="sourceLineNo">286</span>        throws RepositoryAdminException<a name="line.286"></a>
<span class="sourceLineNo">287</span>    {<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>        Map&lt;String, List&lt;String&gt;&gt; map = new HashMap&lt;&gt;();<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>        for ( ManagedRepository repo : getManagedRepositoryAdmin().getManagedRepositories() )<a name="line.291"></a>
<span class="sourceLineNo">292</span>        {<a name="line.292"></a>
<span class="sourceLineNo">293</span>            for ( RepositoryGroup group : getRepositoriesGroups() )<a name="line.293"></a>
<span class="sourceLineNo">294</span>            {<a name="line.294"></a>
<span class="sourceLineNo">295</span>                if ( !group.getRepositories().contains( repo.getId() ) )<a name="line.295"></a>
<span class="sourceLineNo">296</span>                {<a name="line.296"></a>
<span class="sourceLineNo">297</span>                    String groupId = group.getId();<a name="line.297"></a>
<span class="sourceLineNo">298</span>                    List&lt;String&gt; repos = map.get( groupId );<a name="line.298"></a>
<span class="sourceLineNo">299</span>                    if ( repos == null )<a name="line.299"></a>
<span class="sourceLineNo">300</span>                    {<a name="line.300"></a>
<span class="sourceLineNo">301</span>                        repos = new ArrayList&lt;&gt;();<a name="line.301"></a>
<span class="sourceLineNo">302</span>                        map.put( groupId, repos );<a name="line.302"></a>
<span class="sourceLineNo">303</span>                    }<a name="line.303"></a>
<span class="sourceLineNo">304</span>                    repos.add( repo.getId() );<a name="line.304"></a>
<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
<span class="sourceLineNo">306</span>            }<a name="line.306"></a>
<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
<span class="sourceLineNo">308</span>        return map;<a name="line.308"></a>
<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>    @Override<a name="line.311"></a>
<span class="sourceLineNo">312</span>    public Map&lt;String, List&lt;String&gt;&gt; getRepositoryToGroupMap()<a name="line.312"></a>
<span class="sourceLineNo">313</span>        throws RepositoryAdminException<a name="line.313"></a>
<span class="sourceLineNo">314</span>    {<a name="line.314"></a>
<span class="sourceLineNo">315</span>        Map&lt;String, List&lt;String&gt;&gt; map = new HashMap&lt;&gt;();<a name="line.315"></a>
<span class="sourceLineNo">316</span><a name="line.316"></a>
<span class="sourceLineNo">317</span>        for ( RepositoryGroup group : getRepositoriesGroups() )<a name="line.317"></a>
<span class="sourceLineNo">318</span>        {<a name="line.318"></a>
<span class="sourceLineNo">319</span>            for ( String repositoryId : group.getRepositories() )<a name="line.319"></a>
<span class="sourceLineNo">320</span>            {<a name="line.320"></a>
<span class="sourceLineNo">321</span>                List&lt;String&gt; groups = map.get( repositoryId );<a name="line.321"></a>
<span class="sourceLineNo">322</span>                if ( groups == null )<a name="line.322"></a>
<span class="sourceLineNo">323</span>                {<a name="line.323"></a>
<span class="sourceLineNo">324</span>                    groups = new ArrayList&lt;&gt;();<a name="line.324"></a>
<span class="sourceLineNo">325</span>                    map.put( repositoryId, groups );<a name="line.325"></a>
<span class="sourceLineNo">326</span>                }<a name="line.326"></a>
<span class="sourceLineNo">327</span>                groups.add( group.getId() );<a name="line.327"></a>
<span class="sourceLineNo">328</span>            }<a name="line.328"></a>
<span class="sourceLineNo">329</span>        }<a name="line.329"></a>
<span class="sourceLineNo">330</span>        return map;<a name="line.330"></a>
<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>    public Boolean validateRepositoryGroup( RepositoryGroup repositoryGroup, boolean updateMode )<a name="line.333"></a>
<span class="sourceLineNo">334</span>        throws RepositoryAdminException<a name="line.334"></a>
<span class="sourceLineNo">335</span>    {<a name="line.335"></a>
<span class="sourceLineNo">336</span>        String repoGroupId = repositoryGroup.getId();<a name="line.336"></a>
<span class="sourceLineNo">337</span>        if ( StringUtils.isBlank( repoGroupId ) )<a name="line.337"></a>
<span class="sourceLineNo">338</span>        {<a name="line.338"></a>
<span class="sourceLineNo">339</span>            throw new RepositoryAdminException( "repositoryGroup id cannot be empty" );<a name="line.339"></a>
<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
<span class="sourceLineNo">341</span><a name="line.341"></a>
<span class="sourceLineNo">342</span>        if ( repoGroupId.length() &gt; 100 )<a name="line.342"></a>
<span class="sourceLineNo">343</span>        {<a name="line.343"></a>
<span class="sourceLineNo">344</span>            throw new RepositoryAdminException(<a name="line.344"></a>
<span class="sourceLineNo">345</span>                "Identifier [" + repoGroupId + "] is over the maximum limit of 100 characters" );<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>        Matcher matcher = REPO_GROUP_ID_PATTERN.matcher( repoGroupId );<a name="line.349"></a>
<span class="sourceLineNo">350</span>        if ( !matcher.matches() )<a name="line.350"></a>
<span class="sourceLineNo">351</span>        {<a name="line.351"></a>
<span class="sourceLineNo">352</span>            throw new RepositoryAdminException(<a name="line.352"></a>
<span class="sourceLineNo">353</span>                "Invalid character(s) found in identifier. Only the following characters are allowed: alphanumeric, '.', '-' and '_'" );<a name="line.353"></a>
<span class="sourceLineNo">354</span>        }<a name="line.354"></a>
<span class="sourceLineNo">355</span><a name="line.355"></a>
<span class="sourceLineNo">356</span>        if ( repositoryGroup.getMergedIndexTtl() &lt;= 0 )<a name="line.356"></a>
<span class="sourceLineNo">357</span>        {<a name="line.357"></a>
<span class="sourceLineNo">358</span>            throw new RepositoryAdminException( "Merged Index TTL must be greater than 0." );<a name="line.358"></a>
<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
<span class="sourceLineNo">361</span>        Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>        if ( configuration.getRepositoryGroupsAsMap().containsKey( repoGroupId ) )<a name="line.363"></a>
<span class="sourceLineNo">364</span>        {<a name="line.364"></a>
<span class="sourceLineNo">365</span>            if ( !updateMode )<a name="line.365"></a>
<span class="sourceLineNo">366</span>            {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                throw new RepositoryAdminException( "Unable to add new repository group with id [" + repoGroupId<a name="line.367"></a>
<span class="sourceLineNo">368</span>                                                        + "], that id already exists as a repository group." );<a name="line.368"></a>
<span class="sourceLineNo">369</span>            }<a name="line.369"></a>
<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
<span class="sourceLineNo">371</span>        else if ( configuration.getManagedRepositoriesAsMap().containsKey( repoGroupId ) )<a name="line.371"></a>
<span class="sourceLineNo">372</span>        {<a name="line.372"></a>
<span class="sourceLineNo">373</span>            throw new RepositoryAdminException( "Unable to add new repository group with id [" + repoGroupId<a name="line.373"></a>
<span class="sourceLineNo">374</span>                                                    + "], that id already exists as a managed repository." );<a name="line.374"></a>
<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
<span class="sourceLineNo">376</span>        else if ( configuration.getRemoteRepositoriesAsMap().containsKey( repoGroupId ) )<a name="line.376"></a>
<span class="sourceLineNo">377</span>        {<a name="line.377"></a>
<span class="sourceLineNo">378</span>            throw new RepositoryAdminException( "Unable to add new repository group with id [" + repoGroupId<a name="line.378"></a>
<span class="sourceLineNo">379</span>                                                    + "], that id already exists as a remote repository." );<a name="line.379"></a>
<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>        return Boolean.TRUE;<a name="line.382"></a>
<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
<span class="sourceLineNo">384</span><a name="line.384"></a>
<span class="sourceLineNo">385</span>    private void validateManagedRepositoriesExists( List&lt;String&gt; managedRepositoriesIds )<a name="line.385"></a>
<span class="sourceLineNo">386</span>        throws RepositoryAdminException<a name="line.386"></a>
<span class="sourceLineNo">387</span>    {<a name="line.387"></a>
<span class="sourceLineNo">388</span>        for ( String id : managedRepositoriesIds )<a name="line.388"></a>
<span class="sourceLineNo">389</span>        {<a name="line.389"></a>
<span class="sourceLineNo">390</span>            if ( getManagedRepositoryAdmin().getManagedRepository( id ) == null )<a name="line.390"></a>
<span class="sourceLineNo">391</span>            {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                throw new RepositoryAdminException(<a name="line.392"></a>
<span class="sourceLineNo">393</span>                    "managedRepository with id " + id + " not exists so cannot be used in a repositoryGroup" );<a name="line.393"></a>
<span class="sourceLineNo">394</span>            }<a name="line.394"></a>
<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
<span class="sourceLineNo">397</span><a name="line.397"></a>
<span class="sourceLineNo">398</span>    public ManagedRepositoryAdmin getManagedRepositoryAdmin()<a name="line.398"></a>
<span class="sourceLineNo">399</span>    {<a name="line.399"></a>
<span class="sourceLineNo">400</span>        return managedRepositoryAdmin;<a name="line.400"></a>
<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>    public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )<a name="line.403"></a>
<span class="sourceLineNo">404</span>    {<a name="line.404"></a>
<span class="sourceLineNo">405</span>        this.managedRepositoryAdmin = managedRepositoryAdmin;<a name="line.405"></a>
<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
<span class="sourceLineNo">407</span>}<a name="line.407"></a>




























































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