001package org.apache.maven.repository.legacy.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.Map;
023
024import org.apache.maven.artifact.UnknownRepositoryLayoutException;
025import org.apache.maven.artifact.repository.ArtifactRepository;
026import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
027import org.apache.maven.artifact.repository.MavenArtifactRepository;
028import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
029import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2;
030import org.codehaus.plexus.component.annotations.Component;
031import org.codehaus.plexus.component.annotations.Requirement;
032
033/**
034 * @author jdcasey
035 */
036@Component( role = ArtifactRepositoryFactory.class )
037public class DefaultArtifactRepositoryFactory
038    implements ArtifactRepositoryFactory
039{
040    // TODO: use settings?
041    private String globalUpdatePolicy;
042
043    private String globalChecksumPolicy;
044
045    @Requirement( role = ArtifactRepositoryLayout.class )
046    private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
047
048    public ArtifactRepositoryLayout getLayout( String layoutId )
049        throws UnknownRepositoryLayoutException
050    {
051        return repositoryLayouts.get( layoutId );
052    }
053
054    public ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId,
055                                                                  boolean uniqueVersion )
056        throws UnknownRepositoryLayoutException
057    {
058        ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
059
060        checkLayout( id, layoutId, layout );
061
062        return createDeploymentArtifactRepository( id, url, layout, uniqueVersion );
063    }
064
065    private void checkLayout( String repositoryId, String layoutId, ArtifactRepositoryLayout layout )
066        throws UnknownRepositoryLayoutException
067    {
068        if ( layout == null )
069        {
070            throw new UnknownRepositoryLayoutException( repositoryId, layoutId );
071        }
072    }
073
074    public ArtifactRepository createDeploymentArtifactRepository( String id, String url,
075                                                                  ArtifactRepositoryLayout repositoryLayout,
076                                                                  boolean uniqueVersion )
077    {
078        return createArtifactRepository( id, url, repositoryLayout, null, null );
079    }
080
081    public ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
082                                                        ArtifactRepositoryPolicy snapshots,
083                                                        ArtifactRepositoryPolicy releases )
084        throws UnknownRepositoryLayoutException
085    {
086        ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
087
088        checkLayout( id, layoutId, layout );
089
090        return createArtifactRepository( id, url, layout, snapshots, releases );
091    }
092
093    public ArtifactRepository createArtifactRepository( String id, String url,
094                                                        ArtifactRepositoryLayout repositoryLayout,
095                                                        ArtifactRepositoryPolicy snapshots,
096                                                        ArtifactRepositoryPolicy releases )
097    {
098        if ( snapshots == null )
099        {
100            snapshots = new ArtifactRepositoryPolicy();
101        }
102
103        if ( releases == null )
104        {
105            releases = new ArtifactRepositoryPolicy();
106        }
107
108        if ( globalUpdatePolicy != null )
109        {
110            snapshots.setUpdatePolicy( globalUpdatePolicy );
111            releases.setUpdatePolicy( globalUpdatePolicy );
112        }
113
114        if ( globalChecksumPolicy != null )
115        {
116            snapshots.setChecksumPolicy( globalChecksumPolicy );
117            releases.setChecksumPolicy( globalChecksumPolicy );
118        }
119
120        ArtifactRepository repository;
121        if ( repositoryLayout instanceof ArtifactRepositoryLayout2 )
122        {
123            repository =
124                ( (ArtifactRepositoryLayout2) repositoryLayout ).newMavenArtifactRepository( id, url, snapshots,
125                                                                                             releases );
126        }
127        else
128        {
129            repository = new MavenArtifactRepository( id, url, repositoryLayout, snapshots, releases );
130        }
131
132        return repository;
133    }
134
135    public void setGlobalUpdatePolicy( String updatePolicy )
136    {
137        globalUpdatePolicy = updatePolicy;
138    }
139
140    public void setGlobalChecksumPolicy( String checksumPolicy )
141    {
142        globalChecksumPolicy = checksumPolicy;
143    }
144 }