-
+
diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 2141b06a77..4e029af8ca 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -19,7 +19,7 @@ import variables from '../styles/_exposed_variables.scss'; import { CSSVariableService } from './shared/sass-helper/sass-helper.service'; import { MenuService } from './shared/menu/menu.service'; 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 { HostWindowService } from './shared/host-window.service'; import { Theme } from '../config/theme.inferface'; @@ -38,7 +38,7 @@ export const LANG_COOKIE = 'language_cookie'; animations: [slideSidebarPadding] }) export class AppComponent implements OnInit, AfterViewInit { - isLoading = true; + isLoading$: BehaviorSubject = new BehaviorSubject(true); sidebarVisible: Observable; slideSidebarOver: Observable; collapsedSidebarWidth: Observable; @@ -131,12 +131,12 @@ export class AppComponent implements OnInit, AfterViewInit { delay(0) ).subscribe((event) => { if (event instanceof NavigationStart) { - this.isLoading = true; + this.isLoading$.next(true); } else if ( event instanceof NavigationEnd || event instanceof NavigationCancel ) { - this.isLoading = false; + this.isLoading$.next(false); } }); } diff --git a/src/app/core/cache/server-sync-buffer.effects.ts b/src/app/core/cache/server-sync-buffer.effects.ts index c70f3ad8e1..3a0e801f27 100644 --- a/src/app/core/cache/server-sync-buffer.effects.ts +++ b/src/app/core/cache/server-sync-buffer.effects.ts @@ -2,6 +2,7 @@ import { delay, exhaustMap, map, switchMap, take } from 'rxjs/operators'; import { Inject, Injectable } from '@angular/core'; import { Actions, Effect, ofType } from '@ngrx/effects'; import { coreSelector } from '../core.selectors'; +import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer'; import { AddToSSBAction, CommitSSBAction, @@ -18,7 +19,6 @@ import { RequestService } from '../data/request.service'; import { PutRequest } from '../data/request.models'; import { ObjectCacheService } from './object-cache.service'; import { ApplyPatchObjectCacheAction } from './object-cache.actions'; -import { NormalizedObjectSerializer } from '../dspace-rest-v2/normalized-object.serializer'; import { GenericConstructor } from '../shared/generic-constructor'; import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util'; import { Observable } from 'rxjs/internal/Observable'; @@ -100,7 +100,7 @@ export class ServerSyncBufferEffects { return patchObject.pipe( 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)); diff --git a/src/app/core/data/base-response-parsing.service.ts b/src/app/core/data/base-response-parsing.service.ts index ab81e2dd8d..c9bc58b5d7 100644 --- a/src/app/core/data/base-response-parsing.service.ts +++ b/src/app/core/data/base-response-parsing.service.ts @@ -1,6 +1,5 @@ import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util'; 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 { Serializer } from '../serializer'; import { PageInfo } from '../shared/page-info.model'; @@ -129,7 +128,7 @@ export abstract class BaseResponseParsingService { processPageInfo(payload: any): PageInfo { if (hasValue(payload.page)) { 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) { Object.assign(pageInfoObject, { currentPage: pageInfoObject.currentPage + 1 }); } diff --git a/src/app/core/data/collection-data.service.ts b/src/app/core/data/collection-data.service.ts index 6db87e59ef..5238b51f5a 100644 --- a/src/app/core/data/collection-data.service.ts +++ b/src/app/core/data/collection-data.service.ts @@ -17,8 +17,8 @@ import { SearchParam } from '../cache/models/search-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ContentSourceSuccessResponse, RestResponse } from '../cache/response.models'; 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 { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer'; import { Collection } from '../shared/collection.model'; import { COLLECTION } from '../shared/collection.resource-type'; import { ContentSource } from '../shared/content-source.model'; @@ -153,7 +153,7 @@ export class CollectionDataService extends ComColDataService { */ updateContentSource(collectionId: string, contentSource: ContentSource): Observable { 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( take(1), map((href: string) => { diff --git a/src/app/core/data/content-source-response-parsing.service.ts b/src/app/core/data/content-source-response-parsing.service.ts index 0d76ea1ef7..95e25db613 100644 --- a/src/app/core/data/content-source-response-parsing.service.ts +++ b/src/app/core/data/content-source-response-parsing.service.ts @@ -1,11 +1,11 @@ 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 { 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 { MetadataConfig } from '../shared/metadata-config.model'; +import { ResponseParsingService } from './parsing.service'; +import { RestRequest } from './request.models'; @Injectable() /** @@ -17,11 +17,11 @@ export class ContentSourceResponseParsingService implements ResponseParsingServi parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { const payload = data.payload; - const deserialized = new NormalizedObjectSerializer(ContentSource).deserialize(payload); + const deserialized = new DSpaceSerializer(ContentSource).deserialize(payload); let metadataConfigs = []; 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; diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index e8335a2bdc..489fbad371 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -27,7 +27,7 @@ import { CacheableObject } from '../cache/object-cache.reducer'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ErrorResponse, RestResponse } from '../cache/response.models'; 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 { HALEndpointService } from '../shared/hal-endpoint.service'; import { @@ -334,7 +334,7 @@ export abstract class DataService { ); const normalizedObject: NormalizedObject = this.dataBuildService.normalize(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( take(1), diff --git a/src/app/core/data/facet-config-response-parsing.service.ts b/src/app/core/data/facet-config-response-parsing.service.ts index 1cc5e86b3e..3fc14b6495 100644 --- a/src/app/core/data/facet-config-response-parsing.service.ts +++ b/src/app/core/data/facet-config-response-parsing.service.ts @@ -1,17 +1,14 @@ import { Inject, Injectable } from '@angular/core'; -import { - FacetConfigSuccessResponse, - RestResponse -} from '../cache/response.models'; +import { GLOBAL_CONFIG } from '../../../config'; +import { GlobalConfig } from '../../../config/global-config.interface'; +import { SearchFilterConfig } from '../../shared/search/search-filter-config.model'; +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 { 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() export class FacetConfigResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { @@ -24,7 +21,7 @@ export class FacetConfigResponseParsingService extends BaseResponseParsingServic parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { const config = data.payload._embedded.facets; - const serializer = new NormalizedObjectSerializer(SearchFilterConfig); + const serializer = new DSpaceSerializer(SearchFilterConfig); const facetConfig = serializer.deserializeArray(config); return new FacetConfigSuccessResponse(facetConfig, data.statusCode, data.statusText); } diff --git a/src/app/core/data/facet-value-map-response-parsing.service.ts b/src/app/core/data/facet-value-map-response-parsing.service.ts index 51e97d2092..8c8c12dff7 100644 --- a/src/app/core/data/facet-value-map-response-parsing.service.ts +++ b/src/app/core/data/facet-value-map-response-parsing.service.ts @@ -1,19 +1,19 @@ 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 { FacetValueMap, FacetValueMapSuccessResponse, 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'; -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() export class FacetValueMapResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { @@ -30,7 +30,7 @@ export class FacetValueMapResponseParsingService extends BaseResponseParsingServ const payload = data.payload; const facetMap: FacetValueMap = new FacetValueMap(); - const serializer = new NormalizedObjectSerializer(FacetValue); + const serializer = new DSpaceSerializer(FacetValue); payload._embedded.facets.map((facet) => { const values = facet._embedded.values.map((value) => {value.search = value._links.search.href; return value;}); const facetValues = serializer.deserializeArray(values); diff --git a/src/app/core/data/facet-value-response-parsing.service.ts b/src/app/core/data/facet-value-response-parsing.service.ts index ac83176acc..c9ff93a1ae 100644 --- a/src/app/core/data/facet-value-response-parsing.service.ts +++ b/src/app/core/data/facet-value-response-parsing.service.ts @@ -1,14 +1,14 @@ 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 { 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() export class FacetValueResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { @@ -21,7 +21,7 @@ export class FacetValueResponseParsingService extends BaseResponseParsingService parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { 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 facetValues = serializer.deserializeArray(payload._embedded.values); diff --git a/src/app/core/data/metadatafield-parsing.service.ts b/src/app/core/data/metadatafield-parsing.service.ts index bc5ea1e199..08f7892ac7 100644 --- a/src/app/core/data/metadatafield-parsing.service.ts +++ b/src/app/core/data/metadatafield-parsing.service.ts @@ -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 { 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 { 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 @@ -15,7 +15,7 @@ export class MetadatafieldParsingService implements ResponseParsingService { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { 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); } diff --git a/src/app/core/data/metadataschema-parsing.service.ts b/src/app/core/data/metadataschema-parsing.service.ts index 6d9867eb52..f4b90e5dcd 100644 --- a/src/app/core/data/metadataschema-parsing.service.ts +++ b/src/app/core/data/metadataschema-parsing.service.ts @@ -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 { 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 { ResponseParsingService } from './parsing.service'; +import { RestRequest } from './request.models'; @Injectable() export class MetadataschemaParsingService implements ResponseParsingService { @@ -12,7 +12,7 @@ export class MetadataschemaParsingService implements ResponseParsingService { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { 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); } diff --git a/src/app/core/data/paginated-list.ts b/src/app/core/data/paginated-list.ts index b9de67a34d..9f05ca7889 100644 --- a/src/app/core/data/paginated-list.ts +++ b/src/app/core/data/paginated-list.ts @@ -56,14 +56,14 @@ export class PaginatedList { } set first(first: string) { - this.pageInfo.first = first; + this.pageInfo._links.first = { href: first }; } get prev(): string { return this.pageInfo.prev; } set prev(prev: string) { - this.pageInfo.prev = prev; + this.pageInfo._links.prev = { href: prev }; } get next(): string { @@ -71,7 +71,7 @@ export class PaginatedList { } set next(next: string) { - this.pageInfo.next = next; + this.pageInfo._links.next = { href: next }; } get last(): string { @@ -79,7 +79,7 @@ export class PaginatedList { } set last(last: string) { - this.pageInfo.last = last; + this.pageInfo._links.last = { href: last }; } get self(): string { @@ -87,7 +87,7 @@ export class PaginatedList { } set self(self: string) { - this.pageInfo.self = self; + this.pageInfo._links.self = { href: self }; } protected getPageLength() { diff --git a/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts b/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts index 5391a2a003..1cbcf358e3 100644 --- a/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts +++ b/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts @@ -1,11 +1,11 @@ +import { Injectable } from '@angular/core'; 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 { 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 { ResponseParsingService } from './parsing.service'; -import { Injectable } from '@angular/core'; +import { RestRequest } from './request.models'; @Injectable() export class RegistryBitstreamformatsResponseParsingService implements ResponseParsingService { @@ -18,7 +18,7 @@ export class RegistryBitstreamformatsResponseParsingService implements ResponseP const bitstreamformats = payload._embedded.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)); } diff --git a/src/app/core/data/registry-metadatafields-response-parsing.service.ts b/src/app/core/data/registry-metadatafields-response-parsing.service.ts index 4b826c23f3..cf9484c4c4 100644 --- a/src/app/core/data/registry-metadatafields-response-parsing.service.ts +++ b/src/app/core/data/registry-metadatafields-response-parsing.service.ts @@ -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 { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model'; 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() export class RegistryMetadatafieldsResponseParsingService implements ResponseParsingService { @@ -30,7 +27,7 @@ export class RegistryMetadatafieldsResponseParsingService implements ResponsePar 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)); } diff --git a/src/app/core/data/registry-metadataschemas-response-parsing.service.ts b/src/app/core/data/registry-metadataschemas-response-parsing.service.ts index 9f60c6ec94..416ed19dc2 100644 --- a/src/app/core/data/registry-metadataschemas-response-parsing.service.ts +++ b/src/app/core/data/registry-metadataschemas-response-parsing.service.ts @@ -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 { 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() export class RegistryMetadataschemasResponseParsingService implements ResponseParsingService { @@ -22,7 +22,7 @@ export class RegistryMetadataschemasResponseParsingService implements ResponsePa } 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)); } diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts index 61b99e2b6d..76e6a188e2 100644 --- a/src/app/core/data/request.effects.ts +++ b/src/app/core/data/request.effects.ts @@ -1,12 +1,17 @@ -import { Observable, of as observableOf } from 'rxjs'; import { Inject, Injectable, Injector } from '@angular/core'; 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 { 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 { DSpaceRESTv2Service } from '../dspace-rest-v2/dspace-rest-v2.service'; +import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer'; import { RequestActionTypes, RequestCompleteAction, @@ -16,11 +21,6 @@ import { import { RequestError, RestRequest } from './request.models'; import { RequestEntry } from './request.reducer'; 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) => (source: Observable): Observable => @@ -45,7 +45,7 @@ export class RequestEffects { flatMap((request: RestRequest) => { let 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); } return this.restApi.request(request.method, request.href, body, request.options).pipe( diff --git a/src/app/core/data/search-response-parsing.service.ts b/src/app/core/data/search-response-parsing.service.ts index f7c20b1eac..5307a0bd94 100644 --- a/src/app/core/data/search-response-parsing.service.ts +++ b/src/app/core/data/search-response-parsing.service.ts @@ -1,13 +1,13 @@ 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 { 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 { 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 { hasValue } from '../../shared/empty.util'; -import { SearchQueryResponse } from '../../shared/search/search-query-response.model'; -import { MetadataMap, MetadataValue } from '../shared/metadata.models'; @Injectable() export class SearchResponseParsingService implements ResponseParsingService { @@ -61,7 +61,7 @@ export class SearchResponseParsingService implements ResponseParsingService { hitHighlights: hitHighlights[index], })); 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)); } } diff --git a/src/app/core/metadata/metadata-field.model.ts b/src/app/core/metadata/metadata-field.model.ts index bb4700e3b8..d4931a127d 100644 --- a/src/app/core/metadata/metadata-field.model.ts +++ b/src/app/core/metadata/metadata-field.model.ts @@ -1,4 +1,4 @@ -import { autoserialize } from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { isNotEmpty } from '../../shared/empty.util'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; 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 { METADATA_FIELD } from './metadata-field.resource-type'; import { MetadataSchema } from './metadata-schema.model'; -import { METADATA_SCHEMA } from './metadata-schema.resource-type'; /** * Class the represents a metadata field @@ -28,41 +27,44 @@ export class MetadataField extends ListableObject implements HALResource { /** * The identifier of this metadata field */ + @autoserialize id: number; - /** - * The self link of this metadata field - */ - self: string; - /** * The element of this metadata field */ + @autoserialize element: string; /** * The qualifier of this metadata field */ + @autoserialize qualifier: string; /** * The scope note of this metadata field */ + @autoserialize scopeNote: string; + /** + * The HALLinks for this MetadataField + */ + @deserialize + _links: { + self: HALLink, + schema: HALLink + }; + /** * The MetadataSchema for this MetadataField * Will be undefined unless the schema HALLink has been resolved. */ - @link(METADATA_SCHEMA) - // TODO the responseparsingservice assumes schemas are always embedded. This should be remotedata instead. + // TODO the responseparsingservice assumes schemas are always embedded. This should use remotedata, and be a link instead. + // @link(METADATA_SCHEMA) schema?: MetadataSchema; - _links: { - self: HALLink, - schema: HALLink - }; - /** * Method to print this metadata field as a string * @param separator The separator between the schema, element and qualifier in the string diff --git a/src/app/core/metadata/metadata-schema.model.ts b/src/app/core/metadata/metadata-schema.model.ts index 16fa820837..9adfcc2479 100644 --- a/src/app/core/metadata/metadata-schema.model.ts +++ b/src/app/core/metadata/metadata-schema.model.ts @@ -1,4 +1,4 @@ -import { autoserialize } from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { resourceType } from '../cache/builders/build-decorators'; import { GenericConstructor } from '../shared/generic-constructor'; @@ -18,6 +18,7 @@ export class MetadataSchema extends ListableObject implements HALResource { /** * The unique identifier for this metadata schema */ + @autoserialize id: number; /** @@ -30,13 +31,16 @@ export class MetadataSchema extends ListableObject implements HALResource { /** * A unique prefix that defines this schema */ + @autoserialize prefix: string; /** * The namespace of this metadata schema */ + @autoserialize namespace: string; + @deserialize _links: { self: HALLink, }; diff --git a/src/app/core/metadata/normalized-metadata-field.model.ts b/src/app/core/metadata/normalized-metadata-field.model.ts deleted file mode 100644 index 6c7d8601e9..0000000000 --- a/src/app/core/metadata/normalized-metadata-field.model.ts +++ /dev/null @@ -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 { - - /** - * 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; -} diff --git a/src/app/core/metadata/normalized-metadata-schema.model.ts b/src/app/core/metadata/normalized-metadata-schema.model.ts deleted file mode 100644 index dc4b012378..0000000000 --- a/src/app/core/metadata/normalized-metadata-schema.model.ts +++ /dev/null @@ -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 { - /** - * 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; - -} diff --git a/src/app/core/registry/registry.service.ts b/src/app/core/registry/registry.service.ts index 05495af7eb..7d38365c2e 100644 --- a/src/app/core/registry/registry.service.ts +++ b/src/app/core/registry/registry.service.ts @@ -2,6 +2,7 @@ import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; import { Injectable } from '@angular/core'; import { RemoteData } from '../data/remote-data'; import { PaginatedList } from '../data/paginated-list'; +import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer'; import { PageInfo } from '../shared/page-info.model'; import { CreateMetadataFieldRequest, @@ -48,8 +49,6 @@ import { MetadataRegistrySelectSchemaAction } from '../../+admin/admin-registries/metadata-registry/metadata-registry.actions'; 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 { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; @@ -400,7 +399,7 @@ export class RegistryService { distinctUntilChanged() ); - const serializedSchema = new NormalizedObjectSerializer(getMapsToType(MetadataSchema.type)).serialize(schema); + const serializedSchema = new DSpaceSerializer(getMapsToType(MetadataSchema.type)).serialize(schema); const request$ = endpoint$.pipe( take(1), diff --git a/src/app/core/shared/content-source.model.ts b/src/app/core/shared/content-source.model.ts index cd53c2d81e..9e93e9d529 100644 --- a/src/app/core/shared/content-source.model.ts +++ b/src/app/core/shared/content-source.model.ts @@ -1,4 +1,6 @@ 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'; /** @@ -14,7 +16,7 @@ export enum ContentSourceHarvestType { /** * 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 * 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[]; /** - * The REST link to itself + * The HALLinks for this ContentSource */ @deserialize - self: string; + _links: { + self: HALLink + } } diff --git a/src/app/core/shared/page-info.model.ts b/src/app/core/shared/page-info.model.ts index 273510da60..c077c30b4c 100644 --- a/src/app/core/shared/page-info.model.ts +++ b/src/app/core/shared/page-info.model.ts @@ -1,10 +1,12 @@ -import { autoserialize, autoserializeAs } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; 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 */ -export class PageInfo { +export class PageInfo implements HALResource { /** * The number of elements on a page @@ -30,20 +32,17 @@ export class PageInfo { @autoserializeAs(Number, 'number') currentPage: number; - @autoserialize - last: string; - - @autoserialize - next: string; - - @autoserialize - prev: string; - - @autoserialize - first: string; - - @autoserialize - self: string; + /** + * The HALLinks for this PageInfo + */ + @deserialize + _links: { + first: HALLink; + prev: HALLink; + next: HALLink; + last: HALLink; + self: HALLink; + }; constructor( options?: { @@ -60,4 +59,41 @@ export class PageInfo { 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; + } + } + } diff --git a/src/app/shared/search/normalized-search-result.model.ts b/src/app/shared/search/normalized-search-result.model.ts deleted file mode 100644 index 3904b4a494..0000000000 --- a/src/app/shared/search/normalized-search-result.model.ts +++ /dev/null @@ -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; -}