package org.carlspring.strongbox.cron.api.jobs;
import org.carlspring.strongbox.configuration.ConfigurationManager;
import org.carlspring.strongbox.cron.config.JobManager;
import org.carlspring.strongbox.cron.domain.CronTaskConfiguration;
import org.carlspring.strongbox.services.ArtifactMetadataService;
import org.carlspring.strongbox.storage.Storage;
import org.carlspring.strongbox.storage.repository.Repository;
import javax.inject.Inject;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Kate Novik
*/
public class RebuildMavenMetadataCronJob
extends JavaCronJob
{
private final Logger logger = LoggerFactory.getLogger(RebuildMavenMetadataCronJob.class);
@Inject
private ArtifactMetadataService artifactMetadataService;
@Inject
private ConfigurationManager configurationManager;
@Inject
private JobManager manager;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext)
throws JobExecutionException
{
logger.debug("Executed RebuildMavenMetadataCronJob.");
CronTaskConfiguration config = (CronTaskConfiguration) jobExecutionContext.getMergedJobDataMap().get("config");
try
{
String storageId = config.getProperty("storageId");
String repositoryId = config.getProperty("repositoryId");
String basePath = config.getProperty("basePath");
if (storageId == null)
{
Map<String, Storage> storages = getStorages();
for (String storage : storages.keySet())
{
rebuildRepositories(storage);
}
}
else if (repositoryId == null)
{
rebuildRepositories(storageId);
}
else
{
artifactMetadataService.rebuildMetadata(storageId, repositoryId, basePath);
}
}
catch (IOException | XmlPullParserException | NoSuchAlgorithmException e)
{
logger.error(e.getMessage(), e);
manager.addExecutedJob(config.getName(), true);
}
manager.addExecutedJob(config.getName(), true);
}
/**
* To rebuild artifact's metadata in repositories
*
* @param storageId path of storage
* @throws NoSuchAlgorithmException
* @throws XmlPullParserException
* @throws IOException
*/
private void rebuildRepositories(String storageId)
throws NoSuchAlgorithmException, XmlPullParserException, IOException
{
Map<String, Repository> repositories = getRepositories(storageId);
for (String repository : repositories.keySet())
{
artifactMetadataService.rebuildMetadata(storageId, repository, null);
}
}
private Map<String, Storage> getStorages()
{
return configurationManager.getConfiguration().getStorages();
}
private Map<String, Repository> getRepositories(String storageId)
{
return getStorages().get(storageId).getRepositories();
}
}