package alien4cloud.component.repository; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.springframework.beans.factory.annotation.Required; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import alien4cloud.component.repository.exception.RepositoryIOException; @Component public class ArtifactLocalRepository extends AbstractLocalRepository { private Path repositoryPath; @Override public Path getRepositoryPath() { return this.repositoryPath; } @Override public void storeFile(String id, InputStream data) { try { super.storeFile(id, data); } catch (RepositoryIOException e) { ensureRepositoryExists(); super.storeFile(id, data); } } @Override public String storeFile(InputStream data) { try { return super.storeFile(data); } catch (RepositoryIOException e) { ensureRepositoryExists(); return super.storeFile(data); } } @Required @Value("${directories.alien}/${directories.artifact_repository}") public void setRepositoryPath(String path) throws IOException { this.repositoryPath = Paths.get(path).toAbsolutePath(); ensureRepositoryExists(); } private void ensureRepositoryExists() { if (!Files.exists(repositoryPath)) { try { Files.createDirectories(repositoryPath); } catch (IOException e) { throw new RepositoryIOException("Fails to create artifact repository at " + repositoryPath.toString()); } } } @Override public void checkRepository() throws IOException { setRepositoryPath(repositoryPath.toString()); } }