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 }