]> source.dussan.org Git - archiva.git/blob
be090edc21848fccb44a443f69943360a54c5247
[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 java.io.File;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Properties;
27
28 import org.apache.commons.lang.StringUtils;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31 import org.springframework.stereotype.Service;
32
33 /**
34  * PropagateErrorsPolicy - a policy applied on error to determine how to treat the error.
35  *
36  * plexus.component role="org.apache.maven.archiva.policies.DownloadErrorPolicy"
37  * role-hint="propagate-errors"
38  */
39 @Service("downloadErrorPolicy#propagate-errors")
40 public class PropagateErrorsDownloadPolicy
41     implements DownloadErrorPolicy
42 {
43     private Logger log = LoggerFactory.getLogger( PropagateErrorsDownloadPolicy.class );
44     
45     /**
46      * Signifies any error should stop searching for other proxies.
47      */
48     public static final String STOP = "stop";
49
50     /**
51      * Propagate errors at the end after all are gathered, if there was no successful download from other proxies.
52      */
53     public static final String QUEUE = "queue error";
54
55     /**
56      * Ignore errors and treat as if it were not found.
57      */
58     public static final String IGNORE = "ignore";
59
60     private List<String> options = new ArrayList<String>();
61
62     public PropagateErrorsDownloadPolicy()
63     {
64         options.add( STOP );
65         options.add( QUEUE );
66         options.add( IGNORE );
67     }
68
69     public boolean applyPolicy( String policySetting, Properties request, File localFile, Exception exception,
70                                 Map<String, Exception> previousExceptions )
71         throws PolicyConfigurationException
72     {
73         if ( !options.contains( policySetting ) )
74         {
75             // Not a valid code.
76             throw new PolicyConfigurationException( "Unknown error policy setting [" + policySetting +
77                 "], valid settings are [" + StringUtils.join( options.iterator(), "," ) + "]" );
78         }
79
80         if ( IGNORE.equals( policySetting ) )
81         {
82             // Ignore.
83             log.debug( "Error policy set to IGNORE." );
84             return false;
85         }
86
87         String repositoryId = request.getProperty( "remoteRepositoryId" );
88         if ( STOP.equals( policySetting ) )
89         {
90             return true;
91         }
92
93         if ( QUEUE.equals( policySetting ) )
94         {
95             previousExceptions.put( repositoryId, exception );
96             return true;
97         }
98
99         throw new PolicyConfigurationException(
100             "Unable to process checksum policy of [" + policySetting + "], please file a bug report." );
101     }
102
103     public String getDefaultOption()
104     {
105         return QUEUE;
106     }
107
108     public String getId()
109     {
110         return "propagate-errors";
111     }
112
113     public String getName()
114     {
115         return "On remote error";
116     }
117
118     public List<String> getOptions()
119     {
120         return options;
121     }
122 }