This commit is contained in:
parent
f828ca4491
commit
cb51a4136f
167 changed files with 21485 additions and 21212 deletions
|
@ -1,27 +1,31 @@
|
|||
import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
|
||||
import { RequestContract } from '@ioc:Adonis/Core/Request';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||
import type { HttpContext } from '@adonisjs/core/http';
|
||||
// import { RequestContract } from '@ioc:Adonis/Core/Request';
|
||||
import { Request } from '@adonisjs/core/http';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js';
|
||||
import { create } from 'xmlbuilder2';
|
||||
import dayjs, { Dayjs } from 'dayjs';
|
||||
import utc from 'dayjs/plugin/utc';
|
||||
import timezone from 'dayjs/plugin/timezone';
|
||||
import utc from 'dayjs/plugin/utc.js';
|
||||
import timezone from 'dayjs/plugin/timezone.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { StatusCodes } from 'http-status-codes';
|
||||
import { transform } from 'saxon-js';
|
||||
import SaxonJS from 'saxon-js';
|
||||
// import { Xslt, xmlParse } from 'xslt-processor'
|
||||
import { OaiErrorCodes, OaiModelError } from 'App/Exceptions/OaiErrorCodes';
|
||||
import { OaiModelException, BadOaiModelException } from 'App/Exceptions/OaiModelException';
|
||||
import Dataset from 'App/Models/Dataset';
|
||||
import Collection from 'App/Models/Collection';
|
||||
import { getDomain, preg_match } from 'App/Utils/utility-functions';
|
||||
import XmlModel from 'App/Library/XmlModel';
|
||||
import Logger from '@ioc:Adonis/Core/Logger';
|
||||
import ResumptionToken from 'App/Library/Oai/ResumptionToken';
|
||||
import { ModelQueryBuilderContract } from '@ioc:Adonis/Lucid/Orm';
|
||||
import Config from '@ioc:Adonis/Core/Config';
|
||||
import { inject } from '@adonisjs/fold';
|
||||
import { OaiErrorCodes, OaiModelError } from '#app/Exceptions/OaiErrorCodes';
|
||||
import { OaiModelException, BadOaiModelException } from '#app/Exceptions/OaiModelException';
|
||||
import Dataset from '#app/Models/Dataset';
|
||||
import Collection from '#app/Models/Collection';
|
||||
import { getDomain, preg_match } from '#app/Utils/utility-functions';
|
||||
import XmlModel from '#app/Library/XmlModel';
|
||||
import logger from '@adonisjs/core/services/logger';
|
||||
import ResumptionToken from '#app/Library/Oai/ResumptionToken';
|
||||
// import Config from '@ioc:Adonis/Core/Config';
|
||||
import config from '@adonisjs/core/services/config'
|
||||
// import { inject } from '@adonisjs/fold';
|
||||
import { inject } from '@adonisjs/core'
|
||||
// import { TokenWorkerContract } from "MyApp/Models/TokenWorker";
|
||||
import TokenWorkerContract from 'App/Library/Oai/TokenWorker';
|
||||
import TokenWorkerContract from '#library/Oai/TokenWorkerContract';
|
||||
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
||||
|
||||
|
||||
interface XslTParameter {
|
||||
[key: string]: any;
|
||||
|
@ -39,7 +43,7 @@ interface ListParameter {
|
|||
metadataPrefix: string;
|
||||
}
|
||||
|
||||
@inject(['App/Library/Oai/TokenWorkerContract'])
|
||||
@inject()
|
||||
export default class OaiController {
|
||||
private deliveringDocumentStates = ['published', 'deleted'];
|
||||
private sampleRegEx = /^[A-Za-zäüÄÜß0-9\-_.!~]+$/;
|
||||
|
@ -53,6 +57,7 @@ export default class OaiController {
|
|||
private xml: XMLBuilder;
|
||||
private proc;
|
||||
|
||||
|
||||
constructor(public tokenWorker: TokenWorkerContract) {
|
||||
// Load the XSLT file
|
||||
this.proc = readFileSync('public/assets2/datasetxml2oai.sef.json');
|
||||
|
@ -60,12 +65,12 @@ export default class OaiController {
|
|||
dayjs.extend(timezone);
|
||||
}
|
||||
|
||||
public async index({ response, request }: HttpContextContract): Promise<void> {
|
||||
public async index({ response, request }: HttpContext): Promise<void> {
|
||||
this.xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>');
|
||||
|
||||
// this.proc = new XSLTProcessor();
|
||||
// const stylesheet = readFileSync(__dirname + "/datasetxml2oai.sef.json");
|
||||
const xsltParameter = (this.xsltParameter = {});
|
||||
const xsltParameter: XslTParameter = (this.xsltParameter = {});
|
||||
|
||||
let oaiRequest: Dictionary = {};
|
||||
if (request.method() === 'POST') {
|
||||
|
@ -106,7 +111,7 @@ export default class OaiController {
|
|||
|
||||
let xmlOutput; // = xmlString;
|
||||
try {
|
||||
const result = await transform({
|
||||
const result = await SaxonJS.transform({
|
||||
// stylesheetFileName: `${config.TMP_BASE_DIR}/data-quality/rules/iati.sef.json`,
|
||||
stylesheetText: this.proc,
|
||||
destination: 'serialized',
|
||||
|
@ -130,7 +135,7 @@ export default class OaiController {
|
|||
response.status(StatusCodes.OK).send(xmlOutput);
|
||||
}
|
||||
|
||||
protected async handleRequest(oaiRequest: Dictionary, request: RequestContract) {
|
||||
protected async handleRequest(oaiRequest: Dictionary, request: Request) {
|
||||
// Setup stylesheet
|
||||
// $this->loadStyleSheet('datasetxml2oai-pmh.xslt');
|
||||
|
||||
|
@ -258,14 +263,14 @@ export default class OaiController {
|
|||
protected async handleListIdentifiers(oaiRequest: Dictionary) {
|
||||
!this.tokenWorker.isConnected && (await this.tokenWorker.connect());
|
||||
|
||||
const maxIdentifier: number = Config.get('oai.max.listidentifiers', 100);
|
||||
const maxIdentifier: number = config.get('oai.max.listidentifiers', 100);
|
||||
await this.handleLists(oaiRequest, maxIdentifier);
|
||||
}
|
||||
|
||||
protected async handleListRecords(oaiRequest) {
|
||||
protected async handleListRecords(oaiRequest: Dictionary) {
|
||||
!this.tokenWorker.isConnected && (await this.tokenWorker.connect());
|
||||
|
||||
const maxRecords: number = Config.get('oai.max.listrecords', 100);
|
||||
const maxRecords: number = config.get('oai.max.listrecords', 100);
|
||||
await this.handleLists(oaiRequest, maxRecords);
|
||||
}
|
||||
|
||||
|
@ -335,7 +340,7 @@ export default class OaiController {
|
|||
}
|
||||
}
|
||||
|
||||
private async handleResumptionToken(oaiRequest: Dictionary, maxRecords: number, numWrapper) {
|
||||
private async handleResumptionToken(oaiRequest: Dictionary, maxRecords: number, numWrapper: ListParameter) {
|
||||
const resParam = oaiRequest['resumptionToken']; //e.g. "158886496600000"
|
||||
const token = await this.tokenWorker.get(resParam);
|
||||
|
||||
|
@ -352,7 +357,7 @@ export default class OaiController {
|
|||
this.xsltParameter['oai_metadataPrefix'] = numWrapper.metadataPrefix;
|
||||
}
|
||||
|
||||
private async handleNoResumptionToken(oaiRequest: Dictionary, numWrapper) {
|
||||
private async handleNoResumptionToken(oaiRequest: Dictionary, numWrapper: ListParameter) {
|
||||
// no resumptionToken is given
|
||||
if ('metadataPrefix' in oaiRequest) {
|
||||
numWrapper.metadataPrefix = oaiRequest['metadataPrefix'];
|
||||
|
@ -622,7 +627,7 @@ export default class OaiController {
|
|||
const msg = `Invalid SetSpec (data-type='${dataset.type}').
|
||||
Allowed characters are [${this.sampleRegEx}].`;
|
||||
// Log::error("OAI-PMH: $msg");
|
||||
Logger.error(`OAI-PMH: ${msg}`);
|
||||
logger.error(`OAI-PMH: ${msg}`);
|
||||
return;
|
||||
}
|
||||
const setSpec = 'data-type:' + dataset.type;
|
||||
|
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue