1 package org.apache.maven.surefire.its;
2
3 import org.apache.maven.settings.Profile;
4 import org.apache.maven.settings.Repository;
5 import org.apache.maven.settings.RepositoryPolicy;
6 import org.apache.maven.settings.Settings;
7 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
8 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
9 import org.codehaus.plexus.util.xml.XmlStreamReader;
10 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
11
12 import java.io.File;
13 import java.io.FileWriter;
14 import java.io.IOException;
15 import java.util.Random;
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public final class StagedLocalRepoHelper
42 {
43 private StagedLocalRepoHelper()
44 {
45 throw new IllegalAccessError( "Helper class" );
46 }
47
48 private static String toUrl( String filename )
49 {
50
51
52
53
54 String url = "file://" + new File( filename ).toURI().getPath();
55 if ( url.endsWith( "/" ) )
56 {
57 url = url.substring( 0, url.length() - 1 );
58 }
59 return url;
60 }
61
62
63 public static void createStagedSettingsXml( File originalSettingsXml, File stagedLocalRepo, File stagedSettingsXml )
64 throws IOException
65 {
66 Random entropy = new Random();
67 SettingsXpp3Reader reader = new SettingsXpp3Reader();
68 SettingsXpp3Writer writer = new SettingsXpp3Writer();
69 try
70 {
71 Settings settings = reader.read( new XmlStreamReader( originalSettingsXml ) );
72
73 String localRepo = System.getProperty( "maven.repo.local" );
74
75 if ( localRepo == null )
76 {
77 localRepo = settings.getLocalRepository();
78 }
79
80 if ( localRepo == null )
81 {
82 localRepo = System.getProperty( "user.home" ) + "/.m2/repository";
83 }
84
85 File repoDir = new File( localRepo );
86
87 if ( !repoDir.exists() )
88 {
89 repoDir.mkdirs();
90 }
91
92
93 localRepo = repoDir.getAbsolutePath();
94
95 Profile profile = new Profile();
96 do
97 {
98 profile.setId( "stagedLocalRepo" + entropy.nextLong() );
99 }
100 while ( settings.getProfilesAsMap().containsKey( profile.getId() ) );
101 Repository repository = new Repository();
102 repository.setId( profile.getId() + entropy.nextLong() );
103 RepositoryPolicy policy = new RepositoryPolicy();
104 policy.setEnabled( true );
105 policy.setChecksumPolicy( "ignore" );
106 policy.setUpdatePolicy( "never" );
107 repository.setReleases( policy );
108 repository.setSnapshots( policy );
109 repository.setLayout( "default" );
110 repository.setName( "Original Local Repository" );
111 repository.setUrl( toUrl( localRepo ) );
112 profile.addPluginRepository( repository );
113 profile.addRepository( repository );
114 settings.addProfile( profile );
115 settings.addActiveProfile( profile.getId() );
116 settings.setLocalRepository( stagedLocalRepo.getAbsolutePath() );
117 writer.write( new FileWriter( stagedSettingsXml ), settings );
118 }
119 catch ( XmlPullParserException e )
120 {
121 IOException ioe = new IOException( e.getMessage() );
122 ioe.initCause( e );
123 throw ioe;
124 }
125 }
126 }