1 package org.apache.archiva.reports;
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.ProjectVersionMetadata;
23 import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
24 import org.apache.archiva.metadata.repository.MetadataRepository;
25 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
26 import org.apache.archiva.metadata.repository.RepositorySession;
27 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
28 import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataException;
29 import org.apache.archiva.metadata.audit.RepositoryListener;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32 import org.springframework.stereotype.Service;
33
34 import javax.inject.Inject;
35
36
37
38
39
40 @Service( "repositoryListener#problem-reports" )
41 public class RepositoryProblemEventListener
42 implements RepositoryListener
43 {
44 private Logger log = LoggerFactory.getLogger( RepositoryProblemEventListener.class );
45
46 @Inject
47 private RepositorySessionFactory repositorySessionFactory;
48
49
50 @Override
51 public void deleteArtifact( MetadataRepository metadataRepository, String repositoryId, String namespace,
52 String project, String version, String id )
53 {
54 String name = RepositoryProblemFacet.createName( namespace, project, version, id );
55
56 try(RepositorySession session = repositorySessionFactory.createSession())
57 {
58 metadataRepository.removeMetadataFacet(session , repositoryId, RepositoryProblemFacet.FACET_ID, name );
59 }
60 catch ( MetadataRepositoryException e )
61 {
62 log.warn( "Unable to remove metadata facet as part of delete event: {}", e.getMessage(), e );
63 }
64 }
65
66 @Override
67 public void addArtifact( RepositorySession session, String repoId, String namespace, String projectId,
68 ProjectVersionMetadata metadata )
69 {
70
71
72 String name = RepositoryProblemFacet.createName( namespace, projectId, metadata.getId(), null );
73 try
74 {
75 MetadataRepository metadataRepository = session.getRepository();
76 metadataRepository.removeMetadataFacet(session , repoId, RepositoryProblemFacet.FACET_ID, name );
77 session.markDirty();
78 }
79 catch ( MetadataRepositoryException e )
80 {
81 log.warn( "Unable to remove repository problem facets for the version being corrected in the repository: {}",
82 e.getMessage(), e );
83 }
84 }
85
86 @Override
87 public void addArtifactProblem( RepositorySession session, String repoId, String namespace, String projectId,
88 String projectVersion, RepositoryStorageMetadataException exception )
89 {
90 RepositoryProblemFacetsitoryProblemFacet.html#RepositoryProblemFacet">RepositoryProblemFacet problem = new RepositoryProblemFacet();
91 problem.setMessage( exception.getMessage() );
92 problem.setProject( projectId );
93 problem.setNamespace( namespace );
94 problem.setRepositoryId( repoId );
95 problem.setVersion( projectVersion );
96 problem.setProblem( exception.getId() );
97
98 try
99 {
100 session.getRepository().addMetadataFacet(session , repoId, problem );
101 session.markDirty();
102 }
103 catch ( MetadataRepositoryException e )
104 {
105 log.warn( "Unable to add repository problem facets for the version being removed: {}", e.getMessage(), e );
106 }
107 }
108
109 }