<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.web.api;<a name="line.1"></a>
<FONT color="green">002</FONT>    /*<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<FONT color="green">004</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<FONT color="green">005</FONT>     * distributed with this work for additional information<a name="line.5"></a>
<FONT color="green">006</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<FONT color="green">007</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<FONT color="green">008</FONT>     * "License"); you may not use this file except in compliance<a name="line.8"></a>
<FONT color="green">009</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<FONT color="green">012</FONT>     *<a name="line.12"></a>
<FONT color="green">013</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<FONT color="green">014</FONT>     * software distributed under the License is distributed on an<a name="line.14"></a>
<FONT color="green">015</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<FONT color="green">016</FONT>     * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<FONT color="green">017</FONT>     * specific language governing permissions and limitations<a name="line.17"></a>
<FONT color="green">018</FONT>     * under the License.<a name="line.18"></a>
<FONT color="green">019</FONT>     */<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import com.google.common.base.Predicate;<a name="line.21"></a>
<FONT color="green">022</FONT>    import com.google.common.collect.Iterables;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.archiva.admin.model.RepositoryAdminException;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.archiva.admin.model.admin.ArchivaAdministration;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.archiva.admin.model.beans.ManagedRepository;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.audit.AuditEvent;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.archiva.checksum.ChecksumAlgorithm;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.archiva.checksum.ChecksummedFile;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.archiva.common.utils.VersionComparator;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.archiva.common.utils.VersionUtil;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.archiva.maven2.metadata.MavenMetadataReader;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.archiva.model.ArchivaRepositoryMetadata;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.archiva.model.ArtifactReference;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.archiva.model.SnapshotVersion;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.archiva.redback.components.taskqueue.TaskQueueException;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.archiva.repository.ManagedRepositoryContent;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.archiva.repository.RepositoryContentFactory;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.archiva.repository.RepositoryException;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.archiva.repository.RepositoryNotFoundException;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.archiva.repository.metadata.MetadataTools;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataException;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.archiva.rest.api.services.ArchivaRestServiceException;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.archiva.rest.services.AbstractRestService;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.archiva.scheduler.ArchivaTaskScheduler;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.archiva.scheduler.repository.model.RepositoryTask;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.archiva.web.model.FileMetadata;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.archiva.xml.XMLException;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.commons.io.FilenameUtils;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.apache.commons.io.IOUtils;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.apache.commons.lang.BooleanUtils;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.apache.commons.lang.SystemUtils;<a name="line.54"></a>
<FONT color="green">055</FONT>    import org.apache.cxf.jaxrs.ext.multipart.Attachment;<a name="line.55"></a>
<FONT color="green">056</FONT>    import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;<a name="line.56"></a>
<FONT color="green">057</FONT>    import org.apache.maven.model.Model;<a name="line.57"></a>
<FONT color="green">058</FONT>    import org.apache.maven.model.io.xpp3.MavenXpp3Writer;<a name="line.58"></a>
<FONT color="green">059</FONT>    import org.slf4j.Logger;<a name="line.59"></a>
<FONT color="green">060</FONT>    import org.slf4j.LoggerFactory;<a name="line.60"></a>
<FONT color="green">061</FONT>    import org.springframework.stereotype.Service;<a name="line.61"></a>
<FONT color="green">062</FONT>    <a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>    import javax.inject.Inject;<a name="line.64"></a>
<FONT color="green">065</FONT>    import javax.inject.Named;<a name="line.65"></a>
<FONT color="green">066</FONT>    import javax.servlet.http.HttpServletRequest;<a name="line.66"></a>
<FONT color="green">067</FONT>    import javax.ws.rs.core.Context;<a name="line.67"></a>
<FONT color="green">068</FONT>    import javax.ws.rs.core.Response;<a name="line.68"></a>
<FONT color="green">069</FONT>    import java.io.File;<a name="line.69"></a>
<FONT color="green">070</FONT>    import java.io.FileInputStream;<a name="line.70"></a>
<FONT color="green">071</FONT>    import java.io.FileOutputStream;<a name="line.71"></a>
<FONT color="green">072</FONT>    import java.io.FileWriter;<a name="line.72"></a>
<FONT color="green">073</FONT>    import java.io.IOException;<a name="line.73"></a>
<FONT color="green">074</FONT>    import java.text.DateFormat;<a name="line.74"></a>
<FONT color="green">075</FONT>    import java.text.SimpleDateFormat;<a name="line.75"></a>
<FONT color="green">076</FONT>    import java.util.ArrayList;<a name="line.76"></a>
<FONT color="green">077</FONT>    import java.util.Calendar;<a name="line.77"></a>
<FONT color="green">078</FONT>    import java.util.Collections;<a name="line.78"></a>
<FONT color="green">079</FONT>    import java.util.Date;<a name="line.79"></a>
<FONT color="green">080</FONT>    import java.util.Iterator;<a name="line.80"></a>
<FONT color="green">081</FONT>    import java.util.List;<a name="line.81"></a>
<FONT color="green">082</FONT>    import java.util.TimeZone;<a name="line.82"></a>
<FONT color="green">083</FONT>    import java.util.concurrent.CopyOnWriteArrayList;<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>    /**<a name="line.85"></a>
<FONT color="green">086</FONT>     * @author Olivier Lamy<a name="line.86"></a>
<FONT color="green">087</FONT>     */<a name="line.87"></a>
<FONT color="green">088</FONT>    @Service( "fileUploadService#rest" )<a name="line.88"></a>
<FONT color="green">089</FONT>    public class DefaultFileUploadService<a name="line.89"></a>
<FONT color="green">090</FONT>        extends AbstractRestService<a name="line.90"></a>
<FONT color="green">091</FONT>        implements FileUploadService<a name="line.91"></a>
<FONT color="green">092</FONT>    {<a name="line.92"></a>
<FONT color="green">093</FONT>        private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.93"></a>
<FONT color="green">094</FONT>    <a name="line.94"></a>
<FONT color="green">095</FONT>        @Context<a name="line.95"></a>
<FONT color="green">096</FONT>        private HttpServletRequest httpServletRequest;<a name="line.96"></a>
<FONT color="green">097</FONT>    <a name="line.97"></a>
<FONT color="green">098</FONT>        @Inject<a name="line.98"></a>
<FONT color="green">099</FONT>        private ManagedRepositoryAdmin managedRepositoryAdmin;<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>        @Inject<a name="line.101"></a>
<FONT color="green">102</FONT>        private RepositoryContentFactory repositoryFactory;<a name="line.102"></a>
<FONT color="green">103</FONT>    <a name="line.103"></a>
<FONT color="green">104</FONT>        @Inject<a name="line.104"></a>
<FONT color="green">105</FONT>        private ArchivaAdministration archivaAdministration;<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>        private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };<a name="line.107"></a>
<FONT color="green">108</FONT>    <a name="line.108"></a>
<FONT color="green">109</FONT>        @Inject<a name="line.109"></a>
<FONT color="green">110</FONT>        @Named( value = "archivaTaskScheduler#repository" )<a name="line.110"></a>
<FONT color="green">111</FONT>        private ArchivaTaskScheduler scheduler;<a name="line.111"></a>
<FONT color="green">112</FONT>    <a name="line.112"></a>
<FONT color="green">113</FONT>        private String getStringValue( MultipartBody multipartBody, String attachmentId )<a name="line.113"></a>
<FONT color="green">114</FONT>            throws IOException<a name="line.114"></a>
<FONT color="green">115</FONT>        {<a name="line.115"></a>
<FONT color="green">116</FONT>            Attachment attachment = multipartBody.getAttachment( attachmentId );<a name="line.116"></a>
<FONT color="green">117</FONT>            return attachment == null ? "" : IOUtils.toString( attachment.getDataHandler().getInputStream() );<a name="line.117"></a>
<FONT color="green">118</FONT>        }<a name="line.118"></a>
<FONT color="green">119</FONT>    <a name="line.119"></a>
<FONT color="green">120</FONT>        public FileMetadata post( MultipartBody multipartBody )<a name="line.120"></a>
<FONT color="green">121</FONT>            throws ArchivaRestServiceException<a name="line.121"></a>
<FONT color="green">122</FONT>        {<a name="line.122"></a>
<FONT color="green">123</FONT>    <a name="line.123"></a>
<FONT color="green">124</FONT>            try<a name="line.124"></a>
<FONT color="green">125</FONT>            {<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>                String classifier = getStringValue( multipartBody, "classifier" );<a name="line.127"></a>
<FONT color="green">128</FONT>                // skygo: http header form pomFile was once sending 1 for true and void for false<a name="line.128"></a>
<FONT color="green">129</FONT>                // leading to permanent false value for pomFile if using toBoolean(); use , "1", ""<a name="line.129"></a>
<FONT color="green">130</FONT>                boolean pomFile = BooleanUtils.toBoolean( getStringValue( multipartBody, "pomFile" ) );<a name="line.130"></a>
<FONT color="green">131</FONT>                <a name="line.131"></a>
<FONT color="green">132</FONT>                Attachment file = multipartBody.getAttachment( "files[]" );<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>                //Content-Disposition: form-data; name="files[]"; filename="org.apache.karaf.features.command-2.2.2.jar"<a name="line.134"></a>
<FONT color="green">135</FONT>                String fileName = file.getContentDisposition().getParameter( "filename" );<a name="line.135"></a>
<FONT color="green">136</FONT>    <a name="line.136"></a>
<FONT color="green">137</FONT>                File tmpFile = File.createTempFile( "upload-artifact", "tmp" );<a name="line.137"></a>
<FONT color="green">138</FONT>                tmpFile.deleteOnExit();<a name="line.138"></a>
<FONT color="green">139</FONT>                IOUtils.copy( file.getDataHandler().getInputStream(), new FileOutputStream( tmpFile ) );<a name="line.139"></a>
<FONT color="green">140</FONT>                FileMetadata fileMetadata = new FileMetadata( fileName, tmpFile.length(), "theurl" );<a name="line.140"></a>
<FONT color="green">141</FONT>                fileMetadata.setServerFileName( tmpFile.getPath() );<a name="line.141"></a>
<FONT color="green">142</FONT>                fileMetadata.setClassifier( classifier );<a name="line.142"></a>
<FONT color="green">143</FONT>                fileMetadata.setDeleteUrl( tmpFile.getName() );<a name="line.143"></a>
<FONT color="green">144</FONT>                fileMetadata.setPomFile( pomFile );<a name="line.144"></a>
<FONT color="green">145</FONT>    <a name="line.145"></a>
<FONT color="green">146</FONT>                log.info( "uploading file: {}", fileMetadata );<a name="line.146"></a>
<FONT color="green">147</FONT>    <a name="line.147"></a>
<FONT color="green">148</FONT>                List&lt;FileMetadata&gt; fileMetadatas = getSessionFilesList();<a name="line.148"></a>
<FONT color="green">149</FONT>    <a name="line.149"></a>
<FONT color="green">150</FONT>                fileMetadatas.add( fileMetadata );<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>                return fileMetadata;<a name="line.152"></a>
<FONT color="green">153</FONT>            }<a name="line.153"></a>
<FONT color="green">154</FONT>            catch ( IOException e )<a name="line.154"></a>
<FONT color="green">155</FONT>            {<a name="line.155"></a>
<FONT color="green">156</FONT>                throw new ArchivaRestServiceException( e.getMessage(),<a name="line.156"></a>
<FONT color="green">157</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );<a name="line.157"></a>
<FONT color="green">158</FONT>            }<a name="line.158"></a>
<FONT color="green">159</FONT>    <a name="line.159"></a>
<FONT color="green">160</FONT>        }<a name="line.160"></a>
<FONT color="green">161</FONT>    <a name="line.161"></a>
<FONT color="green">162</FONT>        /**<a name="line.162"></a>
<FONT color="green">163</FONT>         * FIXME must be per session synchronized not globally<a name="line.163"></a>
<FONT color="green">164</FONT>         *<a name="line.164"></a>
<FONT color="green">165</FONT>         * @return<a name="line.165"></a>
<FONT color="green">166</FONT>         */<a name="line.166"></a>
<FONT color="green">167</FONT>        protected synchronized List&lt;FileMetadata&gt; getSessionFilesList()<a name="line.167"></a>
<FONT color="green">168</FONT>        {<a name="line.168"></a>
<FONT color="green">169</FONT>            List&lt;FileMetadata&gt; fileMetadatas =<a name="line.169"></a>
<FONT color="green">170</FONT>                (List&lt;FileMetadata&gt;) httpServletRequest.getSession().getAttribute( FILES_SESSION_KEY );<a name="line.170"></a>
<FONT color="green">171</FONT>            if ( fileMetadatas == null )<a name="line.171"></a>
<FONT color="green">172</FONT>            {<a name="line.172"></a>
<FONT color="green">173</FONT>                fileMetadatas = new CopyOnWriteArrayList&lt;FileMetadata&gt;();<a name="line.173"></a>
<FONT color="green">174</FONT>                httpServletRequest.getSession().setAttribute( FILES_SESSION_KEY, fileMetadatas );<a name="line.174"></a>
<FONT color="green">175</FONT>            }<a name="line.175"></a>
<FONT color="green">176</FONT>            return fileMetadatas;<a name="line.176"></a>
<FONT color="green">177</FONT>        }<a name="line.177"></a>
<FONT color="green">178</FONT>    <a name="line.178"></a>
<FONT color="green">179</FONT>        public Boolean deleteFile( String fileName )<a name="line.179"></a>
<FONT color="green">180</FONT>            throws ArchivaRestServiceException<a name="line.180"></a>
<FONT color="green">181</FONT>        {<a name="line.181"></a>
<FONT color="green">182</FONT>            File file = new File( SystemUtils.getJavaIoTmpDir(), fileName );<a name="line.182"></a>
<FONT color="green">183</FONT>            log.debug( "delete file:{},exists:{}", file.getPath(), file.exists() );<a name="line.183"></a>
<FONT color="green">184</FONT>            boolean removed = getSessionFileMetadatas().remove(<a name="line.184"></a>
<FONT color="green">185</FONT>                new FileMetadata( SystemUtils.getJavaIoTmpDir().getPath() + "/" + fileName ) );<a name="line.185"></a>
<FONT color="green">186</FONT>            if ( file.exists() )<a name="line.186"></a>
<FONT color="green">187</FONT>            {<a name="line.187"></a>
<FONT color="green">188</FONT>                return file.delete();<a name="line.188"></a>
<FONT color="green">189</FONT>            }<a name="line.189"></a>
<FONT color="green">190</FONT>            return Boolean.FALSE;<a name="line.190"></a>
<FONT color="green">191</FONT>        }<a name="line.191"></a>
<FONT color="green">192</FONT>    <a name="line.192"></a>
<FONT color="green">193</FONT>        public Boolean clearUploadedFiles()<a name="line.193"></a>
<FONT color="green">194</FONT>            throws ArchivaRestServiceException<a name="line.194"></a>
<FONT color="green">195</FONT>        {<a name="line.195"></a>
<FONT color="green">196</FONT>            List&lt;FileMetadata&gt; fileMetadatas = new ArrayList( getSessionFileMetadatas() );<a name="line.196"></a>
<FONT color="green">197</FONT>            for ( FileMetadata fileMetadata : fileMetadatas )<a name="line.197"></a>
<FONT color="green">198</FONT>            {<a name="line.198"></a>
<FONT color="green">199</FONT>                deleteFile( new File( fileMetadata.getServerFileName() ).getName() );<a name="line.199"></a>
<FONT color="green">200</FONT>            }<a name="line.200"></a>
<FONT color="green">201</FONT>            return Boolean.TRUE;<a name="line.201"></a>
<FONT color="green">202</FONT>        }<a name="line.202"></a>
<FONT color="green">203</FONT>    <a name="line.203"></a>
<FONT color="green">204</FONT>        public List&lt;FileMetadata&gt; getSessionFileMetadatas()<a name="line.204"></a>
<FONT color="green">205</FONT>            throws ArchivaRestServiceException<a name="line.205"></a>
<FONT color="green">206</FONT>        {<a name="line.206"></a>
<FONT color="green">207</FONT>            List&lt;FileMetadata&gt; fileMetadatas =<a name="line.207"></a>
<FONT color="green">208</FONT>                (List&lt;FileMetadata&gt;) httpServletRequest.getSession().getAttribute( FILES_SESSION_KEY );<a name="line.208"></a>
<FONT color="green">209</FONT>    <a name="line.209"></a>
<FONT color="green">210</FONT>            return fileMetadatas == null ? Collections.&lt;FileMetadata&gt;emptyList() : fileMetadatas;<a name="line.210"></a>
<FONT color="green">211</FONT>        }<a name="line.211"></a>
<FONT color="green">212</FONT>    <a name="line.212"></a>
<FONT color="green">213</FONT>        public Boolean save( String repositoryId, final String groupId, final String artifactId, String version,<a name="line.213"></a>
<FONT color="green">214</FONT>                             String packaging, final boolean generatePom )<a name="line.214"></a>
<FONT color="green">215</FONT>            throws ArchivaRestServiceException<a name="line.215"></a>
<FONT color="green">216</FONT>        {<a name="line.216"></a>
<FONT color="green">217</FONT>            List&lt;FileMetadata&gt; fileMetadatas = getSessionFilesList();<a name="line.217"></a>
<FONT color="green">218</FONT>            if ( fileMetadatas == null || fileMetadatas.isEmpty() )<a name="line.218"></a>
<FONT color="green">219</FONT>            {<a name="line.219"></a>
<FONT color="green">220</FONT>                return Boolean.FALSE;<a name="line.220"></a>
<FONT color="green">221</FONT>            }<a name="line.221"></a>
<FONT color="green">222</FONT>            // get from the session file with groupId/artifactId<a name="line.222"></a>
<FONT color="green">223</FONT>    <a name="line.223"></a>
<FONT color="green">224</FONT>            Iterable&lt;FileMetadata&gt; filesToAdd = Iterables.filter( fileMetadatas, new Predicate&lt;FileMetadata&gt;()<a name="line.224"></a>
<FONT color="green">225</FONT>            {<a name="line.225"></a>
<FONT color="green">226</FONT>                public boolean apply( FileMetadata fileMetadata )<a name="line.226"></a>
<FONT color="green">227</FONT>                {<a name="line.227"></a>
<FONT color="green">228</FONT>                    return fileMetadata != null &amp;&amp; !fileMetadata.isPomFile();<a name="line.228"></a>
<FONT color="green">229</FONT>                }<a name="line.229"></a>
<FONT color="green">230</FONT>            } );<a name="line.230"></a>
<FONT color="green">231</FONT>            Iterator&lt;FileMetadata&gt; iterator = filesToAdd.iterator();<a name="line.231"></a>
<FONT color="green">232</FONT>            boolean pomGenerated = false;<a name="line.232"></a>
<FONT color="green">233</FONT>            while ( iterator.hasNext() )<a name="line.233"></a>
<FONT color="green">234</FONT>            {<a name="line.234"></a>
<FONT color="green">235</FONT>                FileMetadata fileMetadata = iterator.next();<a name="line.235"></a>
<FONT color="green">236</FONT>                log.debug( "fileToAdd: {}", fileMetadata );<a name="line.236"></a>
<FONT color="green">237</FONT>                saveFile( repositoryId, fileMetadata, generatePom &amp;&amp; !pomGenerated, groupId, artifactId, version,<a name="line.237"></a>
<FONT color="green">238</FONT>                          packaging );<a name="line.238"></a>
<FONT color="green">239</FONT>                pomGenerated = true;<a name="line.239"></a>
<FONT color="green">240</FONT>                deleteFile( fileMetadata.getServerFileName() );<a name="line.240"></a>
<FONT color="green">241</FONT>            }<a name="line.241"></a>
<FONT color="green">242</FONT>    <a name="line.242"></a>
<FONT color="green">243</FONT>            filesToAdd = Iterables.filter( fileMetadatas, new Predicate&lt;FileMetadata&gt;()<a name="line.243"></a>
<FONT color="green">244</FONT>            {<a name="line.244"></a>
<FONT color="green">245</FONT>                public boolean apply( FileMetadata fileMetadata )<a name="line.245"></a>
<FONT color="green">246</FONT>                {<a name="line.246"></a>
<FONT color="green">247</FONT>                    return fileMetadata != null &amp;&amp; fileMetadata.isPomFile();<a name="line.247"></a>
<FONT color="green">248</FONT>                }<a name="line.248"></a>
<FONT color="green">249</FONT>            } );<a name="line.249"></a>
<FONT color="green">250</FONT>    <a name="line.250"></a>
<FONT color="green">251</FONT>            iterator = filesToAdd.iterator();<a name="line.251"></a>
<FONT color="green">252</FONT>            while ( iterator.hasNext() )<a name="line.252"></a>
<FONT color="green">253</FONT>            {<a name="line.253"></a>
<FONT color="green">254</FONT>                FileMetadata fileMetadata = iterator.next();<a name="line.254"></a>
<FONT color="green">255</FONT>                log.debug( "fileToAdd: {}", fileMetadata );<a name="line.255"></a>
<FONT color="green">256</FONT>                savePomFile( repositoryId, fileMetadata, groupId, artifactId, version, packaging );<a name="line.256"></a>
<FONT color="green">257</FONT>                deleteFile( fileMetadata.getServerFileName() );<a name="line.257"></a>
<FONT color="green">258</FONT>            }<a name="line.258"></a>
<FONT color="green">259</FONT>    <a name="line.259"></a>
<FONT color="green">260</FONT>            return Boolean.TRUE;<a name="line.260"></a>
<FONT color="green">261</FONT>        }<a name="line.261"></a>
<FONT color="green">262</FONT>    <a name="line.262"></a>
<FONT color="green">263</FONT>        protected void savePomFile( String repositoryId, FileMetadata fileMetadata, String groupId, String artifactId,<a name="line.263"></a>
<FONT color="green">264</FONT>                                    String version, String packaging )<a name="line.264"></a>
<FONT color="green">265</FONT>            throws ArchivaRestServiceException<a name="line.265"></a>
<FONT color="green">266</FONT>        {<a name="line.266"></a>
<FONT color="green">267</FONT>    <a name="line.267"></a>
<FONT color="green">268</FONT>            try<a name="line.268"></a>
<FONT color="green">269</FONT>            {<a name="line.269"></a>
<FONT color="green">270</FONT>                boolean fixChecksums =<a name="line.270"></a>
<FONT color="green">271</FONT>                    !( archivaAdministration.getKnownContentConsumers().contains( "create-missing-checksums" ) );<a name="line.271"></a>
<FONT color="green">272</FONT>    <a name="line.272"></a>
<FONT color="green">273</FONT>                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repositoryId );<a name="line.273"></a>
<FONT color="green">274</FONT>    <a name="line.274"></a>
<FONT color="green">275</FONT>                ArtifactReference artifactReference = new ArtifactReference();<a name="line.275"></a>
<FONT color="green">276</FONT>                artifactReference.setArtifactId( artifactId );<a name="line.276"></a>
<FONT color="green">277</FONT>                artifactReference.setGroupId( groupId );<a name="line.277"></a>
<FONT color="green">278</FONT>                artifactReference.setVersion( version );<a name="line.278"></a>
<FONT color="green">279</FONT>                artifactReference.setClassifier( fileMetadata.getClassifier() );<a name="line.279"></a>
<FONT color="green">280</FONT>                artifactReference.setType( packaging );<a name="line.280"></a>
<FONT color="green">281</FONT>    <a name="line.281"></a>
<FONT color="green">282</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.282"></a>
<FONT color="green">283</FONT>    <a name="line.283"></a>
<FONT color="green">284</FONT>                String artifactPath = repository.toPath( artifactReference );<a name="line.284"></a>
<FONT color="green">285</FONT>    <a name="line.285"></a>
<FONT color="green">286</FONT>                int lastIndex = artifactPath.lastIndexOf( '/' );<a name="line.286"></a>
<FONT color="green">287</FONT>    <a name="line.287"></a>
<FONT color="green">288</FONT>                String path = artifactPath.substring( 0, lastIndex );<a name="line.288"></a>
<FONT color="green">289</FONT>                File targetPath = new File( repoConfig.getLocation(), path );<a name="line.289"></a>
<FONT color="green">290</FONT>    <a name="line.290"></a>
<FONT color="green">291</FONT>                String pomFilename = artifactPath.substring( lastIndex + 1 );<a name="line.291"></a>
<FONT color="green">292</FONT>                if ( StringUtils.isNotEmpty( fileMetadata.getClassifier() ) )<a name="line.292"></a>
<FONT color="green">293</FONT>                {<a name="line.293"></a>
<FONT color="green">294</FONT>                    pomFilename = StringUtils.remove( pomFilename, "-" + fileMetadata.getClassifier() );<a name="line.294"></a>
<FONT color="green">295</FONT>                }<a name="line.295"></a>
<FONT color="green">296</FONT>                pomFilename = FilenameUtils.removeExtension( pomFilename ) + ".pom";<a name="line.296"></a>
<FONT color="green">297</FONT>    <a name="line.297"></a>
<FONT color="green">298</FONT>                copyFile( new File( fileMetadata.getServerFileName() ), targetPath, pomFilename, fixChecksums );<a name="line.298"></a>
<FONT color="green">299</FONT>                triggerAuditEvent( repoConfig.getId(), path + "/" + pomFilename, AuditEvent.UPLOAD_FILE );<a name="line.299"></a>
<FONT color="green">300</FONT>                queueRepositoryTask( repoConfig.getId(), new File( targetPath, pomFilename ) );<a name="line.300"></a>
<FONT color="green">301</FONT>            }<a name="line.301"></a>
<FONT color="green">302</FONT>            catch ( IOException ie )<a name="line.302"></a>
<FONT color="green">303</FONT>            {<a name="line.303"></a>
<FONT color="green">304</FONT>                throw new ArchivaRestServiceException( "Error encountered while uploading pom file: " + ie.getMessage(),<a name="line.304"></a>
<FONT color="green">305</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), ie );<a name="line.305"></a>
<FONT color="green">306</FONT>            }<a name="line.306"></a>
<FONT color="green">307</FONT>            catch ( RepositoryException rep )<a name="line.307"></a>
<FONT color="green">308</FONT>            {<a name="line.308"></a>
<FONT color="green">309</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + rep.getMessage(),<a name="line.309"></a>
<FONT color="green">310</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rep );<a name="line.310"></a>
<FONT color="green">311</FONT>            }<a name="line.311"></a>
<FONT color="green">312</FONT>            catch ( RepositoryAdminException e )<a name="line.312"></a>
<FONT color="green">313</FONT>            {<a name="line.313"></a>
<FONT color="green">314</FONT>                throw new ArchivaRestServiceException( "RepositoryAdmin exception: " + e.getMessage(),<a name="line.314"></a>
<FONT color="green">315</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );<a name="line.315"></a>
<FONT color="green">316</FONT>            }<a name="line.316"></a>
<FONT color="green">317</FONT>        }<a name="line.317"></a>
<FONT color="green">318</FONT>    <a name="line.318"></a>
<FONT color="green">319</FONT>        protected void saveFile( String repositoryId, FileMetadata fileMetadata, boolean generatePom, String groupId,<a name="line.319"></a>
<FONT color="green">320</FONT>                                 String artifactId, String version, String packaging )<a name="line.320"></a>
<FONT color="green">321</FONT>            throws ArchivaRestServiceException<a name="line.321"></a>
<FONT color="green">322</FONT>        {<a name="line.322"></a>
<FONT color="green">323</FONT>            try<a name="line.323"></a>
<FONT color="green">324</FONT>            {<a name="line.324"></a>
<FONT color="green">325</FONT>    <a name="line.325"></a>
<FONT color="green">326</FONT>                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repositoryId );<a name="line.326"></a>
<FONT color="green">327</FONT>    <a name="line.327"></a>
<FONT color="green">328</FONT>                ArtifactReference artifactReference = new ArtifactReference();<a name="line.328"></a>
<FONT color="green">329</FONT>                artifactReference.setArtifactId( artifactId );<a name="line.329"></a>
<FONT color="green">330</FONT>                artifactReference.setGroupId( groupId );<a name="line.330"></a>
<FONT color="green">331</FONT>                artifactReference.setVersion( version );<a name="line.331"></a>
<FONT color="green">332</FONT>                artifactReference.setClassifier( fileMetadata.getClassifier() );<a name="line.332"></a>
<FONT color="green">333</FONT>                artifactReference.setType( packaging );<a name="line.333"></a>
<FONT color="green">334</FONT>    <a name="line.334"></a>
<FONT color="green">335</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.335"></a>
<FONT color="green">336</FONT>    <a name="line.336"></a>
<FONT color="green">337</FONT>                String artifactPath = repository.toPath( artifactReference );<a name="line.337"></a>
<FONT color="green">338</FONT>    <a name="line.338"></a>
<FONT color="green">339</FONT>                int lastIndex = artifactPath.lastIndexOf( '/' );<a name="line.339"></a>
<FONT color="green">340</FONT>    <a name="line.340"></a>
<FONT color="green">341</FONT>                String path = artifactPath.substring( 0, lastIndex );<a name="line.341"></a>
<FONT color="green">342</FONT>                File targetPath = new File( repoConfig.getLocation(), path );<a name="line.342"></a>
<FONT color="green">343</FONT>    <a name="line.343"></a>
<FONT color="green">344</FONT>                log.debug( "artifactPath: {} found targetPath: {}", artifactPath, targetPath );<a name="line.344"></a>
<FONT color="green">345</FONT>    <a name="line.345"></a>
<FONT color="green">346</FONT>                Date lastUpdatedTimestamp = Calendar.getInstance().getTime();<a name="line.346"></a>
<FONT color="green">347</FONT>                int newBuildNumber = -1;<a name="line.347"></a>
<FONT color="green">348</FONT>                String timestamp = null;<a name="line.348"></a>
<FONT color="green">349</FONT>    <a name="line.349"></a>
<FONT color="green">350</FONT>                File versionMetadataFile = new File( targetPath, MetadataTools.MAVEN_METADATA );<a name="line.350"></a>
<FONT color="green">351</FONT>                ArchivaRepositoryMetadata versionMetadata = getMetadata( versionMetadataFile );<a name="line.351"></a>
<FONT color="green">352</FONT>    <a name="line.352"></a>
<FONT color="green">353</FONT>                if ( VersionUtil.isSnapshot( version ) )<a name="line.353"></a>
<FONT color="green">354</FONT>                {<a name="line.354"></a>
<FONT color="green">355</FONT>                    TimeZone timezone = TimeZone.getTimeZone( "UTC" );<a name="line.355"></a>
<FONT color="green">356</FONT>                    DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );<a name="line.356"></a>
<FONT color="green">357</FONT>                    fmt.setTimeZone( timezone );<a name="line.357"></a>
<FONT color="green">358</FONT>                    timestamp = fmt.format( lastUpdatedTimestamp );<a name="line.358"></a>
<FONT color="green">359</FONT>                    if ( versionMetadata.getSnapshotVersion() != null )<a name="line.359"></a>
<FONT color="green">360</FONT>                    {<a name="line.360"></a>
<FONT color="green">361</FONT>                        newBuildNumber = versionMetadata.getSnapshotVersion().getBuildNumber() + 1;<a name="line.361"></a>
<FONT color="green">362</FONT>                    }<a name="line.362"></a>
<FONT color="green">363</FONT>                    else<a name="line.363"></a>
<FONT color="green">364</FONT>                    {<a name="line.364"></a>
<FONT color="green">365</FONT>                        newBuildNumber = 1;<a name="line.365"></a>
<FONT color="green">366</FONT>                    }<a name="line.366"></a>
<FONT color="green">367</FONT>                }<a name="line.367"></a>
<FONT color="green">368</FONT>    <a name="line.368"></a>
<FONT color="green">369</FONT>                if ( !targetPath.exists() )<a name="line.369"></a>
<FONT color="green">370</FONT>                {<a name="line.370"></a>
<FONT color="green">371</FONT>                    targetPath.mkdirs();<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>                String filename = artifactPath.substring( lastIndex + 1 );<a name="line.374"></a>
<FONT color="green">375</FONT>                if ( VersionUtil.isSnapshot( version ) )<a name="line.375"></a>
<FONT color="green">376</FONT>                {<a name="line.376"></a>
<FONT color="green">377</FONT>                    filename = filename.replaceAll( VersionUtil.SNAPSHOT, timestamp + "-" + newBuildNumber );<a name="line.377"></a>
<FONT color="green">378</FONT>                }<a name="line.378"></a>
<FONT color="green">379</FONT>    <a name="line.379"></a>
<FONT color="green">380</FONT>                boolean fixChecksums =<a name="line.380"></a>
<FONT color="green">381</FONT>                    !( archivaAdministration.getKnownContentConsumers().contains( "create-missing-checksums" ) );<a name="line.381"></a>
<FONT color="green">382</FONT>    <a name="line.382"></a>
<FONT color="green">383</FONT>                try<a name="line.383"></a>
<FONT color="green">384</FONT>                {<a name="line.384"></a>
<FONT color="green">385</FONT>                    File targetFile = new File( targetPath, filename );<a name="line.385"></a>
<FONT color="green">386</FONT>                    if ( targetFile.exists() &amp;&amp; !VersionUtil.isSnapshot( version ) &amp;&amp; repoConfig.isBlockRedeployments() )<a name="line.386"></a>
<FONT color="green">387</FONT>                    {<a name="line.387"></a>
<FONT color="green">388</FONT>                        throw new ArchivaRestServiceException(<a name="line.388"></a>
<FONT color="green">389</FONT>                            "Overwriting released artifacts in repository '" + repoConfig.getId() + "' is not allowed.",<a name="line.389"></a>
<FONT color="green">390</FONT>                            Response.Status.BAD_REQUEST.getStatusCode(), null );<a name="line.390"></a>
<FONT color="green">391</FONT>                    }<a name="line.391"></a>
<FONT color="green">392</FONT>                    else<a name="line.392"></a>
<FONT color="green">393</FONT>                    {<a name="line.393"></a>
<FONT color="green">394</FONT>                        copyFile( new File( fileMetadata.getServerFileName() ), targetPath, filename, fixChecksums );<a name="line.394"></a>
<FONT color="green">395</FONT>                        triggerAuditEvent( repository.getId(), path + "/" + filename, AuditEvent.UPLOAD_FILE );<a name="line.395"></a>
<FONT color="green">396</FONT>                        queueRepositoryTask( repository.getId(), targetFile );<a name="line.396"></a>
<FONT color="green">397</FONT>                    }<a name="line.397"></a>
<FONT color="green">398</FONT>                }<a name="line.398"></a>
<FONT color="green">399</FONT>                catch ( IOException ie )<a name="line.399"></a>
<FONT color="green">400</FONT>                {<a name="line.400"></a>
<FONT color="green">401</FONT>                    throw new ArchivaRestServiceException(<a name="line.401"></a>
<FONT color="green">402</FONT>                        "Overwriting released artifacts in repository '" + repoConfig.getId() + "' is not allowed.",<a name="line.402"></a>
<FONT color="green">403</FONT>                        Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), ie );<a name="line.403"></a>
<FONT color="green">404</FONT>                }<a name="line.404"></a>
<FONT color="green">405</FONT>    <a name="line.405"></a>
<FONT color="green">406</FONT>                if ( generatePom )<a name="line.406"></a>
<FONT color="green">407</FONT>                {<a name="line.407"></a>
<FONT color="green">408</FONT>                    String pomFilename = filename;<a name="line.408"></a>
<FONT color="green">409</FONT>                    if ( StringUtils.isNotEmpty( fileMetadata.getClassifier() ) )<a name="line.409"></a>
<FONT color="green">410</FONT>                    {<a name="line.410"></a>
<FONT color="green">411</FONT>                        pomFilename = StringUtils.remove( pomFilename, "-" + fileMetadata.getClassifier() );<a name="line.411"></a>
<FONT color="green">412</FONT>                    }<a name="line.412"></a>
<FONT color="green">413</FONT>                    pomFilename = FilenameUtils.removeExtension( pomFilename ) + ".pom";<a name="line.413"></a>
<FONT color="green">414</FONT>    <a name="line.414"></a>
<FONT color="green">415</FONT>                    try<a name="line.415"></a>
<FONT color="green">416</FONT>                    {<a name="line.416"></a>
<FONT color="green">417</FONT>                        File generatedPomFile =<a name="line.417"></a>
<FONT color="green">418</FONT>                            createPom( targetPath, pomFilename, fileMetadata, groupId, artifactId, version, packaging );<a name="line.418"></a>
<FONT color="green">419</FONT>                        triggerAuditEvent( repoConfig.getId(), path + "/" + pomFilename, AuditEvent.UPLOAD_FILE );<a name="line.419"></a>
<FONT color="green">420</FONT>                        if ( fixChecksums )<a name="line.420"></a>
<FONT color="green">421</FONT>                        {<a name="line.421"></a>
<FONT color="green">422</FONT>                            fixChecksums( generatedPomFile );<a name="line.422"></a>
<FONT color="green">423</FONT>                        }<a name="line.423"></a>
<FONT color="green">424</FONT>                        queueRepositoryTask( repoConfig.getId(), generatedPomFile );<a name="line.424"></a>
<FONT color="green">425</FONT>                    }<a name="line.425"></a>
<FONT color="green">426</FONT>                    catch ( IOException ie )<a name="line.426"></a>
<FONT color="green">427</FONT>                    {<a name="line.427"></a>
<FONT color="green">428</FONT>                        throw new ArchivaRestServiceException(<a name="line.428"></a>
<FONT color="green">429</FONT>                            "Error encountered while writing pom file: " + ie.getMessage(),<a name="line.429"></a>
<FONT color="green">430</FONT>                            Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), ie );<a name="line.430"></a>
<FONT color="green">431</FONT>                    }<a name="line.431"></a>
<FONT color="green">432</FONT>                }<a name="line.432"></a>
<FONT color="green">433</FONT>    <a name="line.433"></a>
<FONT color="green">434</FONT>                // explicitly update only if metadata-updater consumer is not enabled!<a name="line.434"></a>
<FONT color="green">435</FONT>                if ( !archivaAdministration.getKnownContentConsumers().contains( "metadata-updater" ) )<a name="line.435"></a>
<FONT color="green">436</FONT>                {<a name="line.436"></a>
<FONT color="green">437</FONT>                    updateProjectMetadata( targetPath.getAbsolutePath(), lastUpdatedTimestamp, timestamp, newBuildNumber,<a name="line.437"></a>
<FONT color="green">438</FONT>                                           fixChecksums, fileMetadata, groupId, artifactId, version, packaging );<a name="line.438"></a>
<FONT color="green">439</FONT>    <a name="line.439"></a>
<FONT color="green">440</FONT>                    if ( VersionUtil.isSnapshot( version ) )<a name="line.440"></a>
<FONT color="green">441</FONT>                    {<a name="line.441"></a>
<FONT color="green">442</FONT>                        updateVersionMetadata( versionMetadata, versionMetadataFile, lastUpdatedTimestamp, timestamp,<a name="line.442"></a>
<FONT color="green">443</FONT>                                               newBuildNumber, fixChecksums, fileMetadata, groupId, artifactId, version,<a name="line.443"></a>
<FONT color="green">444</FONT>                                               packaging );<a name="line.444"></a>
<FONT color="green">445</FONT>                    }<a name="line.445"></a>
<FONT color="green">446</FONT>                }<a name="line.446"></a>
<FONT color="green">447</FONT>            }<a name="line.447"></a>
<FONT color="green">448</FONT>            catch ( RepositoryNotFoundException re )<a name="line.448"></a>
<FONT color="green">449</FONT>            {<a name="line.449"></a>
<FONT color="green">450</FONT>                throw new ArchivaRestServiceException( "Target repository cannot be found: " + re.getMessage(),<a name="line.450"></a>
<FONT color="green">451</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), re );<a name="line.451"></a>
<FONT color="green">452</FONT>            }<a name="line.452"></a>
<FONT color="green">453</FONT>            catch ( RepositoryException rep )<a name="line.453"></a>
<FONT color="green">454</FONT>            {<a name="line.454"></a>
<FONT color="green">455</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + rep.getMessage(),<a name="line.455"></a>
<FONT color="green">456</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), rep );<a name="line.456"></a>
<FONT color="green">457</FONT>            }<a name="line.457"></a>
<FONT color="green">458</FONT>            catch ( RepositoryAdminException e )<a name="line.458"></a>
<FONT color="green">459</FONT>            {<a name="line.459"></a>
<FONT color="green">460</FONT>                throw new ArchivaRestServiceException( "RepositoryAdmin exception: " + e.getMessage(),<a name="line.460"></a>
<FONT color="green">461</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );<a name="line.461"></a>
<FONT color="green">462</FONT>            }<a name="line.462"></a>
<FONT color="green">463</FONT>        }<a name="line.463"></a>
<FONT color="green">464</FONT>    <a name="line.464"></a>
<FONT color="green">465</FONT>        private ArchivaRepositoryMetadata getMetadata( File metadataFile )<a name="line.465"></a>
<FONT color="green">466</FONT>            throws RepositoryMetadataException<a name="line.466"></a>
<FONT color="green">467</FONT>        {<a name="line.467"></a>
<FONT color="green">468</FONT>            ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();<a name="line.468"></a>
<FONT color="green">469</FONT>            if ( metadataFile.exists() )<a name="line.469"></a>
<FONT color="green">470</FONT>            {<a name="line.470"></a>
<FONT color="green">471</FONT>                try<a name="line.471"></a>
<FONT color="green">472</FONT>                {<a name="line.472"></a>
<FONT color="green">473</FONT>                    metadata = MavenMetadataReader.read( metadataFile );<a name="line.473"></a>
<FONT color="green">474</FONT>                }<a name="line.474"></a>
<FONT color="green">475</FONT>                catch ( XMLException e )<a name="line.475"></a>
<FONT color="green">476</FONT>                {<a name="line.476"></a>
<FONT color="green">477</FONT>                    throw new RepositoryMetadataException( e.getMessage(), e );<a name="line.477"></a>
<FONT color="green">478</FONT>                }<a name="line.478"></a>
<FONT color="green">479</FONT>            }<a name="line.479"></a>
<FONT color="green">480</FONT>            return metadata;<a name="line.480"></a>
<FONT color="green">481</FONT>        }<a name="line.481"></a>
<FONT color="green">482</FONT>    <a name="line.482"></a>
<FONT color="green">483</FONT>        private File createPom( File targetPath, String filename, FileMetadata fileMetadata, String groupId,<a name="line.483"></a>
<FONT color="green">484</FONT>                                String artifactId, String version, String packaging )<a name="line.484"></a>
<FONT color="green">485</FONT>            throws IOException<a name="line.485"></a>
<FONT color="green">486</FONT>        {<a name="line.486"></a>
<FONT color="green">487</FONT>            Model projectModel = new Model();<a name="line.487"></a>
<FONT color="green">488</FONT>            projectModel.setModelVersion( "4.0.0" );<a name="line.488"></a>
<FONT color="green">489</FONT>            projectModel.setGroupId( groupId );<a name="line.489"></a>
<FONT color="green">490</FONT>            projectModel.setArtifactId( artifactId );<a name="line.490"></a>
<FONT color="green">491</FONT>            projectModel.setVersion( version );<a name="line.491"></a>
<FONT color="green">492</FONT>            projectModel.setPackaging( packaging );<a name="line.492"></a>
<FONT color="green">493</FONT>    <a name="line.493"></a>
<FONT color="green">494</FONT>            File pomFile = new File( targetPath, filename );<a name="line.494"></a>
<FONT color="green">495</FONT>            MavenXpp3Writer writer = new MavenXpp3Writer();<a name="line.495"></a>
<FONT color="green">496</FONT>            FileWriter w = new FileWriter( pomFile );<a name="line.496"></a>
<FONT color="green">497</FONT>            try<a name="line.497"></a>
<FONT color="green">498</FONT>            {<a name="line.498"></a>
<FONT color="green">499</FONT>                writer.write( w, projectModel );<a name="line.499"></a>
<FONT color="green">500</FONT>            }<a name="line.500"></a>
<FONT color="green">501</FONT>            finally<a name="line.501"></a>
<FONT color="green">502</FONT>            {<a name="line.502"></a>
<FONT color="green">503</FONT>                IOUtils.closeQuietly( w );<a name="line.503"></a>
<FONT color="green">504</FONT>            }<a name="line.504"></a>
<FONT color="green">505</FONT>    <a name="line.505"></a>
<FONT color="green">506</FONT>            return pomFile;<a name="line.506"></a>
<FONT color="green">507</FONT>        }<a name="line.507"></a>
<FONT color="green">508</FONT>    <a name="line.508"></a>
<FONT color="green">509</FONT>        private void fixChecksums( File file )<a name="line.509"></a>
<FONT color="green">510</FONT>        {<a name="line.510"></a>
<FONT color="green">511</FONT>            ChecksummedFile checksum = new ChecksummedFile( file );<a name="line.511"></a>
<FONT color="green">512</FONT>            checksum.fixChecksums( algorithms );<a name="line.512"></a>
<FONT color="green">513</FONT>        }<a name="line.513"></a>
<FONT color="green">514</FONT>    <a name="line.514"></a>
<FONT color="green">515</FONT>        private void queueRepositoryTask( String repositoryId, File localFile )<a name="line.515"></a>
<FONT color="green">516</FONT>        {<a name="line.516"></a>
<FONT color="green">517</FONT>            RepositoryTask task = new RepositoryTask();<a name="line.517"></a>
<FONT color="green">518</FONT>            task.setRepositoryId( repositoryId );<a name="line.518"></a>
<FONT color="green">519</FONT>            task.setResourceFile( localFile );<a name="line.519"></a>
<FONT color="green">520</FONT>            task.setUpdateRelatedArtifacts( true );<a name="line.520"></a>
<FONT color="green">521</FONT>            task.setScanAll( false );<a name="line.521"></a>
<FONT color="green">522</FONT>    <a name="line.522"></a>
<FONT color="green">523</FONT>            try<a name="line.523"></a>
<FONT color="green">524</FONT>            {<a name="line.524"></a>
<FONT color="green">525</FONT>                scheduler.queueTask( task );<a name="line.525"></a>
<FONT color="green">526</FONT>            }<a name="line.526"></a>
<FONT color="green">527</FONT>            catch ( TaskQueueException e )<a name="line.527"></a>
<FONT color="green">528</FONT>            {<a name="line.528"></a>
<FONT color="green">529</FONT>                log.error( "Unable to queue repository task to execute consumers on resource file ['" + localFile.getName()<a name="line.529"></a>
<FONT color="green">530</FONT>                               + "']." );<a name="line.530"></a>
<FONT color="green">531</FONT>            }<a name="line.531"></a>
<FONT color="green">532</FONT>        }<a name="line.532"></a>
<FONT color="green">533</FONT>    <a name="line.533"></a>
<FONT color="green">534</FONT>        private void copyFile( File sourceFile, File targetPath, String targetFilename, boolean fixChecksums )<a name="line.534"></a>
<FONT color="green">535</FONT>            throws IOException<a name="line.535"></a>
<FONT color="green">536</FONT>        {<a name="line.536"></a>
<FONT color="green">537</FONT>            FileOutputStream out = new FileOutputStream( new File( targetPath, targetFilename ) );<a name="line.537"></a>
<FONT color="green">538</FONT>            FileInputStream input = new FileInputStream( sourceFile );<a name="line.538"></a>
<FONT color="green">539</FONT>    <a name="line.539"></a>
<FONT color="green">540</FONT>            try<a name="line.540"></a>
<FONT color="green">541</FONT>            {<a name="line.541"></a>
<FONT color="green">542</FONT>                IOUtils.copy( input, out );<a name="line.542"></a>
<FONT color="green">543</FONT>            }<a name="line.543"></a>
<FONT color="green">544</FONT>            finally<a name="line.544"></a>
<FONT color="green">545</FONT>            {<a name="line.545"></a>
<FONT color="green">546</FONT>                out.close();<a name="line.546"></a>
<FONT color="green">547</FONT>                input.close();<a name="line.547"></a>
<FONT color="green">548</FONT>            }<a name="line.548"></a>
<FONT color="green">549</FONT>    <a name="line.549"></a>
<FONT color="green">550</FONT>            if ( fixChecksums )<a name="line.550"></a>
<FONT color="green">551</FONT>            {<a name="line.551"></a>
<FONT color="green">552</FONT>                fixChecksums( new File( targetPath, targetFilename ) );<a name="line.552"></a>
<FONT color="green">553</FONT>            }<a name="line.553"></a>
<FONT color="green">554</FONT>        }<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>         * Update artifact level metadata. If it does not exist, create the metadata and fix checksums if necessary.<a name="line.557"></a>
<FONT color="green">558</FONT>         */<a name="line.558"></a>
<FONT color="green">559</FONT>        private void updateProjectMetadata( String targetPath, Date lastUpdatedTimestamp, String timestamp, int buildNumber,<a name="line.559"></a>
<FONT color="green">560</FONT>                                            boolean fixChecksums, FileMetadata fileMetadata, String groupId,<a name="line.560"></a>
<FONT color="green">561</FONT>                                            String artifactId, String version, String packaging )<a name="line.561"></a>
<FONT color="green">562</FONT>            throws RepositoryMetadataException<a name="line.562"></a>
<FONT color="green">563</FONT>        {<a name="line.563"></a>
<FONT color="green">564</FONT>            List&lt;String&gt; availableVersions = new ArrayList&lt;String&gt;();<a name="line.564"></a>
<FONT color="green">565</FONT>            String latestVersion = version;<a name="line.565"></a>
<FONT color="green">566</FONT>    <a name="line.566"></a>
<FONT color="green">567</FONT>            File projectDir = new File( targetPath ).getParentFile();<a name="line.567"></a>
<FONT color="green">568</FONT>            File projectMetadataFile = new File( projectDir, MetadataTools.MAVEN_METADATA );<a name="line.568"></a>
<FONT color="green">569</FONT>    <a name="line.569"></a>
<FONT color="green">570</FONT>            ArchivaRepositoryMetadata projectMetadata = getMetadata( projectMetadataFile );<a name="line.570"></a>
<FONT color="green">571</FONT>    <a name="line.571"></a>
<FONT color="green">572</FONT>            if ( projectMetadataFile.exists() )<a name="line.572"></a>
<FONT color="green">573</FONT>            {<a name="line.573"></a>
<FONT color="green">574</FONT>                availableVersions = projectMetadata.getAvailableVersions();<a name="line.574"></a>
<FONT color="green">575</FONT>    <a name="line.575"></a>
<FONT color="green">576</FONT>                Collections.sort( availableVersions, VersionComparator.getInstance() );<a name="line.576"></a>
<FONT color="green">577</FONT>    <a name="line.577"></a>
<FONT color="green">578</FONT>                if ( !availableVersions.contains( version ) )<a name="line.578"></a>
<FONT color="green">579</FONT>                {<a name="line.579"></a>
<FONT color="green">580</FONT>                    availableVersions.add( version );<a name="line.580"></a>
<FONT color="green">581</FONT>                }<a name="line.581"></a>
<FONT color="green">582</FONT>    <a name="line.582"></a>
<FONT color="green">583</FONT>                latestVersion = availableVersions.get( availableVersions.size() - 1 );<a name="line.583"></a>
<FONT color="green">584</FONT>            }<a name="line.584"></a>
<FONT color="green">585</FONT>            else<a name="line.585"></a>
<FONT color="green">586</FONT>            {<a name="line.586"></a>
<FONT color="green">587</FONT>                availableVersions.add( version );<a name="line.587"></a>
<FONT color="green">588</FONT>    <a name="line.588"></a>
<FONT color="green">589</FONT>                projectMetadata.setGroupId( groupId );<a name="line.589"></a>
<FONT color="green">590</FONT>                projectMetadata.setArtifactId( artifactId );<a name="line.590"></a>
<FONT color="green">591</FONT>            }<a name="line.591"></a>
<FONT color="green">592</FONT>    <a name="line.592"></a>
<FONT color="green">593</FONT>            if ( projectMetadata.getGroupId() == null )<a name="line.593"></a>
<FONT color="green">594</FONT>            {<a name="line.594"></a>
<FONT color="green">595</FONT>                projectMetadata.setGroupId( groupId );<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>            if ( projectMetadata.getArtifactId() == null )<a name="line.598"></a>
<FONT color="green">599</FONT>            {<a name="line.599"></a>
<FONT color="green">600</FONT>                projectMetadata.setArtifactId( artifactId );<a name="line.600"></a>
<FONT color="green">601</FONT>            }<a name="line.601"></a>
<FONT color="green">602</FONT>    <a name="line.602"></a>
<FONT color="green">603</FONT>            projectMetadata.setLatestVersion( latestVersion );<a name="line.603"></a>
<FONT color="green">604</FONT>            projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );<a name="line.604"></a>
<FONT color="green">605</FONT>            projectMetadata.setAvailableVersions( availableVersions );<a name="line.605"></a>
<FONT color="green">606</FONT>    <a name="line.606"></a>
<FONT color="green">607</FONT>            if ( !VersionUtil.isSnapshot( version ) )<a name="line.607"></a>
<FONT color="green">608</FONT>            {<a name="line.608"></a>
<FONT color="green">609</FONT>                projectMetadata.setReleasedVersion( latestVersion );<a name="line.609"></a>
<FONT color="green">610</FONT>            }<a name="line.610"></a>
<FONT color="green">611</FONT>    <a name="line.611"></a>
<FONT color="green">612</FONT>            RepositoryMetadataWriter.write( projectMetadata, projectMetadataFile );<a name="line.612"></a>
<FONT color="green">613</FONT>    <a name="line.613"></a>
<FONT color="green">614</FONT>            if ( fixChecksums )<a name="line.614"></a>
<FONT color="green">615</FONT>            {<a name="line.615"></a>
<FONT color="green">616</FONT>                fixChecksums( projectMetadataFile );<a name="line.616"></a>
<FONT color="green">617</FONT>            }<a name="line.617"></a>
<FONT color="green">618</FONT>        }<a name="line.618"></a>
<FONT color="green">619</FONT>    <a name="line.619"></a>
<FONT color="green">620</FONT>        /**<a name="line.620"></a>
<FONT color="green">621</FONT>         * Update version level metadata for snapshot artifacts. If it does not exist, create the metadata and fix checksums<a name="line.621"></a>
<FONT color="green">622</FONT>         * if necessary.<a name="line.622"></a>
<FONT color="green">623</FONT>         */<a name="line.623"></a>
<FONT color="green">624</FONT>        private void updateVersionMetadata( ArchivaRepositoryMetadata metadata, File metadataFile,<a name="line.624"></a>
<FONT color="green">625</FONT>                                            Date lastUpdatedTimestamp, String timestamp, int buildNumber,<a name="line.625"></a>
<FONT color="green">626</FONT>                                            boolean fixChecksums, FileMetadata fileMetadata, String groupId,<a name="line.626"></a>
<FONT color="green">627</FONT>                                            String artifactId, String version, String packaging )<a name="line.627"></a>
<FONT color="green">628</FONT>            throws RepositoryMetadataException<a name="line.628"></a>
<FONT color="green">629</FONT>        {<a name="line.629"></a>
<FONT color="green">630</FONT>            if ( !metadataFile.exists() )<a name="line.630"></a>
<FONT color="green">631</FONT>            {<a name="line.631"></a>
<FONT color="green">632</FONT>                metadata.setGroupId( groupId );<a name="line.632"></a>
<FONT color="green">633</FONT>                metadata.setArtifactId( artifactId );<a name="line.633"></a>
<FONT color="green">634</FONT>                metadata.setVersion( version );<a name="line.634"></a>
<FONT color="green">635</FONT>            }<a name="line.635"></a>
<FONT color="green">636</FONT>    <a name="line.636"></a>
<FONT color="green">637</FONT>            if ( metadata.getSnapshotVersion() == null )<a name="line.637"></a>
<FONT color="green">638</FONT>            {<a name="line.638"></a>
<FONT color="green">639</FONT>                metadata.setSnapshotVersion( new SnapshotVersion() );<a name="line.639"></a>
<FONT color="green">640</FONT>            }<a name="line.640"></a>
<FONT color="green">641</FONT>    <a name="line.641"></a>
<FONT color="green">642</FONT>            metadata.getSnapshotVersion().setBuildNumber( buildNumber );<a name="line.642"></a>
<FONT color="green">643</FONT>            metadata.getSnapshotVersion().setTimestamp( timestamp );<a name="line.643"></a>
<FONT color="green">644</FONT>            metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );<a name="line.644"></a>
<FONT color="green">645</FONT>    <a name="line.645"></a>
<FONT color="green">646</FONT>            RepositoryMetadataWriter.write( metadata, metadataFile );<a name="line.646"></a>
<FONT color="green">647</FONT>    <a name="line.647"></a>
<FONT color="green">648</FONT>            if ( fixChecksums )<a name="line.648"></a>
<FONT color="green">649</FONT>            {<a name="line.649"></a>
<FONT color="green">650</FONT>                fixChecksums( metadataFile );<a name="line.650"></a>
<FONT color="green">651</FONT>            }<a name="line.651"></a>
<FONT color="green">652</FONT>        }<a name="line.652"></a>
<FONT color="green">653</FONT>    <a name="line.653"></a>
<FONT color="green">654</FONT>    <a name="line.654"></a>
<FONT color="green">655</FONT>    }<a name="line.655"></a>




























































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