org.apache.archiva.configuration.MavenProxyPropertyLoader.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.archiva.configuration.MavenProxyPropertyLoader.java

Source

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;
    }
}