@Override
protected Object retrieveView(ResourceStoreRequest request, RepositoryItemUid itemUid, StorageItem item,
Request req)
throws IOException
{
StorageFileItem fileItem = (StorageFileItem) item;
Set<String> repositories = new LinkedHashSet<String>();
// the artifact does exists on the repository it was found =D
repositories.add(itemUid.getRepository().getId());
final String checksum =
fileItem == null ? null : fileItem.getRepositoryItemAttributes()
.get(DigestCalculatingInspector.DIGEST_SHA1_KEY);
if (checksum != null) {
IteratorSearchResponse searchResponse = null;
try {
searchResponse =
indexerManager.searchArtifactSha1ChecksumIterator(checksum, null, null, null, null, null);
for (ArtifactInfo info : searchResponse) {
repositories.add(info.repository);
}
}
catch (NoSuchRepositoryException e) {
// should never trigger this exception since I'm searching on all repositories
getLogger().error(e.getMessage(), e);
}
finally {
if (searchResponse != null) {
searchResponse.close();
}
}
}
// hosted / cache check useful if the index is out to date or disable
for (Repository repo : protectedRepositoryRegistry.getRepositories()) {
// already found the artifact on this repo
if (repositories.contains(repo.getId())) {
continue;
}
final ResourceStoreRequest repoRequest =
new ResourceStoreRequest(itemUid.getPath(), request.isRequestLocalOnly(),
request.isRequestRemoteOnly());
if (repo.getLocalStorage().containsItem(repo, repoRequest)) {
try {
StorageItem repoItem = repo.retrieveItem(repoRequest);
if (checksum == null
||
checksum.equals(repoItem.getRepositoryItemAttributes().get(DigestCalculatingInspector.DIGEST_SHA1_KEY))) {
repositories.add(repo.getId());
}
}
catch (AccessDeniedException e) {
// that is fine, user doesn't have access
continue;
}
catch (RepositoryNotAvailableException e) {
// this could happen normally if a repository is not available, do not complain too loudly
getLogger().trace("Repository not available; ignoring", e);
}
catch (Exception e) {
getLogger().error(e.getMessage(), e);
}
}
}
ArtifactInfoResourceResponse result = new ArtifactInfoResourceResponse();
ArtifactInfoResource resource = new ArtifactInfoResource();
resource.setRepositoryId(itemUid.getRepository().getId());
resource.setRepositoryName(itemUid.getRepository().getName());
resource.setRepositoryPath(itemUid.getPath());
resource.setRepositories(createRepositoriesUrl(repositories, req, itemUid.getPath()));
resource.setPresentLocally(fileItem != null);
if (fileItem != null) {
resource.setMd5Hash(fileItem.getRepositoryItemAttributes().get(DigestCalculatingInspector.DIGEST_MD5_KEY));
resource.setSha1Hash(checksum);
resource.setLastChanged(fileItem.getModified());
resource.setSize(fileItem.getLength());
resource.setUploaded(fileItem.getCreated());
resource.setUploader(fileItem.getRepositoryItemAttributes().get(AccessManager.REQUEST_USER));
resource.setMimeType(fileItem.getMimeType());
try {
accessManager.decide(itemUid.getRepository(), request, Action.delete);
resource.setCanDelete(true);
}