From bf31c76c885669d1215491dc2acbd5e3a052f663 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 19 May 2023 16:36:13 +0200 Subject: [PATCH] 101623: Add ValueListBrowseDefinition model + super NonHierarchicalBrowse class --- .../browse/browse-definition-data.service.ts | 6 ++-- src/app/core/core.module.ts | 6 ++++ .../data/browse-response-parsing.service.ts | 10 ++++-- .../shared/flat-browse-definition.model.ts | 30 +++-------------- .../non-hierarchical-browse-definition.ts | 32 +++++++++++++++++++ .../value-list-browse-definition.model.ts | 26 +++++++++++++++ ...ue-list-browse-definition.resource-type.ts | 9 ++++++ 7 files changed, 88 insertions(+), 31 deletions(-) create mode 100644 src/app/core/shared/non-hierarchical-browse-definition.ts create mode 100644 src/app/core/shared/value-list-browse-definition.model.ts create mode 100644 src/app/core/shared/value-list-browse-definition.resource-type.ts diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 5380bb7ec4..a4c7bf1353 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -18,7 +18,7 @@ import { BrowseDefinitionRestRequest } from '../data/request.models'; import { BrowseDefinition } from '../shared/browse-definition.model'; -class BrowseDefinitionDataImpl extends FindAllDataImpl { +class BrowseDefinitionFindAllDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -57,7 +57,7 @@ class BrowseDefinitionDataImpl extends FindAllDataImpl { }) @dataService(BROWSE_DEFINITION) export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: BrowseDefinitionDataImpl; + private findAllData: BrowseDefinitionFindAllDataImpl; constructor( protected requestService: RequestService, @@ -67,7 +67,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - } else { + } else if (browseType === FLAT_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(FlatBrowseDefinition); + } else if (browseType === VALUE_LIST_BROWSE_DEFINITION.value) { + serializer = new this.serializerConstructor(ValueListBrowseDefinition); + } else { + throw new Error('An error occurred while retrieving the browse definitions.'); } return serializer.deserialize(obj); } else { - return super.deserialize(obj); + throw new Error('An error occurred while retrieving the browse definitions.'); } } } diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 9660a3bac9..f94fa75b91 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,13 @@ -import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; -import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { SortOption } from './sort-option.model'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition.model'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; @typedObject -@inheritSerialization(BrowseDefinition) -export class FlatBrowseDefinition extends BrowseDefinition { +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,29 +16,10 @@ export class FlatBrowseDefinition extends BrowseDefinition { @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - sortOptions: SortOption[]; - - @autoserializeAs('order') - defaultSortOrder: string; - - @autoserializeAs('metadata') - metadataKeys: string[]; - - @autoserialize - dataType: BrowseByDataType; - get self(): string { return this._links.self.href; } - @deserialize - _links: { - self: HALLink; - entries: HALLink; - items: HALLink; - }; - getRenderType(): string { return this.dataType; } diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts new file mode 100644 index 0000000000..a4f6df43d9 --- /dev/null +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -0,0 +1,32 @@ +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { SortOption } from './sort-option.model'; +import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; +import { HALLink } from './hal-link.model'; +import { BrowseDefinition } from './browse-definition.model'; + +/** + * Super class for NonHierarchicalBrowseDefinition models, + * e.g. FlatBrowseDefinition and ValueListBrowseDefinition + */ +@inheritSerialization(BrowseDefinition) +export abstract class NonHierarchicalBrowseDefinition extends BrowseDefinition { + + @autoserialize + sortOptions: SortOption[]; + + @autoserializeAs('order') + defaultSortOrder: string; + + @autoserializeAs('metadata') + metadataKeys: string[]; + + @autoserialize + dataType: BrowseByDataType; + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + items: HALLink; + }; +} diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts new file mode 100644 index 0000000000..a42a702940 --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -0,0 +1,26 @@ +import { inheritSerialization } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.resource-type'; +import { ResourceType } from './resource-type'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; + +@typedObject +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { + static type = VALUE_LIST_BROWSE_DEFINITION; + + /** + * The object type + */ + @excludeFromEquals + type: ResourceType = VALUE_LIST_BROWSE_DEFINITION; + + get self(): string { + return this._links.self.href; + } + + getRenderType(): string { + return this.dataType; + } +} diff --git a/src/app/core/shared/value-list-browse-definition.resource-type.ts b/src/app/core/shared/value-list-browse-definition.resource-type.ts new file mode 100644 index 0000000000..8904dc472f --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for ValueListBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const VALUE_LIST_BROWSE_DEFINITION = new ResourceType('valueList');