001 package org.codehaus.mojo.wagon.shared;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
005 * agreements. See the NOTICE file distributed with this work for additional information regarding
006 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance with the License. You may obtain a
008 * copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software distributed under the License
013 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
014 * or implied. See the License for the specific language governing permissions and limitations under
015 * the License.
016 */
017
018 import org.apache.maven.artifact.manager.WagonConfigurationException;
019 import org.apache.maven.artifact.manager.WagonManager;
020 import org.apache.maven.plugin.MojoExecutionException;
021 import org.apache.maven.plugin.logging.Log;
022 import org.apache.maven.settings.Proxy;
023 import org.apache.maven.settings.Server;
024 import org.apache.maven.settings.Settings;
025 import org.apache.maven.wagon.UnsupportedProtocolException;
026 import org.apache.maven.wagon.Wagon;
027 import org.apache.maven.wagon.WagonException;
028 import org.apache.maven.wagon.observers.Debug;
029 import org.apache.maven.wagon.proxy.ProxyInfo;
030 import org.apache.maven.wagon.repository.Repository;
031 import org.apache.maven.wagon.repository.RepositoryPermissions;
032 import org.codehaus.plexus.util.StringUtils;
033
034 public class WagonUtils {
035
036 /**
037 * Convenient method to create a wagon
038 *
039 * @param id
040 * @param url
041 * @param wagonManager
042 * @param settings
043 * @param logger
044 * @return
045 * @throws MojoExecutionException
046 */
047 public static Wagon createWagon(String id, String url, WagonManager wagonManager, Settings settings, Log logger)
048 throws WagonException, UnsupportedProtocolException, WagonConfigurationException {
049 Wagon wagon = null;
050
051 final Repository repository = new Repository(id, url);
052 repository.setPermissions(getPermissions(id, settings));
053
054 wagon = wagonManager.getWagon(repository);
055
056 if (logger.isDebugEnabled()) {
057 Debug debug = new Debug();
058 wagon.addSessionListener(debug);
059 wagon.addTransferListener(debug);
060 }
061
062 ProxyInfo proxyInfo = getProxyInfo(settings);
063 if (proxyInfo != null) {
064 wagon.connect(repository, wagonManager.getAuthenticationInfo(repository.getId()), proxyInfo);
065 } else {
066 wagon.connect(repository, wagonManager.getAuthenticationInfo(repository.getId()));
067 }
068
069 return wagon;
070 }
071
072 protected static RepositoryPermissions getPermissions(String id, Settings settings) {
073 // May not have an id
074 if (StringUtils.isBlank(id)) {
075 return null;
076 }
077
078 // May not be a server matching that id
079 Server server = settings.getServer(id);
080 if (server == null) {
081 return null;
082 }
083
084 // Extract perms (if there are any)
085 String filePerms = server.getFilePermissions();
086 String dirPerms = server.getDirectoryPermissions();
087
088 // Check to see if custom permissions were supplied
089 if (StringUtils.isBlank(filePerms) && StringUtils.isBlank(dirPerms)) {
090 return null;
091 }
092
093 // There are custom permissions specified in settings.xml for this server
094 RepositoryPermissions permissions = new RepositoryPermissions();
095 permissions.setFileMode(filePerms);
096 permissions.setDirectoryMode(dirPerms);
097 return permissions;
098 }
099
100 public static WagonFileSet getWagonFileSet(String fromDir, String includes, String excludes,
101 boolean isCaseSensitive, String toDir) {
102 WagonFileSet fileSet = new WagonFileSet();
103 fileSet.setDirectory(fromDir);
104
105 if (!StringUtils.isBlank(includes)) {
106 fileSet.setIncludes(StringUtils.split(includes, ","));
107 }
108
109 if (!StringUtils.isBlank(excludes)) {
110 fileSet.setExcludes(StringUtils.split(excludes, ","));
111 }
112
113 fileSet.setCaseSensitive(isCaseSensitive);
114
115 fileSet.setOutputDirectory(toDir);
116
117 return fileSet;
118
119 }
120
121 /**
122 * Convenience method to map a <code>Proxy</code> object from the user system settings to a <code>ProxyInfo</code>
123 * object.
124 *
125 * @return a proxyInfo object or null if no active proxy is define in the settings.xml
126 */
127 public static ProxyInfo getProxyInfo(Settings settings) {
128 ProxyInfo proxyInfo = null;
129 if (settings != null && settings.getActiveProxy() != null) {
130 Proxy settingsProxy = settings.getActiveProxy();
131
132 proxyInfo = new ProxyInfo();
133 proxyInfo.setHost(settingsProxy.getHost());
134 proxyInfo.setType(settingsProxy.getProtocol());
135 proxyInfo.setPort(settingsProxy.getPort());
136 proxyInfo.setNonProxyHosts(settingsProxy.getNonProxyHosts());
137 proxyInfo.setUserName(settingsProxy.getUsername());
138 proxyInfo.setPassword(settingsProxy.getPassword());
139 }
140
141 return proxyInfo;
142 }
143
144 }