]> source.dussan.org Git - archiva.git/commitdiff
Adding repository layer components for refactoring work
authorJoakim Erdfelt <joakime@apache.org>
Mon, 26 Feb 2007 17:05:04 +0000 (17:05 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Mon, 26 Feb 2007 17:05:04 +0000 (17:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@511901 13f79535-47bb-0310-9956-ffa450edef68

archiva-repository-layer/pom.xml
archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/Cache.java [deleted file]
archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/DefinedRepositories.java [new file with mode: 0644]
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/Repository.java [new file with mode: 0644]
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryException.java [new file with mode: 0644]
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java [new file with mode: 0644]
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java [new file with mode: 0644]
archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CacheTest.java [deleted file]
archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java
archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java [new file with mode: 0644]

index 961dc7b152070f1596e77ac22c86a17cfd4d8566..a0135a5c6faea46c4ea60c249fdbb1209b624785 100644 (file)
   <artifactId>archiva-repository-layer</artifactId>
   <name>Archiva Repository Interface Layer</name>
   <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.cache</groupId>
+      <artifactId>plexus-cache-ehcache</artifactId>
+      <version>1.0-alpha-1</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact</artifactId>
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/Cache.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/Cache.java
deleted file mode 100644 (file)
index 909c6fc..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Class to implement caching.
- */
-public class Cache
-{
-    private final Map cache;
-
-    private final double cacheHitRatio;
-
-    private final int cacheMaxSize;
-
-    private long cacheHits;
-
-    private long cacheMiss;
-
-    /**
-     * Caches all data and expires only the oldest data when the specified cache hit rate is reached.
-     */
-    public Cache( double cacheHitRatio )
-    {
-        this( cacheHitRatio, 0 );
-    }
-
-    /**
-     * Caches all data and expires only the oldest data when the maximum cache size is reached
-     */
-    public Cache( int cacheMaxSize )
-    {
-        this( (double) 1, cacheMaxSize );
-    }
-
-    /**
-     * Caches all data and expires only the oldest data when either the specified cache hit rate is reached
-     * or the maximum cache size is reached.
-     */
-    public Cache( double cacheHitRatio, int cacheMaxSize )
-    {
-        this.cacheHitRatio = cacheHitRatio;
-        this.cacheMaxSize = cacheMaxSize;
-
-        if ( cacheMaxSize > 0 )
-        {
-            cache = new LinkedHashMap( cacheMaxSize );
-        }
-        else
-        {
-            cache = new LinkedHashMap();
-        }
-    }
-
-    /**
-     * Check if the specified key is already mapped to an object.
-     *
-     * @param key the key used to map the cached object
-     * @return true if the cache contains an object associated with the given key
-     */
-    public boolean containsKey( Object key )
-    {
-        boolean contains;
-        synchronized ( cache )
-        {
-            contains = cache.containsKey( key );
-
-            if ( contains )
-            {
-                cacheHits++;
-            }
-            else
-            {
-                cacheMiss++;
-            }
-        }
-
-        return contains;
-    }
-
-    /**
-     * Check for a cached object and return it if it exists. Returns null when the keyed object is not found
-     *
-     * @param key the key used to map the cached object
-     * @return the object mapped to the given key, or null if no cache object is mapped to the given key
-     */
-    public Object get( Object key )
-    {
-        Object retValue = null;
-
-        synchronized ( cache )
-        {
-            if ( cache.containsKey( key ) )
-            {
-                // remove and put: this promotes it to the top since we use a linked hash map
-                retValue = cache.remove( key );
-
-                cache.put( key, retValue );
-
-                cacheHits++;
-            }
-            else
-            {
-                cacheMiss++;
-            }
-        }
-
-        return retValue;
-    }
-
-    /**
-     * Cache the given value and map it using the given key
-     *
-     * @param key   the object to map the valued object
-     * @param value the object to cache
-     */
-    public void put( Object key, Object value )
-    {
-        // remove and put: this promotes it to the top since we use a linked hash map
-        synchronized ( cache )
-        {
-            if ( cache.containsKey( key ) )
-            {
-                cache.remove( key );
-            }
-
-            cache.put( key, value );
-        }
-
-        manageCache();
-    }
-
-    /**
-     * Compute for the efficiency of this cache.
-     *
-     * @return the ratio of cache hits to the cache misses to queries for cache objects
-     */
-    public double getHitRate()
-    {
-        synchronized ( cache )
-        {
-            return cacheHits == 0 && cacheMiss == 0 ? 0 : (double) cacheHits / (double) ( cacheHits + cacheMiss );
-        }
-    }
-
-    /**
-     * Get the total number of cache objects currently cached.
-     */
-    public int size()
-    {
-        return cache.size();
-    }
-
-    /**
-     * Empty the cache and reset the cache hit rate
-     */
-    public void clear()
-    {
-        synchronized ( cache )
-        {
-            cacheHits = 0;
-            cacheMiss = 0;
-            cache.clear();
-        }
-    }
-
-    private void manageCache()
-    {
-        synchronized ( cache )
-        {
-            Iterator iterator = cache.entrySet().iterator();
-            if ( cacheMaxSize == 0 )
-            {
-                //desired HitRatio is reached, we can trim the cache to conserve memory
-                if ( cacheHitRatio <= getHitRate() )
-                {
-                    iterator.next();
-                    iterator.remove();
-                }
-            }
-            else if ( cache.size() > cacheMaxSize )
-            {
-                // maximum cache size is reached
-                while ( cache.size() > cacheMaxSize )
-                {
-                    iterator.next();
-                    iterator.remove();
-                }
-            }
-            else
-            {
-                //even though the max has not been reached, the desired HitRatio is already reached,
-                //    so we can trim the cache to conserve memory
-                if ( cacheHitRatio <= getHitRate() )
-                {
-                    iterator.next();
-                    iterator.remove();
-                }
-            }
-        }
-    }
-
-}
index 18a8eb2efa93299c004955a6690e31ef70584df8..953827b18e9c3ef735890b5e77c8334de006c9ac 100644 (file)
@@ -21,29 +21,32 @@ package org.apache.maven.archiva.layer;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.cache.Cache;
 
 import java.util.List;
 
-
 /**
- * CachedRepositoryQueryLayer 
+ * CachedRepositoryQueryLayer - simple wrapper around another non-cached Repository Query Layer.
  *
  * @version $Id$
+ * @plexus.component role="org.apache.maven.archiva.layer.RepositoryQueryLayer" role-hint="cached"
  */
 public class CachedRepositoryQueryLayer
     implements RepositoryQueryLayer
 {
+    /**
+     * @plexus.requirement
+     */
     private Cache cache;
 
-    public static final double CACHE_HIT_RATIO = 0.5;
-
+    /**
+     * @plexus.requirement
+     */
     private RepositoryQueryLayer layer;
 
     public CachedRepositoryQueryLayer( RepositoryQueryLayer layer )
     {
         this.layer = layer;
-
-        cache = new Cache( CACHE_HIT_RATIO );
     }
 
     public CachedRepositoryQueryLayer( RepositoryQueryLayer layer, Cache cache )
@@ -52,11 +55,6 @@ public class CachedRepositoryQueryLayer
         this.layer = layer;
     }
 
-    public double getCacheHitRate()
-    {
-        return cache.getHitRate();
-    }
-
     public boolean containsArtifact( Artifact artifact )
     {
         boolean artifactFound = true;
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/DefinedRepositories.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/DefinedRepositories.java
new file mode 100644 (file)
index 0000000..fd99ae5
--- /dev/null
@@ -0,0 +1,74 @@
+package org.apache.maven.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * DefinedRepositories - maintains the list of defined repositories. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface DefinedRepositories
+{
+    /**
+     * Get the entire list of repositories.
+     * 
+     * @return the list of repositories.
+     */
+    public List getAllRepositories();
+    
+    /**
+     * Get the list of managed (local) repositories.
+     * 
+     * @return the list of managed (local) repositories.
+     */
+    public List getManagedRepositories();
+    
+    /**
+     * Get the list of remote repositories.
+     * 
+     * @return the list of remote repositories.
+     */
+    public List getRemoteRepositories();
+    
+    /**
+     * Add a repository.
+     * 
+     * @param repository the repository to add.
+     */
+    public void addRepository(Repository repository);
+    
+    /**
+     * Remove a repository.
+     * 
+     * @param repository the repository to add.
+     */
+    public void removeRepository(Repository repository);
+    
+    /**
+     * Get a repository using the provided repository key.
+     *  
+     * @param repositoryKey the repository key to find the repository via.
+     * @return the repository associated with the provided Repository Key, or null if not found.
+     */
+    public Repository getRepository( String repositoryKey );
+}
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/Repository.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/Repository.java
new file mode 100644 (file)
index 0000000..920b68d
--- /dev/null
@@ -0,0 +1,211 @@
+package org.apache.maven.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+
+/**
+ * Repository 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class Repository
+    implements ArtifactRepository
+{
+    protected String id;
+
+    protected String name;
+
+    protected String source;
+
+    protected RepositoryURL url;
+
+    protected ArtifactRepositoryLayout layout;
+
+    protected ArtifactRepositoryPolicy releases;
+
+    protected ArtifactRepositoryPolicy snapshots;
+
+    protected boolean blacklisted;
+
+    /* .\ Constructor \.__________________________________________________ */
+
+    /**
+     * Construct a Repository.
+     * 
+     * @param id the unique identifier for this repository.
+     * @param name the name for this repository.
+     * @param url the base URL for this repository (this should point to the top level URL for the entire repository)
+     * @param layout the layout technique for this repository.
+     */
+    public Repository( String id, String name, String url, ArtifactRepositoryLayout layout )
+    {
+        this.id = id;
+        this.name = name;
+        this.url = new RepositoryURL( url );
+        this.layout = layout;
+    }
+
+    /* .\ Information \.__________________________________________________ */
+
+    /**
+     * Get the unique ID for this repository.
+     * 
+     * @return the unique ID for this repository.
+     */
+    public String getId()
+    {
+        return id;
+    }
+
+    /**
+     * Get the Name of this repository.
+     * This is usually the human readable name for the repository.
+     * 
+     * @return the name of this repository.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    public String getUrl()
+    {
+        return url.toString();
+    }
+
+    public void setLayout( ArtifactRepositoryLayout layout )
+    {
+        this.layout = layout;
+    }
+
+    public ArtifactRepositoryLayout getLayout()
+    {
+        return layout;
+    }
+
+    public void setSource( String source )
+    {
+        this.source = source;
+    }
+
+    public String getSource()
+    {
+        return source;
+    }
+
+    /* .\ Tasks \.________________________________________________________ */
+
+    public String pathOf( Artifact artifact )
+    {
+        return getLayout().pathOf( artifact );
+    }
+
+    /* .\ State \.________________________________________________________ */
+
+    public void setBlacklisted( boolean blacklisted )
+    {
+        this.blacklisted = blacklisted;
+    }
+
+    public boolean isBlacklisted()
+    {
+        return blacklisted;
+    }
+
+    public boolean isManaged()
+    {
+        return this.url.getProtocol().equals( "file" );
+    }
+
+    public boolean isRemote()
+    {
+        return !this.url.getProtocol().equals( "file" );
+    }
+
+    public void setSnapshots( ArtifactRepositoryPolicy snapshots )
+    {
+        this.snapshots = snapshots;
+    }
+
+    public ArtifactRepositoryPolicy getSnapshots()
+    {
+        return snapshots;
+    }
+
+    public void setReleases( ArtifactRepositoryPolicy releases )
+    {
+        this.releases = releases;
+    }
+
+    public ArtifactRepositoryPolicy getReleases()
+    {
+        return releases;
+    }
+
+    public boolean equals( Object other )
+    {
+        return ( other == this || ( ( other instanceof Repository ) && ( (Repository) other ).getId().equals( getId() ) ) );
+    }
+
+    public int hashCode()
+    {
+        return getId().hashCode();
+    }
+
+    /* .\ ArtifactRepository Requirements \.______________________________ */
+
+    public String getBasedir()
+    {
+        return url.getPath();
+    }
+
+    public String getKey()
+    {
+        return getId();
+    }
+
+    public String getProtocol()
+    {
+        return url.getProtocol();
+    }
+
+    public boolean isUniqueVersion()
+    {
+        // TODO: Determine Importance
+        return false;
+    }
+
+    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+    {
+        return layout.pathOfRemoteRepositoryMetadata( artifactMetadata );
+    }
+
+    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+    {
+        return layout.pathOfLocalRepositoryMetadata( metadata, repository );
+    }
+
+}
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryException.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryException.java
new file mode 100644 (file)
index 0000000..0cafdc9
--- /dev/null
@@ -0,0 +1,52 @@
+package org.apache.maven.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * RepositoryException 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryException
+    extends Exception
+{
+
+    public RepositoryException()
+    {
+        super();
+    }
+
+    public RepositoryException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public RepositoryException( String message )
+    {
+        super( message );
+    }
+
+    public RepositoryException( Throwable cause )
+    {
+        super( cause );
+    }
+
+}
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java
new file mode 100644 (file)
index 0000000..13ed57f
--- /dev/null
@@ -0,0 +1,156 @@
+package org.apache.maven.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * RepositoryURL - Mutable (and protocol forgiving) URL object.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryURL
+{
+    private String url;
+
+    private String protocol;
+
+    private String host;
+
+    private String port;
+
+    private String username;
+
+    private String password;
+
+    private String path;
+
+    public RepositoryURL( String url )
+    {
+        this.url = url;
+
+        // .\ Parse the URL \.____________________________________________
+
+        int pos;
+
+        pos = url.indexOf( "://" );
+        if ( pos == ( -1 ) )
+        {
+            throw new IllegalArgumentException( "Invalid URL, unable to parse protocol:// from " + url );
+        }
+
+        protocol = url.substring( 0, pos );
+
+        // attempt to find the start of the 'path'
+        pos = url.indexOf( "/", protocol.length() + 3 );
+
+        // no path specified - ex "http://localhost"
+        if ( pos == ( -1 ) )
+        {
+            // set pos to end of string. (needed for 'middle section')
+            pos = url.length();
+            // default path
+            path = "/";
+        }
+        else
+        {
+            // get actual path.
+            path = url.substring( pos );
+        }
+
+        // get the middle section ( username : password @ hostname : port )
+        String middle = url.substring( protocol.length() + 3, pos );
+
+        pos = middle.indexOf( '@' );
+
+        // we have an authentication section.
+        if ( pos > 0 )
+        {
+            String authentication = middle.substring( 0, pos );
+            middle = middle.substring( pos + 1 ); // lop off authentication for host:port search
+
+            pos = authentication.indexOf( ':' );
+
+            // we have a password.
+            if ( pos > 0 )
+            {
+                username = authentication.substring( 0, pos );
+                password = authentication.substring( pos + 1 );
+            }
+            else
+            {
+                username = authentication;
+            }
+        }
+
+        pos = middle.indexOf( ':' );
+
+        // we have a defined port
+        if ( pos > 0 )
+        {
+            host = middle.substring( 0, pos );
+            port = middle.substring( pos + 1 );
+        }
+        else
+        {
+            host = middle;
+        }
+    }
+
+    public String toString()
+    {
+        return url;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public String getHost()
+    {
+        return host;
+    }
+
+    public String getPath()
+    {
+        return path;
+    }
+
+    public String getPort()
+    {
+        return port;
+    }
+
+    public String getProtocol()
+    {
+        return protocol;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+}
diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
new file mode 100644 (file)
index 0000000..345f33c
--- /dev/null
@@ -0,0 +1,41 @@
+package org.apache.maven.archiva.repository.connector;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.repository.Repository;
+
+import java.util.List;
+
+/**
+ * RepositoryConnector 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface RepositoryConnector
+{
+    public Repository getSourceRepository();
+
+    public Repository getTargetRepository();
+
+    public List getBlacklist();
+    
+    public List getWhitelist();
+}
diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CacheTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CacheTest.java
deleted file mode 100644 (file)
index 6f76c7c..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import junit.framework.TestCase;
-
-/**
- *
- */
-public class CacheTest
-    extends TestCase
-{
-    private Cache cache;
-
-    private static final double CACHE_HIT_RATIO = 0.5;
-
-    private static final double CACHE_HIT_RATIO_THRESHOLD = 0.75;
-
-    public void testCacheManagementBasedOnHitsRatio()
-    {
-        cache = new Cache( CACHE_HIT_RATIO );
-        newCacheObjectTests();
-
-        String key = "key";
-        String value = "value";
-        for ( int ctr = 1; ctr < 10; ctr++ )
-        {
-            cache.put( key + ctr, value + ctr );
-        }
-
-        while ( cache.getHitRate() < CACHE_HIT_RATIO_THRESHOLD )
-        {
-            cache.get( "key2" );
-        }
-        cache.put( "key10", "value10" );
-        assertNull( "first key must be expired", cache.get( "key1" ) );
-    }
-
-    public void testCacheManagementBasedOnCacheSize()
-    {
-        cache = new Cache( 9 );
-        newCacheObjectTests();
-
-        String key = "key";
-        String value = "value";
-        for ( int ctr = 1; ctr < 10; ctr++ )
-        {
-            cache.put( key + ctr, value + ctr );
-        }
-
-        cache.put( "key10", "value10" );
-        assertNull( "first key must be expired", cache.get( "key1" ) );
-        assertEquals( "check cache size to be max size", 9, cache.size() );
-    }
-
-    public void testCacheManagementBasedOnCacheSizeAndHitRate()
-    {
-        cache = new Cache( CACHE_HIT_RATIO, 9 );
-        newCacheObjectTests();
-
-        String key = "key";
-        String value = "value";
-        for ( int ctr = 1; ctr < 5; ctr++ )
-        {
-            cache.put( key + ctr, value + ctr );
-        }
-
-        while ( cache.getHitRate() < CACHE_HIT_RATIO )
-        {
-            cache.get( "key3" );
-        }
-
-        cache.put( "key10", "value10" );
-        assertNull( "first key must be expired", cache.get( "key1" ) );
-
-        while ( cache.getHitRate() >= CACHE_HIT_RATIO )
-        {
-            cache.get( "key11" );
-        }
-
-        for ( int ctr = 5; ctr < 10; ctr++ )
-        {
-            cache.put( key + ctr, value + ctr );
-        }
-
-        cache.put( "key11", "value11" );
-        assertNull( "second key must be expired", cache.get( "key2" ) );
-        assertEquals( "check cache size to be max size", 9, cache.size() );
-    }
-
-    public void testCacheOnRedundantData()
-    {
-        cache = new Cache( CACHE_HIT_RATIO, 9 );
-        newCacheObjectTests();
-
-        String key = "key";
-        String value = "value";
-        for ( int ctr = 1; ctr < 10; ctr++ )
-        {
-            cache.put( key + ctr, value + ctr );
-        }
-
-        cache.put( "key1", "value1" );
-        cache.put( "key10", "value10" );
-        assertNull( "second key must be gone", cache.get( "key2" ) );
-        assertEquals( "check cache size to be max size", 9, cache.size() );
-    }
-
-    private void newCacheObjectTests()
-    {
-        assertEquals( (double) 0, cache.getHitRate(), 0 );
-        assertEquals( "check cache size", 0, cache.size() );
-
-        String value = "value";
-        String key = "key";
-
-        cache.put( key, value );
-        assertEquals( "check cache hit", value, cache.get( key ) );
-        assertEquals( (double) 1, cache.getHitRate(), 0 );
-        assertEquals( "check cache size", 1, cache.size() );
-        assertNull( "check cache miss", cache.get( "none" ) );
-        assertEquals( CACHE_HIT_RATIO, cache.getHitRate(), 0 );
-        cache.clear();
-        assertNull( "check flushed object", cache.get( "key" ) );
-        assertEquals( (double) 0, cache.getHitRate(), 0 );
-        assertEquals( "check flushed cache size", 0, cache.size() );
-        cache.clear();
-    }
-}
index 87006dcf1306fdcb379dd26e7129e13c60a53e2e..b5435fc62119707f70a201447bd18dcd2c300d1f 100644 (file)
@@ -1,5 +1,7 @@
 package org.apache.maven.archiva.layer;
 
+import org.codehaus.plexus.cache.Cache;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -32,7 +34,7 @@ public class CachedRepositoryQueryLayerTest
     {
         super.setUp();
 
-        cache = new Cache( CachedRepositoryQueryLayer.CACHE_HIT_RATIO );
+        cache = (Cache) lookup( Cache.ROLE, "test" );
 
         queryLayer = new CachedRepositoryQueryLayer( new DefaultRepositoryQueryLayer( repository ), cache );
     }
@@ -40,25 +42,16 @@ public class CachedRepositoryQueryLayerTest
     public void testUseFileCache()
     {
         testContainsArtifactTrue();
-        assertEquals( 0, cache.getHitRate(), 0 );
-        testContainsArtifactTrue();
-        assertEquals( CachedRepositoryQueryLayer.CACHE_HIT_RATIO, cache.getHitRate(), 0 );
     }
 
     public void testUseMetadataCache()
         throws Exception
     {
         testArtifactVersions();
-        assertEquals( 0, cache.getHitRate(), 0 );
-        testArtifactVersions();
-        assertEquals( CachedRepositoryQueryLayer.CACHE_HIT_RATIO, cache.getHitRate(), 0 );
     }
 
     public void testUseFileCacheOnSnapshot()
     {
         testContainsSnapshotArtifactTrue();
-        assertEquals( 0, cache.getHitRate(), 0 );
-        testContainsSnapshotArtifactTrue();
-        assertEquals( CachedRepositoryQueryLayer.CACHE_HIT_RATIO, cache.getHitRate(), 0 );
     }
 }
diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java
new file mode 100644 (file)
index 0000000..af2efe5
--- /dev/null
@@ -0,0 +1,89 @@
+package org.apache.maven.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.MalformedURLException;
+
+import junit.framework.TestCase;
+
+/**
+ * RepositoryURLTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryURLTest
+    extends TestCase
+{
+    private void assertURL( String actualURL, String protocol, String username, String password, String hostname,
+                            String port, String path )
+    {
+        RepositoryURL url = new RepositoryURL( actualURL );
+
+        assertEquals( protocol, url.getProtocol() );
+        assertEquals( username, url.getUsername() );
+        assertEquals( password, url.getPassword() );
+        assertEquals( hostname, url.getHost() );
+        assertEquals( port, url.getPort() );
+        assertEquals( path, url.getPath() );
+    }
+
+    public void testProtocolHttp()
+        throws MalformedURLException
+    {
+        assertURL( "http://localhost/path/to/resource.txt", "http", null, null, "localhost", null,
+                   "/path/to/resource.txt" );
+    }
+
+    public void testProtocolWagonWebdav()
+        throws MalformedURLException
+    {
+        assertURL( "dav:http://localhost/path/to/resource.txt", "dav:http", null, null, "localhost", null,
+                   "/path/to/resource.txt" );
+    }
+
+    public void testProtocolHttpWithPort()
+        throws MalformedURLException
+    {
+        assertURL( "http://localhost:9090/path/to/resource.txt", "http", null, null, "localhost", "9090",
+                   "/path/to/resource.txt" );
+    }
+
+    public void testProtocolHttpWithUsername()
+        throws MalformedURLException
+    {
+        assertURL( "http://user@localhost/path/to/resource.txt", "http", "user", null, "localhost", null,
+                   "/path/to/resource.txt" );
+    }
+
+    public void testProtocolHttpWithUsernamePassword()
+        throws MalformedURLException
+    {
+        assertURL( "http://user:pass@localhost/path/to/resource.txt", "http", "user", "pass", "localhost", null,
+                   "/path/to/resource.txt" );
+    }
+
+    public void testProtocolHttpWithUsernamePasswordPort()
+        throws MalformedURLException
+    {
+        assertURL( "http://user:pass@localhost:9090/path/to/resource.txt", "http", "user", "pass", "localhost", "9090",
+                   "/path/to/resource.txt" );
+    }
+}