1 package org.apache.maven.plugin.assembly.archive.phase;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Iterator;
24 import java.util.List;
25
26 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
27 import org.apache.maven.plugin.assembly.AssemblyContext;
28 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
29 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
30 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoBuilderConfigSourceWrapper;
31 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoInfoWrapper;
32 import org.apache.maven.plugin.assembly.archive.task.AddDirectoryTask;
33 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
34 import org.apache.maven.plugin.assembly.model.Assembly;
35 import org.apache.maven.plugin.assembly.model.Repository;
36 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
37 import org.apache.maven.plugin.assembly.utils.TypeConversionUtils;
38 import org.apache.maven.shared.repository.RepositoryAssembler;
39 import org.apache.maven.shared.repository.RepositoryAssemblyException;
40 import org.apache.maven.shared.repository.RepositoryBuilderConfigSource;
41 import org.apache.maven.shared.repository.model.RepositoryInfo;
42 import org.codehaus.plexus.archiver.Archiver;
43 import org.codehaus.plexus.component.annotations.Component;
44 import org.codehaus.plexus.component.annotations.Requirement;
45 import org.codehaus.plexus.logging.AbstractLogEnabled;
46
47
48
49
50 @Component( role = AssemblyArchiverPhase.class, hint = "repositories" )
51 public class RepositoryAssemblyPhase
52 extends AbstractLogEnabled
53 implements AssemblyArchiverPhase
54 {
55
56 @Requirement
57 private RepositoryAssembler repositoryAssembler;
58
59 public RepositoryAssemblyPhase()
60 {
61
62 }
63
64
65 public RepositoryAssemblyPhase( final RepositoryAssembler repositoryAssembler )
66 {
67 this.repositoryAssembler = repositoryAssembler;
68 }
69
70
71
72
73 public void execute( final Assembly assembly, final Archiver archiver,
74 final AssemblerConfigurationSource configSource, final AssemblyContext context )
75 throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
76 {
77 final List<Repository> repositoriesList = assembly.getRepositories();
78
79 final File tempRoot = configSource.getTemporaryRootDirectory();
80
81 for (final Repository repository : repositoriesList) {
82 final String outputDirectory =
83 AssemblyFormatUtils.getOutputDirectory(repository.getOutputDirectory(), configSource.getProject(),
84 null, configSource.getFinalName(), configSource);
85
86 final File repositoryDirectory = new File(tempRoot, outputDirectory);
87
88 if (!repositoryDirectory.exists()) {
89 repositoryDirectory.mkdirs();
90 }
91
92 try {
93 getLogger().debug("Assembling repository to: " + repositoryDirectory);
94 repositoryAssembler.buildRemoteRepository(repositoryDirectory, wrap(repository), wrap(configSource));
95 getLogger().debug("Finished assembling repository to: " + repositoryDirectory);
96 } catch (final RepositoryAssemblyException e) {
97 throw new ArchiveCreationException("Failed to assemble repository: " + e.getMessage(), e);
98 }
99
100 final AddDirectoryTask task = new AddDirectoryTask(repositoryDirectory);
101
102 final int dirMode = TypeConversionUtils.modeToInt(repository.getDirectoryMode(), getLogger());
103 if (dirMode != -1) {
104 task.setDirectoryMode(dirMode);
105 }
106
107 final int fileMode = TypeConversionUtils.modeToInt(repository.getFileMode(), getLogger());
108 if (fileMode != -1) {
109 task.setFileMode(fileMode);
110 }
111
112 task.setOutputDirectory(outputDirectory);
113
114 task.execute(archiver, configSource);
115 }
116 }
117
118 private RepositoryBuilderConfigSource wrap( final AssemblerConfigurationSource configSource )
119 {
120 return new RepoBuilderConfigSourceWrapper( configSource );
121 }
122
123 private RepositoryInfo wrap( final Repository repository )
124 {
125 return new RepoInfoWrapper( repository );
126 }
127
128 }