package org.carlspring.strongbox.services.impl;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import javax.inject.Inject;
import org.carlspring.strongbox.artifact.coordinates.ArtifactCoordinates;
import org.carlspring.strongbox.client.ArtifactTransportException;
import org.carlspring.strongbox.configuration.ConfigurationManager;
import org.carlspring.strongbox.io.ArtifactInputStream;
import org.carlspring.strongbox.io.ArtifactOutputStream;
import org.carlspring.strongbox.providers.ProviderImplementationException;
import org.carlspring.strongbox.providers.layout.LayoutProvider;
import org.carlspring.strongbox.providers.layout.LayoutProviderRegistry;
import org.carlspring.strongbox.providers.repository.RepositoryProvider;
import org.carlspring.strongbox.providers.repository.RepositoryProviderRegistry;
import org.carlspring.strongbox.services.ArtifactResolutionService;
import org.carlspring.strongbox.storage.ArtifactResolutionException;
import org.carlspring.strongbox.storage.ArtifactStorageException;
import org.carlspring.strongbox.storage.Storage;
import org.carlspring.strongbox.storage.repository.Repository;
import org.carlspring.strongbox.storage.validation.resource.ArtifactOperationsValidator;
import org.springframework.stereotype.Component;
/**
* @author mtodorov
*/
@Component
public class ArtifactResolutionServiceImpl
implements ArtifactResolutionService
{
@Inject
private ConfigurationManager configurationManager;
@Inject
private ArtifactOperationsValidator artifactOperationsValidator;
@Inject
private RepositoryProviderRegistry repositoryProviderRegistry;
@Inject
private LayoutProviderRegistry layoutProviderRegistry;
@Override
public ArtifactInputStream getInputStream(String storageId,
String repositoryId,
String artifactPath)
throws IOException,
NoSuchAlgorithmException,
ArtifactTransportException,
ProviderImplementationException
{
artifactOperationsValidator.validate(storageId, repositoryId, artifactPath);
final Repository repository = getStorage(storageId).getRepository(repositoryId);
RepositoryProvider repositoryProvider = repositoryProviderRegistry.getProvider(repository.getType());
ArtifactInputStream is = repositoryProvider.getInputStream(storageId, repositoryId, artifactPath);
if (is == null)
{
throw new ArtifactResolutionException("Artifact " + artifactPath + " not found.");
}
return is;
}
@Override
public ArtifactOutputStream getOutputStream(String storageId,
String repositoryId,
String artifactPath)
throws IOException,
ProviderImplementationException,
NoSuchAlgorithmException
{
artifactOperationsValidator.validate(storageId, repositoryId, artifactPath);
Repository repository = getStorage(storageId).getRepository(repositoryId);
RepositoryProvider repositoryProvider = repositoryProviderRegistry.getProvider(repository.getType());
ArtifactOutputStream os = repositoryProvider.getOutputStream(storageId, repositoryId, artifactPath);
if (os == null)
{
throw new ArtifactStorageException("Artifact " + artifactPath + " cannot be stored.");
}
return os;
}
public Storage getStorage(String storageId)
{
return configurationManager.getConfiguration().getStorage(storageId);
}
@Override
public ArtifactCoordinates getArtifactCoordinates(String storageId,
String repositoryId,
String artifactPath)
{
Repository repository = getStorage(storageId).getRepository(repositoryId);
LayoutProvider<?> layoutProvider = layoutProviderRegistry.getProvider(repository.getLayout());
layoutProvider.getArtifactCoordinates(artifactPath);
return layoutProvider.getArtifactCoordinates(artifactPath);
}
}