Java tutorial
package org.apache.archiva.configuration; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.apache.archiva.policies.ReleasesPolicy; import org.apache.archiva.policies.SnapshotsPolicy; import org.apache.commons.lang.StringUtils; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import java.util.StringTokenizer; /** */ public class MavenProxyPropertyLoader { private static final String REPO_LOCAL_STORE = "repo.local.store"; private static final String PROXY_LIST = "proxy.list"; private static final String REPO_LIST = "repo.list"; public void load(Properties props, Configuration configuration) throws InvalidConfigurationException { // set up the managed repository String localCachePath = getMandatoryProperty(props, REPO_LOCAL_STORE); ManagedRepositoryConfiguration config = new ManagedRepositoryConfiguration(); config.setLocation(localCachePath); config.setName("Imported Maven-Proxy Cache"); config.setId("maven-proxy"); config.setScanned(false); config.setReleases(true); config.setSnapshots(false); configuration.addManagedRepository(config); // Add the network proxies. String propertyList = props.getProperty(PROXY_LIST); if (propertyList != null) { StringTokenizer tok = new StringTokenizer(propertyList, ","); while (tok.hasMoreTokens()) { String key = tok.nextToken(); if (StringUtils.isNotEmpty(key)) { NetworkProxyConfiguration proxy = new NetworkProxyConfiguration(); proxy.setHost(getMandatoryProperty(props, "proxy." + key + ".host")); proxy.setPort(Integer.parseInt(getMandatoryProperty(props, "proxy." + key + ".port"))); // the username and password isn't required proxy.setUsername(props.getProperty("proxy." + key + ".username")); proxy.setPassword(props.getProperty("proxy." + key + ".password")); configuration.addNetworkProxy(proxy); } } } // Add the remote repository list String repoList = getMandatoryProperty(props, REPO_LIST); StringTokenizer tok = new StringTokenizer(repoList, ","); while (tok.hasMoreTokens()) { String key = tok.nextToken(); Properties repoProps = getSubset(props, "repo." + key + "."); String url = getMandatoryProperty(props, "repo." + key + ".url"); String proxyKey = repoProps.getProperty("proxy"); // int cachePeriod = Integer.parseInt( repoProps.getProperty( "cache.period", "60" ) ); RemoteRepositoryConfiguration repository = new RemoteRepositoryConfiguration(); repository.setId(key); repository.setName("Imported Maven-Proxy Remote Proxy"); repository.setUrl(url); repository.setLayout("legacy"); configuration.addRemoteRepository(repository); ProxyConnectorConfiguration proxyConnector = new ProxyConnectorConfiguration(); proxyConnector.setSourceRepoId("maven-proxy"); proxyConnector.setTargetRepoId(key); proxyConnector.setProxyId(proxyKey); // TODO: convert cachePeriod to closest "daily" or "hourly" proxyConnector.addPolicy(ProxyConnectorConfiguration.POLICY_SNAPSHOTS, SnapshotsPolicy.DAILY); proxyConnector.addPolicy(ProxyConnectorConfiguration.POLICY_RELEASES, ReleasesPolicy.ALWAYS); configuration.addProxyConnector(proxyConnector); } } @SuppressWarnings("unchecked") private Properties getSubset(Properties props, String prefix) { Enumeration keys = props.keys(); Properties result = new Properties(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = props.getProperty(key); if (key.startsWith(prefix)) { String newKey = key.substring(prefix.length()); result.setProperty(newKey, value); } } return result; } public void load(InputStream is, Configuration configuration) throws IOException, InvalidConfigurationException { Properties props = new Properties(); props.load(is); load(props, configuration); } private String getMandatoryProperty(Properties props, String key) throws InvalidConfigurationException { String value = props.getProperty(key); if (value == null) { throw new InvalidConfigurationException(key, "Missing required field: " + key); } return value; } }