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}