All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.apache.archiva.rest.services.DefaultMergeRepositoriesService Maven / Gradle / Ivy
package org.apache.archiva.rest.services;
/*
* 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.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.metadata.model.facets.AuditEvent;
import org.apache.archiva.common.utils.VersionUtil;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.metadata.model.ArtifactMetadata;
import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.MetadataRepositoryException;
import org.apache.archiva.metadata.repository.RepositorySession;
import org.apache.archiva.metadata.repository.filter.Filter;
import org.apache.archiva.metadata.repository.filter.IncludesFilter;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.api.services.MergeRepositoriesService;
import org.apache.archiva.stagerepository.merge.Maven2RepositoryMerger;
import org.apache.archiva.stagerepository.merge.RepositoryMergerException;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.ArrayList;
import java.util.List;
/**
* @author Olivier Lamy
* @since 1.4-M3
*/
@Service ( "mergeRepositoriesService#rest" )
public class DefaultMergeRepositoriesService
extends AbstractRestService
implements MergeRepositoriesService
{
// FIXME check archiva-merge-repository to sourceRepoId
@Inject
@Named ( value = "repositoryMerger#maven2" )
private Maven2RepositoryMerger repositoryMerger;
@Override
public List getMergeConflictedArtifacts( String sourceRepositoryId, String targetRepositoryId )
throws ArchivaRestServiceException
{
RepositorySession repositorySession = repositorySessionFactory.createSession();
try
{
List artifactMetadatas =
repositoryMerger.getConflictingArtifacts( repositorySession.getRepository(), sourceRepositoryId,
targetRepositoryId );
return buildArtifacts( artifactMetadatas, sourceRepositoryId );
}
catch ( RepositoryMergerException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
finally
{
repositorySession.close();
}
}
@Override
public void mergeRepositories( String sourceRepositoryId, String targetRepositoryId, boolean skipConflicts )
throws ArchivaRestServiceException
{
try
{
if ( skipConflicts )
{
mergeBySkippingConflicts( sourceRepositoryId, targetRepositoryId );
}
else
{
doMerge( sourceRepositoryId, targetRepositoryId );
}
}
catch ( RepositoryMergerException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
}
protected void doMerge( String sourceRepositoryId, String targetRepositoryId )
throws RepositoryMergerException, ArchivaRestServiceException
{
RepositorySession repositorySession = repositorySessionFactory.createSession();
try
{
ManagedRepository repository = managedRepositoryAdmin.getManagedRepository( targetRepositoryId );
MetadataRepository metadataRepository = repositorySession.getRepository();
List sourceArtifacts = metadataRepository.getArtifacts( sourceRepositoryId );
if ( repository.isReleases() && !repository.isSnapshots() )
{
mergeWithOutSnapshots( metadataRepository, sourceArtifacts, sourceRepositoryId, targetRepositoryId );
}
else
{
repositoryMerger.merge( metadataRepository, sourceRepositoryId, targetRepositoryId );
for ( ArtifactMetadata metadata : sourceArtifacts )
{
triggerAuditEvent( targetRepositoryId, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
}
}
doScanRepository( targetRepositoryId, false );
}
catch ( MetadataRepositoryException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
finally
{
repositorySession.close();
}
}
public void mergeBySkippingConflicts( String sourceRepositoryId, String targetRepositoryId )
throws RepositoryMergerException, ArchivaRestServiceException
{
RepositorySession repositorySession = repositorySessionFactory.createSession();
try
{
List conflictSourceArtifacts =
repositoryMerger.getConflictingArtifacts( repositorySession.getRepository(), sourceRepositoryId,
targetRepositoryId );
MetadataRepository metadataRepository = repositorySession.getRepository();
List sourceArtifacts = metadataRepository.getArtifacts( sourceRepositoryId );
sourceArtifacts.removeAll( conflictSourceArtifacts );
ManagedRepository repository = managedRepositoryAdmin.getManagedRepository( targetRepositoryId );
if ( repository.isReleases() && !repository.isSnapshots() )
{
mergeWithOutSnapshots( metadataRepository, sourceArtifacts, sourceRepositoryId, targetRepositoryId );
}
else
{
Filter artifactsWithOutConflicts =
new IncludesFilter( sourceArtifacts );
repositoryMerger.merge( metadataRepository, sourceRepositoryId, targetRepositoryId,
artifactsWithOutConflicts );
for ( ArtifactMetadata metadata : sourceArtifacts )
{
triggerAuditEvent( targetRepositoryId, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
}
}
doScanRepository( targetRepositoryId, false );
}
catch ( MetadataRepositoryException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
finally
{
repositorySession.close();
}
}
private void mergeWithOutSnapshots( MetadataRepository metadataRepository, List sourceArtifacts,
String sourceRepoId, String repoid )
throws RepositoryMergerException
{
List artifactsWithOutSnapshots = new ArrayList<>();
for ( ArtifactMetadata metadata : sourceArtifacts )
{
if ( VersionUtil.isSnapshot( metadata.getProjectVersion() ) )
//if ( metadata.getProjectVersion().contains( VersionUtil.SNAPSHOT ) )
{
artifactsWithOutSnapshots.add( metadata );
}
else
{
triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
}
}
sourceArtifacts.removeAll( artifactsWithOutSnapshots );
Filter artifactListWithOutSnapShots = new IncludesFilter( sourceArtifacts );
repositoryMerger.merge( metadataRepository, sourceRepoId, repoid, artifactListWithOutSnapShots );
}
}