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