[MRM-346]: Show Artifact results in error 500.

git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@539163 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Joakim Erdfelt 2007-05-17 23:17:48 +00:00
parent 2ae3268ff9
commit 650c56007b
9 changed files with 193 additions and 81 deletions

View File

@ -34,5 +34,9 @@
<groupId>org.apache.maven.archiva</groupId>
<artifactId>archiva-model</artifactId>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,48 @@
package org.apache.maven.archiva.consumers.functors;
/*
* 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.collections.Predicate;
import org.apache.maven.archiva.consumers.BaseConsumer;
/**
* Selects Consumers that are flaged as 'permanent'.
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
public class PermanentConsumerPredicate
implements Predicate
{
public boolean evaluate( Object object )
{
boolean satisfies = false;
if ( object instanceof BaseConsumer )
{
BaseConsumer consumer = (BaseConsumer) object;
satisfies = consumer.isPermanent();
}
return satisfies;
}
}

View File

@ -19,11 +19,25 @@ package org.apache.maven.archiva.consumers.database;
* under the License.
*/
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.maven.archiva.consumers.ConsumerException;
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
import org.apache.maven.archiva.database.ArchivaDAO;
import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.apache.maven.archiva.model.RepositoryURL;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.apache.maven.archiva.repository.project.ProjectModelException;
import org.apache.maven.archiva.repository.project.ProjectModelReader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
@ -50,6 +64,39 @@ public class ProjectModelToDatabaseConsumer
*/
private String description;
/**
* @plexus.requirement role-hint="jdo"
*/
private ArchivaDAO dao;
/**
* @plexus.requirement
*/
private ArchivaConfiguration archivaConfiguration;
/**
* @plexus.requirement
*/
private BidirectionalRepositoryLayoutFactory layoutFactory;
/**
* @plexus.requirement role-hint="model400"
*/
private ProjectModelReader project400Reader;
/**
* @plexus.requirement role-hint="model300"
*/
private ProjectModelReader project300Reader;
private List includes;
public ProjectModelToDatabaseConsumer()
{
includes = new ArrayList();
includes.add( "pom" );
}
public void beginScan()
{
// TODO Auto-generated method stub
@ -64,15 +111,65 @@ public class ProjectModelToDatabaseConsumer
public List getIncludedTypes()
{
// TODO Auto-generated method stub
return null;
return includes;
}
public void processArchivaArtifact( ArchivaArtifact artifact )
throws ConsumerException
{
// TODO Auto-generated method stub
if ( !StringUtils.equals( "pom", artifact.getType() ) )
{
return;
}
File artifactFile = toFile( artifact );
RepositoryConfiguration repo = getRepository( artifact );
if ( StringUtils.equals( "default", repo.getLayout() ) )
{
try
{
ArchivaProjectModel model = project400Reader.read( artifactFile );
dao.getProjectModelDAO().saveProjectModel( model );
}
catch ( ProjectModelException e )
{
getLogger().warn( "Unable to read project model " + artifactFile + " : " + e.getMessage(), e );
}
catch ( ArchivaDatabaseException e )
{
getLogger().warn(
"Unable to save project model " + artifactFile + " to the database : "
+ e.getMessage(), e );
}
}
}
private RepositoryConfiguration getRepository( ArchivaArtifact artifact )
{
String repoId = artifact.getModel().getRepositoryId();
return archivaConfiguration.getConfiguration().findRepositoryById( repoId );
}
private File toFile( ArchivaArtifact artifact )
{
RepositoryConfiguration repoConfig = getRepository( artifact );
BidirectionalRepositoryLayout layout = null;
try
{
layout = layoutFactory.getLayout( artifact );
}
catch ( LayoutException e )
{
getLogger().warn( "Unable to determine layout of " + artifact + ": " + e.getMessage(), e );
return null;
}
String path = layout.toPath( artifact );
RepositoryURL url = new RepositoryURL( repoConfig.getUrl() );
return new File( url.getPath(), path );
}
public String getDescription()
@ -87,7 +184,7 @@ public class ProjectModelToDatabaseConsumer
public boolean isPermanent()
{
return false;
return true;
}
}

View File

@ -1601,7 +1601,7 @@
<name>classifier</name>
<version>1.0.0+</version>
<type>String</type>
<required>true</required>
<required>false</required>
<description><![CDATA[
The classifier of the dependency. This allows distinguishing two artifacts that belong to the same POM but
were built differently, and is appended to the filename after the version. For example,

View File

@ -30,6 +30,10 @@ import java.io.File;
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*
* @plexus.component
* role="org.apache.maven.archiva.repository.project.ProjectModelReader"
* role-hint="model300"
*/
public class ProjectModel300Reader implements ProjectModelReader
{

View File

@ -52,6 +52,10 @@ import java.util.Properties;
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*
* @plexus.component
* role="org.apache.maven.archiva.repository.project.ProjectModelReader"
* role-hint="model400"
*/
public class ProjectModel400Reader
implements ProjectModelReader

View File

@ -23,11 +23,13 @@ import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.IfClosure;
import org.apache.commons.collections.functors.OrPredicate;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration;
import org.apache.maven.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
import org.apache.maven.archiva.consumers.functors.PermanentConsumerPredicate;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
@ -64,9 +66,9 @@ public class RepositoryContentConsumers
*/
private List availableInvalidConsumers;
private SelectedKnownRepoConsumersPredicate selectedKnownPredicate;
private Predicate selectedKnownPredicate;
private SelectedInvalidRepoConsumersPredicate selectedInvalidPredicate;
private Predicate selectedInvalidPredicate;
class SelectedKnownRepoConsumersPredicate
implements Predicate
@ -131,8 +133,11 @@ public class RepositoryContentConsumers
public void initialize()
throws InitializationException
{
this.selectedKnownPredicate = new SelectedKnownRepoConsumersPredicate();
this.selectedInvalidPredicate = new SelectedInvalidRepoConsumersPredicate();
Predicate permanentConsumers = new PermanentConsumerPredicate();
this.selectedKnownPredicate = new OrPredicate( permanentConsumers, new SelectedKnownRepoConsumersPredicate() );
this.selectedInvalidPredicate = new OrPredicate( permanentConsumers,
new SelectedInvalidRepoConsumersPredicate() );
}
public List getSelectedKnownConsumerIds()

View File

@ -21,10 +21,12 @@ package org.apache.maven.archiva.database.updater;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.OrPredicate;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.DatabaseScanningConfiguration;
import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
import org.apache.maven.archiva.consumers.functors.PermanentConsumerPredicate;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
@ -58,9 +60,9 @@ public class DatabaseConsumers
*/
private List availableCleanupConsumers;
private SelectedCleanupConsumersPredicate selectedCleanupConsumers;
private Predicate selectedCleanupConsumers;
private SelectedUnprocessedConsumersPredicate selectedUnprocessedConsumers;
private Predicate selectedUnprocessedConsumers;
class SelectedUnprocessedConsumersPredicate
implements Predicate
@ -103,8 +105,10 @@ public class DatabaseConsumers
public void initialize()
throws InitializationException
{
selectedCleanupConsumers = new SelectedCleanupConsumersPredicate();
selectedUnprocessedConsumers = new SelectedUnprocessedConsumersPredicate();
Predicate permanentConsumers = new PermanentConsumerPredicate();
selectedCleanupConsumers = new OrPredicate( permanentConsumers, new SelectedCleanupConsumersPredicate() );
selectedUnprocessedConsumers = new OrPredicate( permanentConsumers, new SelectedUnprocessedConsumersPredicate() );
}
/**
@ -132,7 +136,7 @@ public class DatabaseConsumers
ret.addAll( CollectionUtils.select( availableCleanupConsumers, selectedCleanupConsumers ) );
return ret;
}
/**
* Get the complete {@link List} of {@link DatabaseUnprocessedArtifactConsumer} objects
* that are available in the system, regardless of configuration.
@ -143,7 +147,7 @@ public class DatabaseConsumers
{
return Collections.unmodifiableList( this.availableUnprocessedConsumers );
}
/**
* Get the complete {@link List} of {@link DatabaseCleanupConsumer} objects
* that are available in the system, regardless of configuration.

View File

@ -19,27 +19,17 @@ package org.apache.maven.archiva.web.action;
* under the License.
*/
import com.opensymphony.xwork.Validateable;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.database.ArchivaDAO;
import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.database.ObjectNotFoundException;
import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.apache.maven.archiva.web.util.VersionMerger;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* Browse the repository.
@ -49,6 +39,7 @@ import java.util.Set;
*/
public class ShowArtifactAction
extends PlexusActionSupport
implements Validateable
{
/* .\ Not Exposed \._____________________________________________ */
@ -90,12 +81,7 @@ public class ShowArtifactAction
public String artifact()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
this.model = readProject();
this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
return SUCCESS;
}
@ -106,12 +92,7 @@ public class ShowArtifactAction
public String dependencies()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
this.model = readProject();
this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
// TODO: should this be the whole set of artifacts, and be more like the maven dependencies report?
// this.dependencies = VersionMerger.wrap( project.getModel().getDependencies() );
@ -125,12 +106,7 @@ public class ShowArtifactAction
public String mailingLists()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
this.model = readProject();
this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
return SUCCESS;
}
@ -141,11 +117,6 @@ public class ShowArtifactAction
public String reports()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
System.out.println("#### In reports.");
// TODO: hook up reports on project - this.reports = artifactsDatabase.findArtifactResults( groupId, artifactId, version );
System.out.println("#### Found " + reports.size() + " reports.");
@ -159,12 +130,7 @@ public class ShowArtifactAction
public String dependees()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
this.model = readProject();
this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
// TODO: create depends on collector.
this.dependees = Collections.EMPTY_LIST;
@ -178,47 +144,27 @@ public class ShowArtifactAction
public String dependencyTree()
throws ObjectNotFoundException, ArchivaDatabaseException
{
if ( !checkParameters() )
{
return ERROR;
}
this.model = readProject();
this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
return SUCCESS;
}
private ArchivaProjectModel readProject()
throws ArchivaDatabaseException
public void validate()
{
return repoBrowsing.selectVersion( groupId, artifactId, version );
}
private boolean checkParameters()
{
boolean result = true;
if ( StringUtils.isEmpty( groupId ) )
if ( StringUtils.isBlank( groupId ) )
{
// TODO: i18n
addActionError( "You must specify a group ID to browse" );
result = false;
}
else if ( StringUtils.isEmpty( artifactId ) )
if ( StringUtils.isBlank( artifactId ) )
{
// TODO: i18n
addActionError( "You must specify a artifact ID to browse" );
result = false;
}
else if ( StringUtils.isEmpty( version ) )
if ( StringUtils.isBlank( version ) )
{
// TODO: i18n
addActionError( "You must specify a version to browse" );
result = false;
}
return result;
}
public ArchivaProjectModel getModel()