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/16 23:45:41 UTC

svn commit: r519169 [1/2] - in /maven/archiva/branches/archiva-jpox-database-refactor: ./ archiva-common/src/main/java/org/apache/maven/archiva/common/utils/ archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ archiva-consumer-api/src/m...

Author: joakime
Date: Fri Mar 16 15:45:38 2007
New Revision: 519169

URL: http://svn.apache.org/viewvc?view=rev&rev=519169
Log:
More Work Against Scanner / Layout / Artifact / Database

Added:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java
      - copied, changed from r518797, 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/layout/DefaultBidirectionalRepositoryLayout.java
      - copied, changed from r518797, maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
      - copied, changed from r518797, maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java
      - copied, changed from r518797, maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
      - copied, changed from r518797, maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
      - copied, changed from r518797, maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/resources/log4j.xml   (with props)
Removed:
    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-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java
    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-discoverer/
    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/content/DefaultBidirectionalRepositoryLayout.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java
Modified:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/pom.xml
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/src/main/mdo/archiva.xml
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
    maven/archiva/branches/archiva-jpox-database-refactor/pom.xml

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,130 @@
+package org.apache.maven.archiva.common.utils;
+
+/*
+ * 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.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * DateUtil - some (not-so) common date utility methods. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DateUtil
+{
+    public static String getDuration( long duration )
+    {
+        return getDuration( new Date( 0 ), new Date( duration ) );
+    }
+    
+    public static String getDuration( long ms1, long ms2 )
+    {
+        return getDuration( new Date( ms1 ), new Date( ms2 ) );
+    }
+
+    public static String getDuration( Date d1, Date d2 )
+    {
+        Calendar cal1 = new GregorianCalendar();
+        cal1.setTime( d1 );
+
+        Calendar cal2 = new GregorianCalendar();
+        cal2.setTime( d2 );
+
+        return getDuration( cal1, cal2 );
+    }
+
+    public static String getDuration( Calendar cal1, Calendar cal2 )
+    {
+        int year1 = cal1.get( Calendar.YEAR );
+        int day1 = cal1.get( Calendar.DAY_OF_YEAR );
+        int hour1 = cal1.get( Calendar.HOUR_OF_DAY );
+        int min1 = cal1.get( Calendar.MINUTE );
+        int sec1 = cal1.get( Calendar.SECOND );
+        int ms1 = cal1.get( Calendar.MILLISECOND );
+
+        int year2 = cal2.get( Calendar.YEAR );
+        int day2 = cal2.get( Calendar.DAY_OF_YEAR );
+        int hour2 = cal2.get( Calendar.HOUR_OF_DAY );
+        int min2 = cal2.get( Calendar.MINUTE );
+        int sec2 = cal2.get( Calendar.SECOND );
+        int ms2 = cal2.get( Calendar.MILLISECOND );
+
+        int leftDays = ( day1 - day2 ) + ( year1 - year2 ) * 365;
+        int leftHours = hour2 - hour1;
+        int leftMins = min2 - min1;
+        int leftSeconds = sec2 - sec1;
+        int leftMilliSeconds = ms2 - ms1;
+
+        if ( leftMilliSeconds < 0 )
+        {
+            leftMilliSeconds += 1000;
+            --leftSeconds;
+        }
+
+        if ( leftSeconds < 0 )
+        {
+            leftSeconds += 60;
+            --leftMins;
+        }
+
+        if ( leftMins < 0 )
+        {
+            leftMins += 60;
+            --leftHours;
+        }
+        
+        if ( leftHours < 0 )
+        {
+            leftHours += 24;
+            --leftDays;
+        }
+
+        StringBuffer interval = new StringBuffer();
+
+        appendInterval( interval, leftDays, "Day" );
+        appendInterval( interval, leftHours, "Hour" );
+        appendInterval( interval, leftMins, "Minute" );
+        appendInterval( interval, leftSeconds, "Second" );
+        appendInterval( interval, leftMilliSeconds, "Millisecond" );
+
+        return interval.toString();
+    }
+
+    private static void appendInterval( StringBuffer interval, int count, String type )
+    {
+        if ( count > 0 )
+        {
+            if ( interval.length() > 0 )
+            {
+                interval.append( " " );
+            }
+
+            interval.append( count );
+            interval.append( " " ).append( type );
+            if ( count > 1 )
+            {
+                interval.append( "s" );
+            }
+        }
+    }
+
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,69 @@
+package org.apache.maven.archiva.common.utils;
+
+/*
+ * 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.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+/**
+ * DateUtilTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DateUtilTest extends TestCase
+{
+    private void assertDuration( String expectedDuration, String startTimestamp, String endTimestamp )
+        throws ParseException
+    {
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss SSS" );
+        Date startDate = sdf.parse( startTimestamp );
+        Date endDate = sdf.parse( endTimestamp );
+        
+//        System.out.println( "Date: " + endTimestamp + " - " + startTimestamp + " = "
+//                        + ( endDate.getTime() - startDate.getTime() ) + " ms" );
+
+        assertEquals( expectedDuration, DateUtil.getDuration( startDate, endDate ) );
+    }
+
+    public void testGetDurationDifference() throws ParseException
+    {
+        assertDuration( "2 Seconds", "2006-08-22 13:00:02 0000", 
+                                     "2006-08-22 13:00:04 0000" );
+
+        assertDuration( "12 Minutes 12 Seconds 234 Milliseconds", "2006-08-22 13:12:02 0000",
+                                                                  "2006-08-22 13:24:14 0234" );
+        
+        assertDuration( "12 Minutes 501 Milliseconds", "2006-08-22 13:12:01 0500",
+                                                       "2006-08-22 13:24:02 0001" );
+    }
+    
+    public void testGetDurationDirect() throws ParseException
+    {
+        assertEquals( "2 Seconds", DateUtil.getDuration( 2000 ) );
+
+        assertEquals( "12 Minutes 12 Seconds 234 Milliseconds", DateUtil.getDuration( 732234 ) );
+        
+        assertEquals( "12 Minutes 501 Milliseconds", DateUtil.getDuration( 720501 ) );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java Fri Mar 16 15:45:38 2007
@@ -19,7 +19,8 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.ArchivaRepository;
+import org.apache.maven.archiva.repository.consumer.Consumer;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java Fri Mar 16 15:45:38 2007
@@ -24,7 +24,9 @@
 import org.apache.maven.archiva.common.artifact.builder.LayoutArtifactBuilder;
 import org.apache.maven.archiva.common.artifact.builder.LegacyLayoutArtifactBuilder;
 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.archiva.repository.consumer.Consumer;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java Fri Mar 16 15:45:38 2007
@@ -20,6 +20,8 @@
  */
 
 import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.repository.consumer.Consumer;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.codehaus.plexus.util.IOUtil;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java Fri Mar 16 15:45:38 2007
@@ -21,6 +21,8 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.repository.consumer.Consumer;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java Fri Mar 16 15:45:38 2007
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.ArchivaRepository;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java Fri Mar 16 15:45:38 2007
@@ -1,5 +1,7 @@
 package org.apache.maven.archiva.consumers;
 
+import org.apache.maven.archiva.repository.consumer.ConsumerFactory;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java Fri Mar 16 15:45:38 2007
@@ -20,7 +20,7 @@
  */
 
 import org.apache.maven.archiva.common.utils.BaseFile;
-import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.util.ArrayList;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java Fri Mar 16 15:45:38 2007
@@ -21,7 +21,8 @@
 
 import org.apache.commons.lang.StringUtils;
 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.archiva.repository.consumer.ConsumerException;
 import org.apache.maven.artifact.Artifact;
 
 import java.util.ArrayList;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java Fri Mar 16 15:45:38 2007
@@ -23,12 +23,12 @@
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
 import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.consumers.Consumer;
-import org.apache.maven.archiva.consumers.ConsumerException;
-import org.apache.maven.archiva.consumers.ConsumerFactory;
 import org.apache.maven.archiva.discoverer.Discoverer;
 import org.apache.maven.archiva.discoverer.DiscovererException;
 import org.apache.maven.archiva.discoverer.DiscovererStatistics;
+import org.apache.maven.archiva.repository.consumer.Consumer;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
+import org.apache.maven.archiva.repository.consumer.ConsumerFactory;
 import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.codehaus.plexus.logging.AbstractLogEnabled;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/pom.xml?view=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/pom.xml (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-model/pom.xml Fri Mar 16 15:45:38 2007
@@ -38,6 +38,11 @@
       <artifactId>plexus-utils</artifactId>
     </dependency>
     <dependency>
+      <groupId>javax.jdo</groupId>
+      <artifactId>jdo2-api</artifactId>
+      <version>2.0</version>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-container-default</artifactId>
     </dependency>

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=519169&r1=519168&r2=519169
==============================================================================
--- 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 Fri Mar 16 15:45:38 2007
@@ -169,6 +169,13 @@
         <codeSegment>
           <version>1.0.0+</version>
           <code>
+    public RepositoryContent( String groupId, String artifactId, String version )
+    {
+        this.setGroupId( groupId );
+        this.setArtifactId( artifactId );
+        this.setVersion( version );
+    }
+
     public RepositoryContent( String repositoryId, String groupId, String artifactId, String version )
     {
         this.setRepositoryId( repositoryId );

Modified: 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=diff&rev=519169&r1=519168&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java Fri Mar 16 15:45:38 2007
@@ -21,11 +21,9 @@
 
 import org.apache.maven.archiva.model.ArchivaArtifactModel;
 import org.apache.maven.archiva.model.RepositoryContent;
+import org.apache.maven.archiva.repository.version.VersionUtil;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * ArchivaArtifact - Mutable artifact object.
  *
@@ -34,16 +32,17 @@
  */
 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( String groupId, String artifactId, String version, String classifier, String type )
+    {
+        this( null, groupId, artifactId, version, classifier, type );
+    }
+
     public ArchivaArtifact( ArchivaRepository repository, String groupId, String artifactId, String version,
                             String classifier, String type )
     {
@@ -69,22 +68,19 @@
 
         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() )
+        if( repository == null )
         {
-            this.baseVersion =  m.group( 1 ) + "-" + SNAPSHOT_VERSION ;
-            snapshot = true;
+            model.setContentKey( new RepositoryContent( groupId, artifactId, version ) );
         }
         else
         {
-            this.baseVersion = version;
-            snapshot = version.endsWith( SNAPSHOT_VERSION );
+            model.setContentKey( new RepositoryContent( repository.getModel(), groupId, artifactId, version ) );
         }
+        model.setClassifier( StringUtils.defaultString( classifier ) );
+        model.setType( type );
+
+        this.snapshot = VersionUtil.isSnapshot( version );
+        this.baseVersion = VersionUtil.getBaseVersion( version );
     }
 
     public String getGroupId()
@@ -106,12 +102,12 @@
     {
         return baseVersion;
     }
-    
+
     public boolean isSnapshot()
     {
         return snapshot;
     }
-    
+
     public String getClassifier()
     {
         return model.getClassifier();

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java (from r518797, 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/layout/BidirectionalRepositoryLayout.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java&r2=519169
==============================================================================
--- 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/layout/BidirectionalRepositoryLayout.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -50,6 +50,7 @@
      * 
      * @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)
+     * @throws LayoutException if there was a problem converting the path to an artifact.
      */
-    ArchivaArtifact toArtifact( String path );
+    public ArchivaArtifact toArtifact( String path ) throws LayoutException;
 }

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java (from r518797, 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/layout/DefaultBidirectionalRepositoryLayout.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,7 +19,10 @@
  * under the License.
  */
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
+import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMapping;
 
 /**
  * DefaultBidirectionalRepositoryLayout - the layout mechanism for use by Maven 2.x repositories.
@@ -27,19 +30,19 @@
  * @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"
+ * @plexus.component role-hint="default"
  */
-public class DefaultBidirectionalRepositoryLayout implements BidirectionalRepositoryLayout
+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";
@@ -63,16 +66,64 @@
 
         return path.toString();
     }
-    
+
     private String formatAsDirectory( String directory )
     {
         return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
     }
 
-    public ArchivaArtifact toArtifact( String path )
+    public ArchivaArtifact toArtifact( String path ) throws LayoutException
     {
+        String normalizedPath = StringUtils.replace( path, "\\", "/" );
+
+        String pathParts[] = StringUtils.split( normalizedPath, '/' );
+
+        /* Minimum parts.
+         * 
+         *   path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar"
+         *   path[0] = "commons-lang";        // The Group ID
+         *   path[1] = "commons-lang";        // The Artifact ID
+         *   path[2] = "2.1";                 // The Version
+         *   path[3] = "commons-lang-2.1.jar" // The filename.
+         */
+
+        if ( pathParts.length < 4 )
+        {
+            // Illegal Path Parts Length.
+            throw new LayoutException( "Not enough parts to the path [" + path
+                            + "] to construct an ArchivaArtifact from. (Requires at least 4 parts)" );
+        }
+
+        // Maven 2.x path.
+        int partCount = pathParts.length;
+
+        // Last part is the filename
+        String filename = pathParts[partCount - 1];
+
+        // Second to last is the baseVersion (the directory version)
+        // (Don't need it) String baseVersion = pathParts[partCount - 2];
+
+        // Third to last is the artifact Id.
+        String artifactId = pathParts[partCount - 3];
+
+        // Remaining pieces are the groupId.
+        String groupId = "";
+        for ( int i = 0; i <= partCount - 4; i++ )
+        {
+            if ( groupId.length() > 0 )
+            {
+                groupId += ".";
+            }
+            groupId += pathParts[i];
+        }
         
-        
-        return null;
+        // Now we need to parse the filename to get the artifact version Id. 
+        String fileParts[] = RepositoryLayoutUtils.splitFilename( filename, artifactId );
+        String version = fileParts[1];
+        String classifier = fileParts[2];
+
+        String type = extensionMapper.getType( filename );
+
+        return new ArchivaArtifact( groupId, artifactId, version, classifier, type );
     }
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.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/layout/LayoutException.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,41 @@
+package org.apache.maven.archiva.repository.layout;
+
+/*
+ * 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.common.ArchivaException;
+
+/**
+ * LayoutException 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class LayoutException extends ArchivaException
+{
+    public LayoutException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public LayoutException( String message )
+    {
+        super( message );
+    }
+}

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.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/layout/LayoutException.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/layout/LegacyBidirectionalRepositoryLayout.java (from r518797, 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/layout/LegacyBidirectionalRepositoryLayout.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,7 +19,10 @@
  * under the License.
  */
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
+import org.apache.maven.archiva.repository.content.LegacyArtifactExtensionMapping;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -30,8 +33,7 @@
  * @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"
+ * @plexus.component role-hint="legacy"
  */
 public class LegacyBidirectionalRepositoryLayout implements BidirectionalRepositoryLayout
 {
@@ -92,10 +94,42 @@
         return artifact.getType() + "s";
     }
 
-    public ArchivaArtifact toArtifact( String path )
+    public ArchivaArtifact toArtifact( String path ) throws LayoutException
     {
-        // TODO Auto-generated method stub
-        return null;
+        String normalizedPath = StringUtils.replace( path, "\\", "/" );
+
+        String pathParts[] = StringUtils.split( normalizedPath, '/' );
+
+        /* Always 3 parts. (Never more or less)
+         * 
+         *   path = "commons-lang/jars/commons-lang-2.1.jar"
+         *   path[0] = "commons-lang";          // The Group ID
+         *   path[1] = "jars";                  // The Directory Type
+         *   path[2] = "commons-lang-2.1.jar";  // The Filename.
+         */
+
+        if ( pathParts.length != 3 )
+        {
+            // Illegal Path Parts Length.
+            throw new LayoutException( "Invalid number of parts to the path [" + path
+                            + "] to construct an ArchivaArtifact from. (Required to be 3 parts)" );
+        }
+
+        // The Group ID.
+        String groupId = pathParts[0];
+
+        // The Filename.
+        String filename = pathParts[2];
+
+        String fileParts[] = RepositoryLayoutUtils.splitFilename( filename, null );
+
+        String artifactId = fileParts[0];
+        String version = fileParts[1];
+        String classifier = fileParts[2];
+
+        String type = extensionMapper.getType( filename );
+
+        return new ArchivaArtifact( groupId, artifactId, version, classifier, type );
     }
 
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.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/layout/RepositoryLayoutUtils.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,219 @@
+package org.apache.maven.archiva.repository.layout;
+
+/*
+ * 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 java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * RepositoryLayoutUtils - utility methods common for most BidirectionalRepositoryLayout implementation. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryLayoutUtils
+{
+    /**
+     * Complex 2+ part extensions.
+     * Do not include initial "." character in extension names here.
+     */
+    private static final String ComplexExtensions[] = new String[] { "tar.gz", "tar.bz2" };
+
+    /**
+     * These are the version patterns found in the filenames of the various artifact's versions IDs.
+     * These patterns are all tackling lowercase version IDs.
+     */
+    private static final String VersionPatterns[] =
+        new String[] { "(snapshot)", "([0-9][_.0-9a-z]*)", "(g?[_.0-9ab]*(pre|rc|g|m)[_.0-9]*)", "(dev[_.0-9]*)",
+            "(alpha[_.0-9]*)", "(beta[_.0-9]*)", "(rc[_.0-9]*)", "(test[_.0-9]*)", "(debug[_.0-9]*)",
+            "(unofficial[_.0-9]*)", "(current)", "(latest)", "(fcs)", "(release[_.0-9]*)", "(nightly)", "(final)",
+            "(incubating)", "(incubator)", "([ab][_.0-9]*)" };
+
+    private static final String VersionMegaPattern = StringUtils.join( VersionPatterns, '|' );
+
+    /**
+     * Filename Parsing Mode - Artifact Id.
+     */
+    private static final int ARTIFACTID = 1;
+
+    /**
+     * Filename Parsing Mode - Version.
+     */
+    private static final int VERSION = 2;
+
+    /**
+     * Filename Parsing Mode - Classifier.
+     */
+    private static final int CLASSIFIER = 3;
+
+    /**
+     * Split the provided filename into 4 String parts.
+     * 
+     * <pre>
+     * String part[] = splitFilename( filename );
+     * artifactId = part[0];
+     * version    = part[1];
+     * classifier = part[2];
+     * extension  = part[3];
+     * </pre>
+     * 
+     * @param filename the filename to split.
+     * @param possibleArtifactId the optional artifactId to aide in splitting the filename. 
+     *                  (null to allow algorithm to calculate one)
+     * @return the parts of the filename.
+     * @throws LayoutException 
+     */
+    public static String[] splitFilename( String filename, String possibleArtifactId ) throws LayoutException
+    {
+        if ( StringUtils.isBlank( filename ) )
+        {
+            throw new IllegalArgumentException( "Unable to split blank filename." );
+        }
+
+        String filestring = filename.trim();
+
+        String artifactId = "";
+        String version = "";
+        String classifier = "";
+        String extension = "";
+
+        // I like working backwards.
+
+        // Find the extension.
+
+        // Work on multipart extensions first.
+        boolean found = false;
+
+        String lowercaseFilename = filestring.toLowerCase();
+        for ( int i = 0; i < ComplexExtensions.length && !found; i++ )
+        {
+            if ( lowercaseFilename.endsWith( "." + ComplexExtensions[i] ) )
+            {
+                extension = ComplexExtensions[i];
+                filestring = filestring.substring( 0, filestring.length() - ComplexExtensions[i].length() - 1 );
+                found = true;
+            }
+        }
+
+        if ( !found )
+        {
+            // Default to 1 part extension.
+
+            int index = filestring.lastIndexOf( '.' );
+            if ( index <= 0 )
+            {
+                // Bad Filename - No Extension
+                throw new LayoutException( "Unable to determine extension from filename " + filename );
+            }
+            extension = filestring.substring( index + 1 );
+            filestring = filestring.substring( 0, index );
+        }
+
+        // Work on version string.
+
+        if ( ( possibleArtifactId != null ) && filename.startsWith( possibleArtifactId ) )
+        {
+            artifactId = possibleArtifactId;
+            filestring = filestring.substring( possibleArtifactId.length() + 1 );
+        }
+
+        String fileParts[] = StringUtils.split( filestring, '-' );
+
+        int versionStart = -1;
+        int versionEnd = -1;
+
+        Pattern pat = Pattern.compile( VersionMegaPattern, Pattern.CASE_INSENSITIVE );
+        Matcher mat;
+
+        for ( int i = 0; i < fileParts.length; i++ )
+        {
+            String part = fileParts[i];
+            mat = pat.matcher( part );
+
+            if ( mat.matches() )
+            {
+                // It is a potential verion part.
+                if ( versionStart < 0 )
+                {
+                    versionStart = i;
+                }
+
+                versionEnd = i;
+            }
+        }
+
+        if ( versionStart < 0 )
+        {
+            throw new LayoutException( "Unable to determine version from filename " + filename );
+        }
+
+        // Gather up the ArtifactID - Version - Classifier pieces found. 
+
+        int mode = ARTIFACTID;
+        for ( int i = 0; i < fileParts.length; i++ )
+        {
+            String part = fileParts[i];
+
+            if ( ( mode == ARTIFACTID ) && ( i >= versionStart ) )
+            {
+                if ( StringUtils.isBlank( artifactId ) )
+                {
+                    throw new LayoutException( "No Artifact Id detected." );
+                }
+                mode = VERSION;
+            }
+
+            switch ( mode )
+            {
+                case ARTIFACTID:
+                    if ( artifactId.length() > 0 )
+                    {
+                        artifactId += "-";
+                    }
+                    artifactId += part;
+                    break;
+                case VERSION:
+                    if ( version.length() > 0 )
+                    {
+                        version += "-";
+                    }
+                    version += part;
+                    break;
+                case CLASSIFIER:
+                    if ( classifier.length() > 0 )
+                    {
+                        classifier += "-";
+                    }
+                    classifier += part;
+                    break;
+            }
+
+            if ( i >= versionEnd )
+            {
+                mode = CLASSIFIER;
+            }
+        }
+
+        return new String[] { artifactId, version, classifier, extension };
+    }
+
+}

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.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/layout/RepositoryLayoutUtils.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/version/VersionUtil.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/version/VersionUtil.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,62 @@
+package org.apache.maven.archiva.repository.version;
+
+/*
+ * 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.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * VersionConstants 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class VersionUtil
+{
+    public static final String SNAPSHOT = "SNAPSHOT";
+
+    public static final Pattern UNIQUE_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );
+
+    public static boolean isSnapshot( String version )
+    {
+        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );
+        if ( m.matches() )
+        {
+            return true;
+        }
+        else
+        {
+            return version.endsWith( SNAPSHOT );
+        }
+    }
+
+    public static String getBaseVersion( String version )
+    {
+        Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );
+        if ( m.matches() )
+        {
+            return m.group( 1 ) + "-" + SNAPSHOT;
+        }
+        else
+        {
+            return version;
+        }
+    }
+}

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.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/version/VersionUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java (from r518797, 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/layout/AbstractBidirectionalRepositoryLayoutTestCase.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -39,38 +39,42 @@
     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(), "\\", "/" ) ;
-    
+
+        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 )
+    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 )
+    protected void assertArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version,
+                                   String classifier, String type )
     {
         String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
-    
+
+        assertNotNull( expectedId + " - Should not be null.", actualArtifact );
+
         assertEquals( expectedId + " - Group ID", actualArtifact.getGroupId(), groupId );
         assertEquals( expectedId + " - Artifact ID", actualArtifact.getArtifactId(), artifactId );
         assertEquals( expectedId + " - Version ID", actualArtifact.getVersion(), version );
@@ -78,10 +82,13 @@
         assertEquals( expectedId + " - Type", actualArtifact.getType(), type );
     }
 
-    protected void assertSnapshotArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version, String classifier, String type )
+    protected void assertSnapshotArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId,
+                                           String version, String classifier, String type )
     {
         String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
-    
+        
+        assertNotNull( expectedId + " - Should not be null.", actualArtifact );
+
         assertEquals( expectedId + " - Group ID", actualArtifact.getGroupId(), groupId );
         assertEquals( expectedId + " - Artifact ID", actualArtifact.getArtifactId(), artifactId );
         assertEquals( expectedId + " - Version ID", actualArtifact.getVersion(), version );

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java (from r518797, 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/layout/DefaultBidirectionalRepositoryLayoutTest.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,6 +20,8 @@
  */
 
 import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.repository.layout.LayoutException;
 
 /**
  * DefaultBidirectionalRepositoryLayoutTest 
@@ -54,7 +56,7 @@
 
     public void testToPathWithClassifier()
     {
-        ArchivaArtifact artifact = createArtifact( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+        ArchivaArtifact artifact = createArtifact( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "java-source" );
 
         assertEquals( "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar", layout.pathOf( artifact ) );
     }
@@ -66,28 +68,35 @@
         assertEquals( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar",
                       layout.pathOf( artifact ) );
     }
+    
+    public void testToArtifactBasicSimpleGroupId() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "commons-lang/commons-lang/2.1/commons-lang-2.1.jar" );
+        assertArtifact( artifact, "commons-lang", "commons-lang", "2.1", "", "jar" );
+    }
 
-    public void testToArtifactBasic()
+    public void testToArtifactBasicLongGroupId() throws LayoutException
     {
         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()
+    public void testToArtifactEjbClient() throws LayoutException
     {
         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()
+    public void testToArtifactWithClassifier() throws LayoutException
     {
         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" );
+        // The 'java-source' type is correct.  You might be thinking of extension, which we are not testing here.
+        assertArtifact( artifact, "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "java-source" );
     }
     
-    public void testToArtifactUsingUniqueSnapshot()
+    public void testToArtifactUsingUniqueSnapshot() throws LayoutException
     {
         ArchivaArtifact artifact =
             layout.toArtifact( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" );

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java (from r518797, 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/layout/LegacyBidirectionalRepositoryLayoutTest.java?view=diff&rev=519169&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java&r1=518797&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java&r2=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java Fri Mar 16 15:45:38 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.content;
+package org.apache.maven.archiva.repository.layout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,6 +20,7 @@
  */
 
 import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
 
 /**
  * LegacyBidirectionalRepositoryLayoutTest 
@@ -63,7 +64,44 @@
     {
         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 ) );
+        assertEquals( "com.foo/jars/foo-connector-2.1-20060822.123456-35.jar", layout.pathOf( artifact ) );
+    }
+
+    public void testToArtifactBasicSimpleGroupId() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "commons-lang/jars/commons-lang-2.1.jar" );
+        assertArtifact( artifact, "commons-lang", "commons-lang", "2.1", "", "jar" );
+    }
+
+    public void testToArtifactBasicLongGroupId() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "org.apache.derby/jars/derby-10.2.2.0.jar" );
+        assertArtifact( artifact, "org.apache.derby", "derby", "10.2.2.0", "", "jar" );
+    }
+
+    public void testToArtifactLongGroupId() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar" );
+        assertArtifact( artifact, "org.apache.geronimo.specs", "geronimo-ejb_2.1_spec", "1.0.1", "", "jar" );
+    }
+
+    public void testToArtifactEjbClient() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "org.apache.beehive/jars/beehive-ejb-control-1.0.1.jar" );
+        // The type is correct. as we cannot possibly know this is an ejb client without parsing the pom
+        assertArtifact( artifact, "org.apache.beehive", "beehive-ejb-control", "1.0.1", "", "jar" );
+    }
+
+    public void testToArtifactWithClassifier() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "commons-lang/jars/commons-lang-2.3-sources.jar" );
+        // The 'java-source' type is correct.  You might be thinking of extension, which we are not testing here.
+        assertArtifact( artifact, "commons-lang", "commons-lang", "2.3", "sources", "java-source" );
+    }
+
+    public void testToArtifactSnapshot() throws LayoutException
+    {
+        ArchivaArtifact artifact = layout.toArtifact( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom" );
+        assertSnapshotArtifact( artifact, "directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", "", "pom" );
     }
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.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/layout/RepositoryLayoutUtilsTest.java?view=auto&rev=519169
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java Fri Mar 16 15:45:38 2007
@@ -0,0 +1,206 @@
+package org.apache.maven.archiva.repository.layout;
+
+/*
+ * 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;
+
+/**
+ * RepositoryLayoutUtilsTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryLayoutUtilsTest extends TestCase
+{
+    public void testSplitFilenameBasic() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1.jar", "commons-lang" ), "commons-lang",
+                     "2.1", "", "jar" );
+    }
+
+    public void testSplitFilenameAlphaVersion() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1.jar", "commons-lang" ),
+                     "commons-lang", "2.0-alpha-1", "", "jar" );
+    }
+
+    public void testSplitFilenameSnapshot() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "foo-2.0-SNAPSHOT.jar", "foo" ), "foo", "2.0-SNAPSHOT", "",
+                     "jar" );
+    }
+
+    public void testSplitFilenameUniqueSnapshot() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "fletch-2.0-20060822-123456-35.tar.gz", "fletch" ), "fletch",
+                     "2.0-20060822-123456-35", "", "tar.gz" );
+    }
+
+    public void testSplitFilenameBasicClassifier() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-sources.jar", "commons-lang" ),
+                     "commons-lang", "2.1", "sources", "jar" );
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-javadoc.jar", "commons-lang" ),
+                     "commons-lang", "2.1", "javadoc", "jar" );
+    }
+
+    public void testSplitFilenameAlphaClassifier() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-sources.jar", "commons-lang" ),
+                     "commons-lang", "2.0-alpha-1", "sources", "jar" );
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-javadoc.jar", "commons-lang" ),
+                     "commons-lang", "2.0-alpha-1", "javadoc", "jar" );
+    }
+
+    public void testSplitFilenameSnapshotClassifier() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar", "commons-lang" ),
+                     "commons-lang", "3.1-SNAPSHOT", "sources", "jar" );
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar", "commons-lang" ),
+                     "commons-lang", "3.1-SNAPSHOT", "javadoc", "jar" );
+    }
+
+    public void testSplitFilenameUniqueSnapshotClassifier() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar", "commons-lang" ),
+                     "commons-lang", "3.1-SNAPSHOT", "sources", "jar" );
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar", "commons-lang" ),
+                     "commons-lang", "3.1-SNAPSHOT", "javadoc", "jar" );
+    }
+
+    public void testSplitFilenameApacheIncubator() throws LayoutException
+    {
+        assertSplit( RepositoryLayoutUtils.splitFilename( "cxf-common-2.0-incubator-M1.pom", null ), "cxf-common",
+                     "2.0-incubator-M1", "", "pom" );
+        assertSplit( RepositoryLayoutUtils.splitFilename( "commonj-api_r1.1-1.0-incubator-M2.jar", null ),
+                     "commonj-api_r1.1", "1.0-incubator-M2", "", "jar" );
+    }
+
+    public void testSplitFilenameBlankInputs()
+    {
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( null, null );
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            /* expected path */
+        }
+        catch ( LayoutException e )
+        {
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "", null );
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            /* expected path */
+        }
+        catch ( LayoutException e )
+        {
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "   ", null );
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            /* expected path */
+        }
+        catch ( LayoutException e )
+        {
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( " \t  \n  ", null );
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            /* expected path */
+        }
+        catch ( LayoutException e )
+        {
+            fail( "Should have thrown an IllegalArgumentException." );
+        }
+    }
+    
+    public void testSplitFilenameBadInputs()
+    {
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "commons-lang.jar", null );
+            fail( "Should have thrown a LayoutException (No Version)." );
+        }
+        catch ( LayoutException e )
+        {
+            /* Expected Path */
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "geronimo-store", null );
+            fail( "Should have thrown a LayoutException (No Extension)." );
+        }
+        catch ( LayoutException e )
+        {
+            /* Expected Path */
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "The Sixth Sick Sheiks Sixth Sheep is Sick.", null );
+            fail( "Should have thrown a LayoutException (No Extension)." );
+        }
+        catch ( LayoutException e )
+        {
+            /* Expected Path */
+        }
+        
+        try
+        {
+            RepositoryLayoutUtils.splitFilename( "1.0.jar", null );
+            fail( "Should have thrown a LayoutException (No Artifact ID)." );
+        }
+        catch ( LayoutException e )
+        {
+            /* Expected Path */
+        }
+    }
+
+    private void assertSplit( String[] actualSplit, String artifactId, String version, String classifier,
+                              String extension )
+    {
+        assertEquals( "Split - artifactId", artifactId, actualSplit[0] );
+        assertEquals( "Split - version", version, actualSplit[1] );
+        assertEquals( "Split - classifier", classifier, actualSplit[2] );
+        assertEquals( "Split - extension", extension, actualSplit[3] );
+    }
+}

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.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/layout/RepositoryLayoutUtilsTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain