}
@AllowConcurrentEvents
@Subscribe
public void on(RepositoryItemEventCache itemEvent) {
final ProxyRepository repository = itemEvent.getRepository().adaptToFacet(ProxyRepository.class);
StorageItem item = itemEvent.getItem();
if (repository != null && item.getPath().toLowerCase().equals("/" + Yum.PATH_OF_REPOMD_XML)) {
try {
log.debug("Resetting processed flag... ({}:{} cached)", repository.getId(), item.getPath());
item.getRepositoryItemAttributes().remove(YumProxy.PROCESSED);
repository.getAttributesHandler().storeAttributes(item);
}
catch (IOException e) {
log.warn("Failed to reset processing flag for {}:{}", repository.getId(), item.getPath(), e);
}
log.debug("Marking group repositories as dirty... ({}:{} cached)", repository.getId(), item.getPath());
List<GroupRepository> groups = repositoryRegistryProvider.get().getGroupsOfRepository(repository);
for (GroupRepository group : groups) {
Yum yum = yumRegistryProvider.get().get(group.getId());
if (yum != null && yum instanceof YumGroup) {
((YumGroup) yum).markDirty();
}
}
try {
log.debug("Removing obsolete metadata files... ({}:{} cached)", repository.getId(), item.getPath());
RepoMD repoMD = new RepoMD(((StorageFileItem) item).getInputStream());
final Collection<String> locations = repoMD.getLocations();
ResourceStoreRequest request = new ResourceStoreRequest("/" + Yum.PATH_OF_REPODATA);
request.getRequestContext().put(AccessManager.REQUEST_AUTHORIZED, Boolean.TRUE);
DefaultWalkerContext context = new DefaultWalkerContext(repository, request);
context.getProcessors().add(new AbstractFileWalkerProcessor()
{
@Override
protected void processFileItem(final WalkerContext context, final StorageFileItem item) throws Exception {
if (!item.getPath().equals("/" + Yum.PATH_OF_REPOMD_XML)
&& !locations.contains(item.getPath().substring(1))) {
log.trace("Removing obsolete {}:{}", repository.getId(), item.getPath());
repository.deleteItem(true, item.getResourceStoreRequest());
}
}
});
walkerProvider.get().walk(context);
}