created oai common module
This commit is contained in:
parent
588cbab622
commit
0d96688176
|
@ -7,12 +7,12 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
|
|||
import eu.dnetlib.common.app.AbstractDnetApp;
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiRecord;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
import eu.dnetlib.domain.service.ServiceType;
|
||||
|
||||
@SpringBootApplication
|
||||
@EntityScan(basePackageClasses = { OaiConfiguration.class, OaiSet.class, OaiMetadataFormat.class, OaiRecord.class })
|
||||
@EntityScan(basePackageClasses = { OaiConfiguration.class, ExportedOaiSet.class, OaiMetadataFormat.class, ExportedOaiRecord.class })
|
||||
public class OaiApplication extends AbstractDnetApp {
|
||||
|
||||
public static void main(final String[] args) {
|
||||
|
|
|
@ -11,9 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import eu.dnetlib.common.controller.DnetRestController;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.errors.DnetException;
|
||||
import eu.dnetlib.services.oai.service.OaiService;
|
||||
import io.swagger.v3.oas.annotations.parameters.RequestBody;
|
||||
|
@ -27,45 +27,45 @@ public class ApiController extends DnetRestController {
|
|||
|
||||
@GetMapping("/conf")
|
||||
public OaiConfiguration oaiConfiguration() throws DnetException {
|
||||
return oaiService.oaiConfiguration();
|
||||
return this.oaiService.oaiConfiguration();
|
||||
}
|
||||
|
||||
@PostMapping("/conf")
|
||||
public OaiConfiguration oaiConfiguration(@RequestBody final OaiConfiguration conf) throws DnetException {
|
||||
return oaiService.oaiConfiguration(conf);
|
||||
return this.oaiService.oaiConfiguration(conf);
|
||||
}
|
||||
|
||||
@GetMapping("/md-formats")
|
||||
public List<OaiMetadataFormat> listMdFormats() throws DnetException {
|
||||
return oaiService.listMetadataFormats();
|
||||
public List<ExportedOaiMetadataFormat> listMdFormats() throws DnetException {
|
||||
return this.oaiService.listMetadataFormats();
|
||||
}
|
||||
|
||||
@PostMapping("/md-formats")
|
||||
public List<OaiMetadataFormat> addOrUpdateMdFormats(@RequestBody final OaiMetadataFormat mdFormat) throws DnetException {
|
||||
oaiService.addOrUpdateMetadataFormat(mdFormat);
|
||||
return oaiService.listMetadataFormats();
|
||||
public List<ExportedOaiMetadataFormat> addOrUpdateMdFormats(@RequestBody final ExportedOaiMetadataFormat mdFormat) throws DnetException {
|
||||
this.oaiService.addOrUpdateMetadataFormat(mdFormat);
|
||||
return this.oaiService.listMetadataFormats();
|
||||
}
|
||||
|
||||
@DeleteMapping("/md-formats/{mdprefix}")
|
||||
public List<OaiMetadataFormat> deleteMdFormats(@PathVariable final String mdprefix) throws DnetException {
|
||||
oaiService.deleteMetadataFormat(mdprefix);
|
||||
return oaiService.listMetadataFormats();
|
||||
public List<ExportedOaiMetadataFormat> deleteMdFormats(@PathVariable final String mdprefix) throws DnetException {
|
||||
this.oaiService.deleteMetadataFormat(mdprefix);
|
||||
return this.oaiService.listMetadataFormats();
|
||||
}
|
||||
|
||||
@GetMapping("/sets")
|
||||
public List<OaiSet> listOaiSets() throws DnetException {
|
||||
return oaiService.listSets();
|
||||
public List<ExportedOaiSet> listOaiSets() throws DnetException {
|
||||
return this.oaiService.listSets();
|
||||
}
|
||||
|
||||
@PostMapping("/sets")
|
||||
public List<OaiSet> addOrUpdateOaiSet(@RequestBody final OaiSet oaiSet) throws DnetException {
|
||||
oaiService.addOrUpdateSet(oaiSet);
|
||||
return oaiService.listSets();
|
||||
public List<ExportedOaiSet> addOrUpdateOaiSet(@RequestBody final ExportedOaiSet oaiSet) throws DnetException {
|
||||
this.oaiService.addOrUpdateSet(oaiSet);
|
||||
return this.oaiService.listSets();
|
||||
}
|
||||
|
||||
@DeleteMapping("/sets/{setSpec}")
|
||||
public List<OaiSet> deleteOaiSet(@PathVariable final String setSpec) throws DnetException {
|
||||
oaiService.deleteSet(setSpec);
|
||||
return oaiService.listSets();
|
||||
public List<ExportedOaiSet> deleteOaiSet(@PathVariable final String setSpec) throws DnetException {
|
||||
this.oaiService.deleteSet(setSpec);
|
||||
return this.oaiService.listSets();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,10 +23,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import eu.dnetlib.domain.oai.ExportedOaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiRecord;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.errors.DnetRuntimeException;
|
||||
import eu.dnetlib.services.oai.domain.OaiPage;
|
||||
import eu.dnetlib.services.oai.service.OaiService;
|
||||
|
@ -77,7 +78,7 @@ public class OaiController {
|
|||
private String oaiIdentify(final Map<String, String> params) {
|
||||
if (!params.isEmpty()) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
|
||||
final OaiConfiguration conf = oaiService.oaiConfiguration();
|
||||
final OaiConfiguration conf = this.oaiService.oaiConfiguration();
|
||||
|
||||
final Document doc = genericOaiResponse(OaiVerb.IDENTIFY.getVerb());
|
||||
final Element dataNode = doc.getRootElement().addElement(OaiVerb.IDENTIFY.getVerb());
|
||||
|
@ -100,7 +101,8 @@ public class OaiController {
|
|||
final Document doc = genericOaiResponse(OaiVerb.LIST_METADATA_FORMATS.getVerb());
|
||||
final Element dataNode = doc.getRootElement().addElement(OaiVerb.LIST_METADATA_FORMATS.getVerb());
|
||||
|
||||
final List<OaiMetadataFormat> formats = StringUtils.isBlank(id) ? oaiService.listMetadataFormats(id) : oaiService.listMetadataFormats();
|
||||
final List<ExportedOaiMetadataFormat> formats =
|
||||
StringUtils.isBlank(id) ? this.oaiService.listMetadataFormats(id) : this.oaiService.listMetadataFormats();
|
||||
|
||||
for (final OaiMetadataFormat oaiFormat : formats) {
|
||||
final Element formatNode = dataNode.addElement("metadataFormat");
|
||||
|
@ -117,7 +119,7 @@ public class OaiController {
|
|||
final Document doc = genericOaiResponse(OaiVerb.LIST_SETS.getVerb());
|
||||
final Element dataNode = doc.getRootElement().addElement(OaiVerb.LIST_SETS.getVerb());
|
||||
|
||||
for (final OaiSet oaiSet : oaiService.listSets()) {
|
||||
for (final ExportedOaiSet oaiSet : this.oaiService.listSets()) {
|
||||
final Element setNode = dataNode.addElement("set");
|
||||
setNode.addElement("setSpec").setText(oaiSet.getSetSpec());
|
||||
setNode.addElement("setName").setText(oaiSet.getSetName());
|
||||
|
@ -132,7 +134,7 @@ public class OaiController {
|
|||
final String identifier = params.remove("identifier");
|
||||
if (!params.isEmpty() || StringUtils.isAnyBlank(prefix, identifier)) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
|
||||
final OaiRecord record = oaiService.getRecord(identifier, prefix);
|
||||
final ExportedOaiRecord record = this.oaiService.getRecord(identifier, prefix);
|
||||
if (record == null) { return prepareErrorResponseXml(OaiError.idDoesNotExist); }
|
||||
|
||||
final Document doc = genericOaiResponse(OaiVerb.GET_RECORD.getVerb());
|
||||
|
@ -148,7 +150,7 @@ public class OaiController {
|
|||
if (params.containsKey("resumptionToken")) {
|
||||
final String resumptionToken = params.remove("resumptionToken");
|
||||
if (!params.isEmpty()) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
page = oaiService.listRecords(resumptionToken);
|
||||
page = this.oaiService.listRecords(resumptionToken);
|
||||
} else {
|
||||
|
||||
final String metadataPrefix = params.remove("metadataPrefix");
|
||||
|
@ -156,8 +158,8 @@ public class OaiController {
|
|||
final String until = params.remove("until");
|
||||
final String set = params.remove("set");
|
||||
|
||||
if (!StringUtils.isNotBlank(metadataPrefix) || !oaiService.verifySet(set)) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
page = oaiService.listRecords(metadataPrefix, set, from, until);
|
||||
if (!StringUtils.isNotBlank(metadataPrefix) || !this.oaiService.verifySet(set)) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
page = this.oaiService.listRecords(metadataPrefix, set, from, until);
|
||||
}
|
||||
|
||||
final Document doc = genericOaiResponse(OaiVerb.LIST_RECORDS.getVerb());
|
||||
|
@ -170,7 +172,7 @@ public class OaiController {
|
|||
return doc.asXML();
|
||||
}
|
||||
|
||||
private void insertSingleRecord(final Element parentNode, final OaiRecord record) {
|
||||
private void insertSingleRecord(final Element parentNode, final ExportedOaiRecord record) {
|
||||
final Element recordNode = parentNode.addElement("record");
|
||||
insertRecordHeader(recordNode, record);
|
||||
try {
|
||||
|
@ -188,16 +190,16 @@ public class OaiController {
|
|||
if (params.containsKey("resumptionToken")) {
|
||||
final String resumptionToken = params.remove("resumptionToken");
|
||||
if (!params.isEmpty()) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
page = oaiService.listRecords(resumptionToken);
|
||||
page = this.oaiService.listRecords(resumptionToken);
|
||||
} else {
|
||||
final String metadataPrefix = params.remove("metadataPrefix");
|
||||
final String from = params.remove("from");
|
||||
final String until = params.remove("until");
|
||||
final String set = params.remove("set");
|
||||
|
||||
if (!StringUtils.isNotBlank(metadataPrefix) || !oaiService.verifySet(set)) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
if (!StringUtils.isNotBlank(metadataPrefix) || !this.oaiService.verifySet(set)) { return prepareErrorResponseXml(OaiError.badArgument); }
|
||||
|
||||
page = oaiService.listRecords(metadataPrefix, set, from, until);
|
||||
page = this.oaiService.listRecords(metadataPrefix, set, from, until);
|
||||
}
|
||||
|
||||
final Document doc = genericOaiResponse(OaiVerb.LIST_IDENTIFIERS.getVerb());
|
||||
|
@ -210,7 +212,7 @@ public class OaiController {
|
|||
return doc.asXML();
|
||||
}
|
||||
|
||||
private void insertRecordHeader(final Element parentNode, final OaiRecord r) {
|
||||
private void insertRecordHeader(final Element parentNode, final ExportedOaiRecord r) {
|
||||
final Element headerNode = parentNode.addElement("header");
|
||||
headerNode.addElement("identifier").setText(r.getId());
|
||||
headerNode.addElement("datestamp").setText(DateUtils.calculate_ISO8601(r.getDate()));
|
||||
|
@ -260,7 +262,7 @@ public class OaiController {
|
|||
|
||||
private Document genericOaiResponse(final String verb) {
|
||||
try (InputStream is = getClass().getResourceAsStream("/oai/oai_response.xml")) {
|
||||
final OaiConfiguration conf = oaiService.oaiConfiguration();
|
||||
final OaiConfiguration conf = this.oaiService.oaiConfiguration();
|
||||
final Document doc = new SAXReader().read(is);
|
||||
doc.selectSingleNode("//*[local-name() = 'responseDate']").setText(DateUtils.now_ISO8601());
|
||||
doc.selectSingleNode("//*[local-name() = 'request']").setText(conf.getPublicBaseUrl());
|
||||
|
|
|
@ -3,13 +3,13 @@ package eu.dnetlib.services.oai.domain;
|
|||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiRecord;
|
||||
|
||||
public class OaiPage implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -7512951692582271344L;
|
||||
|
||||
private List<OaiRecord> list;
|
||||
private List<ExportedOaiRecord> list;
|
||||
|
||||
private long total;
|
||||
|
||||
|
@ -17,11 +17,11 @@ public class OaiPage implements Serializable {
|
|||
|
||||
private String resumptionToken;
|
||||
|
||||
public List<OaiRecord> getList() {
|
||||
public List<ExportedOaiRecord> getList() {
|
||||
return list;
|
||||
}
|
||||
|
||||
public void setList(final List<OaiRecord> list) {
|
||||
public void setList(final List<ExportedOaiRecord> list) {
|
||||
this.list = list;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package eu.dnetlib.services.oai.repository;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import eu.dnetlib.domain.oai.ExportedOaiMetadataFormat;
|
||||
|
||||
public interface ExportedOaiMetadataFormatRepository extends JpaRepository<ExportedOaiMetadataFormat, String> {
|
||||
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
package eu.dnetlib.services.oai.repository;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
|
||||
public interface OaiMetadataFormatRepository extends JpaRepository<OaiMetadataFormat, String> {
|
||||
|
||||
}
|
|
@ -6,13 +6,13 @@ import org.springframework.data.domain.Page;
|
|||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiRecord;
|
||||
|
||||
public interface OaiRecordRepository extends JpaRepository<OaiRecord, String> {
|
||||
public interface OaiRecordRepository extends JpaRepository<ExportedOaiRecord, String> {
|
||||
|
||||
Page<OaiRecord> findByOaiSetAndDateBetween(String oaiSet, LocalDate from, LocalDate until, Pageable page);
|
||||
Page<ExportedOaiRecord> findByOaiSetAndDateBetween(String oaiSet, LocalDate from, LocalDate until, Pageable page);
|
||||
|
||||
Page<OaiRecord> findByDateBetween(LocalDate from, LocalDate until, Pageable page);
|
||||
Page<ExportedOaiRecord> findByDateBetween(LocalDate from, LocalDate until, Pageable page);
|
||||
|
||||
void deleteByOaiSet(String oaiSet);
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ package eu.dnetlib.services.oai.repository;
|
|||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
|
||||
public interface OaiSetRepository extends JpaRepository<OaiSet, String> {
|
||||
public interface OaiSetRepository extends JpaRepository<ExportedOaiSet, String> {
|
||||
|
||||
}
|
||||
|
|
|
@ -14,14 +14,14 @@ import org.springframework.data.domain.Sort;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import eu.dnetlib.common.mapping.xslt.XsltUtils;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiRecord;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.errors.DnetRuntimeException;
|
||||
import eu.dnetlib.services.oai.domain.OaiPage;
|
||||
import eu.dnetlib.services.oai.repository.ExportedOaiMetadataFormatRepository;
|
||||
import eu.dnetlib.services.oai.repository.OaiConfigurationRepository;
|
||||
import eu.dnetlib.services.oai.repository.OaiMetadataFormatRepository;
|
||||
import eu.dnetlib.services.oai.repository.OaiRecordRepository;
|
||||
import eu.dnetlib.services.oai.repository.OaiSetRepository;
|
||||
import eu.dnetlib.services.oai.utils.OaiPageRequest;
|
||||
|
@ -37,7 +37,7 @@ public class OaiService {
|
|||
private OaiSetRepository oaiSetRepository;
|
||||
|
||||
@Autowired
|
||||
private OaiMetadataFormatRepository oaiMetadataFormatRepository;
|
||||
private ExportedOaiMetadataFormatRepository oaiMetadataFormatRepository;
|
||||
|
||||
@Autowired
|
||||
private OaiRecordRepository oaiRecordRepository;
|
||||
|
@ -48,65 +48,65 @@ public class OaiService {
|
|||
|
||||
@Cacheable(value = "oaiConfiguration", key = "#root.methodName")
|
||||
public OaiConfiguration oaiConfiguration() {
|
||||
return oaiConfigurationRepository.findById(CONFIGURATION_ID).orElseThrow(() -> new DnetRuntimeException("Missing OAI Configuration"));
|
||||
return this.oaiConfigurationRepository.findById(CONFIGURATION_ID).orElseThrow(() -> new DnetRuntimeException("Missing OAI Configuration"));
|
||||
}
|
||||
|
||||
@CacheEvict(value = "oaiConfiguration", allEntries = true)
|
||||
public OaiConfiguration oaiConfiguration(final OaiConfiguration conf) {
|
||||
conf.setId(CONFIGURATION_ID);
|
||||
return oaiConfigurationRepository.save(conf);
|
||||
return this.oaiConfigurationRepository.save(conf);
|
||||
}
|
||||
|
||||
@Cacheable(value = "oaiSets", key = "#root.methodName")
|
||||
public List<OaiSet> listSets() {
|
||||
return oaiSetRepository.findAll();
|
||||
public List<ExportedOaiSet> listSets() {
|
||||
return this.oaiSetRepository.findAll();
|
||||
}
|
||||
|
||||
@CacheEvict(value = "oaiSets", allEntries = true)
|
||||
public void addOrUpdateSet(final OaiSet set) {
|
||||
oaiSetRepository.save(set);
|
||||
public void addOrUpdateSet(final ExportedOaiSet set) {
|
||||
this.oaiSetRepository.save(set);
|
||||
}
|
||||
|
||||
@CacheEvict(value = "oaiSets", allEntries = true)
|
||||
public void deleteSet(final String setSpec) {
|
||||
oaiRecordRepository.deleteByOaiSet(setSpec);
|
||||
oaiSetRepository.deleteById(setSpec);
|
||||
this.oaiRecordRepository.deleteByOaiSet(setSpec);
|
||||
this.oaiSetRepository.deleteById(setSpec);
|
||||
}
|
||||
|
||||
public List<OaiMetadataFormat> listMetadataFormats(final String id) {
|
||||
return oaiRecordRepository.existsById(id) ? oaiMetadataFormatRepository.findAll() : new ArrayList<>();
|
||||
public List<ExportedOaiMetadataFormat> listMetadataFormats(final String id) {
|
||||
return this.oaiRecordRepository.existsById(id) ? this.oaiMetadataFormatRepository.findAll() : new ArrayList<>();
|
||||
}
|
||||
|
||||
@Cacheable(value = "oaiMetadataFormats", key = "#root.methodName")
|
||||
public List<OaiMetadataFormat> listMetadataFormats() {
|
||||
return oaiMetadataFormatRepository.findAll();
|
||||
public List<ExportedOaiMetadataFormat> listMetadataFormats() {
|
||||
return this.oaiMetadataFormatRepository.findAll();
|
||||
}
|
||||
|
||||
@CacheEvict(value = "oaiMetadataFormats", allEntries = true)
|
||||
public void addOrUpdateMetadataFormat(final OaiMetadataFormat format) {
|
||||
public void addOrUpdateMetadataFormat(final ExportedOaiMetadataFormat format) {
|
||||
// TODO (LOW PRIORITY) : probably other controls are necessary
|
||||
oaiMetadataFormatRepository.save(format);
|
||||
this.oaiMetadataFormatRepository.save(format);
|
||||
}
|
||||
|
||||
@CacheEvict(value = "oaiMetadataFormats", allEntries = true)
|
||||
public void deleteMetadataFormat(final String metadataPrefix) {
|
||||
// TODO (LOW PRIORITY) : probably other controls are necessary
|
||||
oaiMetadataFormatRepository.deleteById(metadataPrefix);
|
||||
this.oaiMetadataFormatRepository.deleteById(metadataPrefix);
|
||||
}
|
||||
|
||||
public boolean verifySet(final String setSpec) {
|
||||
// a blank setSpec is correct (it is equivalent to all sets)
|
||||
return StringUtils.isBlank(setSpec) || oaiSetRepository.existsById(setSpec);
|
||||
return StringUtils.isBlank(setSpec) || this.oaiSetRepository.existsById(setSpec);
|
||||
}
|
||||
|
||||
public OaiRecord getRecord(final String id, final String metadataPrefix) {
|
||||
final OaiRecord record = oaiRecordRepository.findById(id).orElseThrow(() -> new DnetRuntimeException("Missing ID: " + id));
|
||||
public ExportedOaiRecord getRecord(final String id, final String metadataPrefix) {
|
||||
final ExportedOaiRecord record = this.oaiRecordRepository.findById(id).orElseThrow(() -> new DnetRuntimeException("Missing ID: " + id));
|
||||
|
||||
if (!metadataPrefix.equalsIgnoreCase(oaiConfiguration().getNativeFormat())) {
|
||||
final String xslt = listMetadataFormats()
|
||||
.stream()
|
||||
.filter(f -> f.getMetadataPrefix().equalsIgnoreCase(metadataPrefix))
|
||||
.map(OaiMetadataFormat::getXslt)
|
||||
.map(ExportedOaiMetadataFormat::getXslt)
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new DnetRuntimeException("Invalid metadata format: " + metadataPrefix));
|
||||
|
||||
|
@ -136,8 +136,9 @@ public class OaiService {
|
|||
final LocalDate from = req.getFrom();
|
||||
final LocalDate until = req.getUntil();
|
||||
|
||||
final Page<OaiRecord> page = StringUtils.isBlank(req.getSet()) ? oaiRecordRepository.findByOaiSetAndDateBetween(req.getSet(), from, until, pageRequest)
|
||||
: oaiRecordRepository.findByDateBetween(from, until, pageRequest);
|
||||
final Page<ExportedOaiRecord> page =
|
||||
StringUtils.isBlank(req.getSet()) ? this.oaiRecordRepository.findByOaiSetAndDateBetween(req.getSet(), from, until, pageRequest)
|
||||
: this.oaiRecordRepository.findByDateBetween(from, until, pageRequest);
|
||||
|
||||
final OaiPage res = new OaiPage();
|
||||
res.setCursor(req.getPageSize() * req.getPageNumber());
|
||||
|
|
|
@ -16,7 +16,7 @@ import eu.dnetlib.domain.mdstore.MDStoreVersion;
|
|||
import eu.dnetlib.domain.mdstore.MDStoreWithInfo;
|
||||
import eu.dnetlib.domain.mdstore.records.MetadataRecord;
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
import eu.dnetlib.errors.DnetException;
|
||||
import eu.dnetlib.wfs.annotations.WfInputParam;
|
||||
import eu.dnetlib.wfs.annotations.WfNode;
|
||||
|
@ -64,13 +64,13 @@ public class MdExportOaiJobNode extends ProcessNode {
|
|||
if (mdstore.getFormat().equals(conf.getNativeFormat())) {
|
||||
final boolean isSetRegistered = oaiManager.listSets()
|
||||
.stream()
|
||||
.map(OaiSet::getSetSpec)
|
||||
.map(ExportedOaiSet::getSetSpec)
|
||||
.filter(s -> s.equals(this.oaiSetSpec))
|
||||
.findFirst()
|
||||
.isPresent();
|
||||
|
||||
if (!isSetRegistered) {
|
||||
final OaiSet oaiSet = new OaiSet();
|
||||
final ExportedOaiSet oaiSet = new ExportedOaiSet();
|
||||
oaiSet.setSetSpec(this.oaiSetSpec);
|
||||
oaiSet.setSetName(this.ds.getOfficialname());
|
||||
oaiSet.setDescription("Publications of " + this.ds.getOfficialname());
|
||||
|
|
|
@ -5,7 +5,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiConfiguration;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
import eu.dnetlib.domain.oai.ExportedOaiSet;
|
||||
|
||||
public class OaiManagerClient extends DnetServiceClient {
|
||||
|
||||
|
@ -13,12 +13,12 @@ public class OaiManagerClient extends DnetServiceClient {
|
|||
return httpGet("/api/oai/conf", OaiConfiguration.class, Map.of());
|
||||
}
|
||||
|
||||
public List<OaiSet> listSets() {
|
||||
return Arrays.asList(httpGet("/api/oai/sets", OaiSet[].class, Map.of()));
|
||||
public List<ExportedOaiSet> listSets() {
|
||||
return Arrays.asList(httpGet("/api/oai/sets", ExportedOaiSet[].class, Map.of()));
|
||||
}
|
||||
|
||||
public void createOaiSet(final OaiSet oaiSet) {
|
||||
httpPostObject("/api/oai/sets", oaiSet, OaiSet[].class, Map.of());
|
||||
public void createOaiSet(final ExportedOaiSet oaiSet) {
|
||||
httpPostObject("/api/oai/sets", oaiSet, ExportedOaiSet[].class, Map.of());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
package eu.dnetlib.domain.oai;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_md_formats")
|
||||
public class ExportedOaiMetadataFormat implements OaiMetadataFormat {
|
||||
|
||||
private static final long serialVersionUID = -4526570547812092275L;
|
||||
|
||||
@Id
|
||||
@Column(name = "prefix")
|
||||
private String metadataPrefix;
|
||||
|
||||
@Column(name = "schema")
|
||||
private String metadataSchema;
|
||||
|
||||
@Column(name = "namespace")
|
||||
private String metadataNamespace;
|
||||
|
||||
@Column(name = "xslt")
|
||||
private String xslt;
|
||||
|
||||
@Override
|
||||
public String getMetadataPrefix() {
|
||||
return this.metadataPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMetadataPrefix(final String metadataPrefix) {
|
||||
this.metadataPrefix = metadataPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMetadataSchema() {
|
||||
return this.metadataSchema;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMetadataSchema(final String metadataSchema) {
|
||||
this.metadataSchema = metadataSchema;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMetadataNamespace() {
|
||||
return this.metadataNamespace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMetadataNamespace(final String metadataNamespace) {
|
||||
this.metadataNamespace = metadataNamespace;
|
||||
}
|
||||
|
||||
public String getXslt() {
|
||||
return this.xslt;
|
||||
}
|
||||
|
||||
public void setXslt(final String xslt) {
|
||||
this.xslt = xslt;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package eu.dnetlib.domain.oai;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_records")
|
||||
public class ExportedOaiRecord implements OaiRecord {
|
||||
|
||||
private static final long serialVersionUID = 9178403183427337500L;
|
||||
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
private String id;
|
||||
|
||||
@Column(name = "body")
|
||||
private String body;
|
||||
|
||||
@Column(name = "date")
|
||||
private LocalDateTime date;
|
||||
|
||||
@Column(name = "oai_set")
|
||||
private String oaiSet;
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(final String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBody() {
|
||||
return this.body;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBody(final String body) {
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDateTime getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDate(final LocalDateTime date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getOaiSet() {
|
||||
return this.oaiSet;
|
||||
}
|
||||
|
||||
public void setOaiSet(final String oaiSet) {
|
||||
this.oaiSet = oaiSet;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package eu.dnetlib.domain.oai;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_sets")
|
||||
public class ExportedOaiSet implements OaiSet {
|
||||
|
||||
private static final long serialVersionUID = 7405955731269852254L;
|
||||
|
||||
@Id
|
||||
@Column(name = "set_spec")
|
||||
private String setSpec;
|
||||
|
||||
@Column(name = "set_name")
|
||||
private String setName;
|
||||
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@Column(name = "ds_id")
|
||||
private String dsId;
|
||||
|
||||
public String getSetSpec() {
|
||||
return this.setSpec;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSetSpec(final String setSpec) {
|
||||
this.setSpec = setSpec;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSetName() {
|
||||
return this.setName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSetName(final String setName) {
|
||||
this.setName = setName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDescription(final String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDsId() {
|
||||
return this.dsId;
|
||||
}
|
||||
|
||||
public void setDsId(final String dsId) {
|
||||
this.dsId = dsId;
|
||||
}
|
||||
|
||||
public static long getSerialversionuid() {
|
||||
return serialVersionUID;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package eu.dnetlib.domain.oai;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface OaiIdentifier extends Serializable {
|
||||
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package eu.dnetlib.domain.oai;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface OaiInfo extends Serializable {
|
||||
|
||||
}
|
|
@ -2,60 +2,18 @@ package eu.dnetlib.domain.oai;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
public interface OaiMetadataFormat extends Serializable {
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_md_formats")
|
||||
public class OaiMetadataFormat implements Serializable {
|
||||
String getMetadataPrefix();
|
||||
|
||||
private static final long serialVersionUID = -4526570547812092275L;
|
||||
void setMetadataPrefix(final String metadataPrefix);
|
||||
|
||||
@Id
|
||||
@Column(name = "prefix")
|
||||
private String metadataPrefix;
|
||||
String getMetadataSchema();
|
||||
|
||||
@Column(name = "schema")
|
||||
private String metadataSchema;
|
||||
void setMetadataSchema(final String metadataSchema);
|
||||
|
||||
@Column(name = "namespace")
|
||||
private String metadataNamespace;
|
||||
String getMetadataNamespace();
|
||||
|
||||
@Column(name = "xslt")
|
||||
private String xslt;
|
||||
|
||||
public String getMetadataPrefix() {
|
||||
return metadataPrefix;
|
||||
}
|
||||
|
||||
public void setMetadataPrefix(final String metadataPrefix) {
|
||||
this.metadataPrefix = metadataPrefix;
|
||||
}
|
||||
|
||||
public String getMetadataSchema() {
|
||||
return metadataSchema;
|
||||
}
|
||||
|
||||
public void setMetadataSchema(final String metadataSchema) {
|
||||
this.metadataSchema = metadataSchema;
|
||||
}
|
||||
|
||||
public String getMetadataNamespace() {
|
||||
return metadataNamespace;
|
||||
}
|
||||
|
||||
public void setMetadataNamespace(final String metadataNamespace) {
|
||||
this.metadataNamespace = metadataNamespace;
|
||||
}
|
||||
|
||||
public String getXslt() {
|
||||
return xslt;
|
||||
}
|
||||
|
||||
public void setXslt(final String xslt) {
|
||||
this.xslt = xslt;
|
||||
}
|
||||
void setMetadataNamespace(String metadataNamespace);
|
||||
|
||||
}
|
||||
|
|
|
@ -3,59 +3,17 @@ package eu.dnetlib.domain.oai;
|
|||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
public interface OaiRecord extends Serializable {
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_records")
|
||||
public class OaiRecord implements Serializable {
|
||||
String getId();
|
||||
|
||||
private static final long serialVersionUID = 9178403183427337500L;
|
||||
void setId(String id);
|
||||
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
private String id;
|
||||
String getBody();
|
||||
|
||||
@Column(name = "body")
|
||||
private String body;
|
||||
void setBody(String body);
|
||||
|
||||
@Column(name = "date")
|
||||
private LocalDateTime date;
|
||||
LocalDateTime getDate();
|
||||
|
||||
@Column(name = "oai_set")
|
||||
private String oaiSet;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setBody(final String body) {
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public LocalDateTime getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(final LocalDateTime date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getOaiSet() {
|
||||
return oaiSet;
|
||||
}
|
||||
|
||||
public void setOaiSet(final String oaiSet) {
|
||||
this.oaiSet = oaiSet;
|
||||
}
|
||||
void setDate(LocalDateTime date);
|
||||
}
|
||||
|
|
|
@ -2,64 +2,15 @@ package eu.dnetlib.domain.oai;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
public interface OaiSet extends Serializable {
|
||||
|
||||
@Entity
|
||||
@Table(name = "oai_sets")
|
||||
public class OaiSet implements Serializable {
|
||||
void setSetSpec(String setSpec);
|
||||
|
||||
private static final long serialVersionUID = 7405955731269852254L;
|
||||
String getSetName();
|
||||
|
||||
@Id
|
||||
@Column(name = "set_spec")
|
||||
private String setSpec;
|
||||
void setSetName(String setName);
|
||||
|
||||
@Column(name = "set_name")
|
||||
private String setName;
|
||||
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@Column(name = "ds_id")
|
||||
private String dsId;
|
||||
|
||||
public String getSetSpec() {
|
||||
return setSpec;
|
||||
}
|
||||
|
||||
public void setSetSpec(final String setSpec) {
|
||||
this.setSpec = setSpec;
|
||||
}
|
||||
|
||||
public String getSetName() {
|
||||
return setName;
|
||||
}
|
||||
|
||||
public void setSetName(final String setName) {
|
||||
this.setName = setName;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(final String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDsId() {
|
||||
return dsId;
|
||||
}
|
||||
|
||||
public void setDsId(final String dsId) {
|
||||
this.dsId = dsId;
|
||||
}
|
||||
|
||||
public static long getSerialversionuid() {
|
||||
return serialVersionUID;
|
||||
}
|
||||
String getDescription();
|
||||
|
||||
void setDescription(String description);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>eu.dnetlib.docker</groupId>
|
||||
<artifactId>libs</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>dnet-oai-common</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>dnet-common-mapping</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sf.saxon</groupId>
|
||||
<artifactId>Saxon-HE</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.sisyphsu</groupId>
|
||||
<artifactId>dateparser</artifactId>
|
||||
<version>1.0.11</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Tests -->
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-junit-jupiter</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,43 @@
|
|||
package eu.dnetlib.common.oai.domain;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import eu.dnetlib.domain.oai.OaiIdentifier;
|
||||
import eu.dnetlib.domain.oai.OaiInfo;
|
||||
import eu.dnetlib.domain.oai.OaiMetadataFormat;
|
||||
import eu.dnetlib.domain.oai.OaiRecord;
|
||||
import eu.dnetlib.domain.oai.OaiSet;
|
||||
|
||||
public class OaiClient {
|
||||
|
||||
public List<OaiSet> listSets(final String baseUrl) {
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<OaiMetadataFormat> listMetadataFormat(final String baseUrl) {
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<OaiRecord> listRecords(final String baseUrl) {
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<OaiIdentifier> listIdentifier(final String baseUrl) {
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public OaiInfo info(final String baseUrl) {
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package eu.dnetlib.wfs.collector.oai;
|
||||
package eu.dnetlib.common.oai.domain;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.net.URLEncoder;
|
||||
|
@ -21,7 +21,7 @@ import org.springframework.web.client.RestTemplate;
|
|||
import eu.dnetlib.errors.CollectorException;
|
||||
import eu.dnetlib.utils.XmlCleaner;
|
||||
|
||||
class OaiIterator implements Iterator<String> {
|
||||
public class OaiIterator implements Iterator<String> {
|
||||
|
||||
private static final DateTimeFormatter oaiDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
|
@ -21,6 +21,12 @@
|
|||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>dnet-oai-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>dnet-wf-common</artifactId>
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package eu.dnetlib.wfs.collector.oai;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import eu.dnetlib.common.oai.domain.OaiIterator;
|
||||
import eu.dnetlib.utils.DnetStreamSupport;
|
||||
import eu.dnetlib.wfs.annotations.CollectorPlugin;
|
||||
import eu.dnetlib.wfs.collector.DnetCollectorPlugin;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
<module>dnet-common-mapping</module>
|
||||
<module>dnet-mdstore-postgres</module>
|
||||
<module>dnet-index-solr</module>
|
||||
<module>dnet-oai-common</module>
|
||||
<module>dnet-wf-common</module>
|
||||
<module>dnet-wf-executor-common</module>
|
||||
</modules>
|
||||
|
|
Loading…
Reference in New Issue