1
0

[CST-3088] Create abstract response parsing for entries

This commit is contained in:
Giuseppe Digilio
2020-06-29 22:15:02 +02:00
parent f71fd5737a
commit df26b85c50
3 changed files with 59 additions and 28 deletions

View File

@@ -1,40 +1,22 @@
import { Inject, Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { isNotEmpty } from '../../shared/empty.util';
import { ObjectCacheService } from '../cache/object-cache.service'; import { ObjectCacheService } from '../cache/object-cache.service';
import { ErrorResponse, GenericSuccessResponse, RestResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { BrowseEntry } from '../shared/browse-entry.model'; import { BrowseEntry } from '../shared/browse-entry.model';
import { BaseResponseParsingService } from './base-response-parsing.service'; import { EntriesResponseParsingService } from './entries-response-parsing.service';
import { ResponseParsingService } from './parsing.service'; import { GenericConstructor } from '../shared/generic-constructor';
import { RestRequest } from './request.models';
@Injectable() @Injectable()
export class BrowseEntriesResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class BrowseEntriesResponseParsingService extends EntriesResponseParsingService<BrowseEntry> {
protected toCache = false; protected toCache = false;
constructor( constructor(
protected objectCache: ObjectCacheService, protected objectCache: ObjectCacheService,
) { super(); ) {
super(objectCache);
} }
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { getSerializerModel(): GenericConstructor<BrowseEntry> {
if (isNotEmpty(data.payload)) { return BrowseEntry;
let browseEntries = [];
if (isNotEmpty(data.payload._embedded) && Array.isArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]])) {
const serializer = new DSpaceSerializer(BrowseEntry);
browseEntries = serializer.deserializeArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]]);
}
return new GenericSuccessResponse(browseEntries, data.statusCode, data.statusText, this.processPageInfo(data.payload));
} else {
return new ErrorResponse(
Object.assign(
new Error('Unexpected response from browse endpoint'),
{ statusCode: data.statusCode, statusText: data.statusText }
)
);
}
} }
} }

View File

@@ -0,0 +1,42 @@
import { isNotEmpty } from '../../shared/empty.util';
import { ObjectCacheService } from '../cache/object-cache.service';
import { ErrorResponse, GenericSuccessResponse, RestResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { BaseResponseParsingService } from './base-response-parsing.service';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
import { CacheableObject } from '../cache/object-cache.reducer';
import { GenericConstructor } from '../shared/generic-constructor';
export abstract class EntriesResponseParsingService<T extends CacheableObject> extends BaseResponseParsingService implements ResponseParsingService {
protected toCache = false;
constructor(
protected objectCache: ObjectCacheService,
) {
super();
}
abstract getSerializerModel(): GenericConstructor<T>;
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
if (isNotEmpty(data.payload)) {
let browseEntries = [];
if (isNotEmpty(data.payload._embedded) && Array.isArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]])) {
const serializer = new DSpaceSerializer(this.getSerializerModel());
browseEntries = serializer.deserializeArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]]);
}
return new GenericSuccessResponse(browseEntries, data.statusCode, data.statusText, this.processPageInfo(data.payload));
} else {
return new ErrorResponse(
Object.assign(
new Error('Unexpected response from browse endpoint'),
{ statusCode: data.statusCode, statusText: data.statusText }
)
);
}
}
}

View File

@@ -1,13 +1,15 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ObjectCacheService } from '../../cache/object-cache.service'; import { ObjectCacheService } from '../../cache/object-cache.service';
import { BrowseEntriesResponseParsingService } from '../../data/browse-entries-response-parsing.service'; import { VocabularyEntry } from './models/vocabulary-entry.model';
import { EntriesResponseParsingService } from '../../data/entries-response-parsing.service';
import { GenericConstructor } from '../../shared/generic-constructor';
/** /**
* A service responsible for parsing data for a vocabulary entries response * A service responsible for parsing data for a vocabulary entries response
*/ */
@Injectable() @Injectable()
export class VocabularyEntriesResponseParsingService extends BrowseEntriesResponseParsingService { export class VocabularyEntriesResponseParsingService extends EntriesResponseParsingService<VocabularyEntry> {
protected toCache = false; protected toCache = false;
@@ -17,4 +19,9 @@ export class VocabularyEntriesResponseParsingService extends BrowseEntriesRespon
super(objectCache); super(objectCache);
} }
getSerializerModel(): GenericConstructor<VocabularyEntry> {
return VocabularyEntry;
}
} }