]> source.dussan.org Git - archiva.git/blob
5bd7e78a8299ad02f50dc3b8460a332b0133feda
[archiva.git] /
1 package org.apache.maven.archiva.policies;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.commons.lang.StringUtils;
23 import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
24 import org.codehaus.plexus.logging.AbstractLogEnabled;
25
26 import java.io.File;
27 import java.util.HashSet;
28 import java.util.Properties;
29 import java.util.Set;
30
31 /**
32  * {@link PreDownloadPolicy} to check if the requested url has failed before. 
33  *
34  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
35  * @version $Id$
36  * 
37  * @plexus.component role="org.apache.maven.archiva.policies.PreDownloadPolicy"
38  *                   role-hint="cache-failures"
39  */
40 public class CachedFailuresPolicy
41     extends AbstractLogEnabled
42     implements PreDownloadPolicy
43 {
44     /**
45      * The CACHED policy indicates that if the URL provided exists in the
46      * cached failures pool, then the policy fails, and the download isn't even 
47      * attempted.
48      */
49     public static final String CACHED = "cached";
50
51     /**
52      * @plexus.requirement role-hint="default"
53      */
54     private UrlFailureCache urlFailureCache;
55
56     private Set validPolicyCodes = new HashSet();
57
58     public CachedFailuresPolicy()
59     {
60         validPolicyCodes.add( IGNORED );
61         validPolicyCodes.add( CACHED );
62     }
63
64     public boolean applyPolicy( String policySetting, Properties request, File localFile )
65     {
66         if ( !validPolicyCodes.contains( policySetting ) )
67         {
68             // No valid code? false it is then.
69             getLogger().error( "Unknown checksum policyCode [" + policySetting + "]" );
70             return false;
71         }
72
73         if ( IGNORED.equals( policySetting ) )
74         {
75             // Ignore.
76             return true;
77         }
78
79         String url = request.getProperty( "url" );
80
81         if ( StringUtils.isNotBlank( url ) )
82         {
83             if ( urlFailureCache.hasFailedBefore( url ) )
84             {
85                 return false;
86             }
87         }
88
89         return true;
90     }
91
92     public String getDefaultPolicySetting()
93     {
94         return IGNORED;
95     }
96 }