git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1163923 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.4-M1
@@ -0,0 +1,87 @@ | |||
package org.apache.archiva.rest.api.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.repository.RepositoryAdminException; | |||
import org.apache.archiva.rest.api.model.ManagedRepository; | |||
import org.apache.archiva.rest.api.model.RemoteRepository; | |||
import org.apache.maven.archiva.security.ArchivaRoleConstants; | |||
import org.codehaus.plexus.redback.authorization.RedbackAuthorization; | |||
import javax.ws.rs.Consumes; | |||
import javax.ws.rs.GET; | |||
import javax.ws.rs.POST; | |||
import javax.ws.rs.Path; | |||
import javax.ws.rs.PathParam; | |||
import javax.ws.rs.Produces; | |||
import javax.ws.rs.QueryParam; | |||
import javax.ws.rs.core.MediaType; | |||
import java.util.List; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4 | |||
*/ | |||
@Path( "/managedRepositoriesService/" ) | |||
public interface ManagedRepositoriesService | |||
{ | |||
@Path( "getManagedRepositories" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
List<ManagedRepository> getManagedRepositories() | |||
throws RepositoryAdminException; | |||
@Path( "getManagedRepository/{repositoryId}" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) String repositoryId ) | |||
throws RepositoryAdminException; | |||
@Path( "deleteManagedRepository" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean deleteManagedRepository( @QueryParam( "repositoryId" ) String repositoryId, | |||
@QueryParam( "deleteContent" ) boolean deleteContent ) | |||
throws Exception; | |||
@Path( "addManagedRepository" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean addManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception; | |||
@Path( "updateManagedRepository" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean updateManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception; | |||
} |
@@ -42,45 +42,7 @@ import java.util.List; | |||
@Path( "/repositoriesService/" ) | |||
public interface RepositoriesService | |||
{ | |||
@Path( "getManagedRepositories" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
List<ManagedRepository> getManagedRepositories() | |||
throws RepositoryAdminException; | |||
@Path( "getManagedRepository/{repositoryId}" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) String repositoryId ) | |||
throws RepositoryAdminException; | |||
@Path( "deleteManagedRepository" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean deleteManagedRepository( @QueryParam( "repositoryId" ) String repositoryId, | |||
@QueryParam( "deleteContent" ) boolean deleteContent ) | |||
throws Exception; | |||
@Path( "addManagedRepository" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean addManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception; | |||
@Path( "updateManagedRepository" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean updateManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception; | |||
@Path( "getRemoteRepositories" ) | |||
@GET |
@@ -0,0 +1,60 @@ | |||
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.AuditInformation; | |||
import org.apache.archiva.audit.AuditListener; | |||
import org.codehaus.plexus.redback.users.User; | |||
import org.codehaus.redback.rest.services.RedbackAuthenticationThreadLocal; | |||
import org.codehaus.redback.rest.services.RedbackRequestInformation; | |||
import javax.inject.Inject; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* abstract class with common utilities methods | |||
* | |||
* @author Olivier Lamy | |||
* @since 1.4 | |||
*/ | |||
public abstract class AbstractRestService | |||
{ | |||
@Inject | |||
private List<AuditListener> auditListeners = new ArrayList<AuditListener>(); | |||
protected AuditInformation getAuditInformation() | |||
{ | |||
RedbackRequestInformation redbackRequestInformation = RedbackAuthenticationThreadLocal.get(); | |||
User user = redbackRequestInformation == null ? null : redbackRequestInformation.getUser(); | |||
String remoteAddr = redbackRequestInformation == null ? null : redbackRequestInformation.getRemoteAddr(); | |||
return new AuditInformation( user, remoteAddr ); | |||
} | |||
public List<AuditListener> getAuditListeners() | |||
{ | |||
return auditListeners; | |||
} | |||
public void setAuditListeners( List<AuditListener> auditListeners ) | |||
{ | |||
this.auditListeners = auditListeners; | |||
} | |||
} |
@@ -0,0 +1,124 @@ | |||
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.repository.RepositoryAdminException; | |||
import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin; | |||
import org.apache.archiva.rest.api.model.ManagedRepository; | |||
import org.apache.archiva.rest.api.services.ManagedRepositoriesService; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.springframework.stereotype.Service; | |||
import javax.inject.Inject; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4 | |||
*/ | |||
@Service( "managedRepositoriesService#rest" ) | |||
public class DefaultManagedRepositoriesService | |||
extends AbstractRestService | |||
implements ManagedRepositoriesService | |||
{ | |||
@Inject | |||
private ManagedRepositoryAdmin managedRepositoryAdmin; | |||
public List<ManagedRepository> getManagedRepositories() | |||
throws RepositoryAdminException | |||
{ | |||
List<org.apache.archiva.admin.repository.managed.ManagedRepository> repos = | |||
managedRepositoryAdmin.getManagedRepositories(); | |||
List<ManagedRepository> managedRepos = new ArrayList<ManagedRepository>( repos.size() ); | |||
for ( org.apache.archiva.admin.repository.managed.ManagedRepository repoConfig : repos ) | |||
{ | |||
// TODO staging repo too | |||
ManagedRepository repo = | |||
new ManagedRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(), | |||
repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(), | |||
repoConfig.isBlockRedeployments(), false, repoConfig.getCronExpression() ); | |||
managedRepos.add( repo ); | |||
} | |||
return managedRepos; | |||
} | |||
public ManagedRepository getManagedRepository( String repositoryId ) | |||
throws RepositoryAdminException | |||
{ | |||
List<ManagedRepository> repos = getManagedRepositories(); | |||
for ( ManagedRepository repo : repos ) | |||
{ | |||
if ( StringUtils.equals( repo.getId(), repositoryId ) ) | |||
{ | |||
return repo; | |||
} | |||
} | |||
return null; | |||
} | |||
public Boolean deleteManagedRepository( String repoId, boolean deleteContent ) | |||
throws Exception | |||
{ | |||
return managedRepositoryAdmin.deleteManagedRepository( repoId, getAuditInformation(), deleteContent ); | |||
} | |||
public Boolean addManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception | |||
{ | |||
org.apache.archiva.admin.repository.managed.ManagedRepository repo = | |||
new org.apache.archiva.admin.repository.managed.ManagedRepository(); | |||
repo.setLocation( managedRepository.getLocation() ); | |||
repo.setBlockRedeployments( managedRepository.isBlockRedeployments() ); | |||
repo.setCronExpression( managedRepository.getCronExpression() ); | |||
repo.setId( managedRepository.getId() ); | |||
repo.setLayout( managedRepository.getLayout() ); | |||
repo.setName( managedRepository.getName() ); | |||
repo.setReleases( managedRepository.isReleases() ); | |||
repo.setSnapshots( managedRepository.isSnapshots() ); | |||
return managedRepositoryAdmin.addManagedRepository( repo, managedRepository.isStageRepoNeeded(), | |||
getAuditInformation() ); | |||
} | |||
public Boolean updateManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception | |||
{ | |||
org.apache.archiva.admin.repository.managed.ManagedRepository repo = | |||
new org.apache.archiva.admin.repository.managed.ManagedRepository(); | |||
repo.setLocation( managedRepository.getLocation() ); | |||
repo.setBlockRedeployments( managedRepository.isBlockRedeployments() ); | |||
repo.setCronExpression( managedRepository.getCronExpression() ); | |||
repo.setId( managedRepository.getId() ); | |||
repo.setLayout( managedRepository.getLayout() ); | |||
repo.setName( managedRepository.getName() ); | |||
repo.setReleases( managedRepository.isReleases() ); | |||
repo.setSnapshots( managedRepository.isSnapshots() ); | |||
return managedRepositoryAdmin.updateManagedRepository( repo, managedRepository.isStageRepoNeeded(), | |||
getAuditInformation(), | |||
managedRepository.isResetStats() ); | |||
} | |||
} |
@@ -19,33 +19,19 @@ package org.apache.archiva.rest.services; | |||
* under the License. | |||
*/ | |||
import org.apache.archiva.admin.AuditInformation; | |||
import org.apache.archiva.admin.repository.RepositoryAdminException; | |||
import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin; | |||
import org.apache.archiva.audit.AuditEvent; | |||
import org.apache.archiva.audit.AuditListener; | |||
import org.apache.archiva.metadata.repository.RepositorySessionFactory; | |||
import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; | |||
import org.apache.archiva.rest.api.model.ManagedRepository; | |||
import org.apache.archiva.rest.api.model.RemoteRepository; | |||
import org.apache.archiva.rest.api.services.RepositoriesService; | |||
import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler; | |||
import org.apache.archiva.scheduler.repository.RepositoryTask; | |||
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.configuration.IndeterminateConfigurationException; | |||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; | |||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; | |||
import org.apache.maven.archiva.security.ArchivaRoleConstants; | |||
import org.codehaus.plexus.redback.role.RoleManager; | |||
import org.codehaus.plexus.redback.role.RoleManagerException; | |||
import org.codehaus.plexus.redback.users.User; | |||
import org.codehaus.plexus.registry.Registry; | |||
import org.codehaus.plexus.registry.RegistryException; | |||
import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
import org.codehaus.redback.rest.services.RedbackAuthenticationThreadLocal; | |||
import org.codehaus.redback.rest.services.RedbackRequestInformation; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.stereotype.Service; | |||
@@ -53,8 +39,6 @@ import org.springframework.stereotype.Service; | |||
import javax.inject.Inject; | |||
import javax.inject.Named; | |||
import javax.ws.rs.PathParam; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
@@ -64,6 +48,7 @@ import java.util.List; | |||
*/ | |||
@Service( "repositoriesService#rest" ) | |||
public class DefaultRepositoriesService | |||
extends AbstractRestService | |||
implements RepositoriesService | |||
{ | |||
private Logger log = LoggerFactory.getLogger( getClass() ); | |||
@@ -76,10 +61,6 @@ public class DefaultRepositoriesService | |||
private static final String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&=\\\\]+$"; | |||
// TODO move this field to an abstract class | |||
@Inject | |||
private List<AuditListener> auditListeners = new ArrayList<AuditListener>(); | |||
@Inject | |||
protected RoleManager roleManager; | |||
@@ -103,47 +84,6 @@ public class DefaultRepositoriesService | |||
@Inject | |||
private ManagedRepositoryAdmin managedRepositoryAdmin; | |||
public List<ManagedRepository> getManagedRepositories() | |||
throws RepositoryAdminException | |||
{ | |||
List<org.apache.archiva.admin.repository.managed.ManagedRepository> repos = | |||
managedRepositoryAdmin.getManagedRepositories(); | |||
List<ManagedRepository> managedRepos = new ArrayList<ManagedRepository>( repos.size() ); | |||
for ( org.apache.archiva.admin.repository.managed.ManagedRepository repoConfig : repos ) | |||
{ | |||
// TODO staging repo too | |||
ManagedRepository repo = | |||
new ManagedRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(), | |||
repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(), | |||
repoConfig.isBlockRedeployments(), false, repoConfig.getCronExpression() ); | |||
managedRepos.add( repo ); | |||
} | |||
return managedRepos; | |||
} | |||
public ManagedRepository getManagedRepository( String repositoryId ) | |||
throws RepositoryAdminException | |||
{ | |||
List<ManagedRepository> repos = getManagedRepositories(); | |||
for ( ManagedRepository repo : repos ) | |||
{ | |||
if ( StringUtils.equals( repo.getId(), repositoryId ) ) | |||
{ | |||
return repo; | |||
} | |||
} | |||
return null; | |||
} | |||
public Boolean deleteManagedRepository( String repoId, boolean deleteContent ) | |||
throws Exception | |||
{ | |||
return managedRepositoryAdmin.deleteManagedRepository( repoId, getAuditInformation(), deleteContent ); | |||
} | |||
public List<RemoteRepository> getRemoteRepositories() | |||
{ | |||
@@ -162,42 +102,7 @@ public class DefaultRepositoriesService | |||
return remoteRepos; | |||
} | |||
public Boolean addManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception | |||
{ | |||
org.apache.archiva.admin.repository.managed.ManagedRepository repo = | |||
new org.apache.archiva.admin.repository.managed.ManagedRepository(); | |||
repo.setLocation( managedRepository.getLocation() ); | |||
repo.setBlockRedeployments( managedRepository.isBlockRedeployments() ); | |||
repo.setCronExpression( managedRepository.getCronExpression() ); | |||
repo.setId( managedRepository.getId() ); | |||
repo.setLayout( managedRepository.getLayout() ); | |||
repo.setName( managedRepository.getName() ); | |||
repo.setReleases( managedRepository.isReleases() ); | |||
repo.setSnapshots( managedRepository.isSnapshots() ); | |||
return managedRepositoryAdmin.addManagedRepository( repo, managedRepository.isStageRepoNeeded(), | |||
getAuditInformation() ); | |||
} | |||
public Boolean updateManagedRepository( ManagedRepository managedRepository ) | |||
throws Exception | |||
{ | |||
org.apache.archiva.admin.repository.managed.ManagedRepository repo = | |||
new org.apache.archiva.admin.repository.managed.ManagedRepository(); | |||
repo.setLocation( managedRepository.getLocation() ); | |||
repo.setBlockRedeployments( managedRepository.isBlockRedeployments() ); | |||
repo.setCronExpression( managedRepository.getCronExpression() ); | |||
repo.setId( managedRepository.getId() ); | |||
repo.setLayout( managedRepository.getLayout() ); | |||
repo.setName( managedRepository.getName() ); | |||
repo.setReleases( managedRepository.isReleases() ); | |||
repo.setSnapshots( managedRepository.isSnapshots() ); | |||
return managedRepositoryAdmin.updateManagedRepository( repo, managedRepository.isStageRepoNeeded(), | |||
getAuditInformation(), managedRepository.isResetStats() ); | |||
} | |||
// FIXME olamy move this to repository admin component ! | |||
public Boolean scanRepository( String repositoryId, boolean fullScan ) | |||
{ | |||
if ( repositoryTaskScheduler.isProcessingRepositoryTask( repositoryId ) ) | |||
@@ -238,132 +143,6 @@ public class DefaultRepositoriesService | |||
return false; | |||
} | |||
} | |||
//----------------------------------------------- | |||
// util methods | |||
// FIXME most are copied from xmlrpc | |||
// olamt move those in common utility classes | |||
//----------------------------------------------- | |||
protected void triggerAuditEvent( String repositoryId, String resource, String action ) | |||
{ | |||
User user = RedbackAuthenticationThreadLocal.get().getUser(); | |||
if ( user == null ) | |||
{ | |||
log.warn( "no user found in Redback ThreadLocal" ); | |||
AuditEvent event = | |||
new AuditEvent( repositoryId, user == null ? "null" : user.getUsername(), resource, action ); | |||
// FIXME use a thread local through cxf interceptors to store this | |||
//event.setRemoteIP( getRemoteAddr() ); | |||
for ( AuditListener listener : auditListeners ) | |||
{ | |||
listener.auditEvent( event ); | |||
} | |||
} | |||
} | |||
protected void addRepositoryRoles( ManagedRepositoryConfiguration newRepository ) | |||
throws RoleManagerException | |||
{ | |||
String repoId = newRepository.getId(); | |||
// TODO: double check these are configured on start up | |||
// TODO: belongs in the business logic | |||
if ( !roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId ) ) | |||
{ | |||
roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId ); | |||
} | |||
if ( !roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId ) ) | |||
{ | |||
roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId ); | |||
} | |||
} | |||
public Boolean executeRepositoryScanner( String repoId ) | |||
throws Exception | |||
{ | |||
return scanRepository( repoId, true ); | |||
} | |||
private void saveConfiguration( Configuration config ) | |||
throws Exception | |||
{ | |||
try | |||
{ | |||
archivaConfiguration.save( config ); | |||
} | |||
catch ( RegistryException e ) | |||
{ | |||
throw new Exception( "Error occurred in the registry." ); | |||
} | |||
catch ( IndeterminateConfigurationException e ) | |||
{ | |||
throw new Exception( "Error occurred while saving the configuration." ); | |||
} | |||
} | |||
protected void addRepository( ManagedRepositoryConfiguration repository, Configuration configuration ) | |||
throws IOException | |||
{ | |||
// Normalize the path | |||
File file = new File( repository.getLocation() ); | |||
repository.setLocation( file.getCanonicalPath() ); | |||
if ( !file.exists() ) | |||
{ | |||
file.mkdirs(); | |||
} | |||
if ( !file.exists() || !file.isDirectory() ) | |||
{ | |||
throw new IOException( | |||
"Unable to add repository - no write access, can not create the root directory: " + file ); | |||
} | |||
configuration.addManagedRepository( repository ); | |||
} | |||
private ManagedRepositoryConfiguration getStageRepoConfig( ManagedRepositoryConfiguration repository ) | |||
{ | |||
ManagedRepositoryConfiguration stagingRepository = new ManagedRepositoryConfiguration(); | |||
stagingRepository.setId( repository.getId() + "-stage" ); | |||
stagingRepository.setLayout( repository.getLayout() ); | |||
stagingRepository.setName( repository.getName() + "-stage" ); | |||
stagingRepository.setBlockRedeployments( repository.isBlockRedeployments() ); | |||
stagingRepository.setDaysOlder( repository.getDaysOlder() ); | |||
stagingRepository.setDeleteReleasedSnapshots( repository.isDeleteReleasedSnapshots() ); | |||
stagingRepository.setIndexDir( repository.getIndexDir() ); | |||
String path = repository.getLocation(); | |||
int lastIndex = path.lastIndexOf( '/' ); | |||
stagingRepository.setLocation( path.substring( 0, lastIndex ) + "/" + stagingRepository.getId() ); | |||
stagingRepository.setRefreshCronExpression( repository.getRefreshCronExpression() ); | |||
stagingRepository.setReleases( repository.isReleases() ); | |||
stagingRepository.setRetentionCount( repository.getRetentionCount() ); | |||
stagingRepository.setScanned( repository.isScanned() ); | |||
stagingRepository.setSnapshots( repository.isSnapshots() ); | |||
return stagingRepository; | |||
} | |||
private String removeExpressions( String directory ) | |||
{ | |||
String value = StringUtils.replace( directory, "${appserver.base}", | |||
registry.getString( "appserver.base", "${appserver.base}" ) ); | |||
value = StringUtils.replace( value, "${appserver.home}", | |||
registry.getString( "appserver.home", "${appserver.home}" ) ); | |||
return value; | |||
} | |||
private AuditInformation getAuditInformation() | |||
{ | |||
RedbackRequestInformation redbackRequestInformation = RedbackAuthenticationThreadLocal.get(); | |||
User user = redbackRequestInformation == null ? null : redbackRequestInformation.getUser(); | |||
String remoteAddr = redbackRequestInformation == null ? null : redbackRequestInformation.getRemoteAddr(); | |||
return new AuditInformation( user, remoteAddr ); | |||
} | |||
} | |||
@@ -50,6 +50,7 @@ | |||
<jaxrs:serviceBeans> | |||
<ref bean="pingService#rest"/> | |||
<ref bean="repositoriesService#rest"/> | |||
<ref bean="managedRepositoriesService#rest"/> | |||
</jaxrs:serviceBeans> | |||
<jaxrs:outInterceptors> |
@@ -19,6 +19,10 @@ package org.apache.archiva.rest.services; | |||
*/ | |||
import org.apache.archiva.rest.api.services.ManagedRepositoriesService; | |||
import org.apache.archiva.rest.api.services.PingService; | |||
import org.apache.archiva.rest.api.services.RepositoriesService; | |||
import org.apache.cxf.jaxrs.client.JAXRSClientFactory; | |||
import org.codehaus.redback.rest.services.AbstractRestServicesTest; | |||
/** | |||
@@ -35,4 +39,25 @@ public abstract class AbstractArchivaRestTest | |||
{ | |||
return "classpath*:META-INF/spring-context.xml,classpath:META-INF/spring-context-test.xml"; | |||
} | |||
protected RepositoriesService getRepositoriesService() | |||
{ | |||
return JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
RepositoriesService.class ); | |||
} | |||
protected ManagedRepositoriesService getManagedRepositoriesService() | |||
{ | |||
return JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
ManagedRepositoriesService.class ); | |||
} | |||
protected PingService getPingService() | |||
{ | |||
return JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
PingService.class ); | |||
} | |||
} |
@@ -20,10 +20,8 @@ package org.apache.archiva.rest.services; | |||
*/ | |||
import org.apache.archiva.rest.api.services.PingService; | |||
import org.apache.cxf.jaxrs.client.JAXRSClientFactory; | |||
import org.apache.cxf.jaxrs.client.ServerWebApplicationException; | |||
import org.apache.cxf.jaxrs.client.WebClient; | |||
import org.codehaus.redback.rest.services.AbstractRestServicesTest; | |||
import org.junit.Ignore; | |||
import org.junit.Test; | |||
@@ -35,13 +33,6 @@ public class PingServiceTest | |||
extends AbstractArchivaRestTest | |||
{ | |||
PingService getPingService() | |||
{ | |||
return JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
PingService.class ); | |||
} | |||
@Test | |||
public void ping() | |||
@@ -83,7 +74,7 @@ public class PingServiceTest | |||
assertEquals( "Yeah Baby It rocks!", res ); | |||
} | |||
@Ignore("FIXME guest failed ???") | |||
@Ignore( "FIXME guest failed ???" ) | |||
public void pingWithAuthzGuest() | |||
throws Exception | |||
{ |
@@ -21,8 +21,8 @@ package org.apache.archiva.rest.services; | |||
import org.apache.archiva.rest.api.model.ManagedRepository; | |||
import org.apache.archiva.rest.api.model.RemoteRepository; | |||
import org.apache.archiva.rest.api.services.ManagedRepositoriesService; | |||
import org.apache.archiva.rest.api.services.RepositoriesService; | |||
import org.apache.cxf.jaxrs.client.JAXRSClientFactory; | |||
import org.apache.cxf.jaxrs.client.ServerWebApplicationException; | |||
import org.apache.cxf.jaxrs.client.WebClient; | |||
import org.apache.maven.archiva.common.utils.FileUtil; | |||
@@ -38,12 +38,6 @@ public class RepositoriesServiceTest | |||
extends AbstractArchivaRestTest | |||
{ | |||
RepositoriesService getRepositoriesService() | |||
{ | |||
return JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
RepositoriesService.class ); | |||
} | |||
@Test( expected = ServerWebApplicationException.class ) | |||
public void listRemoteRepositoriesKarmaFailed() | |||
@@ -98,7 +92,12 @@ public class RepositoriesServiceTest | |||
RepositoriesService service = getRepositoriesService(); | |||
WebClient.client( service ).header( "Authorization", authorizationHeader ); | |||
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000 ); | |||
String repoId = service.getManagedRepositories().get( 0 ).getId(); | |||
ManagedRepositoriesService managedRepositoriesService = getManagedRepositoriesService(); | |||
WebClient.client( managedRepositoriesService ).header( "Authorization", authorizationHeader ); | |||
WebClient.getConfig( managedRepositoriesService ).getHttpConduit().getClient().setReceiveTimeout( 300000 ); | |||
String repoId = managedRepositoriesService.getManagedRepositories().get( 0 ).getId(); | |||
assertTrue( service.scanRepository( repoId, true ) ); | |||
@@ -108,51 +107,6 @@ public class RepositoriesServiceTest | |||
} | |||
@Test | |||
public void addManagedRepo() | |||
throws Exception | |||
{ | |||
RepositoriesService service = getRepositoriesService(); | |||
WebClient.client( service ).header( "Authorization", authorizationHeader ); | |||
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000 ); | |||
ManagedRepository repo = getTestManagedRepository(); | |||
if ( service.getManagedRepository( repo.getId() ) != null ) | |||
{ | |||
service.deleteManagedRepository( repo.getId(), true ); | |||
assertNull( service.getManagedRepository( repo.getId() ) ); | |||
} | |||
service.addManagedRepository( repo ); | |||
assertNotNull( service.getManagedRepository( repo.getId() ) ); | |||
} | |||
@Test | |||
public void updateManagedRepo() | |||
throws Exception | |||
{ | |||
RepositoriesService service = getRepositoriesService(); | |||
WebClient.client( service ).header( "Authorization", authorizationHeader ); | |||
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000 ); | |||
ManagedRepository repo = getTestManagedRepository(); | |||
if ( service.getManagedRepository( repo.getId() ) != null ) | |||
{ | |||
service.deleteManagedRepository( repo.getId(), true ); | |||
assertNull( service.getManagedRepository( repo.getId() ) ); | |||
} | |||
service.addManagedRepository( repo ); | |||
repo = service.getManagedRepository( repo.getId() ); | |||
assertNotNull( repo ); | |||
assertEquals( "test", repo.getName() ); | |||
// toto is foo in French :-) | |||
repo.setName( "toto" ); | |||
service.updateManagedRepository( repo ); | |||
repo = service.getManagedRepository( repo.getId() ); | |||
assertNotNull( repo ); | |||
assertEquals( "toto", repo.getName() ); | |||
} | |||
private ManagedRepository getTestManagedRepository() | |||
{ |