1 package org.apache.maven.artifact.ant;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.math.BigInteger;
23 import java.security.MessageDigest;
24 import java.util.ArrayList;
25 import java.util.Iterator;
26 import java.util.List;
27
28 import org.apache.maven.model.Repository;
29 import org.apache.tools.ant.BuildException;
30 import org.apache.tools.ant.Project;
31
32
33
34
35
36 public abstract class AbstractArtifactWithRepositoryTask
37 extends AbstractArtifactTask
38 {
39
40
41
42 private List remoteRepositories = new ArrayList();
43
44
45
46
47
48 private static RemoteRepository getDefaultRemoteRepository()
49 {
50
51 RemoteRepository remoteRepository = new RemoteRepository();
52 remoteRepository.setId( "central" );
53 remoteRepository.setUrl( "http://repo1.maven.org/maven2" );
54 RepositoryPolicy snapshots = new RepositoryPolicy();
55 snapshots.setEnabled( false );
56 remoteRepository.addSnapshots( snapshots );
57 return remoteRepository;
58 }
59
60 private static String statusAsString( RepositoryPolicy policy )
61 {
62 return ( policy == null ) || policy.isEnabled() ? "enabled" : "disabled";
63 }
64
65 protected List createRemoteArtifactRepositories()
66 {
67 return createRemoteArtifactRepositories( null );
68 }
69
70
71
72
73
74
75
76
77 protected List createRemoteArtifactRepositories( List pomRepositories )
78 {
79 List remoteRepositories = new ArrayList();
80 remoteRepositories.addAll( getRemoteRepositories() );
81
82 if ( getRemoteRepositories().isEmpty() )
83 {
84 remoteRepositories.add( getDefaultRemoteRepository() );
85 }
86
87 if ( pomRepositories != null )
88 {
89 for ( Iterator i = pomRepositories.iterator(); i.hasNext(); )
90 {
91 Repository pomRepository = (Repository) i.next();
92
93 remoteRepositories.add( createAntRemoteRepository( pomRepository ) );
94 }
95 }
96
97 log( "Using remote repositories:", Project.MSG_VERBOSE );
98 List list = new ArrayList();
99 for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
100 {
101 RemoteRepository remoteRepository = (RemoteRepository) i.next();
102 updateRepositoryWithSettings( remoteRepository );
103
104 StringBuffer msg = new StringBuffer();
105 msg.append( " - id=" + remoteRepository.getId() );
106 msg.append( ", url=" + remoteRepository.getUrl() );
107 msg.append( ", releases=" + statusAsString( remoteRepository.getReleases() ) );
108 msg.append( ", snapshots=" + statusAsString( remoteRepository.getSnapshots() ) );
109 if ( remoteRepository.getAuthentication() != null )
110 {
111 msg.append( ", authentication=" + remoteRepository.getAuthentication().getUserName() );
112 }
113 if ( remoteRepository.getProxy() != null )
114 {
115 msg.append( ", proxy=" + remoteRepository.getProxy().getHost() );
116 }
117 getProject().log( msg.toString(), Project.MSG_VERBOSE );
118
119 list.add( createRemoteArtifactRepository( remoteRepository ) );
120 }
121 return list;
122 }
123
124 public List getRemoteRepositories()
125 {
126 return remoteRepositories;
127 }
128
129
130
131
132
133
134
135
136 public void addConfiguredRemoteRepository( RemoteRepository remoteRepository )
137 {
138
139 if ( remoteRepository.getUrl() == null )
140 {
141 throw new BuildException( "Each remote repository must specify a url." );
142 }
143 if ( remoteRepository.getId() == null || remoteRepository.getId().equals( remoteRepository.getUrl() ) )
144 {
145 log( "Each remote repository must specify a unique id. For backward-compatibility, "
146 + "a default id will be used. In future releases, a missing repository id will raise an error.",
147 Project.MSG_WARN );
148 remoteRepository.setId( generateDefaultRepositoryId( remoteRepository ) );
149 }
150 remoteRepositories.add( remoteRepository );
151 }
152
153 public final String MD5_ALGO_NAME = "MD5";
154
155 public final String UTF_ENC_NAME = "UTF-8";
156
157
158
159
160
161
162
163
164
165 public String generateDefaultRepositoryId( RemoteRepository repository )
166 {
167 try
168 {
169 MessageDigest md = MessageDigest.getInstance( MD5_ALGO_NAME );
170 md.update( repository.getUrl().getBytes( UTF_ENC_NAME ) );
171 BigInteger digest = new BigInteger( md.digest() );
172 return digest.toString( 16 );
173 }
174 catch ( Exception e )
175 {
176 log( "Unable to generate unique repository Id: " + e, Project.MSG_WARN );
177 return "default";
178 }
179 }
180 }