1
0

remove most uses of normalizedserializer

This commit is contained in:
Art Lowel
2020-02-13 14:58:19 +01:00
parent b9432e7553
commit ab0f2c89e6
28 changed files with 178 additions and 242 deletions

View File

@@ -17,4 +17,5 @@ import { listableObjectComponent } from '../../../../shared/object-collection/sh
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class PublicationComponent extends ItemComponent { export class PublicationComponent extends ItemComponent {
} }

View File

@@ -10,6 +10,7 @@ import { Relationship } from '../../../core/shared/item-relationships/relationsh
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
import { MetadatumRepresentation } from '../../../core/shared/metadata-representation/metadatum/metadatum-representation.model'; import { MetadatumRepresentation } from '../../../core/shared/metadata-representation/metadatum/metadatum-representation.model';
import { ItemMetadataRepresentation } from '../../../core/shared/metadata-representation/item/item-metadata-representation.model'; import { ItemMetadataRepresentation } from '../../../core/shared/metadata-representation/item/item-metadata-representation.model';
import { followLink } from '../../../shared/utils/follow-link-config.model';
import { AbstractIncrementalListComponent } from '../abstract-incremental-list/abstract-incremental-list.component'; import { AbstractIncrementalListComponent } from '../abstract-incremental-list/abstract-incremental-list.component';
@Component({ @Component({
@@ -81,7 +82,7 @@ export class MetadataRepresentationListComponent extends AbstractIncrementalList
.map((metadatum: any) => Object.assign(new MetadataValue(), metadatum)) .map((metadatum: any) => Object.assign(new MetadataValue(), metadatum))
.map((metadatum: MetadataValue) => { .map((metadatum: MetadataValue) => {
if (metadatum.isVirtual) { if (metadatum.isVirtual) {
return this.relationshipService.findById(metadatum.virtualValue).pipe( return this.relationshipService.findById(metadatum.virtualValue, followLink('leftItem'), followLink('rightItem')).pipe(
getSucceededRemoteData(), getSucceededRemoteData(),
switchMap((relRD: RemoteData<Relationship>) => switchMap((relRD: RemoteData<Relationship>) =>
observableCombineLatest(relRD.payload.leftItem, relRD.payload.rightItem).pipe( observableCombineLatest(relRD.payload.leftItem, relRD.payload.rightItem).pipe(

View File

@@ -10,7 +10,7 @@
[options]="config.notifications"> [options]="config.notifications">
</ds-notifications-board> </ds-notifications-board>
<main class="main-content"> <main class="main-content">
<div class="container" *ngIf="isLoading"> <div class="container" *ngIf="isLoading$ | async">
<ds-loading message="{{'loading.default' | translate}}"></ds-loading> <ds-loading message="{{'loading.default' | translate}}"></ds-loading>
</div> </div>
<router-outlet></router-outlet> <router-outlet></router-outlet>

View File

@@ -19,7 +19,7 @@ import variables from '../styles/_exposed_variables.scss';
import { CSSVariableService } from './shared/sass-helper/sass-helper.service'; import { CSSVariableService } from './shared/sass-helper/sass-helper.service';
import { MenuService } from './shared/menu/menu.service'; import { MenuService } from './shared/menu/menu.service';
import { MenuID } from './shared/menu/initial-menus-state'; import { MenuID } from './shared/menu/initial-menus-state';
import { combineLatest as combineLatestObservable, Observable, of } from 'rxjs'; import { BehaviorSubject, combineLatest as combineLatestObservable, Observable, of } from 'rxjs';
import { slideSidebarPadding } from './shared/animations/slide'; import { slideSidebarPadding } from './shared/animations/slide';
import { HostWindowService } from './shared/host-window.service'; import { HostWindowService } from './shared/host-window.service';
import { Theme } from '../config/theme.inferface'; import { Theme } from '../config/theme.inferface';
@@ -38,7 +38,7 @@ export const LANG_COOKIE = 'language_cookie';
animations: [slideSidebarPadding] animations: [slideSidebarPadding]
}) })
export class AppComponent implements OnInit, AfterViewInit { export class AppComponent implements OnInit, AfterViewInit {
isLoading = true; isLoading$: BehaviorSubject<boolean> = new BehaviorSubject(true);
sidebarVisible: Observable<boolean>; sidebarVisible: Observable<boolean>;
slideSidebarOver: Observable<boolean>; slideSidebarOver: Observable<boolean>;
collapsedSidebarWidth: Observable<string>; collapsedSidebarWidth: Observable<string>;
@@ -131,12 +131,12 @@ export class AppComponent implements OnInit, AfterViewInit {
delay(0) delay(0)
).subscribe((event) => { ).subscribe((event) => {
if (event instanceof NavigationStart) { if (event instanceof NavigationStart) {
this.isLoading = true; this.isLoading$.next(true);
} else if ( } else if (
event instanceof NavigationEnd || event instanceof NavigationEnd ||
event instanceof NavigationCancel event instanceof NavigationCancel
) { ) {
this.isLoading = false; this.isLoading$.next(false);
} }
}); });
} }

View File

@@ -2,6 +2,7 @@ import { delay, exhaustMap, map, switchMap, take } from 'rxjs/operators';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects'; import { Actions, Effect, ofType } from '@ngrx/effects';
import { coreSelector } from '../core.selectors'; import { coreSelector } from '../core.selectors';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { import {
AddToSSBAction, AddToSSBAction,
CommitSSBAction, CommitSSBAction,
@@ -18,7 +19,6 @@ import { RequestService } from '../data/request.service';
import { PutRequest } from '../data/request.models'; import { PutRequest } from '../data/request.models';
import { ObjectCacheService } from './object-cache.service'; import { ObjectCacheService } from './object-cache.service';
import { ApplyPatchObjectCacheAction } from './object-cache.actions'; import { ApplyPatchObjectCacheAction } from './object-cache.actions';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { GenericConstructor } from '../shared/generic-constructor'; import { GenericConstructor } from '../shared/generic-constructor';
import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util'; import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
import { Observable } from 'rxjs/internal/Observable'; import { Observable } from 'rxjs/internal/Observable';
@@ -100,7 +100,7 @@ export class ServerSyncBufferEffects {
return patchObject.pipe( return patchObject.pipe(
map((object) => { map((object) => {
const serializedObject = new NormalizedObjectSerializer(object.constructor as GenericConstructor<{}>).serialize(object); const serializedObject = new DSpaceSerializer(object.constructor as GenericConstructor<{}>).serialize(object);
this.requestService.configure(new PutRequest(this.requestService.generateRequestId(), href, serializedObject)); this.requestService.configure(new PutRequest(this.requestService.generateRequestId(), href, serializedObject));

View File

@@ -1,6 +1,5 @@
import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util'; import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer'; import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { CacheableObject } from '../cache/object-cache.reducer'; import { CacheableObject } from '../cache/object-cache.reducer';
import { Serializer } from '../serializer'; import { Serializer } from '../serializer';
import { PageInfo } from '../shared/page-info.model'; import { PageInfo } from '../shared/page-info.model';
@@ -129,7 +128,7 @@ export abstract class BaseResponseParsingService {
processPageInfo(payload: any): PageInfo { processPageInfo(payload: any): PageInfo {
if (hasValue(payload.page)) { if (hasValue(payload.page)) {
const pageObj = Object.assign({}, payload.page, { _links: payload._links }); const pageObj = Object.assign({}, payload.page, { _links: payload._links });
const pageInfoObject = new NormalizedObjectSerializer(PageInfo).deserialize(pageObj); const pageInfoObject = new DSpaceSerializer(PageInfo).deserialize(pageObj);
if (pageInfoObject.currentPage >= 0) { if (pageInfoObject.currentPage >= 0) {
Object.assign(pageInfoObject, { currentPage: pageInfoObject.currentPage + 1 }); Object.assign(pageInfoObject, { currentPage: pageInfoObject.currentPage + 1 });
} }

View File

@@ -17,8 +17,8 @@ import { SearchParam } from '../cache/models/search-param.model';
import { ObjectCacheService } from '../cache/object-cache.service'; import { ObjectCacheService } from '../cache/object-cache.service';
import { ContentSourceSuccessResponse, RestResponse } from '../cache/response.models'; import { ContentSourceSuccessResponse, RestResponse } from '../cache/response.models';
import { CoreState } from '../core.reducers'; import { CoreState } from '../core.reducers';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { Collection } from '../shared/collection.model'; import { Collection } from '../shared/collection.model';
import { COLLECTION } from '../shared/collection.resource-type'; import { COLLECTION } from '../shared/collection.resource-type';
import { ContentSource } from '../shared/content-source.model'; import { ContentSource } from '../shared/content-source.model';
@@ -153,7 +153,7 @@ export class CollectionDataService extends ComColDataService<Collection> {
*/ */
updateContentSource(collectionId: string, contentSource: ContentSource): Observable<ContentSource | INotification> { updateContentSource(collectionId: string, contentSource: ContentSource): Observable<ContentSource | INotification> {
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
const serializedContentSource = new NormalizedObjectSerializer(ContentSource).serialize(contentSource); const serializedContentSource = new DSpaceSerializer(ContentSource).serialize(contentSource);
const request$ = this.getHarvesterEndpoint(collectionId).pipe( const request$ = this.getHarvesterEndpoint(collectionId).pipe(
take(1), take(1),
map((href: string) => { map((href: string) => {

View File

@@ -1,11 +1,11 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { ContentSourceSuccessResponse, RestResponse } from '../cache/response.models'; import { ContentSourceSuccessResponse, RestResponse } from '../cache/response.models';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { ContentSource } from '../shared/content-source.model'; import { ContentSource } from '../shared/content-source.model';
import { MetadataConfig } from '../shared/metadata-config.model'; import { MetadataConfig } from '../shared/metadata-config.model';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
@Injectable() @Injectable()
/** /**
@@ -17,11 +17,11 @@ export class ContentSourceResponseParsingService implements ResponseParsingServi
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const payload = data.payload; const payload = data.payload;
const deserialized = new NormalizedObjectSerializer(ContentSource).deserialize(payload); const deserialized = new DSpaceSerializer(ContentSource).deserialize(payload);
let metadataConfigs = []; let metadataConfigs = [];
if (payload._embedded && payload._embedded.harvestermetadata && payload._embedded.harvestermetadata.configs) { if (payload._embedded && payload._embedded.harvestermetadata && payload._embedded.harvestermetadata.configs) {
metadataConfigs = new NormalizedObjectSerializer(MetadataConfig).serializeArray(payload._embedded.harvestermetadata.configs); metadataConfigs = new DSpaceSerializer(MetadataConfig).serializeArray(payload._embedded.harvestermetadata.configs);
} }
deserialized.metadataConfigs = metadataConfigs; deserialized.metadataConfigs = metadataConfigs;

View File

@@ -27,7 +27,7 @@ import { CacheableObject } from '../cache/object-cache.reducer';
import { ObjectCacheService } from '../cache/object-cache.service'; import { ObjectCacheService } from '../cache/object-cache.service';
import { ErrorResponse, RestResponse } from '../cache/response.models'; import { ErrorResponse, RestResponse } from '../cache/response.models';
import { CoreState } from '../core.reducers'; import { CoreState } from '../core.reducers';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer'; import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { DSpaceObject } from '../shared/dspace-object.model'; import { DSpaceObject } from '../shared/dspace-object.model';
import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HALEndpointService } from '../shared/hal-endpoint.service';
import { import {
@@ -334,7 +334,7 @@ export abstract class DataService<T extends CacheableObject> {
); );
const normalizedObject: NormalizedObject<T> = this.dataBuildService.normalize<T>(dso); const normalizedObject: NormalizedObject<T> = this.dataBuildService.normalize<T>(dso);
const serializedDso = new NormalizedObjectSerializer(getMapsToType((dso as any).type)).serialize(normalizedObject); const serializedDso = new DSpaceSerializer(getMapsToType((dso as any).type)).serialize(normalizedObject);
const request$ = endpoint$.pipe( const request$ = endpoint$.pipe(
take(1), take(1),

View File

@@ -1,17 +1,14 @@
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { import { GLOBAL_CONFIG } from '../../../config';
FacetConfigSuccessResponse, import { GlobalConfig } from '../../../config/global-config.interface';
RestResponse import { SearchFilterConfig } from '../../shared/search/search-filter-config.model';
} from '../cache/response.models'; import { ObjectCacheService } from '../cache/object-cache.service';
import { FacetConfigSuccessResponse, 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 { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models'; import { RestRequest } from './request.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { SearchFilterConfig } from '../../shared/search/search-filter-config.model';
import { BaseResponseParsingService } from './base-response-parsing.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { GlobalConfig } from '../../../config/global-config.interface';
import { GLOBAL_CONFIG } from '../../../config';
@Injectable() @Injectable()
export class FacetConfigResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class FacetConfigResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {
@@ -24,7 +21,7 @@ export class FacetConfigResponseParsingService extends BaseResponseParsingServic
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const config = data.payload._embedded.facets; const config = data.payload._embedded.facets;
const serializer = new NormalizedObjectSerializer(SearchFilterConfig); const serializer = new DSpaceSerializer(SearchFilterConfig);
const facetConfig = serializer.deserializeArray(config); const facetConfig = serializer.deserializeArray(config);
return new FacetConfigSuccessResponse(facetConfig, data.statusCode, data.statusText); return new FacetConfigSuccessResponse(facetConfig, data.statusCode, data.statusText);
} }

View File

@@ -1,19 +1,19 @@
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { GLOBAL_CONFIG } from '../../../config';
import { GlobalConfig } from '../../../config/global-config.interface';
import { FacetValue } from '../../shared/search/facet-value.model';
import { ObjectCacheService } from '../cache/object-cache.service';
import { import {
FacetValueMap, FacetValueMap,
FacetValueMapSuccessResponse, FacetValueMapSuccessResponse,
FacetValueSuccessResponse, FacetValueSuccessResponse,
RestResponse RestResponse
} from '../cache/response.models'; } 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 { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models'; import { RestRequest } from './request.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { FacetValue } from '../../shared/search/facet-value.model';
import { BaseResponseParsingService } from './base-response-parsing.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { GlobalConfig } from '../../../config/global-config.interface';
import { GLOBAL_CONFIG } from '../../../config';
@Injectable() @Injectable()
export class FacetValueMapResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class FacetValueMapResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {
@@ -30,7 +30,7 @@ export class FacetValueMapResponseParsingService extends BaseResponseParsingServ
const payload = data.payload; const payload = data.payload;
const facetMap: FacetValueMap = new FacetValueMap(); const facetMap: FacetValueMap = new FacetValueMap();
const serializer = new NormalizedObjectSerializer(FacetValue); const serializer = new DSpaceSerializer(FacetValue);
payload._embedded.facets.map((facet) => { payload._embedded.facets.map((facet) => {
const values = facet._embedded.values.map((value) => {value.search = value._links.search.href; return value;}); const values = facet._embedded.values.map((value) => {value.search = value._links.search.href; return value;});
const facetValues = serializer.deserializeArray(values); const facetValues = serializer.deserializeArray(values);

View File

@@ -1,14 +1,14 @@
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { FacetValueSuccessResponse, RestResponse } from '../cache/response.models';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { FacetValue } from '../../shared/search/facet-value.model';
import { BaseResponseParsingService } from './base-response-parsing.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { GLOBAL_CONFIG } from '../../../config'; import { GLOBAL_CONFIG } from '../../../config';
import { GlobalConfig } from '../../../config/global-config.interface'; import { GlobalConfig } from '../../../config/global-config.interface';
import { FacetValue } from '../../shared/search/facet-value.model';
import { ObjectCacheService } from '../cache/object-cache.service';
import { FacetValueSuccessResponse, 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';
@Injectable() @Injectable()
export class FacetValueResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class FacetValueResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {
@@ -21,7 +21,7 @@ export class FacetValueResponseParsingService extends BaseResponseParsingService
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const payload = data.payload; const payload = data.payload;
const serializer = new NormalizedObjectSerializer(FacetValue); const serializer = new DSpaceSerializer(FacetValue);
// const values = payload._embedded.values.map((value) => {value.search = value._links.search.href; return value;}); // const values = payload._embedded.values.map((value) => {value.search = value._links.search.href; return value;});
const facetValues = serializer.deserializeArray(payload._embedded.values); const facetValues = serializer.deserializeArray(payload._embedded.values);

View File

@@ -1,10 +1,10 @@
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RestRequest } from './request.models';
import { ResponseParsingService } from './parsing.service';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { MetadatafieldSuccessResponse, RestResponse } from '../cache/response.models'; import { MetadatafieldSuccessResponse, 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 { MetadataField } from '../metadata/metadata-field.model'; import { MetadataField } from '../metadata/metadata-field.model';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
/** /**
* A service responsible for parsing DSpaceRESTV2Response data related to a single MetadataField to a valid RestResponse * A service responsible for parsing DSpaceRESTV2Response data related to a single MetadataField to a valid RestResponse
@@ -15,7 +15,7 @@ export class MetadatafieldParsingService implements ResponseParsingService {
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const payload = data.payload; const payload = data.payload;
const deserialized = new NormalizedObjectSerializer(MetadataField).deserialize(payload); const deserialized = new DSpaceSerializer(MetadataField).deserialize(payload);
return new MetadatafieldSuccessResponse(deserialized, data.statusCode, data.statusText); return new MetadatafieldSuccessResponse(deserialized, data.statusCode, data.statusText);
} }

View File

@@ -1,10 +1,10 @@
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RestRequest } from './request.models';
import { ResponseParsingService } from './parsing.service';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { MetadataschemaSuccessResponse, RestResponse } from '../cache/response.models'; import { MetadataschemaSuccessResponse, 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 { MetadataSchema } from '../metadata/metadata-schema.model'; import { MetadataSchema } from '../metadata/metadata-schema.model';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
@Injectable() @Injectable()
export class MetadataschemaParsingService implements ResponseParsingService { export class MetadataschemaParsingService implements ResponseParsingService {
@@ -12,7 +12,7 @@ export class MetadataschemaParsingService implements ResponseParsingService {
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const payload = data.payload; const payload = data.payload;
const deserialized = new NormalizedObjectSerializer(MetadataSchema).deserialize(payload); const deserialized = new DSpaceSerializer(MetadataSchema).deserialize(payload);
return new MetadataschemaSuccessResponse(deserialized, data.statusCode, data.statusText); return new MetadataschemaSuccessResponse(deserialized, data.statusCode, data.statusText);
} }

View File

@@ -56,14 +56,14 @@ export class PaginatedList<T> {
} }
set first(first: string) { set first(first: string) {
this.pageInfo.first = first; this.pageInfo._links.first = { href: first };
} }
get prev(): string { get prev(): string {
return this.pageInfo.prev; return this.pageInfo.prev;
} }
set prev(prev: string) { set prev(prev: string) {
this.pageInfo.prev = prev; this.pageInfo._links.prev = { href: prev };
} }
get next(): string { get next(): string {
@@ -71,7 +71,7 @@ export class PaginatedList<T> {
} }
set next(next: string) { set next(next: string) {
this.pageInfo.next = next; this.pageInfo._links.next = { href: next };
} }
get last(): string { get last(): string {
@@ -79,7 +79,7 @@ export class PaginatedList<T> {
} }
set last(last: string) { set last(last: string) {
this.pageInfo.last = last; this.pageInfo._links.last = { href: last };
} }
get self(): string { get self(): string {
@@ -87,7 +87,7 @@ export class PaginatedList<T> {
} }
set self(self: string) { set self(self: string) {
this.pageInfo.self = self; this.pageInfo._links.self = { href: self };
} }
protected getPageLength() { protected getPageLength() {

View File

@@ -1,11 +1,11 @@
import { Injectable } from '@angular/core';
import { RegistryBitstreamformatsSuccessResponse, RestResponse } from '../cache/response.models'; import { RegistryBitstreamformatsSuccessResponse, RestResponse } from '../cache/response.models';
import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstreamformats-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RestRequest } from './request.models'; import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstreamformats-response.model';
import { DSOResponseParsingService } from './dso-response-parsing.service'; import { DSOResponseParsingService } from './dso-response-parsing.service';
import { ResponseParsingService } from './parsing.service'; import { ResponseParsingService } from './parsing.service';
import { Injectable } from '@angular/core'; import { RestRequest } from './request.models';
@Injectable() @Injectable()
export class RegistryBitstreamformatsResponseParsingService implements ResponseParsingService { export class RegistryBitstreamformatsResponseParsingService implements ResponseParsingService {
@@ -18,7 +18,7 @@ export class RegistryBitstreamformatsResponseParsingService implements ResponseP
const bitstreamformats = payload._embedded.bitstreamformats; const bitstreamformats = payload._embedded.bitstreamformats;
payload.bitstreamformats = bitstreamformats; payload.bitstreamformats = bitstreamformats;
const deserialized = new NormalizedObjectSerializer(RegistryBitstreamformatsResponse).deserialize(payload); const deserialized = new DSpaceSerializer(RegistryBitstreamformatsResponse).deserialize(payload);
return new RegistryBitstreamformatsSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload.page)); return new RegistryBitstreamformatsSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload.page));
} }

View File

@@ -1,15 +1,12 @@
import {
RegistryMetadatafieldsSuccessResponse,
RestResponse
} from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RestRequest } from './request.models';
import { ResponseParsingService } from './parsing.service';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { DSOResponseParsingService } from './dso-response-parsing.service';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model';
import { hasValue } from '../../shared/empty.util'; import { hasValue } from '../../shared/empty.util';
import { RegistryMetadatafieldsSuccessResponse, 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 { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model';
import { DSOResponseParsingService } from './dso-response-parsing.service';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
@Injectable() @Injectable()
export class RegistryMetadatafieldsResponseParsingService implements ResponseParsingService { export class RegistryMetadatafieldsResponseParsingService implements ResponseParsingService {
@@ -30,7 +27,7 @@ export class RegistryMetadatafieldsResponseParsingService implements ResponsePar
payload.metadatafields = metadatafields; payload.metadatafields = metadatafields;
const deserialized = new NormalizedObjectSerializer(RegistryMetadatafieldsResponse).deserialize(payload); const deserialized = new DSpaceSerializer(RegistryMetadatafieldsResponse).deserialize(payload);
return new RegistryMetadatafieldsSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload)); return new RegistryMetadatafieldsSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload));
} }

View File

@@ -1,12 +1,12 @@
import { RegistryMetadataschemasSuccessResponse, RestResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RestRequest } from './request.models';
import { ResponseParsingService } from './parsing.service';
import { RegistryMetadataschemasResponse } from '../registry/registry-metadataschemas-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { DSOResponseParsingService } from './dso-response-parsing.service';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { hasValue } from '../../shared/empty.util'; import { hasValue } from '../../shared/empty.util';
import { RegistryMetadataschemasSuccessResponse, 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 { RegistryMetadataschemasResponse } from '../registry/registry-metadataschemas-response.model';
import { DSOResponseParsingService } from './dso-response-parsing.service';
import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models';
@Injectable() @Injectable()
export class RegistryMetadataschemasResponseParsingService implements ResponseParsingService { export class RegistryMetadataschemasResponseParsingService implements ResponseParsingService {
@@ -22,7 +22,7 @@ export class RegistryMetadataschemasResponseParsingService implements ResponsePa
} }
payload.metadataschemas = metadataschemas; payload.metadataschemas = metadataschemas;
const deserialized = new NormalizedObjectSerializer(RegistryMetadataschemasResponse).deserialize(payload); const deserialized = new DSpaceSerializer(RegistryMetadataschemasResponse).deserialize(payload);
return new RegistryMetadataschemasSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload)); return new RegistryMetadataschemasSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(data.payload));
} }

View File

@@ -1,12 +1,17 @@
import { Observable, of as observableOf } from 'rxjs';
import { Inject, Injectable, Injector } from '@angular/core'; import { Inject, Injectable, Injector } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects'; import { Actions, Effect, ofType } from '@ngrx/effects';
import { Observable, of as observableOf } from 'rxjs';
import { catchError, filter, flatMap, map, take } from 'rxjs/operators';
import { GLOBAL_CONFIG, GlobalConfig } from '../../../config'; import { GLOBAL_CONFIG, GlobalConfig } from '../../../config';
import { hasValue, isNotEmpty } from '../../shared/empty.util'; import { hasValue, isNotEmpty } from '../../shared/empty.util';
import { StoreActionTypes } from '../../store.actions';
import { getMapsToType } from '../cache/builders/build-decorators';
import { ErrorResponse, RestResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { DSpaceRESTv2Service } from '../dspace-rest-v2/dspace-rest-v2.service'; import { DSpaceRESTv2Service } from '../dspace-rest-v2/dspace-rest-v2.service';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { import {
RequestActionTypes, RequestActionTypes,
RequestCompleteAction, RequestCompleteAction,
@@ -16,11 +21,6 @@ import {
import { RequestError, RestRequest } from './request.models'; import { RequestError, RestRequest } from './request.models';
import { RequestEntry } from './request.reducer'; import { RequestEntry } from './request.reducer';
import { RequestService } from './request.service'; import { RequestService } from './request.service';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { catchError, filter, flatMap, map, take, tap } from 'rxjs/operators';
import { ErrorResponse, RestResponse } from '../cache/response.models';
import { StoreActionTypes } from '../../store.actions';
import { getMapsToType } from '../cache/builders/build-decorators';
export const addToResponseCacheAndCompleteAction = (request: RestRequest, envConfig: GlobalConfig) => export const addToResponseCacheAndCompleteAction = (request: RestRequest, envConfig: GlobalConfig) =>
(source: Observable<RestResponse>): Observable<RequestCompleteAction> => (source: Observable<RestResponse>): Observable<RequestCompleteAction> =>
@@ -45,7 +45,7 @@ export class RequestEffects {
flatMap((request: RestRequest) => { flatMap((request: RestRequest) => {
let body; let body;
if (isNotEmpty(request.body)) { if (isNotEmpty(request.body)) {
const serializer = new NormalizedObjectSerializer(getMapsToType(request.body.type)); const serializer = new DSpaceSerializer(getMapsToType(request.body.type));
body = serializer.serialize(request.body); body = serializer.serialize(request.body);
} }
return this.restApi.request(request.method, request.href, body, request.options).pipe( return this.restApi.request(request.method, request.href, body, request.options).pipe(

View File

@@ -1,13 +1,13 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { hasValue } from '../../shared/empty.util';
import { SearchQueryResponse } from '../../shared/search/search-query-response.model';
import { RestResponse, SearchSuccessResponse } from '../cache/response.models'; import { RestResponse, SearchSuccessResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { MetadataMap, MetadataValue } from '../shared/metadata.models';
import { DSOResponseParsingService } from './dso-response-parsing.service'; import { DSOResponseParsingService } from './dso-response-parsing.service';
import { ResponseParsingService } from './parsing.service'; import { ResponseParsingService } from './parsing.service';
import { RestRequest } from './request.models'; import { RestRequest } from './request.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { hasValue } from '../../shared/empty.util';
import { SearchQueryResponse } from '../../shared/search/search-query-response.model';
import { MetadataMap, MetadataValue } from '../shared/metadata.models';
@Injectable() @Injectable()
export class SearchResponseParsingService implements ResponseParsingService { export class SearchResponseParsingService implements ResponseParsingService {
@@ -61,7 +61,7 @@ export class SearchResponseParsingService implements ResponseParsingService {
hitHighlights: hitHighlights[index], hitHighlights: hitHighlights[index],
})); }));
payload.objects = objects; payload.objects = objects;
const deserialized = new NormalizedObjectSerializer(SearchQueryResponse).deserialize(payload); const deserialized = new DSpaceSerializer(SearchQueryResponse).deserialize(payload);
return new SearchSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(payload)); return new SearchSuccessResponse(deserialized, data.statusCode, data.statusText, this.dsoParser.processPageInfo(payload));
} }
} }

View File

@@ -1,4 +1,4 @@
import { autoserialize } from 'cerialize'; import { autoserialize, deserialize } from 'cerialize';
import { isNotEmpty } from '../../shared/empty.util'; import { isNotEmpty } from '../../shared/empty.util';
import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
import { link, resourceType } from '../cache/builders/build-decorators'; import { link, resourceType } from '../cache/builders/build-decorators';
@@ -9,7 +9,6 @@ import { ResourceType } from '../shared/resource-type';
import { excludeFromEquals } from '../utilities/equals.decorators'; import { excludeFromEquals } from '../utilities/equals.decorators';
import { METADATA_FIELD } from './metadata-field.resource-type'; import { METADATA_FIELD } from './metadata-field.resource-type';
import { MetadataSchema } from './metadata-schema.model'; import { MetadataSchema } from './metadata-schema.model';
import { METADATA_SCHEMA } from './metadata-schema.resource-type';
/** /**
* Class the represents a metadata field * Class the represents a metadata field
@@ -28,41 +27,44 @@ export class MetadataField extends ListableObject implements HALResource {
/** /**
* The identifier of this metadata field * The identifier of this metadata field
*/ */
@autoserialize
id: number; id: number;
/**
* The self link of this metadata field
*/
self: string;
/** /**
* The element of this metadata field * The element of this metadata field
*/ */
@autoserialize
element: string; element: string;
/** /**
* The qualifier of this metadata field * The qualifier of this metadata field
*/ */
@autoserialize
qualifier: string; qualifier: string;
/** /**
* The scope note of this metadata field * The scope note of this metadata field
*/ */
@autoserialize
scopeNote: string; scopeNote: string;
/**
* The HALLinks for this MetadataField
*/
@deserialize
_links: {
self: HALLink,
schema: HALLink
};
/** /**
* The MetadataSchema for this MetadataField * The MetadataSchema for this MetadataField
* Will be undefined unless the schema HALLink has been resolved. * Will be undefined unless the schema HALLink has been resolved.
*/ */
@link(METADATA_SCHEMA) // TODO the responseparsingservice assumes schemas are always embedded. This should use remotedata, and be a link instead.
// TODO the responseparsingservice assumes schemas are always embedded. This should be remotedata instead. // @link(METADATA_SCHEMA)
schema?: MetadataSchema; schema?: MetadataSchema;
_links: {
self: HALLink,
schema: HALLink
};
/** /**
* Method to print this metadata field as a string * Method to print this metadata field as a string
* @param separator The separator between the schema, element and qualifier in the string * @param separator The separator between the schema, element and qualifier in the string

View File

@@ -1,4 +1,4 @@
import { autoserialize } from 'cerialize'; import { autoserialize, deserialize } from 'cerialize';
import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
import { resourceType } from '../cache/builders/build-decorators'; import { resourceType } from '../cache/builders/build-decorators';
import { GenericConstructor } from '../shared/generic-constructor'; import { GenericConstructor } from '../shared/generic-constructor';
@@ -18,6 +18,7 @@ export class MetadataSchema extends ListableObject implements HALResource {
/** /**
* The unique identifier for this metadata schema * The unique identifier for this metadata schema
*/ */
@autoserialize
id: number; id: number;
/** /**
@@ -30,13 +31,16 @@ export class MetadataSchema extends ListableObject implements HALResource {
/** /**
* A unique prefix that defines this schema * A unique prefix that defines this schema
*/ */
@autoserialize
prefix: string; prefix: string;
/** /**
* The namespace of this metadata schema * The namespace of this metadata schema
*/ */
@autoserialize
namespace: string; namespace: string;
@deserialize
_links: { _links: {
self: HALLink, self: HALLink,
}; };

View File

@@ -1,49 +0,0 @@
import { autoserialize, deserialize, inheritSerialization } from 'cerialize';
import { relationship } from '../cache/builders/build-decorators';
import { MetadataField } from './metadata-field.model';
import { NormalizedObject } from '../cache/models/normalized-object.model';
import { MetadataSchema } from './metadata-schema.model';
/**
* Class the represents a normalized metadata field
*/
@inheritSerialization(NormalizedObject)
export class NormalizedMetadataField extends NormalizedObject<MetadataField> {
/**
* The identifier of this normalized metadata field
*/
@autoserialize
id: number;
/**
* The self link of this normalized metadata field
*/
@autoserialize
self: string;
/**
* The element of this normalized metadata field
*/
@autoserialize
element: string;
/**
* The qualifier of this normalized metadata field
*/
@autoserialize
qualifier: string;
/**
* The scope note of this normalized metadata field
*/
@autoserialize
scopeNote: string;
/**
* The link to the metadata schema of this normalized metadata field
*/
@deserialize
@relationship(MetadataSchema)
schema: string;
}

View File

@@ -1,34 +0,0 @@
import { autoserialize, inheritSerialization } from 'cerialize';
import { NormalizedObject } from '../cache/models/normalized-object.model';
import { MetadataSchema } from './metadata-schema.model';
/**
* Normalized class for a DSpace MetadataSchema
*/
@inheritSerialization(NormalizedObject)
export class NormalizedMetadataSchema extends NormalizedObject<MetadataSchema> {
/**
* The unique identifier for this schema
*/
@autoserialize
id: number;
/**
* The REST link to itself
*/
@autoserialize
self: string;
/**
* A unique prefix that defines this schema
*/
@autoserialize
prefix: string;
/**
* The namespace for this schema
*/
@autoserialize
namespace: string;
}

View File

@@ -2,6 +2,7 @@ import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { RemoteData } from '../data/remote-data'; import { RemoteData } from '../data/remote-data';
import { PaginatedList } from '../data/paginated-list'; import { PaginatedList } from '../data/paginated-list';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { PageInfo } from '../shared/page-info.model'; import { PageInfo } from '../shared/page-info.model';
import { import {
CreateMetadataFieldRequest, CreateMetadataFieldRequest,
@@ -48,8 +49,6 @@ import {
MetadataRegistrySelectSchemaAction MetadataRegistrySelectSchemaAction
} from '../../+admin/admin-registries/metadata-registry/metadata-registry.actions'; } from '../../+admin/admin-registries/metadata-registry/metadata-registry.actions';
import { distinctUntilChanged, flatMap, map, take, tap } from 'rxjs/operators'; import { distinctUntilChanged, flatMap, map, take, tap } from 'rxjs/operators';
import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer';
import { NormalizedMetadataSchema } from '../metadata/normalized-metadata-schema.model';
import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsService } from '../../shared/notifications/notifications.service';
import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; import { NotificationOptions } from '../../shared/notifications/models/notification-options.model';
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
@@ -400,7 +399,7 @@ export class RegistryService {
distinctUntilChanged() distinctUntilChanged()
); );
const serializedSchema = new NormalizedObjectSerializer(getMapsToType(MetadataSchema.type)).serialize(schema); const serializedSchema = new DSpaceSerializer(getMapsToType(MetadataSchema.type)).serialize(schema);
const request$ = endpoint$.pipe( const request$ = endpoint$.pipe(
take(1), take(1),

View File

@@ -1,4 +1,6 @@
import { autoserialize, autoserializeAs, deserializeAs, deserialize } from 'cerialize'; import { autoserialize, autoserializeAs, deserializeAs, deserialize } from 'cerialize';
import { HALLink } from './hal-link.model';
import { HALResource } from './hal-resource.model';
import { MetadataConfig } from './metadata-config.model'; import { MetadataConfig } from './metadata-config.model';
/** /**
@@ -14,7 +16,7 @@ export enum ContentSourceHarvestType {
/** /**
* A model class that holds information about the Content Source of a Collection * A model class that holds information about the Content Source of a Collection
*/ */
export class ContentSource { export class ContentSource implements HALResource{
/** /**
* Unique identifier, this is necessary to store the ContentSource in FieldUpdates * Unique identifier, this is necessary to store the ContentSource in FieldUpdates
* Because the ContentSource coming from the REST API doesn't have a UUID, we're using the selflink * Because the ContentSource coming from the REST API doesn't have a UUID, we're using the selflink
@@ -53,8 +55,10 @@ export class ContentSource {
metadataConfigs: MetadataConfig[]; metadataConfigs: MetadataConfig[];
/** /**
* The REST link to itself * The HALLinks for this ContentSource
*/ */
@deserialize @deserialize
self: string; _links: {
self: HALLink
}
} }

View File

@@ -1,10 +1,12 @@
import { autoserialize, autoserializeAs } from 'cerialize'; import { autoserialize, autoserializeAs, deserialize } from 'cerialize';
import { hasValue } from '../../shared/empty.util'; import { hasValue } from '../../shared/empty.util';
import { HALLink } from './hal-link.model';
import { HALResource } from './hal-resource.model';
/** /**
* Represents the state of a paginated response * Represents the state of a paginated response
*/ */
export class PageInfo { export class PageInfo implements HALResource {
/** /**
* The number of elements on a page * The number of elements on a page
@@ -30,20 +32,17 @@ export class PageInfo {
@autoserializeAs(Number, 'number') @autoserializeAs(Number, 'number')
currentPage: number; currentPage: number;
@autoserialize /**
last: string; * The HALLinks for this PageInfo
*/
@autoserialize @deserialize
next: string; _links: {
first: HALLink;
@autoserialize prev: HALLink;
prev: string; next: HALLink;
last: HALLink;
@autoserialize self: HALLink;
first: string; };
@autoserialize
self: string;
constructor( constructor(
options?: { options?: {
@@ -60,4 +59,41 @@ export class PageInfo {
this.currentPage = options.currentPage; this.currentPage = options.currentPage;
} }
} }
get self() {
return this._links.self.href;
}
get last(): string {
if (hasValue(this._links.last)) {
return this._links.last.href;
} else {
return undefined;
}
}
get next(): string {
if (hasValue(this._links.next)) {
return this._links.next.href;
} else {
return undefined;
}
}
get prev(): string {
if (hasValue(this._links.prev)) {
return this._links.prev.href;
} else {
return undefined;
}
}
get first(): string {
if (hasValue(this._links.first)) {
return this._links.first.href;
} else {
return undefined;
}
}
} }

View File

@@ -1,21 +0,0 @@
import { autoserialize, inheritSerialization } from 'cerialize';
import { MetadataMap } from '../../core/shared/metadata.models';
import { NormalizedObject } from '../../core/cache/models/normalized-object.model';
/**
* Represents a normalized version of a search result object of a certain DSpaceObject
*/
@inheritSerialization(NormalizedObject)
export class NormalizedSearchResult {
/**
* The UUID of the DSpaceObject that was found
*/
@autoserialize
indexableObject: string;
/**
* The metadata that was used to find this item, hithighlighted
*/
@autoserialize
hitHighlights: MetadataMap;
}