1 package org.apache.archiva.metadata.repository.stats.model;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.archiva.metadata.model.ArtifactMetadata;
23 import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
24 import org.apache.archiva.metadata.repository.MetadataRepository;
25 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
26 import org.apache.archiva.metadata.repository.MetadataResolutionException;
27 import org.apache.archiva.metadata.repository.RepositorySession;
28
29 import java.util.Collection;
30
31
32
33
34
35
36
37
38
39
40
41 public class RepositoryWalkingStatisticsProvider implements RepositoryStatisticsProvider
42 {
43
44
45
46
47
48
49
50
51
52
53
54 @Override
55 public void populateStatistics( RepositorySession repositorySession, MetadataRepository metadataRepository, String repositoryId,
56 RepositoryStatistics repositoryStatistics )
57 throws MetadataRepositoryException
58 {
59 try
60 {
61 for ( String ns : metadataRepository.getRootNamespaces( repositorySession, repositoryId ) )
62 {
63 walkRepository( repositorySession, metadataRepository, repositoryStatistics, repositoryId, ns );
64 }
65 }
66 catch ( MetadataResolutionException e )
67 {
68 throw new MetadataRepositoryException( e.getMessage(), e );
69 }
70 }
71
72 private void walkRepository( RepositorySession repositorySession, MetadataRepository metadataRepository, RepositoryStatistics stats, String repositoryId,
73 String ns )
74 throws MetadataResolutionException
75 {
76 for ( String namespace : metadataRepository.getChildNamespaces( repositorySession , repositoryId, ns ) )
77 {
78 walkRepository( repositorySession, metadataRepository, stats, repositoryId, ns + "." + namespace );
79 }
80
81 Collection<String> projects = metadataRepository.getProjects( repositorySession , repositoryId, ns );
82 if ( !projects.isEmpty() )
83 {
84 stats.setTotalGroupCount( stats.getTotalGroupCount() + 1 );
85 stats.setTotalProjectCount( stats.getTotalProjectCount() + projects.size() );
86
87 for ( String project : projects )
88 {
89 for ( String version : metadataRepository.getProjectVersions( repositorySession , repositoryId, ns, project ) )
90 {
91 for ( ArtifactMetadata artifact : metadataRepository.getArtifacts( repositorySession , repositoryId, ns,
92 project, version ) )
93 {
94 stats.setTotalArtifactCount( stats.getTotalArtifactCount() + 1 );
95 stats.setTotalArtifactFileSize( stats.getTotalArtifactFileSize() + artifact.getSize() );
96
97 MavenArtifactFacet facet =
98 (MavenArtifactFacet) artifact.getFacet( MavenArtifactFacet.FACET_ID );
99 if ( facet != null )
100 {
101 String type = facet.getType();
102 stats.setTotalCountForType( type, stats.getTotalCountForType( type ) + 1 );
103 }
104 }
105 }
106 }
107 }
108 }
109 }