<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.dependency.tree.maven2;<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 org.slf4j.Logger;<a name="line.21"></a>
<FONT color="green">022</FONT>    import org.slf4j.LoggerFactory;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.sonatype.aether.RepositorySystemSession;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.sonatype.aether.connector.file.FileRepositoryConnectorFactory;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.sonatype.aether.repository.RemoteRepository;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.sonatype.aether.spi.connector.ArtifactDownload;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.sonatype.aether.spi.connector.ArtifactUpload;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.sonatype.aether.spi.connector.MetadataDownload;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.sonatype.aether.spi.connector.MetadataUpload;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.sonatype.aether.spi.connector.RepositoryConnector;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.sonatype.aether.transfer.NoRepositoryConnectorException;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    import java.util.Collection;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>    /**<a name="line.35"></a>
<FONT color="green">036</FONT>     * @author Olivier Lamy<a name="line.36"></a>
<FONT color="green">037</FONT>     * @since 1.4-M3<a name="line.37"></a>
<FONT color="green">038</FONT>     */<a name="line.38"></a>
<FONT color="green">039</FONT>    public class ArchivaRepositoryConnectorFactory<a name="line.39"></a>
<FONT color="green">040</FONT>        extends FileRepositoryConnectorFactory<a name="line.40"></a>
<FONT color="green">041</FONT>    {<a name="line.41"></a>
<FONT color="green">042</FONT>        public ArchivaRepositoryConnectorFactory()<a name="line.42"></a>
<FONT color="green">043</FONT>        {<a name="line.43"></a>
<FONT color="green">044</FONT>            // no op but empty constructor needed by aether<a name="line.44"></a>
<FONT color="green">045</FONT>        }<a name="line.45"></a>
<FONT color="green">046</FONT>    <a name="line.46"></a>
<FONT color="green">047</FONT>        public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository )<a name="line.47"></a>
<FONT color="green">048</FONT>            throws NoRepositoryConnectorException<a name="line.48"></a>
<FONT color="green">049</FONT>        {<a name="line.49"></a>
<FONT color="green">050</FONT>            try<a name="line.50"></a>
<FONT color="green">051</FONT>            {<a name="line.51"></a>
<FONT color="green">052</FONT>                return super.newInstance( session, repository );<a name="line.52"></a>
<FONT color="green">053</FONT>            }<a name="line.53"></a>
<FONT color="green">054</FONT>            catch ( NoRepositoryConnectorException e )<a name="line.54"></a>
<FONT color="green">055</FONT>            {<a name="line.55"></a>
<FONT color="green">056</FONT>    <a name="line.56"></a>
<FONT color="green">057</FONT>            }<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>            return new RepositoryConnector()<a name="line.59"></a>
<FONT color="green">060</FONT>            {<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>                private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>                public void get( Collection&lt;? extends ArtifactDownload&gt; artifactDownloads,<a name="line.64"></a>
<FONT color="green">065</FONT>                                 Collection&lt;? extends MetadataDownload&gt; metadataDownloads )<a name="line.65"></a>
<FONT color="green">066</FONT>                {<a name="line.66"></a>
<FONT color="green">067</FONT>                    log.debug( "get" );<a name="line.67"></a>
<FONT color="green">068</FONT>                }<a name="line.68"></a>
<FONT color="green">069</FONT>    <a name="line.69"></a>
<FONT color="green">070</FONT>                public void put( Collection&lt;? extends ArtifactUpload&gt; artifactUploads,<a name="line.70"></a>
<FONT color="green">071</FONT>                                 Collection&lt;? extends MetadataUpload&gt; metadataUploads )<a name="line.71"></a>
<FONT color="green">072</FONT>                {<a name="line.72"></a>
<FONT color="green">073</FONT>                    log.debug( "put" );<a name="line.73"></a>
<FONT color="green">074</FONT>                }<a name="line.74"></a>
<FONT color="green">075</FONT>    <a name="line.75"></a>
<FONT color="green">076</FONT>                public void close()<a name="line.76"></a>
<FONT color="green">077</FONT>                {<a name="line.77"></a>
<FONT color="green">078</FONT>                    log.debug( "close" );<a name="line.78"></a>
<FONT color="green">079</FONT>                }<a name="line.79"></a>
<FONT color="green">080</FONT>            };<a name="line.80"></a>
<FONT color="green">081</FONT>        }<a name="line.81"></a>
<FONT color="green">082</FONT>    }<a name="line.82"></a>




























































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