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