created oai common module

This commit is contained in:
Michele Artini 2024-01-25 15:01:06 +01:00
parent 588cbab622
commit 0d96688176
25 changed files with 442 additions and 246 deletions

View File

@ -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) {

View File

@ -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();
}
}

View File

@ -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());

View File

@ -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;
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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);

View File

@ -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> {
}

View File

@ -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());

View File

@ -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());

View File

@ -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());
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,7 @@
package eu.dnetlib.domain.oai;
import java.io.Serializable;
public interface OaiIdentifier extends Serializable {
}

View File

@ -0,0 +1,7 @@
package eu.dnetlib.domain.oai;
import java.io.Serializable;
public interface OaiInfo extends Serializable {
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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");

View File

@ -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>

View File

@ -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;

View File

@ -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>