package org.carlspring.strongbox.repository; import org.carlspring.strongbox.configuration.Configuration; import org.carlspring.strongbox.configuration.ConfigurationManager; import org.carlspring.strongbox.storage.Storage; import org.carlspring.strongbox.storage.indexing.IndexTypeEnum; import org.carlspring.strongbox.storage.indexing.RepositoryIndexManager; import org.carlspring.strongbox.storage.indexing.RepositoryIndexer; import org.carlspring.strongbox.storage.indexing.RepositoryIndexerFactory; import org.carlspring.strongbox.storage.indexing.downloader.IndexDownloader; import org.carlspring.strongbox.storage.repository.Repository; import javax.inject.Inject; import java.io.File; import java.io.IOException; import org.apache.maven.index.packer.IndexPacker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import static org.carlspring.strongbox.util.IndexContextHelper.getContextId; /** * @author carlspring */ @Component public class MavenRepositoryManagementStrategy extends AbstractRepositoryManagementStrategy { private static final Logger logger = LoggerFactory.getLogger(MavenRepositoryManagementStrategy.class); @Inject private IndexDownloader downloader; @Inject private IndexPacker indexPacker; @Inject private RepositoryIndexManager repositoryIndexManager; @Inject private RepositoryIndexerFactory repositoryIndexerFactory; @Inject private ConfigurationManager configurationManager; @Override public void createRepository(String storageId, String repositoryId) throws IOException { Storage storage = getConfiguration().getStorage(storageId); Repository repository = storage.getRepository(repositoryId); final String storageBasedirPath = storage.getBasedir(); final File repositoryBasedir = new File(storageBasedirPath, repositoryId).getAbsoluteFile(); createRepositoryStructure(storageBasedirPath, repositoryId); if (repository.isIndexingEnabled()) { if (repository.isProxyRepository()) { // Create a remote index createRepositoryIndexer(storageId, repositoryId, IndexTypeEnum.REMOTE.getType(), repositoryBasedir); } // Create a local index createRepositoryIndexer(storageId, repositoryId, IndexTypeEnum.LOCAL.getType(), repositoryBasedir); } } public RepositoryIndexer createRepositoryIndexer(String storageId, String repositoryId, String indexType, File repositoryBasedir) throws RepositoryInitializationException { File repositoryIndexDir = new File(repositoryBasedir, ".index/" + indexType); if (!repositoryIndexDir.exists()) { //noinspection ResultOfMethodCallIgnored repositoryIndexDir.mkdirs(); } RepositoryIndexer repositoryIndexer = repositoryIndexerFactory.createRepositoryIndexer(storageId, repositoryId, indexType, repositoryBasedir, repositoryIndexDir); String contextId = storageId + ":" + repositoryId + ":" + indexType; repositoryIndexManager.addRepositoryIndexer(contextId, repositoryIndexer); return repositoryIndexer; } @Override public void createRepositoryStructure(String storageBasedirPath, String repositoryId) throws IOException { final File storageBasedir = new File(storageBasedirPath); final File repositoryDir = new File(storageBasedir, repositoryId); if (!repositoryDir.exists()) { //noinspection ResultOfMethodCallIgnored repositoryDir.mkdirs(); //noinspection ResultOfMethodCallIgnored new File(repositoryDir, ".index").mkdirs(); //noinspection ResultOfMethodCallIgnored new File(repositoryDir, ".trash").mkdirs(); } } @Override public void initializeRepository(String storageId, String repositoryId) throws RepositoryInitializationException { // initializeRepositoryIndexes(storageId, repositoryId); } public void initializeRepositoryIndexes(String storageId, String repositoryId) throws RepositoryInitializationException { try { Storage storage = getConfiguration().getStorage(storageId); final File repositoryBasedir = new File(storage.getBasedir(), repositoryId); if (storage.getRepository(repositoryId).isIndexingEnabled()) { initializeRepositoryIndex(storage, repositoryId, IndexTypeEnum.LOCAL.getType(), repositoryBasedir); if (storage.getRepository(repositoryId).isProxyRepository()) { initializeRepositoryIndex(storage, repositoryId, IndexTypeEnum.REMOTE.getType(), repositoryBasedir); } } } catch (RepositoryInitializationException e) { logger.error(e.getMessage(), e); } } public void initializeRepositoryIndex(Storage storage, String repositoryId, String indexType, File repositoryBasedir) throws RepositoryInitializationException { final File indexDir = new File(repositoryBasedir, ".index/" + indexType); RepositoryIndexer repositoryIndexer = repositoryIndexerFactory.createRepositoryIndexer(storage.getId(), repositoryId, indexType, repositoryBasedir, indexDir); String contextId = getContextId(storage.getId(), repositoryId, IndexTypeEnum.LOCAL.getType()); repositoryIndexManager.addRepositoryIndexer(contextId, repositoryIndexer); } public Configuration getConfiguration() { return configurationManager.getConfiguration(); } }