]> source.dussan.org Git - archiva.git/blob
ff3aaa3ff1a9db73b7ad4bd40d1c0d3a6edf8d88
[archiva.git] /
1 package org.apache.maven.repository.proxy;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.maven.artifact.repository.ArtifactRepository;
20 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
21
22 import java.util.Calendar;
23 import java.util.HashMap;
24 import java.util.Map;
25
26 /**
27  * A proxied artifact repository - contains the artifact repository and additional information about
28  * the proxied repository.
29  *
30  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
31  */
32 public class ProxiedArtifactRepository
33 {
34     /**
35      * Whether to cache failures or not.
36      */
37     private boolean cacheFailures;
38
39     /**
40      * Whether failures on this repository cause the whole group to fail.
41      */
42     private boolean hardFail;
43
44     /**
45      * Whether to use the network proxy for any requests.
46      */
47     private boolean useNetworkProxy;
48
49     /**
50      * The artifact repository on the other end of the proxy.
51      */
52     private final ArtifactRepository repository;
53
54     /**
55      * Cache of failures that have already occurred, containing paths from the repository root. The value given
56      * specifies when the failure should expire.
57      */
58     private Map/*<String,Long>*/ failureCache = new HashMap/*<String,Long>*/();
59
60     /**
61      * A user friendly name for the repository.
62      */
63     private String name;
64
65     public ProxiedArtifactRepository( ArtifactRepository repository )
66     {
67         this.repository = repository;
68     }
69
70     public boolean isHardFail()
71     {
72         return hardFail;
73     }
74
75     public boolean isUseNetworkProxy()
76     {
77         return useNetworkProxy;
78     }
79
80     public boolean isCacheFailures()
81     {
82         return cacheFailures;
83     }
84
85     public ArtifactRepository getRepository()
86     {
87         return repository;
88     }
89
90     /**
91      * Check if there is a previously cached failure for requesting the given path.
92      *
93      * @param path the path
94      * @return whether there is a failure
95      */
96     public boolean isCachedFailure( String path )
97     {
98         boolean failed = false;
99         if ( cacheFailures )
100         {
101             Long time = (Long) failureCache.get( path );
102             if ( time != null )
103             {
104                 if ( System.currentTimeMillis() < time.longValue() )
105                 {
106                     failed = true;
107                 }
108                 else
109                 {
110                     clearFailure( path );
111                 }
112             }
113         }
114         return failed;
115     }
116
117     /**
118      * Add a failure to the cache.
119      *
120      * @param path   the path that failed
121      * @param policy the policy for when the failure should expire
122      */
123     public void addFailure( String path, ArtifactRepositoryPolicy policy )
124     {
125         failureCache.put( path, new Long( calculateExpiryTime( policy ) ) );
126     }
127
128     private long calculateExpiryTime( ArtifactRepositoryPolicy policy )
129     {
130         String updatePolicy = policy.getUpdatePolicy();
131         long time;
132         if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
133         {
134             time = 0;
135         }
136         else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( updatePolicy ) )
137         {
138             // Get midnight boundary
139             Calendar cal = Calendar.getInstance();
140             cal.set( Calendar.HOUR_OF_DAY, 0 );
141             cal.set( Calendar.MINUTE, 0 );
142             cal.set( Calendar.SECOND, 0 );
143             cal.set( Calendar.MILLISECOND, 0 );
144             cal.add( Calendar.DAY_OF_MONTH, 1 );
145             time = cal.getTime().getTime();
146         }
147         else if ( updatePolicy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
148         {
149             String s = updatePolicy.substring( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
150             int minutes = Integer.valueOf( s ).intValue();
151             Calendar cal = Calendar.getInstance();
152             cal.add( Calendar.MINUTE, minutes );
153             time = cal.getTime().getTime();
154         }
155         else
156         {
157             // else assume "never"
158             time = Long.MAX_VALUE;
159         }
160         return time;
161     }
162
163     /**
164      * Remove a failure.
165      *
166      * @param path the path that had previously failed
167      */
168     public void clearFailure( String path )
169     {
170         failureCache.remove( path );
171     }
172
173     public String getName()
174     {
175         return name;
176     }
177
178     public void setCacheFailures( boolean cacheFailures )
179     {
180         this.cacheFailures = cacheFailures;
181     }
182
183     public void setHardFail( boolean hardFail )
184     {
185         this.hardFail = hardFail;
186     }
187
188     public void setUseNetworkProxy( boolean useNetworkProxy )
189     {
190         this.useNetworkProxy = useNetworkProxy;
191     }
192
193     public void setName( String name )
194     {
195         this.name = name;
196     }
197 }