]> source.dussan.org Git - archiva.git/blob
73e77432023f9b9848674a9c4b67c4c3b1d87e46
[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
34     public CachedRepositoryQueryLayer( ArtifactRepository repository )
35     {
36         this.repository = repository;
37
38         cache = new Cache( 0.5 );
39     }
40
41     public double getCacheHitRate()
42     {
43         return cache.getHitRate();
44     }
45
46     public boolean containsArtifact( Artifact artifact )
47     {
48         boolean artifactFound = true;
49
50         // @todo should check for snapshot artifacts
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 }