You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/03/15 23:44:50 UTC

svn commit: r518797 - in /maven/archiva/branches/archiva-jpox-database-refactor: archiva-common/src/main/java/org/apache/maven/archiva/common/consumers/ archiva-common/src/main/java/org/apache/maven/archiva/common/utils/ archiva-database/src/main/java/...

Author: joakime
Date: Thu Mar 15 15:44:49 2007
New Revision: 518797

URL: http://svn.apache.org/viewvc?view=rev&rev=518797
Log:
Furthor work against BidirectionalLayout

Added:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java
      - copied, changed from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/RepositoryURL.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java
      - copied, changed from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java
      - copied, changed from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java
      - copied, changed from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java   (with props)
Removed:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/consumers/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/RepositoryURL.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArchivaArtifact.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArchivaRepository.java
Modified:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/pom.xml
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java Thu Mar 15 15:44:49 2007
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.ArchivaRepositoryModel;
 import org.apache.maven.archiva.model.RepositoryContent;
 
 import java.util.List;
@@ -56,21 +56,21 @@
 
     /* .\ Archiva Repository \.____________________________________________________________ */
 
-    public ArchivaRepository createRepository( String id, String url );
+    public ArchivaRepositoryModel createRepository( String id, String url );
 
-    public List /*<ArchivaRepository>*/getRepositories()
+    public List /*<ArchivaRepositoryModel>*/getRepositories()
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
-    public ArchivaRepository getRepository( String id )
+    public ArchivaRepositoryModel getRepository( String id )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
     public List queryRepository( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
-    public ArchivaRepository saveRepository( ArchivaRepository repository )
+    public ArchivaRepositoryModel saveRepository( ArchivaRepositoryModel repository )
         throws ArchivaDatabaseException;
 
-    public void deleteRepository( ArchivaRepository repository )
+    public void deleteRepository( ArchivaRepositoryModel repository )
         throws ArchivaDatabaseException;
 
     /* .\ Repository Content \.____________________________________________________________ */
@@ -93,18 +93,18 @@
 
     /* .\ Archiva Artifact \. _____________________________________________________________ */
 
-    public ArchivaArtifact createArtifact( RepositoryContent repoContent, String classifier, String type );
+    public ArchivaArtifactModel createArtifact( RepositoryContent repoContent, String classifier, String type );
 
-    public ArchivaArtifact getArtifact( RepositoryContent repoContent, String classifier, String type )
+    public ArchivaArtifactModel getArtifact( RepositoryContent repoContent, String classifier, String type )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
-    public List /*<ArchivaArtifact>*/queryArtifacts( Constraint constraint )
+    public List /*<ArchivaArtifactModel>*/queryArtifacts( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
-    public ArchivaArtifact saveArtifact( ArchivaArtifact artifact )
+    public ArchivaArtifactModel saveArtifact( ArchivaArtifactModel artifact )
         throws ArchivaDatabaseException;
 
-    public void deleteArtifact( ArchivaArtifact artifact )
+    public void deleteArtifact( ArchivaArtifactModel artifact )
         throws ArchivaDatabaseException;
 
 }

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java Thu Mar 15 15:44:49 2007
@@ -4,9 +4,8 @@
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.Constraint;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
-import org.apache.maven.archiva.database.constraints.ArchivaRepositoryByUrlConstraint;
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.ArchivaRepositoryModel;
 import org.apache.maven.archiva.model.RepositoryContent;
 import org.apache.maven.archiva.model.RepositoryContentKey;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -33,9 +32,9 @@
 
     /* .\ Archiva Repository \.____________________________________________________________ */
 
-    public ArchivaRepository createRepository( String id, String url )
+    public ArchivaRepositoryModel createRepository( String id, String url )
     {
-        ArchivaRepository repo;
+        ArchivaRepositoryModel repo;
 
         try
         {
@@ -43,7 +42,7 @@
         }
         catch ( ArchivaDatabaseException e )
         {
-            repo = new ArchivaRepository();
+            repo = new ArchivaRepositoryModel();
             repo.setId( id );
             repo.setUrl( url );
         }
@@ -54,27 +53,27 @@
     public List getRepositories()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        return jdo.getAllObjects( ArchivaRepository.class );
+        return jdo.getAllObjects( ArchivaRepositoryModel.class );
     }
 
-    public ArchivaRepository getRepository( String id )
+    public ArchivaRepositoryModel getRepository( String id )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        return (ArchivaRepository) jdo.getObjectById( ArchivaRepository.class, id, null );
+        return (ArchivaRepositoryModel) jdo.getObjectById( ArchivaRepositoryModel.class, id, null );
     }
 
     public List queryRepository( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        return jdo.getAllObjects( ArchivaRepository.class, constraint );
+        return jdo.getAllObjects( ArchivaRepositoryModel.class, constraint );
     }
 
-    public ArchivaRepository saveRepository( ArchivaRepository repository )
+    public ArchivaRepositoryModel saveRepository( ArchivaRepositoryModel repository )
     {
-        return (ArchivaRepository) jdo.saveObject( repository );
+        return (ArchivaRepositoryModel) jdo.saveObject( repository );
     }
 
-    public void deleteRepository( ArchivaRepository repository )
+    public void deleteRepository( ArchivaRepositoryModel repository )
         throws ArchivaDatabaseException
     {
         jdo.removeObject( repository );
@@ -132,9 +131,9 @@
 
     /* .\ Archiva Artifact \. _____________________________________________________________ */
 
-    public ArchivaArtifact createArtifact( RepositoryContent repoContent, String classifier, String type )
+    public ArchivaArtifactModel createArtifact( RepositoryContent repoContent, String classifier, String type )
     {
-        ArchivaArtifact artifact;
+        ArchivaArtifactModel artifact;
 
         try
         {
@@ -142,7 +141,7 @@
         }
         catch ( ArchivaDatabaseException e )
         {
-            artifact = new ArchivaArtifact();
+            artifact = new ArchivaArtifactModel();
             artifact.setContentKey( repoContent );
             artifact.setClassifier( classifier );
             artifact.setType( type );
@@ -151,7 +150,7 @@
         return artifact;
     }
 
-    public ArchivaArtifact getArtifact( RepositoryContent repoContent, String classifier, String type )
+    public ArchivaArtifactModel getArtifact( RepositoryContent repoContent, String classifier, String type )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
         
@@ -165,14 +164,14 @@
         return null;
     }
 
-    public ArchivaArtifact saveArtifact( ArchivaArtifact artifact )
+    public ArchivaArtifactModel saveArtifact( ArchivaArtifactModel artifact )
         throws ArchivaDatabaseException
     {
         // TODO Auto-generated method stub
         return null;
     }
 
-    public void deleteArtifact( ArchivaArtifact artifact )
+    public void deleteArtifact( ArchivaArtifactModel artifact )
         throws ArchivaDatabaseException
     {
         // TODO Auto-generated method stub

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml Thu Mar 15 15:44:49 2007
@@ -20,15 +20,15 @@
           <name>Repositories</name>
           <version>1.0.0+</version>
           <association>
-            <type>ArchivaRepository</type>
+            <type>ArchivaRepositoryModel</type>
             <multiplicity>*</multiplicity>
           </association>
         </field>
       </fields>
     </class>
-    <class stash.storable="true">
-      <superClass>AbstractArchivaRepository</superClass>
-      <name>ArchivaRepository</name>
+    <class stash.storable="true"
+           jpox.table="REPOSITORIES">
+      <name>ArchivaRepositoryModel</name>
       <version>1.0.0+</version>
       <fields>
         <field>
@@ -106,6 +106,7 @@
       </fields>
     </class>
     <class stash.storable="true"
+           jpox.table="REPOSITORY_CONTENT_KEYS"
            jpox.use-identifiers-as-primary-key="true"
            jpox.identity-type="application"
            jpox.identity-class="RepositoryContentKey">
@@ -176,7 +177,7 @@
         this.setVersion( version );
     }
 
-    public RepositoryContent( ArchivaRepository repository, String groupId, String artifactId, String version )
+    public RepositoryContent( ArchivaRepositoryModel repository, String groupId, String artifactId, String version )
     {
         this.setRepositoryId( repository.getId() );
         this.setGroupId( groupId );
@@ -187,8 +188,9 @@
         </codeSegment>
       </codeSegments>
     </class>
-    <class>
-      <name>ArchivaArtifact</name>
+    <class stash.storable="true"
+           jpox.table="ARTIFACTS">
+      <name>ArchivaArtifactModel</name>
       <version>1.0.0+</version>
       <fields>
         <field>
@@ -226,7 +228,8 @@
         </field>
       </fields>
     </class>
-    <class>
+    <class stash.storable="true"
+           jpox.table="REPOSITORY_METADATAS">
       <name>ArchivaRepositoryMetadata</name>
       <version>1.0.0+</version>
       <fields>
@@ -268,7 +271,8 @@
         </field>
       </fields>
     </class>
-    <class>
+    <class stash.storable="true"
+           jpox.table="HEALTH_PROBLEMS">
       <name>HealthProblem</name>
       <version>1.0.0+</version>
       <fields>
@@ -304,7 +308,8 @@
         </field>
       </fields>
     </class>
-    <class>
+    <class stash.storable="true"
+           jpox.table="HEALTH_ARTIFACTS">
       <name>ArchivaArtifactHealth</name>
       <version>1.0.0+</version>
       <fields>
@@ -314,7 +319,7 @@
           <version>1.0.0+</version>
           <required>true</required>
           <association>
-            <type>ArchivaArtifact</type>
+            <type>ArchivaArtifactModel</type>
             <multiplicity>1</multiplicity>
           </association>
           <description>
@@ -336,7 +341,8 @@
         </field>
       </fields>
     </class>
-    <class>
+    <class stash.storable="true"
+           jpox.table="HEALTH_REPOSITORY_METADATAS">
       <name>ArchivaRepositoryMetadataHealth</name>
       <version>1.0.0+</version>
       <fields>
@@ -368,7 +374,8 @@
         </field>
       </fields>
     </class>
-    <class>
+    <class stash.storable="true"
+           jpox.table="REPOSITORY_STATS">
       <name>RepositoryContentStatistics</name>
       <version>1.0.0+</version>
       <fields>

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/pom.xml?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/pom.xml (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/pom.xml Thu Mar 15 15:44:49 2007
@@ -32,10 +32,6 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
-      <artifactId>archiva-consumer-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-common</artifactId>
     </dependency>
     <dependency>

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,165 @@
+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.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.RepositoryContent;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * ArchivaArtifact - Mutable artifact object.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ArchivaArtifact
+{
+    private static final String SNAPSHOT_VERSION = "SNAPSHOT";
+
+    private static final Pattern VERSION_FILE_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );
+
+    private ArchivaArtifactModel model;
+    
+    private String baseVersion;
+    
+    private boolean snapshot = false;
+    
+    public ArchivaArtifact( ArchivaRepository repository, String groupId, String artifactId, String version,
+                            String classifier, String type )
+    {
+        if ( empty( groupId ) )
+        {
+            throw new IllegalArgumentException( "Unable to create ArchivaArtifact with empty groupId." );
+        }
+
+        if ( empty( artifactId ) )
+        {
+            throw new IllegalArgumentException( "Unable to create ArchivaArtifact with empty artifactId." );
+        }
+
+        if ( empty( version ) )
+        {
+            throw new IllegalArgumentException( "Unable to create ArchivaArtifact with empty version." );
+        }
+
+        if ( empty( type ) )
+        {
+            throw new IllegalArgumentException( "Unable to create ArchivaArtifact with empty type." );
+        }
+
+        model = new ArchivaArtifactModel();
+
+        model.setContentKey( new RepositoryContent( repository.getModel(), groupId, artifactId, version ) );
+        model.setClassifier( StringUtils.defaultString( classifier ) );
+        model.setType( type );
+        
+        // Determine Snapshot Base Version.
+        Matcher m = VERSION_FILE_PATTERN.matcher( version );
+        if ( m.matches() )
+        {
+            this.baseVersion =  m.group( 1 ) + "-" + SNAPSHOT_VERSION ;
+            snapshot = true;
+        }
+        else
+        {
+            this.baseVersion = version;
+            snapshot = version.endsWith( SNAPSHOT_VERSION );
+        }
+    }
+
+    public String getGroupId()
+    {
+        return model.getContentKey().getGroupId();
+    }
+
+    public String getArtifactId()
+    {
+        return model.getContentKey().getArtifactId();
+    }
+
+    public String getVersion()
+    {
+        return model.getContentKey().getVersion();
+    }
+
+    public String getBaseVersion()
+    {
+        return baseVersion;
+    }
+    
+    public boolean isSnapshot()
+    {
+        return snapshot;
+    }
+    
+    public String getClassifier()
+    {
+        return model.getClassifier();
+    }
+
+    public String getType()
+    {
+        return model.getType();
+    }
+
+    public boolean hasClassifier()
+    {
+        return StringUtils.isNotEmpty( model.getClassifier() );
+    }
+
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+        if ( model.getContentKey().getGroupId() != null )
+        {
+            sb.append( model.getContentKey().getGroupId() );
+            sb.append( ":" );
+        }
+        appendArtifactTypeClassifierString( sb );
+        sb.append( ":" );
+        if ( model.getContentKey().getVersion() != null )
+        {
+            sb.append( model.getContentKey().getVersion() );
+        }
+
+        return sb.toString();
+    }
+
+    private void appendArtifactTypeClassifierString( StringBuffer sb )
+    {
+        sb.append( model.getContentKey().getArtifactId() );
+        sb.append( ":" );
+        sb.append( getType() );
+        if ( hasClassifier() )
+        {
+            sb.append( ":" );
+            sb.append( getClassifier() );
+        }
+    }
+
+    private boolean empty( String value )
+    {
+        return value == null || value.trim().length() < 1;
+    }
+
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,135 @@
+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.archiva.model.ArchivaRepositoryModel;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+/**
+ * ArchivaRepository 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ArchivaRepository
+{
+    protected ArtifactRepositoryPolicy releases;
+
+    protected ArtifactRepositoryPolicy snapshots;
+
+    private ArchivaRepositoryModel model;
+
+    private RepositoryURL url;
+
+    protected boolean blacklisted;
+
+    /**
+     * 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 ArchivaRepository( String id, String name, String url )
+    {
+        model = new ArchivaRepositoryModel();
+
+        model.setId( id );
+        model.setName( name );
+        setUrl( new RepositoryURL( url ) );
+    }
+
+    /**
+     * 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 ArchivaRepository( ArchivaRepositoryModel model )
+    {
+        this.model = model;
+
+        this.url = new RepositoryURL( model.getUrl() );
+    }
+
+    public String getId()
+    {
+        return model.getId();
+    }
+
+    public void setUrl( RepositoryURL url )
+    {
+        this.url = url;
+        model.setUrl( url.getUrl() );
+    }
+
+    public RepositoryURL getUrl()
+    {
+        return this.url;
+    }
+
+    public ArchivaRepositoryModel getModel()
+    {
+        return this.model;
+    }
+
+    public boolean isBlacklisted()
+    {
+        return blacklisted;
+    }
+
+    public void setBlacklisted( boolean blacklisted )
+    {
+        this.blacklisted = blacklisted;
+    }
+
+    public ArtifactRepositoryPolicy getReleases()
+    {
+        return releases;
+    }
+
+    public void setReleases( ArtifactRepositoryPolicy releases )
+    {
+        this.releases = releases;
+    }
+
+    public ArtifactRepositoryPolicy getSnapshots()
+    {
+        return snapshots;
+    }
+
+    public void setSnapshots( ArtifactRepositoryPolicy snapshots )
+    {
+        this.snapshots = snapshots;
+    }
+
+    public boolean isRemote()
+    {
+        return this.url.getProtocol().equals( "file" );
+    }
+
+    public boolean isManaged()
+    {
+        return this.url.getProtocol().equals( "file" );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java (from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/RepositoryURL.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java?view=diff&rev=518797&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/RepositoryURL.java&r1=518686&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/RepositoryURL.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java Thu Mar 15 15:44:49 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.common.utils;
+package org.apache.maven.archiva.repository;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java Thu Mar 15 15:44:49 2007
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.ArchivaRepository;
 
 import java.util.List;
 

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java (from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java?view=diff&rev=518797&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java&r1=518686&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java Thu Mar 15 15:44:49 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.consumers;
+package org.apache.maven.archiva.repository.consumer;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,7 +20,7 @@
  */
 
 import org.apache.maven.archiva.common.utils.BaseFile;
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.ArchivaRepository;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 
 import java.util.List;

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java (from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java?view=diff&rev=518797&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java&r1=518686&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java Thu Mar 15 15:44:49 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.consumers;
+package org.apache.maven.archiva.repository.consumer;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java (from r518686, maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java?view=diff&rev=518797&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java&r1=518686&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java Thu Mar 15 15:44:49 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.consumers;
+package org.apache.maven.archiva.repository.consumer;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,58 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * AbstractArtifactExtensionMapping 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractArtifactExtensionMapping implements ArtifactExtensionMapping
+{
+    protected final Map typeToExtensionMap;
+
+    public AbstractArtifactExtensionMapping()
+    {
+        typeToExtensionMap = new HashMap();
+        typeToExtensionMap.put( "ejb-client", "jar" );
+        typeToExtensionMap.put( "ejb", "jar" );
+        typeToExtensionMap.put( "distribution-tgz", "tar.gz" );
+        typeToExtensionMap.put( "distribution-zip", "zip" );
+        typeToExtensionMap.put( "java-source", "jar" );
+    }
+
+    public String getExtension( ArchivaArtifact artifact )
+    {
+        // Try specialized types first.
+        if ( typeToExtensionMap.containsKey( artifact.getType() ) )
+        {
+            return (String) typeToExtensionMap.get( artifact.getType() );
+        }
+
+        // Return type
+        return artifact.getType();
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,36 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+/**
+ * ArtifactExtensionMapping - Utility to provide the mapping between an Artifact's extension and it's type and 
+ * vice versa. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ArtifactExtensionMapping
+{
+    public String getExtension( ArchivaArtifact artifact );
+    
+    public String getType( String filename );
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java Thu Mar 15 15:44:49 2007
@@ -19,11 +19,11 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.repository.ArchivaArtifact;
 
 /**
  * BidirectionalRepositoryLayout - Similar in scope to ArtifactRepositoryLayout, but does
- * the both the Path to Artifact and Artifact to Path conversions.  
+ * the both the Path to Artifact, and Artifact to Path conversions.  
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
@@ -31,12 +31,25 @@
 public interface BidirectionalRepositoryLayout
 {
     /**
-     * Given an ArchivaArtifact
+     * Get the identifier for this layout.
      * 
-     * @param artifact
-     * @return
+     * @return the identifier for this layout.
+     */
+    public String getId();
+    
+    /**
+     * Given an ArchivaArtifact, return the relative path to the artifact.
+     * 
+     * @param artifact the artifact to compute the path of.
+     * @return the relative path to the artifact. 
      */
     public String pathOf( ArchivaArtifact artifact );
 
+    /**
+     * Given a repository relative path to a filename, return the ArchivaArtifact object suitable for the path.
+     * 
+     * @param path the path relative to the repository base dir for the artifact.
+     * @return the ArchivaArtifact representing the path. (or null if path cannot be converted to an ArchivaArtifact)
+     */
     ArchivaArtifact toArtifact( String path );
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,76 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.commons.lang.StringUtils;
+
+/**
+ * DefaultArtifactExtensionMapping - extension mapping for Maven 2.x projects. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.repository.content.ArtifactExtensionMapping"
+ *                   role-hint="default"
+ */
+public class DefaultArtifactExtensionMapping extends AbstractArtifactExtensionMapping
+    implements ArtifactExtensionMapping
+{
+    public DefaultArtifactExtensionMapping()
+    {
+        super();
+    }
+
+    public String getType( String filename )
+    {
+        if ( StringUtils.isBlank( filename ) )
+        {
+            return null;
+        }
+
+        String normalizedName = filename.toLowerCase().trim();
+
+        if ( normalizedName.endsWith( ".tar.gz" ) )
+        {
+            return "distribution-tgz";
+        }
+        else if ( normalizedName.endsWith( ".zip" ) )
+        {
+            return "distribution-zip";
+        }
+        else if ( normalizedName.endsWith( "-sources.jar" ) )
+        {
+            return "java-source";
+        }
+        // TODO: handle type for -javadoc.jar ?
+        else
+        {
+            int index = normalizedName.lastIndexOf( '.' );
+            if ( index >= 0 )
+            {
+                return normalizedName.substring( index + 1 );
+            }
+            else
+            {
+                throw new IllegalArgumentException( "Filename " + filename + " does not have an extension." );
+            }
+        }
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,78 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+/**
+ * DefaultBidirectionalRepositoryLayout - the layout mechanism for use by Maven 2.x repositories.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.repository.content.BidirectionalRepositoryLayout"
+ *                   role-hint="default"
+ */
+public class DefaultBidirectionalRepositoryLayout implements BidirectionalRepositoryLayout
+{
+    private static final char PATH_SEPARATOR = '/';
+
+    private static final char GROUP_SEPARATOR = '.';
+
+    private static final char ARTIFACT_SEPARATOR = '-';
+    
+    private ArtifactExtensionMapping extensionMapper = new DefaultArtifactExtensionMapping();
+    
+    public String getId()
+    {
+        return "default";
+    }
+
+    public String pathOf( ArchivaArtifact artifact )
+    {
+        StringBuffer path = new StringBuffer();
+
+        path.append( formatAsDirectory( artifact.getGroupId() ) ).append( PATH_SEPARATOR );
+        path.append( artifact.getArtifactId() ).append( PATH_SEPARATOR );
+        path.append( artifact.getBaseVersion() ).append( PATH_SEPARATOR );
+        path.append( artifact.getArtifactId() ).append( ARTIFACT_SEPARATOR ).append( artifact.getVersion() );
+
+        if ( artifact.hasClassifier() )
+        {
+            path.append( ARTIFACT_SEPARATOR ).append( artifact.getClassifier() );
+        }
+
+        path.append( GROUP_SEPARATOR ).append( extensionMapper.getExtension( artifact ) );
+
+        return path.toString();
+    }
+    
+    private String formatAsDirectory( String directory )
+    {
+        return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
+    }
+
+    public ArchivaArtifact toArtifact( String path )
+    {
+        
+        
+        return null;
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,76 @@
+package org.apache.maven.archiva.repository.content;
+
+import org.apache.commons.lang.StringUtils;
+
+/*
+ * 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.
+ */
+
+/**
+ * LegacyArtifactExtensionMapping 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.repository.content.ArtifactExtensionMapping"
+ *                   role-hint="legacy"
+ */
+public class LegacyArtifactExtensionMapping extends AbstractArtifactExtensionMapping
+    implements ArtifactExtensionMapping
+{
+    public LegacyArtifactExtensionMapping()
+    {
+        super();
+    }
+
+    public String getType( String filename )
+    {
+        if ( StringUtils.isBlank( filename ) )
+        {
+            return null;
+        }
+
+        String normalizedName = filename.toLowerCase().trim();
+
+        if ( normalizedName.endsWith( ".tar.gz" ) )
+        {
+            return "distribution-tgz";
+        }
+        else if ( normalizedName.endsWith( ".zip" ) )
+        {
+            return "distribution-zip";
+        }
+        else if ( normalizedName.endsWith( "-sources.jar" ) )
+        {
+            return "java-source";
+        }
+        // TODO: handle type for -javadoc.jar ?
+        else
+        {
+            int index = normalizedName.lastIndexOf( '.' );
+            if ( index >= 0 )
+            {
+                return normalizedName.substring( index + 1 );
+            }
+            else
+            {
+                throw new IllegalArgumentException( "Filename " + filename + " does not have an extension." );
+            }
+        }
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,101 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * LegacyBidirectionalRepositoryLayout - the layout mechanism for use by Maven 1.x repositories.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.repository.content.BidirectionalRepositoryLayout"
+ *                   role-hint="legacy"
+ */
+public class LegacyBidirectionalRepositoryLayout implements BidirectionalRepositoryLayout
+{
+    private static final String PATH_SEPARATOR = "/";
+
+    private ArtifactExtensionMapping extensionMapper = new LegacyArtifactExtensionMapping();
+
+    private Map typeToDirectoryMap;
+
+    public LegacyBidirectionalRepositoryLayout()
+    {
+        typeToDirectoryMap = new HashMap();
+        typeToDirectoryMap.put( "ejb-client", "ejb" );
+        typeToDirectoryMap.put( "distribution-tgz", "distribution" );
+        typeToDirectoryMap.put( "distribution-zip", "distribution" );
+    }
+
+    public String getId()
+    {
+        return "legacy";
+    }
+
+    public String pathOf( ArchivaArtifact artifact )
+    {
+        StringBuffer path = new StringBuffer();
+
+        path.append( artifact.getGroupId() ).append( PATH_SEPARATOR );
+        path.append( getDirectory( artifact ) ).append( PATH_SEPARATOR );
+        path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+        if ( artifact.hasClassifier() )
+        {
+            path.append( '-' ).append( artifact.getClassifier() );
+        }
+
+        path.append( '.' ).append( extensionMapper.getExtension( artifact ) );
+
+        return path.toString();
+    }
+
+    private String getDirectory( ArchivaArtifact artifact )
+    {
+        // Special Cases involving classifiers and type.
+        if ( "jar".equals( artifact.getType() ) && "sources".equals( artifact.getClassifier() ) )
+        {
+            return "javadoc.jars";
+        }
+
+        // Special Cases involving only type.
+        String dirname = (String) typeToDirectoryMap.get( artifact.getType() );
+
+        if ( dirname != null )
+        {
+            return dirname + "s";
+        }
+
+        // Default process.
+        return artifact.getType() + "s";
+    }
+
+    public ArchivaArtifact toArtifact( String path )
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java Thu Mar 15 15:44:49 2007
@@ -19,10 +19,10 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.consumers.Consumer;
-import org.apache.maven.archiva.model.ArchivaRepository;
 import org.apache.maven.archiva.model.RepositoryContentStatistics;
+import org.apache.maven.archiva.repository.ArchivaRepository;
 import org.apache.maven.archiva.repository.RepositoryException;
+import org.apache.maven.archiva.repository.consumer.Consumer;
 import org.codehaus.plexus.util.DirectoryWalker;
 import org.codehaus.plexus.util.FileUtils;
 
@@ -103,12 +103,12 @@
             throw new IllegalArgumentException( "Unable to operate on a null repository." );
         }
 
-        if ( !"file".equals( repository.getRepositoryURL().getProtocol() ) )
+        if ( !"file".equals( repository.getUrl().getProtocol() ) )
         {
             throw new UnsupportedOperationException( "Only filesystem repositories are supported." );
         }
 
-        File repositoryBase = new File( repository.getRepositoryURL().getPath() );
+        File repositoryBase = new File( repository.getUrl().getPath() );
 
         if ( !repositoryBase.exists() )
         {

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java Thu Mar 15 15:44:49 2007
@@ -21,10 +21,9 @@
 
 import org.apache.commons.lang.SystemUtils;
 import org.apache.maven.archiva.common.utils.BaseFile;
-import org.apache.maven.archiva.consumers.Consumer;
-import org.apache.maven.archiva.model.ArchivaRepository;
 import org.apache.maven.archiva.model.RepositoryContentStatistics;
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.archiva.repository.ArchivaRepository;
+import org.apache.maven.archiva.repository.consumer.Consumer;
 import org.codehaus.plexus.util.DirectoryWalkListener;
 import org.codehaus.plexus.util.SelectorUtils;
 import org.codehaus.plexus.util.StringUtils;
@@ -88,7 +87,7 @@
 
     public void directoryWalkStarting( File basedir )
     {
-        log.info( "Walk Started: [" + this.repository.getId() + "] " + this.repository.getRepositoryURL() );
+        log.info( "Walk Started: [" + this.repository.getId() + "] " + this.repository.getUrl() );
         stats.triggerStart();
     }
 
@@ -110,7 +109,7 @@
         {
             stats.increaseNewFileCount();
 
-            BaseFile basefile = new BaseFile( repository.getRepositoryURL().getPath(), file );
+            BaseFile basefile = new BaseFile( repository.getUrl().getPath(), file );
 
             Iterator itConsumers = this.consumers.iterator();
             while ( itConsumers.hasNext() )
@@ -144,7 +143,7 @@
 
     public void directoryWalkFinished()
     {
-        log.info( "Walk Finished: [" + this.repository.getId() + "] " + this.repository.getRepositoryURL() );
+        log.info( "Walk Finished: [" + this.repository.getId() + "] " + this.repository.getUrl() );
         stats.triggerFinished();
     }
 

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java?view=diff&rev=518797&r1=518796&r2=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java Thu Mar 15 15:44:49 2007
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.common.utils.RepositoryURL;
 
 import java.net.MalformedURLException;
 

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,93 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.commons.lang.StringUtils;
+import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.repository.ArchivaRepository;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+
+/**
+ * AbstractBidirectionalRepositoryLayoutTestCase 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AbstractBidirectionalRepositoryLayoutTestCase extends PlexusTestCase
+{
+    protected ArchivaRepository repository;
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        
+        repository = createTestRepository();
+    }
+    
+    protected ArchivaRepository createTestRepository()
+    {
+        File targetDir = new File( getBasedir(), "target" );
+        File testRepo = new File( targetDir, "test-repo" );
+    
+        if ( !testRepo.exists() )
+        {
+            testRepo.mkdirs();
+        }
+    
+        String repoUri = "file://" + StringUtils.replace( testRepo.getAbsolutePath(), "\\", "/" ) ;
+    
+        ArchivaRepository repo = new ArchivaRepository( "testRepo", "Test Repository", repoUri );
+    
+        return repo;
+    }
+
+    protected ArchivaArtifact createArtifact( String groupId, String artifactId, String version, String classifier, String type )
+    {
+        ArchivaArtifact artifact = new ArchivaArtifact( repository, groupId, artifactId, version, classifier, type );
+        assertNotNull( artifact );
+        return artifact;
+    }
+
+    protected void assertArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version, String classifier, String type )
+    {
+        String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
+    
+        assertEquals( expectedId + " - Group ID", actualArtifact.getGroupId(), groupId );
+        assertEquals( expectedId + " - Artifact ID", actualArtifact.getArtifactId(), artifactId );
+        assertEquals( expectedId + " - Version ID", actualArtifact.getVersion(), version );
+        assertEquals( expectedId + " - Classifier", actualArtifact.getClassifier(), classifier );
+        assertEquals( expectedId + " - Type", actualArtifact.getType(), type );
+    }
+
+    protected void assertSnapshotArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version, String classifier, String type )
+    {
+        String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
+    
+        assertEquals( expectedId + " - Group ID", actualArtifact.getGroupId(), groupId );
+        assertEquals( expectedId + " - Artifact ID", actualArtifact.getArtifactId(), artifactId );
+        assertEquals( expectedId + " - Version ID", actualArtifact.getVersion(), version );
+        assertEquals( expectedId + " - Classifier", actualArtifact.getClassifier(), classifier );
+        assertEquals( expectedId + " - Type", actualArtifact.getType(), type );
+        assertTrue( expectedId + " - Snapshot", actualArtifact.isSnapshot() );
+    }
+
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,96 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+/**
+ * DefaultBidirectionalRepositoryLayoutTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectionalRepositoryLayoutTestCase
+{
+    private BidirectionalRepositoryLayout layout;
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        layout = (BidirectionalRepositoryLayout) lookup( BidirectionalRepositoryLayout.class.getName(), "default" );
+    }
+
+    public void testToPathBasic()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-tool", "1.0", "", "jar" );
+
+        assertEquals( "com/foo/foo-tool/1.0/foo-tool-1.0.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathEjbClient()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-client", "1.0", "", "ejb-client" );
+
+        assertEquals( "com/foo/foo-client/1.0/foo-client-1.0.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathWithClassifier()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+
+        assertEquals( "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathUsingUniqueSnapshot()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
+
+        assertEquals( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar",
+                      layout.pathOf( artifact ) );
+    }
+
+    public void testToArtifactBasic()
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "com/foo/foo-tool/1.0/foo-tool-1.0.jar" );
+        assertArtifact( artifact, "com.foo", "foo-tool", "1.0", "", "jar" );
+    }
+
+    public void testToArtifactEjbClient()
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "com/foo/foo-client/1.0/foo-client-1.0.jar" );
+        // The type is correct. as we cannot possibly know this is an ejb client without parsing the pom
+        assertArtifact( artifact, "com.foo", "foo-client", "1.0", "", "jar" );
+    }
+
+    public void testToArtifactWithClassifier()
+    {
+        ArchivaArtifact artifact =
+            layout.toArtifact( "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar" );
+        assertArtifact( artifact, "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+    }
+    
+    public void testToArtifactUsingUniqueSnapshot()
+    {
+        ArchivaArtifact artifact =
+            layout.toArtifact( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" );
+        assertSnapshotArtifact( artifact, "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java?view=auto&rev=518797
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java Thu Mar 15 15:44:49 2007
@@ -0,0 +1,69 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * 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.ArchivaArtifact;
+
+/**
+ * LegacyBidirectionalRepositoryLayoutTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class LegacyBidirectionalRepositoryLayoutTest extends AbstractBidirectionalRepositoryLayoutTestCase
+{
+    private BidirectionalRepositoryLayout layout;
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        layout = (BidirectionalRepositoryLayout) lookup( BidirectionalRepositoryLayout.class.getName(), "legacy" );
+    }
+
+    public void testToPathBasic()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-tool", "1.0", "", "jar" );
+
+        assertEquals( "com.foo/jars/foo-tool-1.0.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathEjbClient()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-client", "1.0", "", "ejb-client" );
+
+        assertEquals( "com.foo/ejbs/foo-client-1.0.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathWithClassifier()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+
+        assertEquals( "com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-sources.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToPathUsingUniqueSnapshot()
+    {
+        ArchivaArtifact artifact = createArtifact( "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
+
+        assertEquals( "com.foo/jars/foo-connector-2.1-20060822.123456-35.jar",
+                      layout.pathOf( artifact ) );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain