}
private InstallResult install( SyncContext syncContext, RepositorySystemSession session, InstallRequest request )
throws InstallationException
{
InstallResult result = new InstallResult( request );
RequestTrace trace = DefaultRequestTrace.newChild( request.getTrace(), request );
List<MetadataGenerator> generators = getMetadataGenerators( session, request );
List<Artifact> artifacts = new ArrayList<Artifact>( request.getArtifacts() );
IdentityHashMap<Metadata, Object> processedMetadata = new IdentityHashMap<Metadata, Object>();
List<Metadata> metadatas = Utils.prepareMetadata( generators, artifacts );
syncContext.acquire( artifacts, Utils.combine( request.getMetadata(), metadatas ) );
for ( Metadata metadata : metadatas )
{
install( session, trace, metadata );
processedMetadata.put( metadata, null );
result.addMetadata( metadata );
}
for ( int i = 0; i < artifacts.size(); i++ )
{
Artifact artifact = artifacts.get( i );
for ( MetadataGenerator generator : generators )
{
artifact = generator.transformArtifact( artifact );
}
artifacts.set( i, artifact );
install( session, trace, artifact );
result.addArtifact( artifact );
}
metadatas = Utils.finishMetadata( generators, artifacts );
syncContext.acquire( null, metadatas );
for ( Metadata metadata : metadatas )
{
install( session, trace, metadata );
processedMetadata.put( metadata, null );
result.addMetadata( metadata );
}
for ( Metadata metadata : request.getMetadata() )
{
if ( !processedMetadata.containsKey( metadata ) )
{
install( session, trace, metadata );
result.addMetadata( metadata );
}
}
return result;
}