diff --git a/src/app/+item-page/simple/item-types/shared/item.component.spec.ts b/src/app/+item-page/simple/item-types/shared/item.component.spec.ts index 8e1025a091..2901d24b2c 100644 --- a/src/app/+item-page/simple/item-types/shared/item.component.spec.ts +++ b/src/app/+item-page/simple/item-types/shared/item.component.spec.ts @@ -342,7 +342,7 @@ describe('ItemComponent', () => { id: '123', leftItem: createSuccessfulRemoteDataObject$(mockItem), rightItem: createSuccessfulRemoteDataObject$(relatedItem), - relationshipType: createSuccessfulRemoteDataObject$new RelationshipType()) + relationshipType: createSuccessfulRemoteDataObject$(new RelationshipType()) }) ])); mockItem.metadata[metadataField] = [ diff --git a/src/app/+search-page/normalized-search-result.model.ts b/src/app/+search-page/normalized-search-result.model.ts index 32f3217b54..abb5f21250 100644 --- a/src/app/+search-page/normalized-search-result.model.ts +++ b/src/app/+search-page/normalized-search-result.model.ts @@ -1,10 +1,12 @@ -import { autoserialize, autoserializeAs } from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { MetadataMap } from '../core/shared/metadata.models'; import { ListableObject } from '../shared/object-collection/shared/listable-object.model'; +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 implements ListableObject { /** * The UUID of the DSpaceObject that was found diff --git a/src/app/core/auth/models/normalized-auth-status.model.ts b/src/app/core/auth/models/normalized-auth-status.model.ts index da0b32fcfb..3892bee408 100644 --- a/src/app/core/auth/models/normalized-auth-status.model.ts +++ b/src/app/core/auth/models/normalized-auth-status.model.ts @@ -1,7 +1,6 @@ import { AuthStatus } from './auth-status.model'; import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { mapsTo, relationship } from '../../cache/builders/build-decorators'; -import { ResourceType } from '../../shared/resource-type'; import { NormalizedObject } from '../../cache/models/normalized-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { EPerson } from '../../eperson/models/eperson.model'; diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index bf368e37ce..eb494d7bdb 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -1,8 +1,9 @@ import { Injectable } from '@angular/core'; import { Observable, of as observableOf } from 'rxjs'; -import { distinctUntilChanged, map, startWith, take } from 'rxjs/operators'; +import { distinctUntilChanged, map, startWith } from 'rxjs/operators'; import { - ensureArrayHasValue, hasValue, + ensureArrayHasValue, + hasValue, hasValueOperator, isEmpty, isNotEmpty, @@ -23,7 +24,9 @@ import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { configureRequest, - filterSuccessfulResponses, getBrowseDefinitionLinks, getFirstOccurrence, + filterSuccessfulResponses, + getBrowseDefinitionLinks, + getFirstOccurrence, getRemoteDataPayload, getRequestFromRequestHref } from '../shared/operators'; @@ -32,7 +35,6 @@ import { Item } from '../shared/item.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { GenericSuccessResponse } from '../cache/response.models'; -import { RequestEntry } from '../data/request.reducer'; /** * The service handling all browse requests diff --git a/src/app/core/cache/models/items/normalized-relationship-type.model.ts b/src/app/core/cache/models/items/normalized-relationship-type.model.ts index f0f75a03c2..800b27cd7e 100644 --- a/src/app/core/cache/models/items/normalized-relationship-type.model.ts +++ b/src/app/core/cache/models/items/normalized-relationship-type.model.ts @@ -5,7 +5,6 @@ import { mapsTo, relationship } from '../../builders/build-decorators'; import { NormalizedDSpaceObject } from '../normalized-dspace-object.model'; import { NormalizedObject } from '../normalized-object.model'; import { IDToUUIDSerializer } from '../../id-to-uuid-serializer'; -import { NormalizedItemType } from './normalized-item-type.model'; import { ItemType } from '../../../shared/item-relationships/item-type.model'; /** diff --git a/src/app/core/cache/models/items/normalized-relationship.model.ts b/src/app/core/cache/models/items/normalized-relationship.model.ts index d9322581c3..0930134b18 100644 --- a/src/app/core/cache/models/items/normalized-relationship.model.ts +++ b/src/app/core/cache/models/items/normalized-relationship.model.ts @@ -1,11 +1,10 @@ import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { Relationship } from '../../../shared/item-relationships/relationship.model'; -import { ResourceType } from '../../../shared/resource-type'; import { mapsTo, relationship } from '../../builders/build-decorators'; import { NormalizedObject } from '../normalized-object.model'; import { IDToUUIDSerializer } from '../../id-to-uuid-serializer'; -import { NormalizedRelationshipType } from './normalized-relationship-type.model'; import { RelationshipType } from '../../../shared/item-relationships/relationship-type.model'; +import { Item } from '../../../shared/item.model'; /** * Normalized model class for a DSpace Relationship @@ -24,14 +23,14 @@ export class NormalizedRelationship extends NormalizedObject { * The item to the left of this relationship */ @autoserialize - @relationship(ResourceType.Item, false) + @relationship(Item, false) leftItem: string; /** * The item to the right of this relationship */ @autoserialize - @relationship(ResourceType.Item, false) + @relationship(Item, false) rightItem: string; /** diff --git a/src/app/core/cache/models/normalized-license.model.ts b/src/app/core/cache/models/normalized-license.model.ts index c86d43b961..02bd1808c8 100644 --- a/src/app/core/cache/models/normalized-license.model.ts +++ b/src/app/core/cache/models/normalized-license.model.ts @@ -2,7 +2,6 @@ import { autoserialize, inheritSerialization } from 'cerialize'; import { mapsTo } from '../builders/build-decorators'; import { NormalizedDSpaceObject } from './normalized-dspace-object.model'; import { License } from '../../shared/license.model'; -import { ResourceType } from '../../shared/resource-type'; /** * Normalized model class for a Collection License diff --git a/src/app/core/cache/models/normalized-resource-policy.model.ts b/src/app/core/cache/models/normalized-resource-policy.model.ts index 9a9841fe97..cd25a0af05 100644 --- a/src/app/core/cache/models/normalized-resource-policy.model.ts +++ b/src/app/core/cache/models/normalized-resource-policy.model.ts @@ -5,7 +5,6 @@ import { mapsTo } from '../builders/build-decorators'; import { NormalizedObject } from './normalized-object.model'; import { IDToUUIDSerializer } from '../id-to-uuid-serializer'; import { ActionType } from './action-type.model'; -import { ResourceType } from '../../shared/resource-type'; /** * Normalized model class for a Resource Policy diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 8d0fcc2910..b9ba9f5576 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -100,7 +100,6 @@ import { NormalizedSubmissionFormsModel } from './config/models/normalized-confi import { NormalizedSubmissionSectionModel } from './config/models/normalized-config-submission-section.model'; import { NormalizedAuthStatus } from './auth/models/normalized-auth-status.model'; import { NormalizedAuthorityValue } from './integration/models/normalized-authority-value.model'; -import { BrowseEntry } from './shared/browse-entry.model'; import { RoleService } from './roles/role.service'; import { MyDSpaceGuard } from '../+my-dspace-page/my-dspace.guard'; import { MyDSpaceResponseParsingService } from './data/mydspace-response-parsing.service'; @@ -115,6 +114,8 @@ import { NormalizedRelationshipType } from './cache/models/items/normalized-rela import { NormalizedItemType } from './cache/models/items/normalized-item-type.model'; import { MetadatafieldParsingService } from './data/metadatafield-parsing.service'; import { NormalizedSubmissionUploadsModel } from './config/models/normalized-config-submission-uploads.model'; +import { NormalizedBrowseEntry } from './shared/normalized-browse-entry.model'; +import { BrowseDefinition } from './shared/browse-definition.model'; const IMPORTS = [ CommonModule, @@ -237,7 +238,8 @@ export const normalizedModels = NormalizedSubmissionUploadsModel, NormalizedAuthStatus, NormalizedAuthorityValue, - BrowseEntry, + NormalizedBrowseEntry, + BrowseDefinition, NormalizedClaimedTask, NormalizedTaskObject, NormalizedPoolTask, diff --git a/src/app/core/data/browse-entries-response-parsing.service.ts b/src/app/core/data/browse-entries-response-parsing.service.ts index 5e6a9acaca..a2f5f21312 100644 --- a/src/app/core/data/browse-entries-response-parsing.service.ts +++ b/src/app/core/data/browse-entries-response-parsing.service.ts @@ -3,17 +3,13 @@ import { GLOBAL_CONFIG } from '../../../config'; import { GlobalConfig } from '../../../config/global-config.interface'; import { isNotEmpty } from '../../shared/empty.util'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - ErrorResponse, - GenericSuccessResponse, - RestResponse -} from '../cache/response.models'; +import { ErrorResponse, GenericSuccessResponse, RestResponse } from '../cache/response.models'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer'; -import { BrowseEntry } from '../shared/browse-entry.model'; import { BaseResponseParsingService } from './base-response-parsing.service'; import { ResponseParsingService } from './parsing.service'; import { RestRequest } from './request.models'; +import { NormalizedBrowseEntry } from '../shared/normalized-browse-entry.model'; @Injectable() export class BrowseEntriesResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { @@ -30,7 +26,7 @@ export class BrowseEntriesResponseParsingService extends BaseResponseParsingServ if (isNotEmpty(data.payload)) { let browseEntries = []; if (isNotEmpty(data.payload._embedded) && Array.isArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]])) { - const serializer = new DSpaceRESTv2Serializer(BrowseEntry); + const serializer = new DSpaceRESTv2Serializer(NormalizedBrowseEntry); browseEntries = serializer.deserializeArray(data.payload._embedded[Object.keys(data.payload._embedded)[0]]); } return new GenericSuccessResponse(browseEntries, data.statusCode, data.statusText, this.processPageInfo(data.payload)); diff --git a/src/app/core/data/browse-response-parsing.service.spec.ts b/src/app/core/data/browse-response-parsing.service.spec.ts index c1b0566e0b..8d0fe7cd41 100644 --- a/src/app/core/data/browse-response-parsing.service.spec.ts +++ b/src/app/core/data/browse-response-parsing.service.spec.ts @@ -113,7 +113,6 @@ describe('BrowseResponseParsingService', () => { } ], defaultSortOrder: 'ASC', - type: 'browse', metadataKeys: [ 'dc.date.issued' ], @@ -139,7 +138,6 @@ describe('BrowseResponseParsingService', () => { } ], defaultSortOrder: 'ASC', - type: 'browse', metadataKeys: [ 'dc.contributor.*', 'dc.creator' @@ -173,6 +171,5 @@ describe('BrowseResponseParsingService', () => { const response = service.parse(validRequest, validResponse); expect((response as GenericSuccessResponse).payload).toEqual(definitions); }); - }); }); diff --git a/src/app/core/metadata/normalized-metadata-field.model.ts b/src/app/core/metadata/normalized-metadata-field.model.ts index a844f7a394..c6b2ee32f8 100644 --- a/src/app/core/metadata/normalized-metadata-field.model.ts +++ b/src/app/core/metadata/normalized-metadata-field.model.ts @@ -1,4 +1,4 @@ -import { autoserialize, deserialize } from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { mapsTo, relationship } from '../cache/builders/build-decorators'; import { MetadataField } from './metadata-field.model'; import { NormalizedObject } from '../cache/models/normalized-object.model'; @@ -9,6 +9,7 @@ import { MetadataSchema } from './metadata-schema.model'; * Class the represents a normalized metadata field */ @mapsTo(MetadataField) +@inheritSerialization(NormalizedObject) export class NormalizedMetadataField extends NormalizedObject implements ListableObject { /** diff --git a/src/app/core/metadata/normalized-metadata-schema.model.ts b/src/app/core/metadata/normalized-metadata-schema.model.ts index 8d15ef2431..47c7233d81 100644 --- a/src/app/core/metadata/normalized-metadata-schema.model.ts +++ b/src/app/core/metadata/normalized-metadata-schema.model.ts @@ -1,14 +1,14 @@ -import { autoserialize } from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { NormalizedObject } from '../cache/models/normalized-object.model'; import { mapsTo } from '../cache/builders/build-decorators'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; -import { ResourceType } from '../shared/resource-type'; import { MetadataSchema } from './metadata-schema.model'; /** * Normalized class for a DSpace MetadataSchema */ @mapsTo(MetadataSchema) +@inheritSerialization(NormalizedObject) export class NormalizedMetadataSchema extends NormalizedObject implements ListableObject { /** * The unique identifier for this schema diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/browse-definition.model.ts index fda6ebd3c1..9fafe7e321 100644 --- a/src/app/core/shared/browse-definition.model.ts +++ b/src/app/core/shared/browse-definition.model.ts @@ -4,6 +4,8 @@ import { ResourceType } from './resource-type'; import { TypedObject } from '../cache/object-cache.reducer'; export class BrowseDefinition implements TypedObject { + static type = new ResourceType('browse'); + @autoserialize id: string; diff --git a/src/app/core/shared/normalized-browse-entry.model.ts b/src/app/core/shared/normalized-browse-entry.model.ts index 88e3842ce9..949758cb67 100644 --- a/src/app/core/shared/normalized-browse-entry.model.ts +++ b/src/app/core/shared/normalized-browse-entry.model.ts @@ -1,5 +1,4 @@ -import { autoserialize, autoserializeAs } from 'cerialize'; -import { ResourceType } from './resource-type'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { BrowseEntry } from './browse-entry.model'; import { NormalizedObject } from '../cache/models/normalized-object.model'; import { mapsTo } from '../cache/builders/build-decorators'; @@ -9,6 +8,7 @@ import { mapsTo } from '../cache/builders/build-decorators'; * This class is not normalized because browse entries do not have self links */ @mapsTo(BrowseEntry) +@inheritSerialization(NormalizedObject) export class NormalizedBrowseEntry extends NormalizedObject { /** * The authority string of this browse entry diff --git a/src/app/submission/form/collection/submission-form-collection.component.spec.ts b/src/app/submission/form/collection/submission-form-collection.component.spec.ts index dff503ff5a..93f185af10 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.spec.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.spec.ts @@ -27,17 +27,16 @@ import { SubmissionJsonPatchOperationsService } from '../../../core/submission/s import { SubmissionJsonPatchOperationsServiceStub } from '../../../shared/testing/submission-json-patch-operations-service-stub'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; -import { Community } from '../../../core/shared/community.model'; import { PaginatedList } from '../../../core/data/paginated-list'; import { PageInfo } from '../../../core/shared/page-info.model'; import { Collection } from '../../../core/shared/collection.model'; import { - createSuccessfulRemoteDataObject$, createTestComponent } from '../../../shared/testing/utils'; import { cold } from 'jasmine-marbles'; import { SearchResult } from '../../../+search-page/search-result.model'; import { SearchService } from '../../../+search-page/search-service/search.service'; +import { RemoteData } from '../../../core/data/remote-data'; const mockCommunity1Collection1 = Object.assign(new Collection(), { name: 'Community 1-Collection 1',