blob: ca55135450e78d553d6eb532ecb7102acd5ef879 [file] [log] [blame]
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.RepositoryCommonValidator;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
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.stats.model.RepositoryStatistics;
import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
import org.apache.archiva.rest.api.model.ArchivaRepositoryStatistics;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import javax.ws.rs.core.Response;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
/**
* @author Olivier Lamy
* @since 1.4-M1
*/
@Service( "managedRepositoriesService#rest" )
public class DefaultManagedRepositoriesService
extends AbstractRestService
implements ManagedRepositoriesService
{
@Inject
private RepositoryCommonValidator repositoryCommonValidator;
@Inject
private RepositoryStatisticsManager repositoryStatisticsManager;
@Inject
private ManagedRepositoryAdmin managedRepositoryAdmin;
@Override
public List<ManagedRepository> getManagedRepositories()
throws ArchivaRestServiceException
{
try
{
List<org.apache.archiva.admin.model.beans.ManagedRepository> repos =
managedRepositoryAdmin.getManagedRepositories();
return repos == null ? Collections.<ManagedRepository>emptyList() : repos;
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e );
}
}
@Override
public ManagedRepository getManagedRepository( String repositoryId )
throws ArchivaRestServiceException
{
List<ManagedRepository> repos = getManagedRepositories();
for ( ManagedRepository repo : repos )
{
if ( StringUtils.equals( repo.getId(), repositoryId ) )
{
return repo;
}
}
return null;
}
@Override
public Boolean deleteManagedRepository( String repoId, boolean deleteContent )
throws ArchivaRestServiceException
{
try
{
return managedRepositoryAdmin.deleteManagedRepository( repoId, getAuditInformation(), deleteContent );
}
catch ( RepositoryAdminException e )
{
log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
}
}
@Override
public ManagedRepository addManagedRepository( ManagedRepository managedRepository )
throws ArchivaRestServiceException
{
try
{
boolean res =
managedRepositoryAdmin.addManagedRepository( managedRepository, managedRepository.isStageRepoNeeded(),
getAuditInformation() );
if ( res )
{
return getManagedRepository( managedRepository.getId() );
}
throw new ArchivaRestServiceException( "fail to created managed Repository", null );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
}
}
@Override
public Boolean updateManagedRepository( ManagedRepository managedRepository )
throws ArchivaRestServiceException
{
try
{
return managedRepositoryAdmin.updateManagedRepository( managedRepository,
managedRepository.isStageRepoNeeded(),
getAuditInformation(),
managedRepository.isResetStats() );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
}
}
@Override
public Boolean fileLocationExists( String fileLocation )
throws ArchivaRestServiceException
{
String location = repositoryCommonValidator.removeExpressions( fileLocation );
return Files.exists( Paths.get( location ));
}
@Override
public ArchivaRepositoryStatistics getManagedRepositoryStatistics( String repositoryId, String lang )
throws ArchivaRestServiceException
{
RepositorySession repositorySession = null;
try
{
repositorySession = repositorySessionFactory.createSession();
}
catch ( MetadataRepositoryException e )
{
e.printStackTrace( );
}
SimpleDateFormat sdf = new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss Z", new Locale( lang ) );
try
{
MetadataRepository metadataRepository = repositorySession.getRepository();
RepositoryStatistics stats = null;
try
{
stats = repositoryStatisticsManager.getLastStatistics( repositoryId );
}
catch ( MetadataRepositoryException e )
{
log.warn( "Error retrieving repository statistics: {}", e.getMessage(), e );
}
if ( stats != null )
{
ArchivaRepositoryStatistics archivaRepositoryStatistics =
getModelMapper().map( stats, ArchivaRepositoryStatistics.class );
archivaRepositoryStatistics.setDuration( archivaRepositoryStatistics.getScanEndTime().getTime()
- archivaRepositoryStatistics.getScanStartTime().getTime() );
archivaRepositoryStatistics.setLastScanDate(
sdf.format( archivaRepositoryStatistics.getScanEndTime() ) );
return archivaRepositoryStatistics;
}
}
finally
{
if ( repositorySession != null )
{
repositorySession.close();
}
}
return null;
}
@Override
public String getPomSnippet( String repositoryId )
throws ArchivaRestServiceException
{
return createSnippet( getManagedRepository( repositoryId ) );
}
private String createSnippet( ManagedRepository repo )
throws ArchivaRestServiceException
{
try
{
StringBuilder snippet = new StringBuilder();
snippet.append( "<project>\n" );
snippet.append( " ...\n" );
snippet.append( " <distributionManagement>\n" );
String distRepoName = "repository";
if ( repo.isSnapshots() )
{
distRepoName = "snapshotRepository";
}
snippet.append( " <" ).append( distRepoName ).append( ">\n" );
snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
snippet.append( " <url>" );
snippet.append( getBaseUrl( ) + "/repository" );
snippet.append( "/" ).append( repo.getId() ).append( "/" ).append( "</url>\n" );
if ( !"default".equals( repo.getLayout() ) )
{
snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>" );
}
snippet.append( " </" ).append( distRepoName ).append( ">\n" );
snippet.append( " </distributionManagement>\n" );
snippet.append( "\n" );
snippet.append( " <repositories>\n" );
snippet.append( " <repository>\n" );
snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
snippet.append( " <url>" );
snippet.append( getBaseUrl( ) + "/repository" );
snippet.append( "/" ).append( repo.getId() ).append( "/" );
snippet.append( "</url>\n" );
if ( !"default".equals( repo.getLayout() ) )
{
snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
}
snippet.append( " <releases>\n" );
snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append(
"</enabled>\n" );
snippet.append( " </releases>\n" );
snippet.append( " <snapshots>\n" );
snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append(
"</enabled>\n" );
snippet.append( " </snapshots>\n" );
snippet.append( " </repository>\n" );
snippet.append( " </repositories>\n" );
snippet.append( " <pluginRepositories>\n" );
snippet.append( " <pluginRepository>\n" );
snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
snippet.append( " <url>" );
snippet.append( getBaseUrl( ) + "/repository" );
snippet.append( "/" ).append( repo.getId() ).append( "/" );
snippet.append( "</url>\n" );
if ( !"default".equals( repo.getLayout() ) )
{
snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
}
snippet.append( " <releases>\n" );
snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append(
"</enabled>\n" );
snippet.append( " </releases>\n" );
snippet.append( " <snapshots>\n" );
snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append(
"</enabled>\n" );
snippet.append( " </snapshots>\n" );
snippet.append( " </pluginRepository>\n" );
snippet.append( " </pluginRepositories>\n" );
snippet.append( " ...\n" );
snippet.append( "</project>\n" );
return StringEscapeUtils.escapeXml( snippet.toString() );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage(),
Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
}
}
}