You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2020/03/12 18:52:13 UTC
[archiva] branch master updated: Adding artefact type and
additional tests
This is an automated email from the ASF dual-hosted git repository.
martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva.git
The following commit(s) were added to refs/heads/master by this push:
new 3fcc770 Adding artefact type and additional tests
3fcc770 is described below
commit 3fcc770c79d89fd77fed0a1c7173afdf74d10503
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Thu Mar 12 19:51:35 2020 +0100
Adding artefact type and additional tests
---
.../archiva/repository/content/Artifact.java | 5 ++
.../archiva/repository/content/ArtifactType.java} | 25 +++------
.../repository/content/BaseArtifactTypes.java} | 30 +++++------
.../repository/content/base/ArchivaArtifact.java | 24 ++++++++-
.../content/base/builder/ArtifactOptBuilder.java | 3 ++
.../content/base/ArchivaItemSelectorTest.java | 60 ++++++++++++++++++++++
.../content/ManagedDefaultRepositoryContent.java | 23 ++++++---
.../maven/content/MavenContentHelper.java | 1 +
.../repository/maven/content/MavenTypes.java} | 22 ++------
.../ManagedDefaultRepositoryContentTest.java | 23 +++++++++
10 files changed, 156 insertions(+), 60 deletions(-)
diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/Artifact.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/Artifact.java
index 71ef83e..a86d1c3 100644
--- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/Artifact.java
+++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/Artifact.java
@@ -125,5 +125,10 @@ public interface Artifact extends ContentItem
*/
String getContentType( );
+ /**
+ * Returns the type of the artifact
+ * @return
+ */
+ ArtifactType getArtifactType();
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/ArtifactType.java
similarity index 61%
copy from archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
copy to archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/ArtifactType.java
index 3ac93c1..7e52765 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
+++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/ArtifactType.java
@@ -1,3 +1,5 @@
+package org.apache.archiva.repository.content;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -16,26 +18,13 @@
* under the License.
*/
-package org.apache.archiva.repository.content.base.builder;
-
-import org.apache.archiva.repository.content.base.ArchivaArtifact;
-
/**
+ *
+ * Type of the artifact to distinguish different flavours.
+ *
* @author Martin Stockhammer <ma...@apache.org>
*/
-public interface ArtifactOptBuilder
- extends OptBuilder<ArchivaArtifact, ArtifactOptBuilder>
+public interface ArtifactType
{
-
- ArtifactOptBuilder withArtifactVersion( String version );
-
- ArtifactOptBuilder withType( String type );
-
- ArtifactOptBuilder withClassifier( String classifier );
-
- ArtifactOptBuilder withRemainder( String remainder );
-
- ArtifactOptBuilder withContentType( String contentType );
-
- ArchivaArtifact build( );
+ String name();
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/BaseArtifactTypes.java
similarity index 61%
copy from archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
copy to archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/BaseArtifactTypes.java
index 3ac93c1..b1a2020 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
+++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/content/BaseArtifactTypes.java
@@ -1,3 +1,5 @@
+package org.apache.archiva.repository.content;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -16,26 +18,18 @@
* under the License.
*/
-package org.apache.archiva.repository.content.base.builder;
-
-import org.apache.archiva.repository.content.base.ArchivaArtifact;
-
/**
+ * Basic artifact types.
+ * <ul>
+ * <li>{@link #MAIN}: Standard type</li>
+ * <li>{@link #METADATA}: if this artifact represents a metadata file</li>
+ * <li>{@link #RELATED}: artifact that is related to a main artifact</li>
+ * <li>{@link #UNKNOWN}: Unknown type</li>
+ * </ul>
+ *
* @author Martin Stockhammer <ma...@apache.org>
*/
-public interface ArtifactOptBuilder
- extends OptBuilder<ArchivaArtifact, ArtifactOptBuilder>
+public enum BaseArtifactTypes implements ArtifactType
{
-
- ArtifactOptBuilder withArtifactVersion( String version );
-
- ArtifactOptBuilder withType( String type );
-
- ArtifactOptBuilder withClassifier( String classifier );
-
- ArtifactOptBuilder withRemainder( String remainder );
-
- ArtifactOptBuilder withContentType( String contentType );
-
- ArchivaArtifact build( );
+ MAIN,RELATED,METADATA,UNKNOWN
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/ArchivaArtifact.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/ArchivaArtifact.java
index 5d28e83..b17a9c5 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/ArchivaArtifact.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/ArchivaArtifact.java
@@ -20,6 +20,8 @@ package org.apache.archiva.repository.content.base;
*/
import org.apache.archiva.repository.content.Artifact;
+import org.apache.archiva.repository.content.ArtifactType;
+import org.apache.archiva.repository.content.BaseArtifactTypes;
import org.apache.archiva.repository.content.Version;
import org.apache.archiva.repository.content.base.builder.ArtifactOptBuilder;
import org.apache.archiva.repository.content.base.builder.ArtifactVersionBuilder;
@@ -34,7 +36,7 @@ import org.apache.commons.lang3.StringUtils;
* You have to use the builder method {@link #withAsset(StorageAsset)} to create a instance.
* The build() method can be called after the required attributes are set.
* <p>
- * Artifact are equal if the following coordinates match:
+ * Artifacts are equal if the following coordinates match:
* <ul>
* <li>repository</li>
* <li>asset</li>
@@ -43,6 +45,7 @@ import org.apache.commons.lang3.StringUtils;
* <li>artifactVersion</li>
* <li>type</li>
* <li>classifier</li>
+ * <li>artifactType</li>
* </ul>
*
* @author Martin Stockhammer <ma...@apache.org>
@@ -56,6 +59,7 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
private String classifier;
private String remainder;
private String contentType;
+ private ArtifactType artifactType;
private ArchivaArtifact( )
{
@@ -105,6 +109,12 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
return contentType;
}
+ @Override
+ public ArtifactType getArtifactType( )
+ {
+ return artifactType;
+ }
+
/**
* Returns the builder for creating a new artifact instance. You have to fill the
@@ -132,6 +142,7 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
if ( !artifactVersion.equals( that.artifactVersion ) ) return false;
if ( !version.equals( that.version ) ) return false;
if ( !type.equals( that.type ) ) return false;
+ if ( !artifactType.equals(that.artifactType)) return false;
return classifier.equals( that.classifier );
}
@@ -144,6 +155,7 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
result = 31 * result + version.hashCode( );
result = 31 * result + type.hashCode( );
result = 31 * result + classifier.hashCode( );
+ result = 31 * result + artifactType.hashCode( );
return result;
}
@@ -233,6 +245,13 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
}
@Override
+ public ArtifactOptBuilder withArtifactType( ArtifactType type )
+ {
+ item.artifactType = type;
+ return this;
+ }
+
+ @Override
public ArchivaArtifact build( )
{
super.build( );
@@ -256,6 +275,9 @@ public class ArchivaArtifact extends ArchivaContentItem implements Artifact
{
item.remainder = "";
}
+ if (item.artifactType==null) {
+ item.artifactType = BaseArtifactTypes.MAIN;
+ }
return item;
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
index 3ac93c1..03ef698 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
@@ -18,6 +18,7 @@
package org.apache.archiva.repository.content.base.builder;
+import org.apache.archiva.repository.content.ArtifactType;
import org.apache.archiva.repository.content.base.ArchivaArtifact;
/**
@@ -37,5 +38,7 @@ public interface ArtifactOptBuilder
ArtifactOptBuilder withContentType( String contentType );
+ ArtifactOptBuilder withArtifactType( ArtifactType type );
+
ArchivaArtifact build( );
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/content/base/ArchivaItemSelectorTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/content/base/ArchivaItemSelectorTest.java
index 7ab3c41..2af58cb 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/content/base/ArchivaItemSelectorTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/content/base/ArchivaItemSelectorTest.java
@@ -39,6 +39,14 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
}
@Test
@@ -53,6 +61,14 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getProjectId( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
}
@Test
@@ -67,6 +83,14 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
}
@Test
@@ -81,6 +105,14 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
+
}
@Test
@@ -96,6 +128,12 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
}
@Test
@@ -110,6 +148,13 @@ class ArchivaItemSelectorTest
assertTrue( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getClassifier( ) );
+ assertNotNull( selector.getAttributes( ) );
}
@Test
@@ -124,6 +169,14 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertTrue( selector.hasClassifier( ) );
assertFalse( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getNamespace( ) );
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertNotNull( selector.getAttributes( ) );
+
}
@Test
@@ -140,6 +193,13 @@ class ArchivaItemSelectorTest
assertFalse( selector.hasType( ) );
assertFalse( selector.hasClassifier( ) );
assertTrue( selector.hasAttributes( ) );
+
+ assertEquals( "", selector.getVersion( ) );
+ assertEquals( "", selector.getArtifactId( ) );
+ assertEquals( "", selector.getArtifactVersion( ) );
+ assertEquals( "", selector.getType( ) );
+ assertEquals( "", selector.getClassifier( ) );
+
}
}
\ No newline at end of file
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
index 427a72b..a0611b2 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
@@ -35,9 +35,11 @@ import org.apache.archiva.repository.LayoutException;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.content.Artifact;
+import org.apache.archiva.repository.content.ArtifactType;
import org.apache.archiva.repository.content.ContentItem;
import org.apache.archiva.repository.content.ItemNotFoundException;
import org.apache.archiva.repository.content.ItemSelector;
+import org.apache.archiva.repository.content.BaseArtifactTypes;
import org.apache.archiva.repository.content.Namespace;
import org.apache.archiva.repository.content.Project;
import org.apache.archiva.repository.content.Version;
@@ -56,7 +58,6 @@ import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
import javax.inject.Named;
-import javax.naming.Name;
import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
@@ -72,7 +73,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
/**
* ManagedDefaultRepositoryContent
@@ -320,6 +320,7 @@ public class ManagedDefaultRepositoryContent
.withType( info.type )
.withArtifactVersion( info.version )
.withContentType( info.contentType )
+ .withArtifactType( info.artifactType )
.build( )
);
}
@@ -397,6 +398,7 @@ public class ManagedDefaultRepositoryContent
private String classifier;
private String contentType;
private StorageAsset asset;
+ private ArtifactType artifactType = BaseArtifactTypes.MAIN;
}
private ArtifactInfo getArtifactInfoFromPath(String genericVersion, StorageAsset path) {
@@ -427,18 +429,21 @@ public class ManagedDefaultRepositoryContent
info.remainder = classPostfix;
}
} else {
- log.error( "Artifact does not match the maven name pattern {}", path );
+ log.debug( "Artifact does not match the maven name pattern {}", path );
+ info.artifactType = BaseArtifactTypes.UNKNOWN;
info.classifier = "";
info.remainder = StringUtils.substringAfter( fileName, prefix );
}
} else {
- log.error( "Artifact does not match the snapshot version pattern {}", path );
+ log.debug( "Artifact does not match the snapshot version pattern {}", path );
+ info.artifactType = BaseArtifactTypes.UNKNOWN;
info.version = "";
info.classifier = "";
info.remainder = StringUtils.substringAfter( fileName, prefix );
}
} else {
- log.error( "Artifact does not match the maven name pattern: {}", path );
+ log.debug( "Artifact does not match the maven name pattern: {}", path );
+ info.artifactType = BaseArtifactTypes.UNKNOWN;
info.version = "";
info.classifier = "";
info.remainder = StringUtils.substringAfterLast( fileName, "." );
@@ -458,7 +463,8 @@ public class ManagedDefaultRepositoryContent
info.remainder = classPostfix;
}
} else {
- log.error( "Artifact does not match the version pattern {}", path );
+ log.debug( "Artifact does not match the version pattern {}", path );
+ info.artifactType = BaseArtifactTypes.UNKNOWN;
info.version = "";
info.classifier = "";
info.remainder = StringUtils.substringAfterLast( fileName, "." );
@@ -472,6 +478,11 @@ public class ManagedDefaultRepositoryContent
info.contentType = "";
//
}
+ if (MavenContentHelper.METADATA_FILENAME.equalsIgnoreCase( fileName )) {
+ info.artifactType = BaseArtifactTypes.METADATA;
+ } else if (MavenContentHelper.METADATA_REPOSITORY_FILENAME.equalsIgnoreCase( fileName )) {
+ info.artifactType = MavenTypes.REPOSITORY_METADATA;
+ }
return info;
}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java
index 84192a5..70e52f6 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java
@@ -52,6 +52,7 @@ public class MavenContentHelper
MavenMetadataReader metadataReader;
public static final String METADATA_FILENAME = "maven-metadata.xml";
+ public static final String METADATA_REPOSITORY_FILENAME = "maven-metadata-repository.xml";
public MavenContentHelper() {
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenTypes.java
similarity index 61%
copy from archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
copy to archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenTypes.java
index 3ac93c1..e986039 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/base/builder/ArtifactOptBuilder.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenTypes.java
@@ -1,3 +1,5 @@
+package org.apache.archiva.repository.maven.content;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -16,26 +18,12 @@
* under the License.
*/
-package org.apache.archiva.repository.content.base.builder;
-
-import org.apache.archiva.repository.content.base.ArchivaArtifact;
+import org.apache.archiva.repository.content.ArtifactType;
/**
* @author Martin Stockhammer <ma...@apache.org>
*/
-public interface ArtifactOptBuilder
- extends OptBuilder<ArchivaArtifact, ArtifactOptBuilder>
+public enum MavenTypes implements ArtifactType
{
-
- ArtifactOptBuilder withArtifactVersion( String version );
-
- ArtifactOptBuilder withType( String type );
-
- ArtifactOptBuilder withClassifier( String classifier );
-
- ArtifactOptBuilder withRemainder( String remainder );
-
- ArtifactOptBuilder withContentType( String contentType );
-
- ArchivaArtifact build( );
+ REPOSITORY_METADATA
}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java
index c3fe708..1ddfc04 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java
@@ -30,6 +30,8 @@ import org.apache.archiva.repository.EditableManagedRepository;
import org.apache.archiva.repository.LayoutException;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryContent;
+import org.apache.archiva.repository.content.Artifact;
+import org.apache.archiva.repository.content.BaseArtifactTypes;
import org.apache.archiva.repository.content.ItemSelector;
import org.apache.archiva.repository.content.Project;
import org.apache.archiva.repository.content.Version;
@@ -42,6 +44,7 @@ import org.junit.Test;
import javax.inject.Inject;
import javax.inject.Named;
+import javax.jcr.Item;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
@@ -51,8 +54,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import static org.junit.Assert.*;
@@ -451,4 +456,22 @@ public class ManagedDefaultRepositoryContentTest
assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0" ) ) );
}
+
+ @Test
+ public void testGetArtifactStreamWithVersionSelector() {
+ ItemSelector selector = ArchivaItemSelector.builder( )
+ .withNamespace( "javax.sql" )
+ .withProjectId( "jdbc" )
+ .withVersion( "2.0" ).build();
+ Stream<? extends Artifact> stream = repoContent.newArtifactStream( selector );
+ assertNotNull( stream );
+ List<? extends Artifact> results = stream.collect( Collectors.toList( ) );
+ assertEquals( 2, results.size( ) );
+ Artifact mainArtifact = results.stream( ).filter( a -> a.getFileName( ).equals( "jdbc-2.0.jar" ) ).findFirst( ).get( );
+ assertNotNull( mainArtifact );
+ assertEquals( BaseArtifactTypes.MAIN, mainArtifact.getArtifactType( ) );
+ Artifact metaArtifact = results.stream( ).filter( a -> a.getFileName( ).equals( "maven-metadata-repository.xml" ) ).findFirst( ).get( );
+ assertNotNull( metaArtifact );
+ assertEquals( MavenTypes.REPOSITORY_METADATA, metaArtifact.getArtifactType( ) );
+ }
}