* under the License.
*/
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.archiva.scheduler.ArchivaTaskScheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
/**
* Consumer for indexing the repository to provide search and IDE integration features.
*/
private List<IndexCreator> allIndexCreators;
public NexusIndexerConsumer( ArchivaTaskScheduler<ArtifactIndexingTask> scheduler,
- ArchivaConfiguration configuration, FileTypes filetypes, PlexusSisuBridge plexusSisuBridge )
+ ArchivaConfiguration configuration, FileTypes filetypes,
+ PlexusSisuBridge plexusSisuBridge, MavenIndexerUtils mavenIndexerUtils )
throws PlexusSisuBridgeException
{
this.configuration = configuration;
this.filetypes = filetypes;
this.scheduler = scheduler;
this.nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
- this.allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+ this.allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
}
public String getDescription()
public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered, boolean executeOnEntireRepo )
throws ConsumerException
{
- if( executeOnEntireRepo )
+ if ( executeOnEntireRepo )
{
beginScan( repository, whenGathered );
}
else
{
this.repository = repository;
- managedRepository = new File( repository.getLocation() );
+ managedRepository = new File( repository.getLocation() );
}
}
public void processFile( String path, boolean executeOnEntireRepo )
throws Exception
{
- if( executeOnEntireRepo )
+ if ( executeOnEntireRepo )
{
processFile( path );
}
public void completeScan( boolean executeOnEntireRepo )
{
- if( executeOnEntireRepo )
+ if ( executeOnEntireRepo )
{
completeScan();
}
<constructor-arg ref="archivaConfiguration"/>
<constructor-arg ref="fileTypes"/>
<constructor-arg ref="plexusSisuBridge"/>
+ <constructor-arg ref="mavenIndexerUtils"/>
</bean>
<bean id="logger" class="org.apache.maven.archiva.common.utils.Slf4JPlexusLogger">
* under the License.
*/
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.archiva.indexer.util.SearchUtil;
public class NexusRepositorySearch
implements RepositorySearch
{
- private Logger log = LoggerFactory.getLogger( NexusRepositorySearch.class );
+ private Logger log = LoggerFactory.getLogger( getClass() );
private NexusIndexer indexer;
private ArchivaConfiguration archivaConfig;
- private List<? extends IndexCreator> allIndexCreators;
+ private MavenIndexerUtils mavenIndexerUtils;
@Inject
- public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig )
+ public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig,
+ MavenIndexerUtils mavenIndexerUtils )
throws PlexusSisuBridgeException
{
this.indexer = plexusSisuBridge.lookup( NexusIndexer.class );
this.archivaConfig = archivaConfig;
- allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+ this.mavenIndexerUtils = mavenIndexerUtils;
+
}
/**
}
- protected List<? extends IndexCreator> getAllIndexCreators()
+ protected List<IndexCreator> getAllIndexCreators()
{
- return allIndexCreators;
+ return mavenIndexerUtils.getAllIndexCreators();
}
{
this.bundleExportService = bundleExportService;
}
+
+ @Override
+ public String toString()
+ {
+ return "SearchFields{" + "groupId='" + groupId + '\'' + ", artifactId='" + artifactId + '\'' + ", version='"
+ + version + '\'' + ", packaging='" + packaging + '\'' + ", className='" + className + '\''
+ + ", repositories=" + repositories + ", bundleVersion='" + bundleVersion + '\'' + ", bundleSymbolicName='"
+ + bundleSymbolicName + '\'' + ", bundleExportPackage='" + bundleExportPackage + '\''
+ + ", bundleExportService='" + bundleExportService + '\'' + '}';
+ }
}
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.indexer</groupId>
+ <artifactId>indexer-core</artifactId>
+ </dependency>
</dependencies>
</project>
--- /dev/null
+package org.apache.archiva.common.plexusbridge;
+
+/*
+ * 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.index.context.IndexCreator;
+import org.apache.maven.index.creator.JarFileContentsIndexCreator;
+import org.apache.maven.index.creator.MavenArchetypeArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.OSGIArtifactIndexCreator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+@Service("mavenIndexerUtils")
+public class MavenIndexerUtils
+{
+
+ private Logger log = LoggerFactory.getLogger( getClass() );
+
+ private List<? extends IndexCreator> allIndexCreators;
+
+ @Inject
+ public MavenIndexerUtils( PlexusSisuBridge plexusSisuBridge )
+ throws PlexusSisuBridgeException
+ {
+ allIndexCreators = new ArrayList( plexusSisuBridge.lookupList( IndexCreator.class ) );
+
+ if ( allIndexCreators == null || allIndexCreators.isEmpty() )
+ {
+ // olamy when the TCL is not a URLClassLoader lookupList fail !
+ // when using tomcat maven plugin so adding a simple hack
+ log.warn( "using lookList from sisu plexus failed so build indexCreator manually" );
+
+ allIndexCreators =
+ Arrays.asList( new OSGIArtifactIndexCreator(), new MavenArchetypeArtifactInfoIndexCreator(),
+ new MinimalArtifactInfoIndexCreator(), new JarFileContentsIndexCreator(),
+ new MavenPluginArtifactInfoIndexCreator() );
+
+ }
+
+ log.debug( "allIndexCreators {}", allIndexCreators );
+ }
+
+ public List<? extends IndexCreator> getAllIndexCreators()
+ {
+ return allIndexCreators;
+ }
+
+ public void setAllIndexCreators( List<IndexCreator> allIndexCreators )
+ {
+ this.allIndexCreators = allIndexCreators;
+ }
+}
public class PlexusSisuBridgeException
extends Exception
{
+
+ public PlexusSisuBridgeException( String message )
+ {
+ super( message );
+ }
+
public PlexusSisuBridgeException( String message, Throwable throwable )
{
super( message, throwable );
* under the License.
*/
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.lucene.search.BooleanClause;
@Inject
private PlexusSisuBridge plexusSisuBridge;
+ @Inject
+ private MavenIndexerUtils mavenIndexerUtils;
+
private NexusIndexer nexusIndexer;
private List<IndexCreator> allIndexCreators;
nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
- allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+ allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
}
public void executeTask( Task task )
}
public static IndexingContext createContext( ManagedRepositoryConfiguration repository, NexusIndexer indexer,
- List<IndexCreator> indexCreators )
+ List<? extends IndexCreator> indexCreators )
throws IOException, UnsupportedExistingLuceneIndexException
{
String indexDir = repository.getIndexDir();
*/
import junit.framework.TestCase;
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.maven.index.FlatSearchResponse;
import org.apache.maven.index.MAVEN;
import org.apache.maven.index.NexusIndexer;
-import org.apache.maven.index.context.IndexCreator;
import org.apache.maven.index.context.IndexingContext;
import org.apache.maven.index.expr.SourcedSearchExpression;
import org.apache.maven.index.expr.StringSearchExpression;
@Inject
PlexusSisuBridge plexusSisuBridge;
+ @Inject
+ MavenIndexerUtils mavenIndexerUtils;
+
@Before
public void setUp()
throws Exception
indexer = plexusSisuBridge.lookup( NexusIndexer.class );
- ArtifactIndexingTask.createContext( repositoryConfig, indexer,
- plexusSisuBridge.lookupList( IndexCreator.class ) );
+ ArtifactIndexingTask.createContext( repositoryConfig, indexer, mavenIndexerUtils.getAllIndexCreators() );
}
@After
new File( repositoryConfig.getLocation() ),
new File( repositoryConfig.getLocation(),
".indexer" ), null, null,
- plexusSisuBridge.lookupList( IndexCreator.class ) );
+ mavenIndexerUtils.getAllIndexCreators() );
context.setSearchable( true );
}
/**
* Search all indexed fields by the given criteria.
- *
+ * <p/>
* plexus.component role="com.opensymphony.xwork2.Action" role-hint="searchAction" instantiation-strategy="per-lookup"
*/
@Controller( "searchAction" )
public String filteredSearch()
throws MalformedURLException
{
- if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) ) &&
- ( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
+ if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) )
+ && ( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
{
addActionError( "Advanced Search - At least one search criteria must be provided." );
return INPUT;
limits.setPageSize( rowCount );
List<String> selectedRepos = new ArrayList<String>();
- if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals( StringUtils.stripToEmpty(
- repositoryId ) ) )
+ if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals(
+ StringUtils.stripToEmpty( repositoryId ) ) )
{
selectedRepos = getObservableRepos();
}
SearchFields searchFields = new SearchFields( groupId, artifactId, version, null, className, selectedRepos );
+ log.debug( "filteredSearch with searchFields {}", searchFields );
+
// TODO: add packaging in the list of fields for advanced search (UI)?
try
{
return GlobalResults.ACCESS_TO_NO_REPOS;
}
+ log.debug( "quickSearch with selectedRepos {} query {}", selectedRepos, q );
+
try
{
if ( searchResultsOnly && !completeQueryString.equals( "" ) )
{
- results = getNexusSearch().search( getPrincipal(), selectedRepos, q, limits,
- parseCompleteQueryString() );
+ results =
+ getNexusSearch().search( getPrincipal(), selectedRepos, q, limits, parseCompleteQueryString() );
}
else
{
{
if ( nexusSearch == null )
{
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(
- ServletActionContext.getServletContext() );
+ WebApplicationContext wac =
+ WebApplicationContextUtils.getRequiredWebApplicationContext( ServletActionContext.getServletContext() );
nexusSearch = wac.getBean( "nexusSearch", RepositorySearch.class );
}
return nexusSearch;
<param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
</layout>
</appender>
- <logger name="com.opensymphony.xwork2.interceptor.ParametersInterceptor">
+ <logger name="org.apache.maven.archiva.web.action.SearchAction">
+ <level value="debug"/>
+ </logger>
+ <logger name="org.apache.archiva.indexer.search.NexusRepositorySearch">
<level value="debug"/>
</logger>
<logger name="org.apache.commons.configuration.DefaultConfigurationBuilder">