]> source.dussan.org Git - archiva.git/blob
9453588e9c3978e80945d010a6768644e7e449d0
[archiva.git] /
1 package org.apache.maven.archiva.layer;
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.Artifact;
20 import org.apache.maven.artifact.repository.ArtifactRepository;
21
22 import java.util.List;
23
24
25 /**
26  *
27  */
28 public class CachedRepositoryQueryLayer
29     implements RepositoryQueryLayer
30 {
31     private Cache cache;
32
33     public static final double CACHE_HIT_RATIO = 0.5;
34
35     private RepositoryQueryLayer layer;
36
37     public CachedRepositoryQueryLayer( RepositoryQueryLayer layer )
38     {
39         this.layer = layer;
40
41         cache = new Cache( CACHE_HIT_RATIO );
42     }
43
44     public CachedRepositoryQueryLayer( RepositoryQueryLayer layer, Cache cache )
45     {
46         this.cache = cache;
47         this.layer = layer;
48     }
49
50     public double getCacheHitRate()
51     {
52         return cache.getHitRate();
53     }
54
55     public boolean containsArtifact( Artifact artifact )
56     {
57         boolean artifactFound = true;
58
59         String artifactPath = layer.getRepository().pathOf( artifact );
60
61         if ( cache.get( artifactPath ) == null )
62         {
63             artifactFound = layer.containsArtifact( artifact );
64             if ( artifactFound )
65             {
66                 cache.put( artifactPath, artifactPath );
67             }
68         }
69
70         return artifactFound;
71     }
72
73     public List getVersions( Artifact artifact )
74         throws RepositoryQueryLayerException
75     {
76         List list = (List) cache.get( artifact.getId() );
77
78         if ( list == null )
79         {
80             list = layer.getVersions( artifact );
81             cache.put( artifact.getId(), list );
82         }
83
84         return list;
85     }
86
87     public ArtifactRepository getRepository()
88     {
89         return layer.getRepository();
90     }
91 }