Browse Source

Extracting indexing api as single module

[MRM-1964] Step to move all indexing features behind archiva API
pull/46/head
Martin Stockhammer 6 years ago
parent
commit
2ab8942ccf
16 changed files with 221 additions and 13 deletions
  1. 99
    0
      archiva-modules/archiva-base/archiva-indexer-api/pom.xml
  2. 3
    2
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFilter.java
  3. 1
    3
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/RepositorySearch.java
  4. 0
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/RepositorySearchException.java
  5. 0
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
  6. 0
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResultHit.java
  7. 0
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResultLimits.java
  8. 0
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResults.java
  9. 36
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/util/SearchUtil.java
  10. 39
    0
      archiva-modules/archiva-base/archiva-indexer-api/src/main/resources/META-INF/spring-context.xml
  11. 4
    0
      archiva-modules/archiva-base/archiva-indexer/pom.xml
  12. 28
    3
      archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
  13. 2
    2
      archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFilter.java
  14. 1
    0
      archiva-modules/archiva-base/pom.xml
  15. 3
    3
      archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
  16. 5
    0
      pom.xml

+ 99
- 0
archiva-modules/archiva-base/archiva-indexer-api/pom.xml View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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.
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-base</artifactId>
<version>3.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>archiva-indexer-api</artifactId>
<packaging>bundle</packaging>
<name>Archiva Base :: Indexer API</name>
<dependencies>

<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-common</artifactId>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-model</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<configuration>
<excludes>
<exclude>src/test/maven-search-test-repo*/**</exclude>
<exclude>src/test/repo-release*/**</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-SymbolicName>org.apache.archiva.indexer.api</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>
org.apache.archiva.indexer.*;version=${project.version};-split-package:=merge-first
</Export-Package>
<Import-Package>
javax.annotation,
javax.inject,
org.apache.commons.lang*;version="[2.4,3)",
org.slf4j;resolution:=optional
</Import-Package>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<appserver.base>${project.build.directory}/appserver-base</appserver.base>
<plexus.home>${project.build.directory}/appserver-base</plexus.home>
<derby.system.home>${project.build.directory}/appserver-base</derby.system.home>
<redback.jdbc.url>${redbackTestJdbcUrl}</redback.jdbc.url>
<redback.jdbc.driver.name>${redbackTestJdbcDriver}</redback.jdbc.driver.name>
<archiva.repositorySessionFactory.id>mock</archiva.repositorySessionFactory.id>
<openjpa.Log>${openjpa.Log}</openjpa.Log>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</project>

archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFilter.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFilter.java View File

@@ -18,7 +18,8 @@ package org.apache.archiva.indexer.search;
* under the License.
*/

import org.apache.maven.index.ArtifactInfo;
import org.apache.archiva.model.ArchivaArtifactModel;
import org.apache.archiva.model.ArtifactReference;

import java.util.Map;

@@ -28,5 +29,5 @@ import java.util.Map;
*/
public interface ArtifactInfoFilter
{
boolean addArtifactInResult( ArtifactInfo artifact, Map<String, SearchResultHit> currentResult );
boolean addArtifactInResult( ArchivaArtifactModel artifact, Map<String, SearchResultHit> currentResult );
}

archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/RepositorySearch.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/RepositorySearch.java View File

@@ -19,8 +19,6 @@ package org.apache.archiva.indexer.search;
* under the License.
*/

import org.apache.archiva.admin.model.RepositoryAdminException;

import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -57,5 +55,5 @@ public interface RepositorySearch
throws RepositorySearchException;

Set<String> getRemoteIndexingContextIds( String managedRepoId )
throws RepositoryAdminException;
throws RepositorySearchException;
}

archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/RepositorySearchException.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/RepositorySearchException.java View File


archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchFields.java View File


archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchResultHit.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResultHit.java View File


archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchResultLimits.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResultLimits.java View File


archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchResults.java → archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/search/SearchResults.java View File


+ 36
- 0
archiva-modules/archiva-base/archiva-indexer-api/src/main/java/org/apache/archiva/indexer/util/SearchUtil.java View File

@@ -0,0 +1,36 @@
package org.apache.archiva.indexer.util;

/*
* 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;

/**
* SearchUtil - utility class for search.
*/
public class SearchUtil
{
public static String getHitId( String groupId, String artifactId, String classifier, String packaging )
{
return ( StringUtils.isBlank( groupId ) ? "" : StringUtils.trim( groupId ) ) + ":" //
+ ( StringUtils.isBlank( artifactId ) ? "" : StringUtils.trim( artifactId ) ) + ":" //
+ ( StringUtils.isBlank( classifier ) ? "" : StringUtils.trim( classifier ) ) + ":" //
+ ( StringUtils.isBlank( packaging ) ? "" : StringUtils.trim( packaging ) );
}
}

+ 39
- 0
archiva-modules/archiva-base/archiva-indexer-api/src/main/resources/META-INF/spring-context.xml View File

@@ -0,0 +1,39 @@
<?xml version="1.0"?>

<!--
~ 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.
-->

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd"
default-lazy-init="false">

<context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.indexer.search,org.apache.archiva.indexer.merger"/>



</beans>

+ 4
- 0
archiva-modules/archiva-base/archiva-indexer/pom.xml View File

@@ -42,6 +42,10 @@
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-layer</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-indexer-api</artifactId>
</dependency>


<dependency>

+ 28
- 3
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java View File

@@ -26,6 +26,8 @@ import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.archiva.indexer.util.SearchUtil;
import org.apache.archiva.model.ArchivaArtifactModel;
import org.apache.archiva.model.ArtifactReference;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.index.ArtifactInfo;
import org.apache.maven.index.FlatSearchRequest;
@@ -407,6 +409,12 @@ public class MavenRepositorySearch
e.getMessage() );
continue;
}
catch ( RepositorySearchException e )
{
log.warn( "RepositorySearchException occured while accessing index of repository '{}' : {}", repo,
e.getMessage() );
continue;
}
}

return new ArrayList<>( indexingContextIds );
@@ -415,11 +423,19 @@ public class MavenRepositorySearch

@Override
public Set<String> getRemoteIndexingContextIds( String managedRepoId )
throws RepositoryAdminException
throws RepositorySearchException
{
Set<String> ids = new HashSet<>();

List<ProxyConnector> proxyConnectors = proxyConnectorAdmin.getProxyConnectorAsMap().get( managedRepoId );
List<ProxyConnector> proxyConnectors = null;
try
{
proxyConnectors = proxyConnectorAdmin.getProxyConnectorAsMap().get( managedRepoId );
}
catch ( RepositoryAdminException e )
{
throw new RepositorySearchException( e.getMessage(), e );
}

if ( proxyConnectors == null || proxyConnectors.isEmpty() )
{
@@ -486,6 +502,7 @@ public class MavenRepositorySearch
artifactInfo.getPackaging() );
Map<String, SearchResultHit> hitsMap = results.getHitsMap();


if ( !applyArtifactInfoFilters( artifactInfo, artifactInfoFilters, hitsMap ) )
{
continue;
@@ -650,9 +667,17 @@ public class MavenRepositorySearch
return true;
}

ArchivaArtifactModel artifact = new ArchivaArtifactModel();
artifact.setArtifactId( artifactInfo.getArtifactId() );
artifact.setClassifier( artifactInfo.getClassifier() );
artifact.setGroupId( artifactInfo.getGroupId() );
artifact.setRepositoryId( artifactInfo.getRepository() );
artifact.setVersion( artifactInfo.getVersion() );
artifact.setChecksumMD5( artifactInfo.getMd5() );
artifact.setChecksumSHA1( artifactInfo.getSha1() );
for ( ArtifactInfoFilter filter : artifactInfoFilters )
{
if ( !filter.addArtifactInResult( artifactInfo, currentResult ) )
if ( !filter.addArtifactInResult( artifact, currentResult ) )
{
return false;
}

+ 2
- 2
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFilter.java View File

@@ -18,8 +18,8 @@ package org.apache.archiva.indexer.search;
* under the License.
*/

import org.apache.archiva.model.ArchivaArtifactModel;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.index.ArtifactInfo;

import java.util.Arrays;
import java.util.List;
@@ -36,7 +36,7 @@ public class NoClassifierArtifactInfoFilter
public static final List<? extends ArtifactInfoFilter> LIST = Arrays.asList( INSTANCE );

@Override
public boolean addArtifactInResult( ArtifactInfo artifact, Map<String, SearchResultHit> currentResult )
public boolean addArtifactInResult( ArchivaArtifactModel artifact, Map<String, SearchResultHit> currentResult )
{
return StringUtils.isBlank( artifact.getClassifier() );
}

+ 1
- 0
archiva-modules/archiva-base/pom.xml View File

@@ -39,6 +39,7 @@
<module>archiva-checksum</module>
<module>archiva-plexus-bridge</module>
<module>archiva-policies</module>
<module>archiva-indexer-api</module>
<module>archiva-indexer</module>
<module>archiva-consumers</module>
<module>archiva-repository-layer</module>

+ 3
- 3
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java View File

@@ -38,6 +38,7 @@ import org.apache.archiva.indexer.merger.MergedRemoteIndexesTask;
import org.apache.archiva.indexer.merger.MergedRemoteIndexesTaskRequest;
import org.apache.archiva.indexer.merger.TemporaryGroupIndex;
import org.apache.archiva.indexer.search.RepositorySearch;
import org.apache.archiva.indexer.search.RepositorySearchException;
import org.apache.archiva.maven2.metadata.MavenMetadataReader;
import org.apache.archiva.metadata.model.facets.AuditEvent;
import org.apache.archiva.metadata.repository.storage.RelocationException;
@@ -60,8 +61,6 @@ import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.ReleaseScheme;
import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryNotFoundException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.content.maven2.RepositoryRequest;
import org.apache.archiva.repository.events.AuditListener;
@@ -1348,6 +1347,7 @@ public class ArchivaDavResourceFactory
log.debug( "Skipping repository '{}' for user '{}': {}", repository, activePrincipal,
e.getMessage() );
}

}
log.info( "generate temporary merged index for repository group '{}' for repositories '{}'",
repositoryGroupConfiguration.getId(), authzRepos );
@@ -1378,7 +1378,7 @@ public class ArchivaDavResourceFactory
temporaryGroupIndexMap );
return mergedRepoDir;
}
catch ( RepositoryAdminException e )
catch ( RepositorySearchException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
}

+ 5
- 0
pom.xml View File

@@ -287,6 +287,11 @@
<artifactId>test-repository</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-indexer-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-indexer</artifactId>

Loading…
Cancel
Save