]> source.dussan.org Git - archiva.git/blob
fec53daf4aa5e9c673a97e22799ad65ccfc38fc7
[archiva.git] /
1 package org.apache.maven.archiva.configuration;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.commons.lang.StringUtils;
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.Enumeration;
27 import java.util.Properties;
28 import java.util.StringTokenizer;
29
30 /**
31  * @author Ben Walding
32  * @author Brett Porter
33  */
34 public class MavenProxyPropertyLoader
35 {
36     private static final String REPO_LOCAL_STORE = "repo.local.store";
37
38     private static final String PROXY_LIST = "proxy.list";
39
40     private static final String REPO_LIST = "repo.list";
41
42     public void load( Properties props, Configuration configuration )
43         throws InvalidConfigurationException
44     {
45         // set up the managed repository
46         String localCachePath = getMandatoryProperty( props, REPO_LOCAL_STORE );
47
48         RepositoryConfiguration config = new RepositoryConfiguration();
49         config.setDirectory( localCachePath );
50         config.setName( "Imported Maven-Proxy Cache" );
51         config.setId( "maven-proxy" );
52         configuration.addRepository( config );
53
54         //just get the first HTTP proxy and break
55         String propertyList = props.getProperty( PROXY_LIST );
56         if ( propertyList != null )
57         {
58             StringTokenizer tok = new StringTokenizer( propertyList, "," );
59             while ( tok.hasMoreTokens() )
60             {
61                 String key = tok.nextToken();
62                 if ( StringUtils.isNotEmpty( key ) )
63                 {
64                     Proxy proxy = new Proxy();
65                     proxy.setHost( getMandatoryProperty( props, "proxy." + key + ".host" ) );
66                     proxy.setPort( Integer.parseInt( getMandatoryProperty( props, "proxy." + key + ".port" ) ) );
67
68                     // the username and password isn't required
69                     proxy.setUsername( props.getProperty( "proxy." + key + ".username" ) );
70                     proxy.setPassword( props.getProperty( "proxy." + key + ".password" ) );
71
72                     configuration.setProxy( proxy );
73
74                     //accept only one proxy configuration
75                     break;
76                 }
77             }
78         }
79
80         //get the remote repository list
81         String repoList = getMandatoryProperty( props, REPO_LIST );
82
83         StringTokenizer tok = new StringTokenizer( repoList, "," );
84         while ( tok.hasMoreTokens() )
85         {
86             String key = tok.nextToken();
87
88             Properties repoProps = getSubset( props, "repo." + key + "." );
89             String url = getMandatoryProperty( props, "repo." + key + ".url" );
90             String proxyKey = repoProps.getProperty( "proxy" );
91
92             boolean cacheFailures =
93                 Boolean.valueOf( repoProps.getProperty( "cache.failures", "false" ) ).booleanValue();
94             boolean hardFail = Boolean.valueOf( repoProps.getProperty( "hardfail", "true" ) ).booleanValue();
95             int cachePeriod = Integer.parseInt( repoProps.getProperty( "cache.period", "60" ) );
96
97             ProxiedRepositoryConfiguration repository = new ProxiedRepositoryConfiguration();
98             repository.setId( key );
99             repository.setLayout( "legacy" );
100             repository.setManagedRepository( config.getId() );
101             repository.setName( "Imported Maven-Proxy Remote Proxy" );
102             repository.setSnapshotsInterval( cachePeriod );
103             repository.setUrl( url );
104             repository.setUseNetworkProxy( StringUtils.isNotEmpty( proxyKey ) );
105             repository.setCacheFailures( cacheFailures );
106             repository.setHardFail( hardFail );
107
108             configuration.addProxiedRepository( repository );
109         }
110     }
111
112     private Properties getSubset( Properties props, String prefix )
113     {
114         Enumeration keys = props.keys();
115         Properties result = new Properties();
116         while ( keys.hasMoreElements() )
117         {
118             String key = (String) keys.nextElement();
119             String value = props.getProperty( key );
120             if ( key.startsWith( prefix ) )
121             {
122                 String newKey = key.substring( prefix.length() );
123                 result.setProperty( newKey, value );
124             }
125         }
126         return result;
127     }
128
129     public void load( InputStream is, Configuration configuration )
130         throws IOException, InvalidConfigurationException
131     {
132         Properties props = new Properties();
133         props.load( is );
134         load( props, configuration );
135     }
136
137     private String getMandatoryProperty( Properties props, String key )
138         throws InvalidConfigurationException
139     {
140         String value = props.getProperty( key );
141
142         if ( value == null )
143         {
144             throw new InvalidConfigurationException( key, "Missing required field: " + key );
145         }
146
147         return value;
148     }
149 }