]> source.dussan.org Git - archiva.git/blob
f4bf85ff6dca9c100304c8326565e4b523db02ae
[archiva.git] /
1 package org.apache.maven.repository.reporting;
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 import org.apache.maven.artifact.repository.metadata.Metadata;
22 import org.apache.maven.artifact.repository.metadata.Snapshot;
23
24
25 /**
26  * 
27  */
28 public class CachedRepositoryQueryLayer
29     extends AbstractRepositoryQueryLayer
30 {
31     private Cache cache;
32
33     private static final double CACHE_HIT_RATIO = 0.5;
34
35
36     public CachedRepositoryQueryLayer( ArtifactRepository repository )
37     {
38         this.repository = repository;
39
40         cache = new Cache( CACHE_HIT_RATIO );
41     }
42
43     public double getCacheHitRate()
44     {
45         return cache.getHitRate();
46     }
47
48     public boolean containsArtifact( Artifact artifact )
49     {
50         boolean artifactFound = true;
51
52         String artifactPath = repository.getBasedir() + "/" + repository.pathOf( artifact );
53
54         if ( cache.get( artifactPath ) == null )
55         {
56             artifactFound = super.containsArtifact( artifact );
57             if ( artifactFound )
58             {
59                 cache.put( artifactPath, artifactPath );
60             }
61         }
62
63         return artifactFound;
64     }
65
66     public boolean containsArtifact( Artifact artifact, Snapshot snapshot )
67     {
68         boolean artifactFound = true;
69
70         String path = getSnapshotArtifactRepositoryPath( artifact, snapshot );
71
72         if ( cache.get( path ) == null )
73         {
74             artifactFound = super.containsArtifact( artifact, snapshot );
75             if ( artifactFound )
76             {
77                 cache.put( path, path );
78             }
79         }
80
81         return artifactFound;
82     }
83
84     /**
85      * Override method to utilize the cache
86      */
87     protected Metadata getMetadata( Artifact artifact )
88         throws RepositoryQueryLayerException
89     {
90         Metadata metadata = (Metadata) cache.get( artifact.getId() );
91
92         if ( metadata == null )
93         {
94             metadata = super.getMetadata( artifact );
95             cache.put( artifact.getId(), metadata );
96         }
97
98         return metadata;
99     }
100 }