if (repoRequest != null) {
try {
RepositoryBaseResource resource = repoRequest.getData();
if (RepositoryBaseResourceConverter.REPO_TYPE_VIRTUAL.equals(resource.getRepoType())) {
RepositoryShadowResource model = (RepositoryShadowResource) resource;
try {
ShadowRepository shadow =
getRepositoryRegistry().getRepositoryWithFacet(repoId, ShadowRepository.class);
shadow.setName(model.getName());
shadow.setExposed(resource.isExposed());
shadow.setMasterRepository(getRepositoryRegistry().getRepository(model.getShadowOf()));
shadow.setSynchronizeAtStartup(model.isSyncAtStartup());
getNexusConfiguration().saveConfiguration();
}
catch (NoSuchRepositoryAccessException e) {
getLogger().warn("Repository access denied, id=" + repoId);
throw new ResourceException(Status.CLIENT_ERROR_FORBIDDEN, "Access Denied to Repository");
}
catch (NoSuchRepositoryException e) {
getLogger().warn("Virtual repository not found, id=" + repoId);
throw new ResourceException(Status.CLIENT_ERROR_NOT_FOUND, "Virtual repository Not Found");
}
}
else {
RepositoryResource model = (RepositoryResource) resource;
try {
Repository repository = getRepositoryRegistry().getRepository(repoId);
repository.setName(model.getName());
repository.setExposed(resource.isExposed());
// set null to read only
RepositoryWritePolicy writePolicy =
(model.getWritePolicy() != null) ? RepositoryWritePolicy.valueOf(model.getWritePolicy())
: RepositoryWritePolicy.READ_ONLY;
repository.setWritePolicy(writePolicy);
repository.setBrowseable(model.isBrowseable());
repository.setIndexable(model.isIndexable());
repository.setSearchable(model.isIndexable());
repository.setNotFoundCacheTimeToLive(model.getNotFoundCacheTTL());
if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
ProxyRepository proxyRepo = repository.adaptToFacet(ProxyRepository.class);
try {
proxyRepo.setRemoteUrl(model.getRemoteStorage().getRemoteStorageUrl());
}
catch (RemoteStorageException e) {
ValidationResponse vr = new ApplicationValidationResponse();
ValidationMessage error = new ValidationMessage("remoteStorageUrl", e.getMessage(), e.getMessage());
vr.addValidationError(error);
throw new InvalidConfigurationException(vr);
}
String oldPasswordForRemoteStorage = null;
if (proxyRepo.getRemoteAuthenticationSettings() != null
&& UsernamePasswordRemoteAuthenticationSettings.class.isInstance(proxyRepo
.getRemoteAuthenticationSettings())) {
oldPasswordForRemoteStorage =
((UsernamePasswordRemoteAuthenticationSettings) proxyRepo
.getRemoteAuthenticationSettings()).getPassword();
}
RemoteAuthenticationSettings remoteAuth =
getAuthenticationInfoConverter().convertAndValidateFromModel(
this.convertAuthentication(model.getRemoteStorage().getAuthentication(),
oldPasswordForRemoteStorage));
RemoteConnectionSettings remoteConnSettings =
getGlobalRemoteConnectionSettings().convertAndValidateFromModel(
this.convertRemoteConnectionSettings(model.getRemoteStorage()
.getConnectionSettings()));
if (remoteAuth != null) {
proxyRepo.setRemoteAuthenticationSettings(remoteAuth);
}
else {
proxyRepo.getRemoteStorageContext().removeRemoteAuthenticationSettings();
}
if (remoteConnSettings != null) {
proxyRepo.setRemoteConnectionSettings(remoteConnSettings);
}
else {
proxyRepo.getRemoteStorageContext().removeRemoteConnectionSettings();
}
// set auto block
proxyRepo.setAutoBlockActive(((RepositoryProxyResource) model).isAutoBlockActive());
// set type validation
proxyRepo.setFileTypeValidation(((RepositoryProxyResource) model).isFileTypeValidation());
}
if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
RepositoryPolicy repoPolicy =
EnumUtil.valueOf(model.getRepoPolicy(), RepositoryPolicy.class);
repository.adaptToFacet(MavenRepository.class).setRepositoryPolicy(repoPolicy);
if (repository.getRepositoryKind().isFacetAvailable(MavenProxyRepository.class)) {
ChecksumPolicy checksum =
EnumUtil.valueOf(model.getChecksumPolicy(), ChecksumPolicy.class);
MavenProxyRepository pRepository = repository.adaptToFacet(MavenProxyRepository.class);
pRepository.setChecksumPolicy(checksum);
pRepository.setDownloadRemoteIndexes(model.isDownloadRemoteIndexes());
pRepository.setChecksumPolicy(EnumUtil.valueOf(model.getChecksumPolicy(),
ChecksumPolicy.class));
pRepository.setDownloadRemoteIndexes(model.isDownloadRemoteIndexes());
RepositoryProxyResource proxyModel = (RepositoryProxyResource) model;
pRepository.setArtifactMaxAge(proxyModel.getArtifactMaxAge());
pRepository.setMetadataMaxAge(proxyModel.getMetadataMaxAge());
if (proxyModel.getItemMaxAge() != null) {
pRepository.setItemMaxAge(proxyModel.getItemMaxAge());
}
}
}
else {
// This is a total hack to be able to retrieve this data from a non core repo if available
try {
RepositoryProxyResource proxyModel = (RepositoryProxyResource) model;
// NXCM-5131 Ask for itemMaxAge first, because it's already introduced in AbstractProxyRepository and
// may be a superclass for non-maven repositories (e.g. NuGet)
Method itemMethod =
repository.getClass().getMethod("setItemMaxAge", int.class);
if (itemMethod != null && proxyModel.getItemMaxAge() != null) {
itemMethod.invoke(repository, proxyModel.getItemMaxAge());
}
Method artifactMethod =
repository.getClass().getMethod("setArtifactMaxAge", int.class);
if (artifactMethod != null) {
artifactMethod.invoke(repository, proxyModel.getArtifactMaxAge());
}
Method metadataMethod =
repository.getClass().getMethod("setMetadataMaxAge", int.class);
if (metadataMethod != null) {
metadataMethod.invoke(repository, proxyModel.getMetadataMaxAge());
}
}
catch (Exception e) {
// nothing to do here, doesn't support artifactmax age
}
}
repository.setLocalUrl(model.getOverrideLocalStorageUrl());
getNexusConfiguration().saveConfiguration();
}
catch (NoSuchRepositoryAccessException e) {
getLogger().warn("Repository access denied, id=" + repoId);