Skip to content
Snippets Groups Projects

refactor: solidify sitemap controller

Merged Hugues.Cazeaux requested to merge HCA-solidifySiteMap into master
Files
8
package ch.unige.aou.controller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ch.unige.solidify.config.SolidifyProperties;
import ch.unige.solidify.controller.SolidifySitemapController;
import ch.unige.solidify.rest.FacetPage;
import ch.unige.solidify.rest.SearchCondition;
import ch.unige.solidify.security.EveryonePermissions;
import ch.unige.solidify.service.IndexResourceService;
import ch.unige.aou.AouConstants;
import ch.unige.aou.config.AouProperties;
import ch.unige.aou.model.index.PublicationIndexEntry;
import ch.unige.aou.model.sitemap.Sitemap;
import ch.unige.aou.model.sitemap.SitemapIndex;
import ch.unige.aou.model.sitemap.XmlUrl;
import ch.unige.aou.model.sitemap.XmlUrlSet;
import ch.unige.aou.rest.AouActionName;
@RestController
@ConditionalOnBean(AccessController.class)
public class SitemapController {
public class SitemapController extends SolidifySitemapController {
public static final int SIZE_SITEMAP = 100;
private final String homepage;
private final String indexName;
private final IndexResourceService<String, PublicationIndexEntry> indexResourceService;
public SitemapController(AouProperties aouProperties, IndexResourceService<String, PublicationIndexEntry> indexResourceService) {
this.homepage = aouProperties.getParameters().getHomepage();
public SitemapController(
SolidifyProperties config,
AouProperties aouProperties,
IndexResourceService<String, PublicationIndexEntry> indexResourceService) {
super(config, aouProperties.getParameters().getHomepage());
this.indexName = aouProperties.getIndexing().getPublishedPublicationsIndexName();
this.indexResourceService = indexResourceService;
}
@EveryonePermissions
@GetMapping(value = AouActionName.SITEMAP, produces = MediaType.APPLICATION_XML_VALUE)
public SitemapIndex getSiteMapIndex() {
SitemapIndex sitemapIndex = new SitemapIndex();
// Get total of archives stocked in ES
long total = this.getTotalArchives();
for (int i = 0; i < total; i = i + SIZE_SITEMAP) {
this.createSitemap(sitemapIndex, "/sitemap.xml?from=" + i);
}
return sitemapIndex;
}
@EveryonePermissions
@GetMapping(value = AouActionName.SITEMAP, params = "from", produces = MediaType.APPLICATION_XML_VALUE)
public XmlUrlSet getByArchiveId(@RequestParam(name = "from") String from) {
XmlUrlSet xmlUrlSet = new XmlUrlSet();
List<PublicationIndexEntry> archives = this.getArchivesFrom(Integer.parseInt(from));
for (int i = 0; i < archives.size(); i++) {
this.createXmlUrl(xmlUrlSet, "/" + archives.get(i).getArchiveId(), "never", XmlUrl.Priority.HIGH);
}
return xmlUrlSet;
}
private void createXmlUrl(XmlUrlSet xmlUrlSet, String link, String changeFrec, XmlUrl.Priority priority) {
xmlUrlSet.addUrl(new XmlUrl(this.homepage + link, changeFrec, priority));
}
private void createSitemap(SitemapIndex sitemapIndex, String link) {
sitemapIndex.addSitemap(new Sitemap(this.homepage + link));
}
public long getTotalArchives() {
@Override
protected long getItemsTotal() {
Pageable pageable = PageRequest.of(0, 1);
FacetPage<PublicationIndexEntry> results = this.getResults(pageable);
return results.getTotalElements();
FacetPage<PublicationIndexEntry> result = this.getPublications(pageable);
return result.getTotalElements();
}
public List<PublicationIndexEntry> getArchivesFrom(int from) {
int page;
@Override
protected List<String> getItemsFrom(int from) {
int page = 0;
if (from > 0) {
page = from / SIZE_SITEMAP;
} else {
page = 0;
page = from / this.getPageSize();
}
Pageable pageable = PageRequest.of(page, SIZE_SITEMAP, Sort.by(AouConstants.INDEX_FIELD_ARCHIVE_ID_INT));
FacetPage<PublicationIndexEntry> results = this.getResults(pageable);
return results.getContent();
Pageable pageable = PageRequest.of(page, this.getPageSize(), Sort.by(AouConstants.INDEX_FIELD_ARCHIVE_ID_INT));
FacetPage<PublicationIndexEntry> result = this.getPublications(pageable);
return result.stream().map(PublicationIndexEntry::getArchiveId).collect(Collectors.toList());
}
@Override
protected List<String> getExtraUrls() {
return Collections.emptyList();
}
public FacetPage<PublicationIndexEntry> getResults(Pageable pageable) {
private FacetPage<PublicationIndexEntry> getPublications(Pageable pageable) {
List<SearchCondition> searchConditionList = new ArrayList<>();
return this.indexResourceService.search(this.indexName, searchConditionList, null, pageable);
}
Loading