001package org.apache.maven.artifact.repository;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.Arrays;
023import java.util.List;
024
025import org.apache.maven.artifact.UnknownRepositoryLayoutException;
026import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
027import org.apache.maven.plugin.LegacySupport;
028import org.apache.maven.repository.RepositorySystem;
029import org.codehaus.plexus.component.annotations.Component;
030import org.codehaus.plexus.component.annotations.Requirement;
031import org.eclipse.aether.RepositorySystemSession;
032
033/**
034 * @author jdcasey
035 */
036@Component( role = ArtifactRepositoryFactory.class )
037public class DefaultArtifactRepositoryFactory
038    implements ArtifactRepositoryFactory
039{
040
041    @Requirement
042    private org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory factory;
043
044    @Requirement
045    private LegacySupport legacySupport;
046
047    @Requirement
048    private RepositorySystem repositorySystem;
049
050    public ArtifactRepositoryLayout getLayout( String layoutId )
051        throws UnknownRepositoryLayoutException
052    {
053        return factory.getLayout( layoutId );
054    }
055
056    public ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId,
057                                                                  boolean uniqueVersion )
058        throws UnknownRepositoryLayoutException
059    {
060        return injectSession( factory.createDeploymentArtifactRepository( id, url, layoutId, uniqueVersion ), false );
061    }
062
063    public ArtifactRepository createDeploymentArtifactRepository( String id, String url,
064                                                                  ArtifactRepositoryLayout repositoryLayout,
065                                                                  boolean uniqueVersion )
066    {
067        return injectSession( factory.createDeploymentArtifactRepository( id, url, repositoryLayout, uniqueVersion ),
068                              false );
069    }
070
071    public ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
072                                                        ArtifactRepositoryPolicy snapshots,
073                                                        ArtifactRepositoryPolicy releases )
074        throws UnknownRepositoryLayoutException
075    {
076        return injectSession( factory.createArtifactRepository( id, url, layoutId, snapshots, releases ), true );
077    }
078
079    public ArtifactRepository createArtifactRepository( String id, String url,
080                                                        ArtifactRepositoryLayout repositoryLayout,
081                                                        ArtifactRepositoryPolicy snapshots,
082                                                        ArtifactRepositoryPolicy releases )
083    {
084        return injectSession( factory.createArtifactRepository( id, url, repositoryLayout, snapshots, releases ), true );
085    }
086
087    public void setGlobalUpdatePolicy( String updatePolicy )
088    {
089        factory.setGlobalUpdatePolicy( updatePolicy );
090    }
091
092    public void setGlobalChecksumPolicy( String checksumPolicy )
093    {
094        factory.setGlobalChecksumPolicy( checksumPolicy );
095    }
096
097    private ArtifactRepository injectSession( ArtifactRepository repository, boolean mirrors )
098    {
099        RepositorySystemSession session = legacySupport.getRepositorySession();
100
101        if ( session != null && repository != null && !isLocalRepository( repository ) )
102        {
103            List<ArtifactRepository> repositories = Arrays.asList( repository );
104
105            if ( mirrors )
106            {
107                repositorySystem.injectMirror( session, repositories );
108            }
109
110            repositorySystem.injectProxy( session, repositories );
111
112            repositorySystem.injectAuthentication( session, repositories );
113        }
114
115        return repository;
116    }
117
118    private boolean isLocalRepository( ArtifactRepository repository )
119    {
120        // unfortunately, the API doesn't allow to tell a remote repo and the local repo apart...
121        return "local".equals( repository.getId() );
122    }
123
124}