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