1package org.apache.archiva.reports;
23/*4 * Licensed to the Apache Software Foundation (ASF) under one5 * or more contributor license agreements. See the NOTICE file6 * distributed with this work for additional information7 * regarding copyright ownership. The ASF licenses this file8 * to you under the Apache License, Version 2.0 (the9 * "License"); you may not use this file except in compliance10 * with the License. You may obtain a copy of the License at11 *12 * http://www.apache.org/licenses/LICENSE-2.013 *14 * Unless required by applicable law or agreed to in writing,15 * software distributed under the License is distributed on an16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY17 * KIND, either express or implied. See the License for the18 * specific language governing permissions and limitations19 * under the License.20 */2122import org.apache.archiva.metadata.model.ProjectVersionMetadata;
23import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
24import org.apache.archiva.metadata.repository.MetadataRepository;
25import org.apache.archiva.metadata.repository.MetadataRepositoryException;
26import org.apache.archiva.metadata.repository.RepositorySession;
27import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataException;
28import org.apache.archiva.repository.events.RepositoryListener;
29import org.slf4j.Logger;
30import org.slf4j.LoggerFactory;
31import org.springframework.stereotype.Service;
3233/**34 * Process repository management events and respond appropriately.35 *36 */37 @Service( "repositoryListener#problem-reports" )
38publicclassRepositoryProblemEventListener39implementsRepositoryListener40 {
41private Logger log = LoggerFactory.getLogger( RepositoryProblemEventListener.class );
4243// FIXME: move to session44 @Override
45publicvoid deleteArtifact( MetadataRepository metadataRepository, String repositoryId, String namespace,
46 String project, String version, String id )
47 {
48 String name = RepositoryProblemFacet.createName( namespace, project, version, id );
4950try51 {
52 metadataRepository.removeMetadataFacet( repositoryId, RepositoryProblemFacet.FACET_ID, name );
53 }
54catch ( MetadataRepositoryException e )
55 {
56 log.warn( "Unable to remove metadata facet as part of delete event: {}", e.getMessage(), e );
57 }
58 }
5960 @Override
61publicvoid addArtifact( RepositorySession session, String repoId, String namespace, String projectId,
62ProjectVersionMetadata metadata )
63 {
64// Remove problems associated with this version on successful addition65// TODO: this removes all problems - do we need something that just remove the problems we know are corrected?66 String name = RepositoryProblemFacet.createName( namespace, projectId, metadata.getId(), null );
67try68 {
69MetadataRepository metadataRepository = session.getRepository();
70 metadataRepository.removeMetadataFacet( repoId, RepositoryProblemFacet.FACET_ID, name );
71 session.markDirty();
72 }
73catch ( MetadataRepositoryException e )
74 {
75 log.warn( "Unable to remove repository problem facets for the version being corrected in the repository: {}",
76 e.getMessage(), e );
77 }
78 }
7980 @Override
81publicvoid addArtifactProblem( RepositorySession session, String repoId, String namespace, String projectId,
82 String projectVersion, RepositoryStorageMetadataException exception )
83 {
84RepositoryProblemFacet problem = newRepositoryProblemFacet();
85 problem.setMessage( exception.getMessage() );
86 problem.setProject( projectId );
87 problem.setNamespace( namespace );
88 problem.setRepositoryId( repoId );
89 problem.setVersion( projectVersion );
90 problem.setProblem( exception.getId() );
9192try93 {
94 session.getRepository().addMetadataFacet( repoId, problem );
95 session.markDirty();
96 }
97catch ( MetadataRepositoryException e )
98 {
99 log.warn( "Unable to add repository problem facets for the version being removed: {}", e.getMessage(), e );
100 }
101 }
102103 }