From 3331e0fd83fc47647187c82bdff211248856f670 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 16 Mar 2007 22:45:38 +0000 Subject: [PATCH] More Work Against Scanner / Layout / Artifact / Database git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/branches/archiva-jpox-database-refactor@519169 13f79535-47bb-0310-9956-ffa450edef68 --- .../maven/archiva/common/utils/DateUtil.java | 130 +++++++++++ .../archiva/common/utils/DateUtilTest.java | 69 ++++++ .../archiva/consumers/AbstractConsumer.java | 3 +- .../maven/archiva/consumers/Consumer.java | 91 -------- .../archiva/consumers/ConsumerFactory.java | 70 ------ .../consumers/GenericArtifactConsumer.java | 4 +- .../consumers/GenericModelConsumer.java | 2 + .../GenericRepositoryMetadataConsumer.java | 2 + .../consumers/AbstractConsumerTestCase.java | 2 +- .../AbstractGenericConsumerTestCase.java | 2 + .../consumers/FileProblemsTracker.java | 2 +- .../GenericArtifactConsumerTest.java | 3 +- .../executors/DataRefreshExecutor.java | 6 +- archiva-discoverer/pom.xml | 69 ------ .../archiva/discoverer/DefaultDiscoverer.java | 178 -------------- .../maven/archiva/discoverer/Discoverer.java | 73 ------ .../discoverer/DiscovererException.java | 37 --- .../discoverer/DiscovererStatistics.java | 198 ---------------- .../archiva/discoverer/RepositoryScanner.java | 209 ----------------- archiva-discoverer/src/site/apt/design.apt | 50 ---- archiva-discoverer/src/site/site.xml | 27 --- .../AbstractDiscovererTestCase.java | 86 ------- .../discoverer/DefaultDiscovererTest.java | 169 -------------- .../archiva/discoverer/MockConsumer.java | 75 ------ .../src/test/legacy-repository/CVS/Root | 1 - .../src/test/legacy-repository/KEYS | 0 .../invalid/foo/invalid-1.0.foo | 0 .../legacy-repository/invalid/invalid-1.0.jar | 0 .../invalid/jars/1.0/invalid-1.0.jar | 0 .../invalid/jars/invalid-1.0.rar | 0 .../invalid/jars/invalid.jar | 0 .../invalid/jars/no-extension | 0 .../javax.sql/jars/jdbc-2.0.jar | 0 .../jars/test-not-updated-1.0.jar | 1 - .../jars/test-updated-1.0.jar | 1 - .../jars/some-ejb-1.0-client.jar | 0 .../jars/testing-1.0-20050611.112233-1.jar | 0 .../jars/testing-1.0-sources.jar | 0 .../org.apache.maven/jars/testing-1.0.jar | 0 .../org.apache.maven/jars/testing-1.0.tar.gz | 0 .../org.apache.maven/jars/testing-1.0.zip | 0 .../org.apache.maven/jars/testing-UNKNOWN.jar | 0 .../org/apache/maven/A/1.0/A-1.0.pom | 28 --- .../org/apache/maven/A/1.0/A-1.0.war | 1 - .../org/apache/maven/B/1.0/B-1.0.pom | 28 --- .../org/apache/maven/B/2.0/B-2.0.pom | 28 --- .../org/apache/maven/C/1.0/C-1.0.pom | 28 --- .../org/apache/maven/C/1.0/C-1.0.war | 1 - .../maven/discovery/1.0/discovery-1.0.pom | 28 --- .../maven/samplejar/1.0/samplejar-1.0.jar | 1 - .../maven/samplejar/1.0/samplejar-1.0.pom | 29 --- .../maven/samplejar/2.0/samplejar-2.0.jar | 1 - .../maven/samplejar/2.0/samplejar-2.0.pom | 29 --- .../testgroup/discovery/1.0/discovery-1.0.pom | 28 --- .../src/test/repository/CVS/Root | 1 - archiva-discoverer/src/test/repository/KEYS | 1 - .../test/repository/invalid/invalid-1.0.jar | 0 .../invalid-1.0-20050611.123456-1.jar | 0 .../invalid/1.0-SNAPSHOT/invalid-1.0.jar | 0 .../invalid/invalid/1.0/invalid-1.0b.jar | 0 .../invalid/invalid/1.0/invalid-2.0.jar | 0 .../repository/invalid/invalid/1/invalid-1 | 0 .../test/repository/javax/maven-metadata.xml | 26 --- .../javax/sql/jdbc/2.0/jdbc-2.0.jar | 0 .../jdbc/2.0/maven-metadata-repository.xml | 25 -- .../sql/jdbc/maven-metadata-repository.xml | 30 --- .../javax/sql/maven-metadata-repository.xml | 25 -- .../org/apache/maven/A/1.0/A-1.0.pom | 28 --- .../org/apache/maven/A/1.0/A-1.0.war | 1 - .../org/apache/maven/B/1.0/B-1.0.pom | 28 --- .../org/apache/maven/B/2.0/B-2.0.pom | 28 --- .../org/apache/maven/C/1.0/C-1.0.pom | 28 --- .../org/apache/maven/C/1.0/C-1.0.war | 1 - .../maven/discovery/1.0/discovery-1.0.pom | 28 --- .../org/apache/maven/maven-metadata.xml | 23 -- .../maven/samplejar/1.0/samplejar-1.0.jar | 1 - .../maven/samplejar/1.0/samplejar-1.0.pom | 29 --- .../maven/samplejar/2.0/samplejar-2.0.jar | 1 - .../maven/samplejar/2.0/samplejar-2.0.pom | 29 --- .../maven/some-ejb/1.0/maven-metadata.xml | 0 .../some-ejb/1.0/some-ejb-1.0-client.jar | 0 .../test-1.0-20050611.112233-1-javadoc.jar | 0 .../test-1.0-20050611.112233-1.jar | 0 ...wrong-artifactId-1.0-20050611.112233-1.jar | 0 .../maven/testing/1.0/testing-1.0-sources.jar | 0 .../testing/1.0/testing-1.0-test-sources.jar | 0 .../apache/maven/testing/1.0/testing-1.0.jar | 0 .../maven/testing/1.0/testing-1.0.tar.gz | 0 .../apache/maven/testing/1.0/testing-1.0.zip | 0 .../1.0/test-not-updated-1.0.jar | 1 - .../1.0/test-not-updated-1.0.pom | 29 --- .../test-not-updated/maven-metadata.xml | 24 -- .../test-updated/1.0/test-updated-1.0.jar | 1 - .../test-updated/1.0/test-updated-1.0.pom | 29 --- .../update/test-updated/maven-metadata.xml | 24 -- .../testgroup/discovery/1.0/discovery-1.0.pom | 28 --- .../discovery/1.0/maven-metadata.xml | 25 -- .../testgroup/discovery/maven-metadata.xml | 24 -- archiva-model/pom.xml | 5 + archiva-model/src/main/mdo/archiva.xml | 7 + .../archiva/repository/ArchivaArtifact.java | 42 ++-- .../DefaultBidirectionalRepositoryLayout.java | 78 ------- .../BidirectionalRepositoryLayout.java | 5 +- .../DefaultBidirectionalRepositoryLayout.java | 129 +++++++++++ .../repository/layout/LayoutException.java | 21 +- .../LegacyBidirectionalRepositoryLayout.java | 46 +++- .../layout/RepositoryLayoutUtils.java | 219 ++++++++++++++++++ .../repository/version/VersionUtil.java | 41 +++- ...BidirectionalRepositoryLayoutTestCase.java | 33 +-- ...aultBidirectionalRepositoryLayoutTest.java | 23 +- ...gacyBidirectionalRepositoryLayoutTest.java | 44 +++- .../layout/RepositoryLayoutUtilsTest.java | 206 ++++++++++++++++ .../scanner/CentralScannerTiming.java | 132 +++++++++++ .../scanner/RepositoryScannerTest.java | 70 ++++++ .../repository/scanner/ScanConsumer.java | 82 +++++++ .../src/test/resources/log4j.xml | 40 ++++ pom.xml | 1 - 117 files changed, 1281 insertions(+), 2251 deletions(-) create mode 100644 archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java create mode 100644 archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java delete mode 100755 archiva-discoverer/pom.xml delete mode 100644 archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DefaultDiscoverer.java delete mode 100644 archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/Discoverer.java delete mode 100644 archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererException.java delete mode 100644 archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererStatistics.java delete mode 100644 archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/RepositoryScanner.java delete mode 100644 archiva-discoverer/src/site/apt/design.apt delete mode 100644 archiva-discoverer/src/site/site.xml delete mode 100644 archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AbstractDiscovererTestCase.java delete mode 100644 archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/DefaultDiscovererTest.java delete mode 100644 archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/MockConsumer.java delete mode 100644 archiva-discoverer/src/test/legacy-repository/CVS/Root delete mode 100644 archiva-discoverer/src/test/legacy-repository/KEYS delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/foo/invalid-1.0.foo delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/invalid-1.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/jars/1.0/invalid-1.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid-1.0.rar delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/invalid/jars/no-extension delete mode 100644 archiva-discoverer/src/test/legacy-repository/javax.sql/jars/jdbc-2.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-not-updated-1.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-updated-1.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/some-ejb-1.0-client.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-20050611.112233-1.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-sources.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.jar delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.tar.gz delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.zip delete mode 100644 archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-UNKNOWN.jar delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.war delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/1.0/B-1.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/2.0/B-2.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.war delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/discovery/1.0/discovery-1.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.jar delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.jar delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.pom delete mode 100644 archiva-discoverer/src/test/pom-artifacts/org/apache/testgroup/discovery/1.0/discovery-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/CVS/Root delete mode 100644 archiva-discoverer/src/test/repository/KEYS delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-1.0b.jar delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-2.0.jar delete mode 100644 archiva-discoverer/src/test/repository/invalid/invalid/1/invalid-1 delete mode 100644 archiva-discoverer/src/test/repository/javax/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/jdbc-2.0.jar delete mode 100644 archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml delete mode 100644 archiva-discoverer/src/test/repository/javax/sql/jdbc/maven-metadata-repository.xml delete mode 100644 archiva-discoverer/src/test/repository/javax/sql/maven-metadata-repository.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.war delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/B/1.0/B-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/B/2.0/B-2.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.war delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/discovery/1.0/discovery-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.zip delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom delete mode 100644 archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml delete mode 100644 archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/maven-metadata.xml delete mode 100644 archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java rename archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/{content => layout}/BidirectionalRepositoryLayout.java (89%) create mode 100644 archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java rename archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java => archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java (67%) rename archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/{content => layout}/LegacyBidirectionalRepositoryLayout.java (64%) create mode 100644 archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java rename archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AllTests.java => archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java (50%) rename archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/{content => layout}/AbstractBidirectionalRepositoryLayoutTestCase.java (84%) rename archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/{content => layout}/DefaultBidirectionalRepositoryLayoutTest.java (77%) rename archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/{content => layout}/LegacyBidirectionalRepositoryLayoutTest.java (52%) create mode 100644 archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java create mode 100644 archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java create mode 100644 archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java create mode 100644 archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java create mode 100644 archiva-repository-layer/src/test/resources/log4j.xml diff --git a/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java b/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java new file mode 100644 index 000000000..212aece61 --- /dev/null +++ b/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java @@ -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 Joakim Erdfelt + * @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" ); + } + } + } + +} diff --git a/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java b/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java new file mode 100644 index 000000000..09785b6e5 --- /dev/null +++ b/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/DateUtilTest.java @@ -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 Joakim Erdfelt + * @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 ) ); + } +} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java index 200844a11..1b6915c93 100644 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java +++ b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java @@ -19,7 +19,8 @@ package org.apache.maven.archiva.consumers; * 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; diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java deleted file mode 100644 index 2ed0f1b72..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/Consumer.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.apache.maven.archiva.consumers; - -/* - * 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.utils.BaseFile; -import org.apache.maven.archiva.model.ArchivaRepository; -import org.apache.maven.artifact.repository.ArtifactRepository; - -import java.util.List; - -/** - * DiscovererConsumer - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public interface Consumer -{ - public static final String ROLE = Consumer.class.getName(); - - /** - * This is the human readable name for the discoverer. - * - * @return the human readable discoverer name. - */ - public String getName(); - - /** - * This is used to initialize any internals in the consumer before it is used. - * - * This method is called by the internals of archiva and is not meant to be used by other developers. - * This method is called once per repository. - * - * @param repository the repository to initialize the consumer against. - * @return true if the repository is valid for this consumer. false will result in consumer being disabled - * for the provided repository. - */ - public boolean init( ArchivaRepository repository ); - - /** - * Get the List of excluded file patterns for this consumer. - * - * @return the list of excluded file patterns for this consumer. - */ - public List getExcludePatterns(); - - /** - * Get the List of included file patterns for this consumer. - * - * @return the list of included file patterns for this consumer. - */ - public List getIncludePatterns(); - - /** - * Called by archiva framework to indicate that there is a file suitable for consuming, - * This method will only be called if the {@link #init(ArtifactRepository)} and {@link #getExcludePatterns()} - * and {@link #getIncludePatterns()} all pass for this consumer. - * - * @param file the file to process. - * @throws ConsumerException if there was a problem processing this file. - */ - public void processFile( BaseFile file ) throws ConsumerException; - - /** - * Called by archiva framework to indicate that there has been a problem detected - * on a specific file. - * - * NOTE: It is very possible for 1 file to have more than 1 problem associated with it. - * - * @param file the file to process. - * @param message the message describing the problem. - */ - public void processFileProblem( BaseFile file, String message ); -} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java deleted file mode 100644 index d95bfda0e..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.apache.maven.archiva.consumers; - -/* - * 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.codehaus.plexus.PlexusConstants; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.context.Context; -import org.codehaus.plexus.context.ContextException; -import org.codehaus.plexus.logging.AbstractLogEnabled; -import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; - -/** - * DiscovererConsumerFactory - factory for consumers. - * - * @author Joakim Erdfelt - * @version $Id$ - * @plexus.component role="org.apache.maven.archiva.common.consumers.ConsumerFactory" - */ -public class ConsumerFactory - extends AbstractLogEnabled - implements Contextualizable -{ - public static final String ROLE = ConsumerFactory.class.getName(); - - private PlexusContainer container; - - public Consumer createConsumer( String name ) - throws ConsumerException - { - getLogger().info( "Attempting to create consumer [" + name + "]" ); - - Consumer consumer; - try - { - consumer = (Consumer) container.lookup( Consumer.ROLE, name, container.getLookupRealm() ); - } - catch ( Throwable t ) - { - String emsg = "Unable to create consumer [" + name + "]: " + t.getMessage(); - getLogger().warn( t.getMessage(), t ); - throw new ConsumerException( null, emsg, t ); - } - - getLogger().info( "Created consumer [" + name + "|" + consumer.getName() + "]" ); - return consumer; - } - - public void contextualize( Context context ) - throws ContextException - { - container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); - } -} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java index 4c6f57bdb..084c38881 100644 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java +++ b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java @@ -24,7 +24,9 @@ import org.apache.maven.archiva.common.artifact.builder.DefaultLayoutArtifactBui 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; diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java index 4fe0c429b..f44315d4e 100644 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java +++ b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java @@ -20,6 +20,8 @@ package org.apache.maven.archiva.consumers; */ 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; diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java index a575f156a..2c0573011 100644 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java +++ b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java @@ -21,6 +21,8 @@ package org.apache.maven.archiva.consumers; 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; diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java index dc35fc44d..a6a90e3f3 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractConsumerTestCase.java @@ -19,7 +19,7 @@ package org.apache.maven.archiva.consumers; * 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; diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java index db51092e3..bbb5610bd 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/AbstractGenericConsumerTestCase.java @@ -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 diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java index 35457c4b1..bc96f03ec 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/FileProblemsTracker.java @@ -20,7 +20,7 @@ package org.apache.maven.archiva.consumers; */ 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; diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java index 27111ac1e..a436cdd94 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/GenericArtifactConsumerTest.java @@ -21,7 +21,8 @@ package org.apache.maven.archiva.consumers; 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; diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java index 0d92adf71..8f0dd4d37 100644 --- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java +++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java @@ -23,12 +23,12 @@ import org.apache.maven.archiva.configuration.ArchivaConfiguration; 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; diff --git a/archiva-discoverer/pom.xml b/archiva-discoverer/pom.xml deleted file mode 100755 index e32a38447..000000000 --- a/archiva-discoverer/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - org.apache.maven.archiva - archiva - 1.0-SNAPSHOT - - 4.0.0 - archiva-discoverer - Archiva Discoverer - - - org.apache.maven.archiva - archiva-consumer-api - - - org.apache.maven.archiva - archiva-common - - - org.codehaus.plexus - plexus-utils - - - org.codehaus.plexus - plexus-container-default - - - org.apache.maven - maven-artifact - - - org.apache.maven - maven-repository-metadata - - - org.apache.maven - maven-artifact-manager - - - org.apache.maven - maven-model - - - commons-lang - commons-lang - - - diff --git a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DefaultDiscoverer.java b/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DefaultDiscoverer.java deleted file mode 100644 index 8a6a61855..000000000 --- a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DefaultDiscoverer.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * 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.consumers.Consumer; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.codehaus.plexus.logging.AbstractLogEnabled; -import org.codehaus.plexus.util.DirectoryWalker; -import org.codehaus.plexus.util.FileUtils; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -/** - * Discoverer Implementation. - * - * @author Brett Porter - * @author Joakim Erdfelt - * @plexus.component role="org.apache.maven.archiva.discoverer.Discoverer" - */ -public class DefaultDiscoverer - extends AbstractLogEnabled - implements Discoverer -{ - /** - * Standard patterns to exclude from discovery as they are usually noise. - */ - private static final String[] STANDARD_DISCOVERY_EXCLUDES = { - "bin/**", - "reports/**", - ".index", - ".reports/**", - ".maven/**", - "**/*snapshot-version", - "*/website/**", - "*/licences/**", - "**/.htaccess", - "**/*.html", - "**/*.txt", - "**/README*", - "**/CHANGELOG*", - "**/KEYS*" }; - - public DefaultDiscoverer() - { - } - - public DiscovererStatistics walkRepository( ArtifactRepository repository, List consumers, boolean includeSnapshots ) - throws DiscovererException - { - return walkRepository( repository, consumers, includeSnapshots, 0, null, null ); - } - - public DiscovererStatistics walkRepository( ArtifactRepository repository, List consumers, - boolean includeSnapshots, long onlyModifiedAfterTimestamp, - List extraFileExclusions, List extraFileInclusions ) - throws DiscovererException - { - // Sanity Check - - if ( repository == null ) - { - throw new IllegalArgumentException( "Unable to operate on a null repository." ); - } - - if ( !"file".equals( repository.getProtocol() ) ) - { - throw new UnsupportedOperationException( "Only filesystem repositories are supported." ); - } - - File repositoryBase = new File( repository.getBasedir() ); - - if ( !repositoryBase.exists() ) - { - throw new UnsupportedOperationException( "Unable to scan a repository, directory " - + repositoryBase.getAbsolutePath() + " does not exist." ); - } - - if ( !repositoryBase.isDirectory() ) - { - throw new UnsupportedOperationException( "Unable to scan a repository, path " - + repositoryBase.getAbsolutePath() + " is not a directory." ); - } - - // Setup Includes / Excludes. - - List allExcludes = new ArrayList(); - List allIncludes = new ArrayList(); - - // Exclude all of the SCM patterns. - allExcludes.addAll( FileUtils.getDefaultExcludesAsList() ); - - // Exclude all of the archiva noise patterns. - allExcludes.addAll( Arrays.asList( STANDARD_DISCOVERY_EXCLUDES ) ); - - if ( !includeSnapshots ) - { - allExcludes.add( "**/*-SNAPSHOT*" ); - } - - if ( extraFileExclusions != null ) - { - allExcludes.addAll( extraFileExclusions ); - } - - Iterator it = consumers.iterator(); - while ( it.hasNext() ) - { - Consumer consumer = (Consumer) it.next(); - - /* NOTE: Do not insert the consumer exclusion patterns here. - * Exclusion patterns are handled by RepositoryScanner.wantsFile(Consumer, String) - * - * addUniqueElements( consumer.getExcludePatterns(), allExcludes ); - */ - addUniqueElements( consumer.getIncludePatterns(), allIncludes ); - } - - if ( extraFileInclusions != null ) - { - allIncludes.addAll( extraFileInclusions ); - } - - // Setup Directory Walker - - DirectoryWalker dirWalker = new DirectoryWalker(); - - dirWalker.setBaseDir( repositoryBase ); - - dirWalker.setIncludes( allIncludes ); - dirWalker.setExcludes( allExcludes ); - - // Setup the Scan Instance - RepositoryScanner repoScanner = new RepositoryScanner( repository, consumers ); - repoScanner.setOnlyModifiedAfterTimestamp( onlyModifiedAfterTimestamp ); - - repoScanner.setLogger( getLogger() ); - dirWalker.addDirectoryWalkListener( repoScanner ); - - // Execute scan. - dirWalker.scan(); - - return repoScanner.getStatistics(); - } - - private void addUniqueElements( List fromList, List toList ) - { - Iterator itFrom = fromList.iterator(); - while ( itFrom.hasNext() ) - { - Object o = itFrom.next(); - if ( !toList.contains( o ) ) - { - toList.add( o ); - } - } - } -} diff --git a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/Discoverer.java b/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/Discoverer.java deleted file mode 100644 index 4f670c4e8..000000000 --- a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/Discoverer.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.maven.artifact.repository.ArtifactRepository; - -import java.io.File; -import java.util.List; - -/** - * Discoverer - generic discoverer of content in an ArtifactRepository. - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public interface Discoverer -{ - public static final String ROLE = Discoverer.class.getName(); - - /** - * Walk the repository, and report to the consumers the files found. - * - * Report changes to the appropriate Consumer. - * - * This is just a convenience method to {@link #walkRepository(ArtifactRepository, List, boolean, long, List, List)} - * equivalent to calling walkRepository( repository, consumers, includeSnapshots, 0, null, null ); - * - * @param repository the repository to change. - * @param consumers use the provided list of consumers. - * @param includeSnapshots true to include snapshots in the walking of this repository. - * @return the statistics for this scan. - * @throws DiscovererException if there was a fundamental problem with getting the discoverer started. - */ - public DiscovererStatistics walkRepository( ArtifactRepository repository, List consumers, boolean includeSnapshots ) - throws DiscovererException; - - /** - * Walk the repository, and report to the consumers the files found. - * - * Report changes to the appropriate Consumer. - * - * @param repository the repository to change. - * @param consumers use the provided list of consumers. - * @param includeSnapshots true to include snapshots in the scanning of this repository. - * @param onlyModifiedAfterTimestamp Only report to the consumers, files that have a {@link File#lastModified()}) - * after the provided timestamp. - * @param extraFileExclusions an optional list of file exclusions on the walk. - * @param extraFileInclusions an optional list of file inclusions on the walk. - * @return the statistics for this scan. - * @throws DiscovererException if there was a fundamental problem with getting the discoverer started. - */ - public DiscovererStatistics walkRepository( ArtifactRepository repository, List consumers, - boolean includeSnapshots, long onlyModifiedAfterTimestamp, - List extraFileExclusions, List extraFileInclusions ) - throws DiscovererException; -} diff --git a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererException.java b/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererException.java deleted file mode 100644 index d662c678b..000000000 --- a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererException.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * 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. - */ - -/** - * @author Edwin Punzalan - */ -public class DiscovererException - extends Exception -{ - public DiscovererException( String message ) - { - super( message ); - } - - public DiscovererException( String message, Throwable cause ) - { - super( message, cause ); - } -} diff --git a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererStatistics.java b/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererStatistics.java deleted file mode 100644 index 28c218658..000000000 --- a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/DiscovererStatistics.java +++ /dev/null @@ -1,198 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * 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.math.NumberUtils; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.util.IOUtil; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Properties; - -/** - * DiscovererStatistics - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public class DiscovererStatistics -{ - private static final String PROP_FILES_CONSUMED = "scan.consumed.files"; - - private static final String PROP_FILES_INCLUDED = "scan.included.files"; - - private static final String PROP_FILES_SKIPPED = "scan.skipped.files"; - - private static final String PROP_TIMESTAMP_STARTED = "scan.started.timestamp"; - - private static final String PROP_TIMESTAMP_FINISHED = "scan.finished.timestamp"; - - protected long timestampStarted = 0; - - protected long timestampFinished = 0; - - protected long filesIncluded = 0; - - protected long filesConsumed = 0; - - protected long filesSkipped = 0; - - private ArtifactRepository repository; - - public DiscovererStatistics( ArtifactRepository repository ) - { - this.repository = repository; - } - - public void load( String filename ) - throws IOException - { - File repositoryBase = new File( this.repository.getBasedir() ); - - File scanProperties = new File( repositoryBase, filename ); - FileInputStream fis = null; - try - { - Properties props = new Properties(); - fis = new FileInputStream( scanProperties ); - props.load( fis ); - - timestampFinished = NumberUtils.toLong( props.getProperty( PROP_TIMESTAMP_FINISHED ), 0 ); - timestampStarted = NumberUtils.toLong( props.getProperty( PROP_TIMESTAMP_STARTED ), 0 ); - filesIncluded = NumberUtils.toLong( props.getProperty( PROP_FILES_INCLUDED ), 0 ); - filesConsumed = NumberUtils.toLong( props.getProperty( PROP_FILES_CONSUMED ), 0 ); - filesSkipped = NumberUtils.toLong( props.getProperty( PROP_FILES_SKIPPED ), 0 ); - } - catch ( IOException e ) - { - reset(); - throw e; - } - finally - { - IOUtil.close( fis ); - } - } - - public void save( String filename ) - throws IOException - { - Properties props = new Properties(); - props.setProperty( PROP_TIMESTAMP_FINISHED, String.valueOf( timestampFinished ) ); - props.setProperty( PROP_TIMESTAMP_STARTED, String.valueOf( timestampStarted ) ); - props.setProperty( PROP_FILES_INCLUDED, String.valueOf( filesIncluded ) ); - props.setProperty( PROP_FILES_CONSUMED, String.valueOf( filesConsumed ) ); - props.setProperty( PROP_FILES_SKIPPED, String.valueOf( filesSkipped ) ); - - File repositoryBase = new File( this.repository.getBasedir() ); - File statsFile = new File( repositoryBase, filename ); - - FileOutputStream fos = null; - try - { - fos = new FileOutputStream( statsFile ); - props.store( fos, "Last Scan Information, managed by Archiva. DO NOT EDIT" ); - fos.flush(); - } - finally - { - IOUtil.close( fos ); - } - } - - public void reset() - { - timestampStarted = 0; - timestampFinished = 0; - filesIncluded = 0; - filesConsumed = 0; - filesSkipped = 0; - } - - public long getElapsedMilliseconds() - { - return timestampFinished - timestampStarted; - } - - public long getFilesConsumed() - { - return filesConsumed; - } - - public long getFilesIncluded() - { - return filesIncluded; - } - - public ArtifactRepository getRepository() - { - return repository; - } - - public long getTimestampFinished() - { - return timestampFinished; - } - - public long getTimestampStarted() - { - return timestampStarted; - } - - public long getFilesSkipped() - { - return filesSkipped; - } - - public void setTimestampFinished( long timestampFinished ) - { - this.timestampFinished = timestampFinished; - } - - public void setTimestampStarted( long timestampStarted ) - { - this.timestampStarted = timestampStarted; - } - - public void dump( Logger logger ) - { - logger.info( "----------------------------------------------------" ); - logger.info( "Scan of Repository: " + repository.getId() ); - logger.info( " Started : " + toHumanTimestamp( this.getTimestampStarted() ) ); - logger.info( " Finished: " + toHumanTimestamp( this.getTimestampFinished() ) ); - // TODO: pretty print ellapsed time. - logger.info( " Duration: " + this.getElapsedMilliseconds() + "ms" ); - logger.info( " Files : " + this.getFilesIncluded() ); - logger.info( " Consumed: " + this.getFilesConsumed() ); - logger.info( " Skipped : " + this.getFilesSkipped() ); - } - - private String toHumanTimestamp( long timestamp ) - { - SimpleDateFormat dateFormat = new SimpleDateFormat(); - return dateFormat.format( new Date( timestamp ) ); - } -} diff --git a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/RepositoryScanner.java b/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/RepositoryScanner.java deleted file mode 100644 index 9a37ac4a8..000000000 --- a/archiva-discoverer/src/main/java/org/apache/maven/archiva/discoverer/RepositoryScanner.java +++ /dev/null @@ -1,209 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * 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.SystemUtils; -import org.apache.maven.archiva.common.utils.BaseFile; -import org.apache.maven.archiva.consumers.Consumer; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.util.DirectoryWalkListener; -import org.codehaus.plexus.util.SelectorUtils; -import org.codehaus.plexus.util.StringUtils; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -/** - * RepositoryScanner - this is an instance of a scan against a repository. - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public class RepositoryScanner - implements DirectoryWalkListener -{ - public static final String ROLE = RepositoryScanner.class.getName(); - - private List consumers; - - private ArtifactRepository repository; - - private Logger logger; - - private boolean isCaseSensitive = true; - - private DiscovererStatistics stats; - - private long onlyModifiedAfterTimestamp = 0; - - public RepositoryScanner( ArtifactRepository repository, List consumerList ) - { - this.repository = repository; - this.consumers = consumerList; - stats = new DiscovererStatistics( repository ); - - Iterator it = this.consumers.iterator(); - while ( it.hasNext() ) - { - Consumer consumer = (Consumer) it.next(); - - if ( !consumer.init( this.repository ) ) - { - throw new IllegalStateException( "Consumer [" + consumer.getName() + - "] is reporting that it is incompatible with the [" + repository.getId() + "] repository." ); - } - } - - if ( SystemUtils.IS_OS_WINDOWS ) - { - isCaseSensitive = false; - } - } - - public DiscovererStatistics getStatistics() - { - return stats; - } - - public void directoryWalkStarting( File basedir ) - { - getLogger().info( "Walk Started: [" + this.repository.getId() + "] " + this.repository.getBasedir() ); - stats.reset(); - stats.timestampStarted = System.currentTimeMillis(); - } - - public void directoryWalkStep( int percentage, File file ) - { - getLogger().debug( "Walk Step: " + percentage + ", " + file ); - - // Timestamp finished points to the last successful scan, not this current one. - if ( file.lastModified() < onlyModifiedAfterTimestamp ) - { - // Skip file as no change has occured. - getLogger().debug( "Skipping, No Change: " + file.getAbsolutePath() ); - stats.filesSkipped++; - return; - } - - synchronized ( consumers ) - { - stats.filesIncluded++; - - BaseFile basefile = new BaseFile( repository.getBasedir(), file ); - - Iterator itConsumers = this.consumers.iterator(); - while ( itConsumers.hasNext() ) - { - Consumer consumer = (Consumer) itConsumers.next(); - - if ( wantsFile( consumer, StringUtils.replace( basefile.getRelativePath(), "\\", "/" ) ) ) - { - try - { - getLogger().debug( "Sending to consumer: " + consumer.getName() ); - stats.filesConsumed++; - consumer.processFile( basefile ); - } - catch ( Exception e ) - { - /* Intentionally Catch all exceptions. - * So that the discoverer processing can continue. - */ - getLogger().error( "Consumer [" + consumer.getName() + "] had an error when processing file [" + - basefile.getAbsolutePath() + "]: " + e.getMessage(), e ); - } - } - else - { - getLogger().debug( - "Skipping consumer " + consumer.getName() + " for file " + basefile.getRelativePath() ); - } - } - } - } - - public void directoryWalkFinished() - { - getLogger().info( "Walk Finished: [" + this.repository.getId() + "] " + this.repository.getBasedir() ); - stats.timestampFinished = System.currentTimeMillis(); - } - - private boolean wantsFile( Consumer consumer, String relativePath ) - { - Iterator it; - - // Test excludes first. - it = consumer.getExcludePatterns().iterator(); - while ( it.hasNext() ) - { - String pattern = (String) it.next(); - if ( SelectorUtils.matchPath( pattern, relativePath, isCaseSensitive ) ) - { - // Definately does NOT WANT FILE. - return false; - } - } - - // Now test includes. - it = consumer.getIncludePatterns().iterator(); - while ( it.hasNext() ) - { - String pattern = (String) it.next(); - if ( SelectorUtils.matchPath( pattern, relativePath, isCaseSensitive ) ) - { - // Specifically WANTS FILE. - return true; - } - } - - // Not included, and Not excluded? Default to EXCLUDE. - return false; - } - - public long getOnlyModifiedAfterTimestamp() - { - return onlyModifiedAfterTimestamp; - } - - public void setOnlyModifiedAfterTimestamp( long onlyModifiedAfterTimestamp ) - { - this.onlyModifiedAfterTimestamp = onlyModifiedAfterTimestamp; - } - - /** - * Debug method from DirectoryWalker. - */ - public void debug( String message ) - { - getLogger().debug( "Repository Scanner: " + message ); - } - - public Logger getLogger() - { - return logger; - } - - public void setLogger( Logger logger ) - { - this.logger = logger; - } -} diff --git a/archiva-discoverer/src/site/apt/design.apt b/archiva-discoverer/src/site/apt/design.apt deleted file mode 100644 index 2045d72de..000000000 --- a/archiva-discoverer/src/site/apt/design.apt +++ /dev/null @@ -1,50 +0,0 @@ - ----- - Discoverer Design - ----- - Brett Porter - ----- - 24 July 2006 - ----- - -~~ Copyright 2006 The Apache Software Foundation. -~~ -~~ Licensed 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. - -~~ NOTE: For help with the syntax of this file, see: -~~ http://maven.apache.org/guides/mini/guide-apt-format.html - -Discoverer Design - - The artifact discoverer is designed to traverse the paths in the repository and identify files that are part of - a legitimate artifact. - - There are two plexus components available: - - * {{{../apidocs/org/apache/maven/archiva/discoverer/ArtifactDiscoverer.html} ArtifactDiscoverer}} - - * {{{../apidocs/org/apache/maven/archiva/discoverer/MetadataDiscoverer.html} MetadataDiscoverer}} - - Each of these components currently have an implementation for the both <<>> and <<>> repository - layouts. - - The artifact discoverer will find all artifacts in the repository, while metadata discovery finds any - <<>> files (both remote and local repository formats). - - Note that POMs will be identified as separate artifacts to their related artifacts, as will each - individual derivative artifact at present. Currently, it has been decided not to link them - MRM-40 was closed as - won't fix as a result. - - * Limitations - - * Currently, deleted artifacts are not tracked. This requires a separate event - see - {{{http://jira.codehaus.org/browse/MRM-37} MRM-37}}. diff --git a/archiva-discoverer/src/site/site.xml b/archiva-discoverer/src/site/site.xml deleted file mode 100644 index 74a3077ce..000000000 --- a/archiva-discoverer/src/site/site.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - diff --git a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AbstractDiscovererTestCase.java b/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AbstractDiscovererTestCase.java deleted file mode 100644 index e7185610f..000000000 --- a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AbstractDiscovererTestCase.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; -import org.codehaus.plexus.PlexusTestCase; - -import java.io.File; - -/** - * @author Edwin Punzalan - * @author Joakim Erdfelt - */ -public abstract class AbstractDiscovererTestCase - extends PlexusTestCase -{ - protected Discoverer discoverer; - - protected void setUp() - throws Exception - { - super.setUp(); - - discoverer = (Discoverer) lookup( Discoverer.ROLE ); - } - - protected void tearDown() - throws Exception - { - release( discoverer ); - super.tearDown(); - } - - protected ArtifactRepository getLegacyRepository() - throws Exception - { - File repoBaseDir = new File( getBasedir(), "src/test/legacy-repository" ); - ArtifactRepository repository = createRepository( repoBaseDir, "legacy" ); - resetRepositoryState( repository ); - return repository; - } - - protected ArtifactRepository getDefaultRepository() - throws Exception - { - File repoBaseDir = new File( getBasedir(), "src/test/repository" ); - ArtifactRepository repository = createRepository( repoBaseDir, "default" ); - resetRepositoryState( repository ); - return repository; - } - - protected void resetRepositoryState( ArtifactRepository repository ) - { - // Implement any kind of repository cleanup. - } - - protected ArtifactRepository createRepository( File basedir, String layout ) - throws Exception - { - ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE ); - - ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, layout ); - - return factory.createArtifactRepository( "discoveryRepo-" + getName(), "file://" + basedir, repoLayout, null, - null ); - } -} diff --git a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/DefaultDiscovererTest.java b/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/DefaultDiscovererTest.java deleted file mode 100644 index f105fc62b..000000000 --- a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/DefaultDiscovererTest.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.apache.maven.archiva.discoverer; - -/* - * 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.common.utils.BaseFile; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * DefaultDiscovererTest - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public class DefaultDiscovererTest - extends AbstractDiscovererTestCase -{ - private MockConsumer createAndAddMockConsumer( List consumers, String includePattern, String excludePattern ) - { - MockConsumer mockConsumer = new MockConsumer(); - mockConsumer.getIncludePatterns().add( includePattern ); - if ( StringUtils.isNotBlank( excludePattern ) ) - { - mockConsumer.getExcludePatterns().add( excludePattern ); - } - consumers.add( mockConsumer ); - return mockConsumer; - } - - private void assertFilesProcessed( int expectedFileCount, DiscovererStatistics stats, MockConsumer mockConsumer ) - { - assertNotNull( "Stats should not be null.", stats ); - assertNotNull( "MockConsumer should not be null.", mockConsumer ); - assertNotNull( "MockConsumer.filesProcessed should not be null.", mockConsumer.getFilesProcessed() ); - - if ( stats.getFilesConsumed() != mockConsumer.getFilesProcessed().size() ) - { - fail( "Somehow, the stats count of files consumed, and the count of actual files " - + "processed by the consumer do not match." ); - } - - int actualFileCount = mockConsumer.getFilesProcessed().size(); - - if ( expectedFileCount != actualFileCount ) - { - stats.dump( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ); - System.out.println( "Base Dir:" + stats.getRepository().getBasedir() ); - int num = 0; - Iterator it = mockConsumer.getFilesProcessed().iterator(); - while ( it.hasNext() ) - { - BaseFile file = (BaseFile) it.next(); - System.out.println( " Processed File [" + num + "]: " + file.getRelativePath() ); - num++; - } - - fail( "Files Processed mismatch: expected:<" + expectedFileCount + ">, actual:<" + actualFileCount + ">" ); - } - } - - public void testLegacyLayoutRepositoryAll() - throws Exception - { - ArtifactRepository repository = getLegacyRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*", null ); - - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, true ); - - assertNotNull( stats ); - - assertFilesProcessed( 16, stats, mockConsumer ); - } - - public void testDefaultLayoutRepositoryAll() - throws Exception - { - ArtifactRepository repository = getDefaultRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*", null ); - - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, true ); - - assertNotNull( stats ); - - assertFilesProcessed( 42, stats, mockConsumer ); - } - - public void testDefaultLayoutRepositoryPomsOnly() - throws Exception - { - ArtifactRepository repository = getDefaultRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*.pom", null ); - - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, true ); - - assertNotNull( stats ); - - assertFilesProcessed( 10, stats, mockConsumer ); - } - - public void testDefaultLayoutRepositoryJarsOnly() - throws Exception - { - ArtifactRepository repository = getDefaultRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*.jar", null ); - - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, true ); - - assertNotNull( stats ); - - assertFilesProcessed( 17, stats, mockConsumer ); - } - - public void testDefaultLayoutRepositoryJarsNoSnapshots() - throws Exception - { - ArtifactRepository repository = getDefaultRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*.jar", null ); - - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, false ); - - assertNotNull( stats ); - - assertFilesProcessed( 13, stats, mockConsumer ); - } - - public void testDefaultLayoutRepositoryJarsNoSnapshotsWithExclusions() - throws Exception - { - ArtifactRepository repository = getDefaultRepository(); - List consumers = new ArrayList(); - MockConsumer mockConsumer = createAndAddMockConsumer( consumers, "**/*.jar", null ); - - List exclusions = new ArrayList(); - exclusions.add( "**/*-client.jar" ); - DiscovererStatistics stats = discoverer.walkRepository( repository, consumers, false, 0, exclusions, null ); - - assertNotNull( stats ); - - assertFilesProcessed( 12, stats, mockConsumer ); - } -} diff --git a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/MockConsumer.java b/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/MockConsumer.java deleted file mode 100644 index e6b7b14fe..000000000 --- a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/MockConsumer.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * - */ -package org.apache.maven.archiva.discoverer; - -import org.apache.maven.archiva.common.utils.BaseFile; -import org.apache.maven.archiva.consumers.Consumer; -import org.apache.maven.archiva.consumers.ConsumerException; -import org.apache.maven.artifact.repository.ArtifactRepository; - -import java.util.ArrayList; -import java.util.List; - -public class MockConsumer - implements Consumer -{ - private List excludePatterns = new ArrayList(); - - private List includePatterns = new ArrayList(); - - private List filesProcessed = new ArrayList(); - - private int countFileProblems = 0; - - public String getName() - { - return "MockConsumer (Testing Only)"; - } - - public boolean init( ArtifactRepository repository ) - { - return true; - } - - public void processFile( BaseFile file ) - throws ConsumerException - { - filesProcessed.add( file ); - } - - public void processFileProblem( BaseFile file, String message ) - { - countFileProblems++; - } - - public List getExcludePatterns() - { - return excludePatterns; - } - - public void setExcludePatterns( List excludePatterns ) - { - this.excludePatterns = excludePatterns; - } - - public List getIncludePatterns() - { - return includePatterns; - } - - public void setIncludePatterns( List includePatterns ) - { - this.includePatterns = includePatterns; - } - - public int getCountFileProblems() - { - return countFileProblems; - } - - public List getFilesProcessed() - { - return filesProcessed; - } -} \ No newline at end of file diff --git a/archiva-discoverer/src/test/legacy-repository/CVS/Root b/archiva-discoverer/src/test/legacy-repository/CVS/Root deleted file mode 100644 index 2e65f24a6..000000000 --- a/archiva-discoverer/src/test/legacy-repository/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -not a real CVS root - for testing exclusions diff --git a/archiva-discoverer/src/test/legacy-repository/KEYS b/archiva-discoverer/src/test/legacy-repository/KEYS deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/foo/invalid-1.0.foo b/archiva-discoverer/src/test/legacy-repository/invalid/foo/invalid-1.0.foo deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/invalid-1.0.jar b/archiva-discoverer/src/test/legacy-repository/invalid/invalid-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/jars/1.0/invalid-1.0.jar b/archiva-discoverer/src/test/legacy-repository/invalid/jars/1.0/invalid-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid-1.0.rar b/archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid-1.0.rar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid.jar b/archiva-discoverer/src/test/legacy-repository/invalid/jars/invalid.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/invalid/jars/no-extension b/archiva-discoverer/src/test/legacy-repository/invalid/jars/no-extension deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/javax.sql/jars/jdbc-2.0.jar b/archiva-discoverer/src/test/legacy-repository/javax.sql/jars/jdbc-2.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-not-updated-1.0.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-not-updated-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-not-updated-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-updated-1.0.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-updated-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/legacy-repository/org.apache.maven.update/jars/test-updated-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/some-ejb-1.0-client.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/some-ejb-1.0-client.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-20050611.112233-1.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-20050611.112233-1.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-sources.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0-sources.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.tar.gz b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.tar.gz deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.zip b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-1.0.zip deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-UNKNOWN.jar b/archiva-discoverer/src/test/legacy-repository/org.apache.maven/jars/testing-UNKNOWN.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.pom deleted file mode 100644 index 202a0a448..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - A - 1.0 - Maven Test Repository Artifact Discovery - war - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.war b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.war deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/A/1.0/A-1.0.war +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/1.0/B-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/1.0/B-1.0.pom deleted file mode 100644 index fa5f8f6c8..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/1.0/B-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - B - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/2.0/B-2.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/2.0/B-2.0.pom deleted file mode 100644 index c3034e820..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/B/2.0/B-2.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - B - 2.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.pom deleted file mode 100644 index ae14cd7eb..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - war - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.war b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.war deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/C/1.0/C-1.0.war +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/discovery/1.0/discovery-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/discovery/1.0/discovery-1.0.pom deleted file mode 100644 index 5a29f6117..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/discovery/1.0/discovery-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - discovery - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.jar b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.pom deleted file mode 100644 index 6ab57d162..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/1.0/samplejar-1.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - - - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.jar b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.pom deleted file mode 100644 index a959980df..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/maven/samplejar/2.0/samplejar-2.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - - jar - diff --git a/archiva-discoverer/src/test/pom-artifacts/org/apache/testgroup/discovery/1.0/discovery-1.0.pom b/archiva-discoverer/src/test/pom-artifacts/org/apache/testgroup/discovery/1.0/discovery-1.0.pom deleted file mode 100644 index 12538e81a..000000000 --- a/archiva-discoverer/src/test/pom-artifacts/org/apache/testgroup/discovery/1.0/discovery-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.testgroup - discovery - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/repository/CVS/Root b/archiva-discoverer/src/test/repository/CVS/Root deleted file mode 100644 index 2e65f24a6..000000000 --- a/archiva-discoverer/src/test/repository/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -not a real CVS root - for testing exclusions diff --git a/archiva-discoverer/src/test/repository/KEYS b/archiva-discoverer/src/test/repository/KEYS deleted file mode 100644 index d3b34d5ad..000000000 --- a/archiva-discoverer/src/test/repository/KEYS +++ /dev/null @@ -1 +0,0 @@ -test KEYS file \ No newline at end of file diff --git a/archiva-discoverer/src/test/repository/invalid/invalid-1.0.jar b/archiva-discoverer/src/test/repository/invalid/invalid-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar b/archiva-discoverer/src/test/repository/invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar b/archiva-discoverer/src/test/repository/invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-1.0b.jar b/archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-1.0b.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-2.0.jar b/archiva-discoverer/src/test/repository/invalid/invalid/1.0/invalid-2.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/invalid/invalid/1/invalid-1 b/archiva-discoverer/src/test/repository/invalid/invalid/1/invalid-1 deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/javax/maven-metadata.xml b/archiva-discoverer/src/test/repository/javax/maven-metadata.xml deleted file mode 100644 index b3baf545d..000000000 --- a/archiva-discoverer/src/test/repository/javax/maven-metadata.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - javax.sql - jdbc - 2.0 - diff --git a/archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/jdbc-2.0.jar b/archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/jdbc-2.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml b/archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml deleted file mode 100644 index caf5b6697..000000000 --- a/archiva-discoverer/src/test/repository/javax/sql/jdbc/2.0/maven-metadata-repository.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - javax.sql - jdbc - 2.0 - diff --git a/archiva-discoverer/src/test/repository/javax/sql/jdbc/maven-metadata-repository.xml b/archiva-discoverer/src/test/repository/javax/sql/jdbc/maven-metadata-repository.xml deleted file mode 100644 index bb7570891..000000000 --- a/archiva-discoverer/src/test/repository/javax/sql/jdbc/maven-metadata-repository.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - javax.sql - jdbc - 2.0 - - - 2.0 - - - diff --git a/archiva-discoverer/src/test/repository/javax/sql/maven-metadata-repository.xml b/archiva-discoverer/src/test/repository/javax/sql/maven-metadata-repository.xml deleted file mode 100644 index caf5b6697..000000000 --- a/archiva-discoverer/src/test/repository/javax/sql/maven-metadata-repository.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - javax.sql - jdbc - 2.0 - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.pom deleted file mode 100644 index 202a0a448..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - A - 1.0 - Maven Test Repository Artifact Discovery - war - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.war b/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.war deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/A/1.0/A-1.0.war +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/B/1.0/B-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/B/1.0/B-1.0.pom deleted file mode 100644 index fa5f8f6c8..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/B/1.0/B-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - B - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/B/2.0/B-2.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/B/2.0/B-2.0.pom deleted file mode 100644 index c3034e820..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/B/2.0/B-2.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - B - 2.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.pom deleted file mode 100644 index ae14cd7eb..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - war - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.war b/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.war deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/C/1.0/C-1.0.war +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/discovery/1.0/discovery-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/discovery/1.0/discovery-1.0.pom deleted file mode 100644 index 5a29f6117..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/discovery/1.0/discovery-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.maven - discovery - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/maven/maven-metadata.xml deleted file mode 100644 index 8ce7fc7bb..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/maven-metadata.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - org.apache.maven - \ No newline at end of file diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar b/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom deleted file mode 100644 index 6ab57d162..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/1.0/samplejar-1.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - - - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar b/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom deleted file mode 100644 index a959980df..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/samplejar/2.0/samplejar-2.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven - C - 1.0 - Maven Test Repository Artifact Discovery - - jar - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/maven-metadata.xml deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar b/archiva-discoverer/src/test/repository/org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar b/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar b/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar b/archiva-discoverer/src/test/repository/org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar b/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-sources.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar b/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0-test-sources.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.jar b/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz b/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.tar.gz deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.zip b/archiva-discoverer/src/test/repository/org/apache/maven/testing/1.0/testing-1.0.zip deleted file mode 100644 index e69de29bb..000000000 diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom deleted file mode 100644 index 452727f28..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven.update - test-not-updated - 1.0 - Maven Test Repository Artifact Discovery - - - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/maven-metadata.xml deleted file mode 100644 index bd56a21c1..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-not-updated/maven-metadata.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - org.apache.maven.update - test-not-updated - \ No newline at end of file diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar deleted file mode 100644 index 54d190b23..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar +++ /dev/null @@ -1 +0,0 @@ -dummy content. sample file only. diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom deleted file mode 100644 index edd7b6479..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4.0.0 - org.apache.maven.update - test-updated - 1.0 - Maven Test Repository Artifact Discovery - - - diff --git a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/maven-metadata.xml deleted file mode 100644 index 86e063ca8..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/maven/update/test-updated/maven-metadata.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - org.apache.maven.update - test-updated - \ No newline at end of file diff --git a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom b/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom deleted file mode 100644 index 12538e81a..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/discovery-1.0.pom +++ /dev/null @@ -1,28 +0,0 @@ - - - - 4.0.0 - org.apache.testgroup - discovery - 1.0 - Maven Test Repository Artifact Discovery - pom - diff --git a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml deleted file mode 100644 index 8ee18048c..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/1.0/maven-metadata.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - org.apache.testgroup - discovery - 1.0 - \ No newline at end of file diff --git a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/maven-metadata.xml b/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/maven-metadata.xml deleted file mode 100644 index b024ef7ef..000000000 --- a/archiva-discoverer/src/test/repository/org/apache/testgroup/discovery/maven-metadata.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - org.apache.testgroup - discovery - \ No newline at end of file diff --git a/archiva-model/pom.xml b/archiva-model/pom.xml index 007df7295..5bb0f6c16 100755 --- a/archiva-model/pom.xml +++ b/archiva-model/pom.xml @@ -37,6 +37,11 @@ org.codehaus.plexus plexus-utils + + javax.jdo + jdo2-api + 2.0 + org.codehaus.plexus plexus-container-default diff --git a/archiva-model/src/main/mdo/archiva.xml b/archiva-model/src/main/mdo/archiva.xml index b9b93f244..6d11351a6 100644 --- a/archiva-model/src/main/mdo/archiva.xml +++ b/archiva-model/src/main/mdo/archiva.xml @@ -169,6 +169,13 @@ 1.0.0+ + 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 ); diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java index 4aa0025b7..2456f29f3 100644 --- a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java @@ -21,11 +21,9 @@ package org.apache.maven.archiva.repository; 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 @@ import java.util.regex.Pattern; */ 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 @@ public class ArchivaArtifact 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 @@ public class ArchivaArtifact { return baseVersion; } - + public boolean isSnapshot() { return snapshot; } - + public String getClassifier() { return model.getClassifier(); diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java deleted file mode 100644 index a199c1eef..000000000 --- a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayout.java +++ /dev/null @@ -1,78 +0,0 @@ -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 Joakim Erdfelt - * @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; - } -} diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java similarity index 89% rename from archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java rename to archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java index 4e46722f1..29770dffc 100644 --- a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/BidirectionalRepositoryLayout.java +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java @@ -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 @@ public interface BidirectionalRepositoryLayout * * @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; } diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java new file mode 100644 index 000000000..35406aa07 --- /dev/null +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java @@ -0,0 +1,129 @@ +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 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. + * + * @author Joakim Erdfelt + * @version $Id$ + * + * @plexus.component 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 ) 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]; + } + + // 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 ); + } +} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java similarity index 67% rename from archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java rename to archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java index 790620b0c..0fc833689 100644 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LayoutException.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.consumers; +package org.apache.maven.archiva.repository.layout; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -20,33 +20,22 @@ package org.apache.maven.archiva.consumers; */ import org.apache.maven.archiva.common.ArchivaException; -import org.apache.maven.archiva.common.utils.BaseFile; /** - * ConsumerException - details about the failure of a consumer. + * LayoutException * * @author Joakim Erdfelt * @version $Id$ */ -public class ConsumerException - extends ArchivaException +public class LayoutException extends ArchivaException { - private BaseFile file; - - public ConsumerException( BaseFile file, String message, Throwable cause ) + public LayoutException( String message, Throwable cause ) { super( message, cause ); - this.file = file; } - public ConsumerException( BaseFile file, String message ) + public LayoutException( String message ) { super( message ); - this.file = file; - } - - public BaseFile getFile() - { - return file; } } diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java similarity index 64% rename from archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java rename to archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java index a739c9b96..0344a5245 100644 --- a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayout.java +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java @@ -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 @@ package org.apache.maven.archiva.repository.content; * 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 @@ import java.util.Map; * @author Joakim Erdfelt * @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 @@ public class LegacyBidirectionalRepositoryLayout implements BidirectionalReposit 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 ); } } diff --git a/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java new file mode 100644 index 000000000..8e2c144c9 --- /dev/null +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java @@ -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 Joakim Erdfelt + * @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. + * + *
+     * String part[] = splitFilename( filename );
+     * artifactId = part[0];
+     * version    = part[1];
+     * classifier = part[2];
+     * extension  = part[3];
+     * 
+ * + * @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 }; + } + +} diff --git a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AllTests.java b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java similarity index 50% rename from archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AllTests.java rename to archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java index a32460b5a..c8ce3716f 100644 --- a/archiva-discoverer/src/test/java/org/apache/maven/archiva/discoverer/AllTests.java +++ b/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.discoverer; +package org.apache.maven.archiva.repository.version; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -19,25 +19,44 @@ package org.apache.maven.archiva.discoverer; * under the License. */ -import junit.framework.Test; -import junit.framework.TestSuite; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** - * AllTests - added to allow IDE users to pull all tests into their tool. + * VersionConstants * * @author Joakim Erdfelt * @version $Id$ */ -public class AllTests +public class VersionUtil { + public static final String SNAPSHOT = "SNAPSHOT"; - public static Test suite() + public static final Pattern UNIQUE_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" ); + + public static boolean isSnapshot( String version ) { - TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.discoverer" ); - //$JUnit-BEGIN$ - suite.addTestSuite( DefaultDiscovererTest.class ); - //$JUnit-END$ - return suite; + 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; + } + } } diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java similarity index 84% rename from archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java rename to archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java index c2eca44af..b15685a3b 100644 --- a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/AbstractBidirectionalRepositoryLayoutTestCase.java +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java @@ -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 @@ public class AbstractBidirectionalRepositoryLayoutTestCase extends PlexusTestCas 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 @@ public class AbstractBidirectionalRepositoryLayoutTestCase extends PlexusTestCas 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 ); diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java similarity index 77% rename from archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java rename to archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java index a2e186fff..249104a7f 100644 --- a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultBidirectionalRepositoryLayoutTest.java +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java @@ -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 @@ package org.apache.maven.archiva.repository.content; */ 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 class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio 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 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio 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" ); diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java similarity index 52% rename from archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java rename to archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java index af61e1e34..c90f3b56f 100644 --- a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyBidirectionalRepositoryLayoutTest.java +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java @@ -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 @@ package org.apache.maven.archiva.repository.content; */ import org.apache.maven.archiva.repository.ArchivaArtifact; +import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout; /** * LegacyBidirectionalRepositoryLayoutTest @@ -63,7 +64,44 @@ public class LegacyBidirectionalRepositoryLayoutTest extends AbstractBidirection { 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" ); } } diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java new file mode 100644 index 000000000..5a4e7049e --- /dev/null +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java @@ -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 Joakim Erdfelt + * @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] ); + } +} diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java new file mode 100644 index 000000000..3c2c3a2aa --- /dev/null +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java @@ -0,0 +1,132 @@ +package org.apache.maven.archiva.repository.scanner; + +/* + * 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.utils.BaseFile; +import org.apache.maven.archiva.common.utils.DateUtil; +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.apache.maven.archiva.repository.consumer.ConsumerException; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * CentralScannerTiming + * + * @author Joakim Erdfelt + * @version $Id$ + */ +public class CentralScannerTiming +{ + public static void main( String[] args ) + { + String pathToCentral = "/home/repo1/ibiblio"; + + ( new CentralScannerTiming() ).scanIt( pathToCentral ); + } + + public void scanIt( String path ) + { + ArchivaRepository centralRepo = new ArchivaRepository( "central", "Central Mirror", "file://" + path ); + + RepositoryScanner scanner = new RepositoryScanner(); + + List consumerList = new ArrayList(); + BasicConsumer consumer = new BasicConsumer(); + consumerList.add( consumer ); + + try + { + RepositoryContentStatistics stats = scanner.scan( centralRepo, consumerList, true ); + + SimpleDateFormat df = new SimpleDateFormat(); + System.out.println( "-------" ); + System.out.println( " Repository ID : " + stats.getRepositoryId() ); + System.out.println( " Duration : " + DateUtil.getDuration( stats.getDuration() ) ); + System.out.println( " When Gathered : " + df.format( stats.getWhenGathered() ) ); + System.out.println( " Total File Count: " + stats.getTotalFileCount() ); + System.out.println( " New File Count : " + stats.getNewFileCount() ); + } + catch ( RepositoryException e ) + { + e.printStackTrace( System.err ); + } + } + + class BasicConsumer implements Consumer + { + int count = 0; + + public List getExcludePatterns() + { + return Collections.EMPTY_LIST; + } + + public List getIncludePatterns() + { + List includes = new ArrayList(); + includes.add( "**/*.pom" ); + includes.add( "**/*.jar" ); + includes.add( "**/*.war" ); + includes.add( "**/*.ear" ); + includes.add( "**/*.sar" ); + includes.add( "**/*.car" ); + includes.add( "**/*.mar" ); +// includes.add( "**/*.sha1" ); +// includes.add( "**/*.md5" ); +// includes.add( "**/*.asc" ); + includes.add( "**/*.dtd" ); + includes.add( "**/*.tld" ); + includes.add( "**/*.gz" ); + includes.add( "**/*.bz2" ); + includes.add( "**/*.zip" ); + return includes; + } + + public String getName() + { + return "Basic No-op Consumer"; + } + + public boolean init( ArchivaRepository repository ) + { + return true; + } + + public void processFile( BaseFile file ) throws ConsumerException + { + count++; + if ( ( count % 1000 ) == 0 ) + { + System.out.println( "Files Processed: " + count ); + } + } + + public void processFileProblem( BaseFile file, String message ) + { + /* no-op */ + } + } +} diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java new file mode 100644 index 000000000..4907819f0 --- /dev/null +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java @@ -0,0 +1,70 @@ +package org.apache.maven.archiva.repository.scanner; + +/* + * 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.model.RepositoryContentStatistics; +import org.apache.maven.archiva.repository.ArchivaRepository; +import org.apache.maven.archiva.repository.RepositoryException; +import org.codehaus.plexus.PlexusTestCase; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * RepositoryScannerTest + * + * @author Joakim Erdfelt + * @version $Id$ + */ +public class RepositoryScannerTest extends PlexusTestCase +{ + private ArchivaRepository createDefaultRepository() + { + File repoDir = new File( getBasedir(), "src/test/repositories/default-repository" ); + + assertTrue( "Default Test Repository should exist.", repoDir.exists() && repoDir.isDirectory() ); + + String repoUri = "file://" + StringUtils.replace( repoDir.getAbsolutePath(), "\\", "/" ); + + ArchivaRepository repo = new ArchivaRepository( "testDefaultRepo", "Test Default Repository", repoUri ); + + return repo; + } + + public void testDefaultRepositoryScanner() throws RepositoryException + { + ArchivaRepository repository = createDefaultRepository(); + + List consumers = new ArrayList(); + ScanConsumer consumer = new ScanConsumer(); + consumers.add( consumer ); + + RepositoryScanner scanner = new RepositoryScanner(); + boolean includeSnapshots = true; + RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots ); + + assertNotNull( "Stats should not be null.", stats ); + assertEquals( "Stats.totalFileCount", 17, stats.getTotalFileCount() ); + assertEquals( "Processed Count", 17, consumer.getProcessCount() ); + } + +} diff --git a/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java new file mode 100644 index 000000000..d1c8e0a10 --- /dev/null +++ b/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java @@ -0,0 +1,82 @@ +package org.apache.maven.archiva.repository.scanner; + +/* + * 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.utils.BaseFile; +import org.apache.maven.archiva.repository.ArchivaRepository; +import org.apache.maven.archiva.repository.consumer.Consumer; +import org.apache.maven.archiva.repository.consumer.ConsumerException; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * ScanConsumer + * + * @author Joakim Erdfelt + * @version $Id$ + */ +public class ScanConsumer implements Consumer +{ + private int processCount = 0; + + public List getExcludePatterns() + { + return Collections.EMPTY_LIST; + } + + public List getIncludePatterns() + { + List includes = new ArrayList(); + includes.add( "**/*.jar" ); + return includes; + } + + public String getName() + { + return "Scan Consumer"; + } + + public boolean init( ArchivaRepository repository ) + { + return true; + } + + public void processFile( BaseFile file ) throws ConsumerException + { + this.processCount++; + } + + public void processFileProblem( BaseFile file, String message ) + { + /* do nothing */ + } + + public int getProcessCount() + { + return processCount; + } + + public void setProcessCount( int processCount ) + { + this.processCount = processCount; + } +} diff --git a/archiva-repository-layer/src/test/resources/log4j.xml b/archiva-repository-layer/src/test/resources/log4j.xml new file mode 100644 index 000000000..23d4d08d6 --- /dev/null +++ b/archiva-repository-layer/src/test/resources/log4j.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index a500c2f61..b3acaa8a0 100644 --- a/pom.xml +++ b/pom.xml @@ -121,7 +121,6 @@ archiva-applet archiva-converter archiva-common - archiva-discoverer archiva-reports-standard archiva-indexer archiva-webapp -- 2.39.5