1 package org.apache.archiva.policies;
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.policies.urlcache.UrlFailureCache;
23 import org.apache.archiva.repository.storage.StorageAsset;
24 import org.apache.commons.lang3.StringUtils;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.springframework.stereotype.Service;
28
29 import javax.inject.Inject;
30 import java.util.ArrayList;
31 import java.util.List;
32 import java.util.Properties;
33
34
35
36
37 @Service( "preDownloadPolicy#cache-failures" )
38 public class CachedFailuresPolicy
39 extends AbstractPolicy implements PreDownloadPolicy
40 {
41 private Logger log = LoggerFactory.getLogger( CachedFailuresPolicy.class );
42 private static final String ID = "cache-failures";
43
44
45
46
47
48 public static final StandardOption NO = StandardOption.NO;
49
50
51
52
53
54 public static final StandardOption YES = StandardOption.YES;
55
56 @Inject
57 private UrlFailureCache urlFailureCache;
58
59 private List<PolicyOption> options = new ArrayList<>( 2 );
60
61 public CachedFailuresPolicy()
62 {
63 super();
64 options.add( NO );
65 options.add( YES );
66 }
67
68 @Override
69 public void applyPolicy( PolicyOption policySetting, Properties request, StorageAsset localFile )
70 throws PolicyViolationException, PolicyConfigurationException
71 {
72 if ( !options.contains( policySetting ) )
73 {
74
75 throw new PolicyConfigurationException( "Unknown cache-failues policy setting [" + policySetting +
76 "], valid settings are [" + StringUtils.join(
77 options.iterator(), "," ) + "]" );
78 }
79
80 if ( NO.equals( policySetting ) )
81 {
82
83 log.debug( "OK to fetch, check-failures policy set to NO." );
84 return;
85 }
86
87 String url = request.getProperty( "url" );
88
89 if ( StringUtils.isNotBlank( url ) )
90 {
91 if ( urlFailureCache.hasFailedBefore( url ) )
92 {
93 throw new PolicyViolationException(
94 "NO to fetch, check-failures detected previous failure on url: " + url );
95 }
96 }
97
98 log.debug( "OK to fetch, check-failures detected no issues." );
99 }
100
101 @Override
102 public PolicyOption getDefaultOption()
103 {
104 return NO;
105 }
106
107 @Override
108 public String getId()
109 {
110 return ID;
111 }
112
113
114 @Override
115 public List<PolicyOption> getOptions()
116 {
117 return options;
118 }
119 }