]> source.dussan.org Git - archiva.git/blob
6593815977368871154b896cded7e39c3b7642d4
[archiva.git] /
1 package org.apache.maven.repository.proxy.configuration;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.maven.artifact.repository.ArtifactRepository;
20 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
21 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
22 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
23 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
24 import org.apache.maven.repository.proxy.repository.ProxyRepository;
25
26 import java.io.File;
27 import java.io.FileInputStream;
28 import java.io.IOException;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.Iterator;
32 import java.util.List;
33
34 /**
35  * Class to represent the configuration file for the proxy
36  *
37  * @author Edwin Punzalan
38  * @plexus.component role="org.apache.maven.repository.proxy.configuration.ProxyConfiguration"
39  */
40 public class ProxyConfiguration
41 {
42     public static final String ROLE = ProxyConfiguration.class.getName();
43
44     /**
45      * @plexus.requirement
46      */
47     private ArtifactRepositoryFactory artifactRepositoryFactory;
48
49     private boolean browsable;
50
51     private ArtifactRepository repoCache;
52
53     private List repositories = new ArrayList();
54
55     /**
56      * Method to set/unset the web-view of the repository cache
57      *
58      * @param browsable set to true to enable the web-view of the proxy repository cache
59      */
60     public void setBrowsable( boolean browsable )
61     {
62         this.browsable = browsable;
63     }
64
65     /**
66      * Used to determine if the repsented configuration allows web view of the repository cache
67      *
68      * @return true if the repository cache is configured for web view.
69      */
70     public boolean isBrowsable()
71     {
72         return browsable;
73     }
74
75     /**
76      * Used to set the location where the proxy should cache the configured repositories
77      *
78      * @param path
79      */
80     public void setRepositoryCachePath( String path )
81     {
82         ArtifactRepositoryPolicy standardPolicy;
83         standardPolicy = new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
84                                                        ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
85
86         ArtifactRepositoryLayout layout = new DefaultRepositoryLayout();
87
88         repoCache = artifactRepositoryFactory.createArtifactRepository( "localCache",
89                                                                         "file://" + new File( path ).getAbsolutePath(),
90                                                                         layout, standardPolicy, standardPolicy );
91     }
92
93     /**
94      * Used to retrieve an ArtifactRepository Object of the proxy cache
95      *
96      * @return the ArtifactRepository representation of the proxy cache
97      */
98     public ArtifactRepository getRepositoryCache()
99     {
100         return repoCache;
101     }
102
103     /**
104      * Used to retrieved the absolute path of the repository cache
105      *
106      * @return path to the proxy cache
107      */
108     public String getRepositoryCachePath()
109     {
110         return repoCache.getBasedir();
111     }
112
113     /**
114      * Used to add proxied repositories.
115      *
116      * @param repository the repository to be proxied
117      */
118     public void addRepository( ProxyRepository repository )
119     {
120         repositories.add( repository );
121     }
122
123     /**
124      * Used to retrieve an unmodifyable list of proxied repositories. They returned list determines the search sequence
125      * for retrieving artifacts.
126      *
127      * @return a list of ProxyRepository objects representing proxied repositories
128      */
129     public List getRepositories()
130     {
131         return Collections.unmodifiableList( repositories );
132     }
133
134     /**
135      * Used to set the list of repositories to be proxied.  This replaces any repositories already added to this
136      * configuraion instance.  Useful for re-arranging an existing proxied list.
137      *
138      * @param repositories
139      */
140     public void setRepositories( List repositories )
141     {
142         this.repositories = repositories;
143     }
144
145     /**
146      * Uses maven-proxy classes to read a maven-proxy properties configuration
147      *
148      * @param mavenProxyConfigurationFile The location of the maven-proxy configuration file
149      * @throws ValidationException When a problem occured while processing the properties file
150      * @throws IOException         When a problem occured while reading the property file
151      */
152     public void loadMavenProxyConfiguration( File mavenProxyConfigurationFile )
153         throws ValidationException, IOException
154     {
155         MavenProxyPropertyLoader loader = new MavenProxyPropertyLoader();
156         RetrievalComponentConfiguration rcc = loader.load( new FileInputStream( mavenProxyConfigurationFile ) );
157
158         this.setRepositoryCachePath( rcc.getLocalStore() );
159         this.setBrowsable( rcc.isBrowsable() );
160
161         List repoList = new ArrayList();
162         ArtifactRepositoryLayout layout = new DefaultRepositoryLayout();
163         for ( Iterator repos = rcc.getRepos().iterator(); repos.hasNext(); )
164         {
165             RepoConfiguration repoConfig = (RepoConfiguration) repos.next();
166
167             //skip local store repo
168             if ( !repoConfig.getKey().equals( "global" ) )
169             {
170                 ProxyRepository repo = new ProxyRepository( repoConfig.getKey(), repoConfig.getUrl(), layout );
171                 repo.setCacheFailures( repoConfig.getCacheFailures() );
172                 repo.setCachePeriod( repoConfig.getCachePeriod() );
173
174                 repoList.add( repo );
175             }
176         }
177
178         this.setRepositories( repoList );
179     }
180 }