<groupId>org.apache.maven.archiva</groupId>
<artifactId>archiva-model</artifactId>
</dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
</dependencies>
</project>
--- /dev/null
+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;
+ }
+
+}
* 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;
/**
*/
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
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()
public boolean isPermanent()
{
- return false;
+ return true;
}
}
<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,
*
* @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
{
*
* @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
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;
*/
private List availableInvalidConsumers;
- private SelectedKnownRepoConsumersPredicate selectedKnownPredicate;
+ private Predicate selectedKnownPredicate;
- private SelectedInvalidRepoConsumersPredicate selectedInvalidPredicate;
+ private Predicate selectedInvalidPredicate;
class SelectedKnownRepoConsumersPredicate
implements Predicate
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()
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;
*/
private List availableCleanupConsumers;
- private SelectedCleanupConsumersPredicate selectedCleanupConsumers;
+ private Predicate selectedCleanupConsumers;
- private SelectedUnprocessedConsumersPredicate selectedUnprocessedConsumers;
+ private Predicate selectedUnprocessedConsumers;
class SelectedUnprocessedConsumersPredicate
implements Predicate
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() );
}
/**
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.
{
return Collections.unmodifiableList( this.availableUnprocessedConsumers );
}
-
+
/**
* Get the complete {@link List} of {@link DatabaseCleanupConsumer} objects
* that are available in the system, regardless of configuration.
* 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.
*/
public class ShowArtifactAction
extends PlexusActionSupport
+ implements Validateable
{
/* .\ Not Exposed \._____________________________________________ */
public String artifact()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- if ( !checkParameters() )
- {
- return ERROR;
- }
-
- this.model = readProject();
+ this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
return SUCCESS;
}
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() );
public String mailingLists()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- if ( !checkParameters() )
- {
- return ERROR;
- }
-
- this.model = readProject();
+ this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
return SUCCESS;
}
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.");
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;
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()