From 6438c65381e7b9729fa19656a4750acee09ac58e Mon Sep 17 00:00:00 2001 From: lotte <lotte_hofstede@hotmail.com> Date: Thu, 25 Apr 2019 17:13:58 +0200 Subject: [PATCH] continued refactoring resource type factories --- .../metadata-registry.actions.ts | 4 +- .../metadata-registry.component.ts | 2 +- .../metadata-registry.reducers.ts | 4 +- .../metadata-schema-form.component.ts | 2 +- .../metadata-field-form.component.ts | 4 +- .../metadata-schema.component.ts | 4 +- .../edit-in-place-field.component.ts | 2 +- src/app/core/auth/auth-object-factory.ts | 29 ------- .../auth/auth-response-parsing.service.ts | 6 +- .../cache/models/normalized-object-factory.ts | 85 ------------------- src/app/core/cache/response.models.ts | 5 +- .../config/models/config-object-factory.ts | 36 -------- ...zed-config-submission-definitions.model.ts | 2 +- ...ormalized-config-submission-forms.model.ts | 5 ++ ...malized-config-submission-section.model.ts | 5 ++ .../data/base-response-parsing.service.ts | 18 ++-- .../data/metadatafield-parsing.service.ts | 4 +- .../normalized-authority-value.model.ts | 3 + ...registry-metadataschemas-response.model.ts | 2 +- .../core/shared/resource-type.decorator.ts | 8 +- src/app/core/shared/resource-type.ts | 3 +- 21 files changed, 47 insertions(+), 186 deletions(-) delete mode 100644 src/app/core/auth/auth-object-factory.ts delete mode 100644 src/app/core/cache/models/normalized-object-factory.ts delete mode 100644 src/app/core/config/models/config-object-factory.ts diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.actions.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.actions.ts index 7358123462..96f9d345f5 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.actions.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.actions.ts @@ -1,7 +1,7 @@ import { Action } from '@ngrx/store'; import { type } from '../../../shared/ngrx/type'; -import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; -import { MetadataField } from '../../../core/metadata/metadatafield.model'; +import { MetadataSchema } from '../../../core/metadata/metadata-schema.model'; +import { MetadataField } from '../../../core/metadata/metadata-field.model'; /** * For each action type in an action group, make a simple diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts index 88c807e3bc..302974b5c2 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts @@ -3,7 +3,6 @@ import { RegistryService } from '../../../core/registry/registry.service'; import { Observable, combineLatest as observableCombineLatest } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; -import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { map, take } from 'rxjs/operators'; import { hasValue } from '../../../shared/empty.util'; @@ -12,6 +11,7 @@ import { zip } from 'rxjs/internal/observable/zip'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { Route, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; +import { MetadataSchema } from '../../../core/metadata/metadata-schema.model'; @Component({ selector: 'ds-metadata-registry', diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.reducers.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.reducers.ts index d20e3d5bcc..e805c8b8fc 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.reducers.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.reducers.ts @@ -1,4 +1,3 @@ -import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; import { MetadataRegistryAction, MetadataRegistryActionTypes, @@ -9,7 +8,8 @@ import { MetadataRegistrySelectFieldAction, MetadataRegistrySelectSchemaAction } from './metadata-registry.actions'; -import { MetadataField } from '../../../core/metadata/metadatafield.model'; +import { MetadataField } from '../../../core/metadata/metadata-field.model'; +import { MetadataSchema } from '../../../core/metadata/metadata-schema.model'; /** * The metadata registry state. diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 23a5765058..23e7309a00 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -9,9 +9,9 @@ import { FormGroup } from '@angular/forms'; import { RegistryService } from '../../../../core/registry/registry.service'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { take } from 'rxjs/operators'; -import { MetadataSchema } from '../../../../core/metadata/metadataschema.model'; import { TranslateService } from '@ngx-translate/core'; import { combineLatest } from 'rxjs/internal/observable/combineLatest'; +import { MetadataSchema } from '../../../../core/metadata/metadata-schema.model'; @Component({ selector: 'ds-metadata-schema-form', diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 2da2b45021..0811530343 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -1,5 +1,4 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { MetadataSchema } from '../../../../core/metadata/metadataschema.model'; import { DynamicFormControlModel, DynamicFormLayout, @@ -8,10 +7,11 @@ import { import { FormGroup } from '@angular/forms'; import { RegistryService } from '../../../../core/registry/registry.service'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; -import { MetadataField } from '../../../../core/metadata/metadatafield.model'; import { take } from 'rxjs/operators'; import { TranslateService } from '@ngx-translate/core'; import { combineLatest } from 'rxjs/internal/observable/combineLatest'; +import { MetadataSchema } from '../../../../core/metadata/metadata-schema.model'; +import { MetadataField } from '../../../../core/metadata/metadata-field.model'; @Component({ selector: 'ds-metadata-field-form', diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts index bdc7d5ed27..2974c1c087 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts @@ -4,8 +4,6 @@ import { ActivatedRoute, Router } from '@angular/router'; import { Observable, combineLatest as observableCombineLatest } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; -import { MetadataField } from '../../../core/metadata/metadatafield.model'; -import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { map, take } from 'rxjs/operators'; import { hasValue } from '../../../shared/empty.util'; @@ -13,6 +11,8 @@ import { RestResponse } from '../../../core/cache/response.models'; import { zip } from 'rxjs/internal/observable/zip'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; +import { MetadataField } from '../../../core/metadata/metadata-field.model'; +import { MetadataSchema } from '../../../core/metadata/metadata-schema.model'; @Component({ selector: 'ds-metadata-schema', diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts index 0b9bc62c55..1722cde8bc 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts +++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts @@ -4,13 +4,13 @@ import { RegistryService } from '../../../../core/registry/registry.service'; import { cloneDeep } from 'lodash'; import { BehaviorSubject, Observable, of as observableOf } from 'rxjs'; import { map, take } from 'rxjs/operators'; -import { MetadataField } from '../../../../core/metadata/metadatafield.model'; import { InputSuggestion } from '../../../../shared/input-suggestions/input-suggestions.model'; import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions'; import { FieldUpdate } from '../../../../core/data/object-updates/object-updates.reducer'; import { ObjectUpdatesService } from '../../../../core/data/object-updates/object-updates.service'; import { NgModel } from '@angular/forms'; import { MetadatumViewModel } from '../../../../core/shared/metadata.models'; +import { MetadataField } from '../../../../core/metadata/metadata-field.model'; @Component({ // tslint:disable-next-line:component-selector diff --git a/src/app/core/auth/auth-object-factory.ts b/src/app/core/auth/auth-object-factory.ts deleted file mode 100644 index 02458f4e3e..0000000000 --- a/src/app/core/auth/auth-object-factory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { AuthType } from './auth-type'; -import { GenericConstructor } from '../shared/generic-constructor'; -import { NormalizedAuthStatus } from './models/normalized-auth-status.model'; -import { NormalizedEPerson } from '../eperson/models/normalized-eperson.model'; -import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { CacheableObject } from '../cache/object-cache.reducer'; -import { NormalizedGroup } from '../eperson/models/normalized-group.model'; - -export class AuthObjectFactory { - public static getConstructor(type): GenericConstructor<NormalizedObject<CacheableObject>> { - switch (type) { - case AuthType.EPerson: { - return NormalizedEPerson - } - - case AuthType.Group: { - return NormalizedGroup - } - - case AuthType.Status: { - return NormalizedAuthStatus - } - - default: { - return undefined; - } - } - } -} diff --git a/src/app/core/auth/auth-response-parsing.service.ts b/src/app/core/auth/auth-response-parsing.service.ts index 1993f6d162..a5a160531c 100644 --- a/src/app/core/auth/auth-response-parsing.service.ts +++ b/src/app/core/auth/auth-response-parsing.service.ts @@ -1,6 +1,5 @@ import { Inject, Injectable } from '@angular/core'; -import { AuthObjectFactory } from './auth-object-factory'; import { BaseResponseParsingService } from '../data/base-response-parsing.service'; import { AuthStatusResponse, RestResponse } from '../cache/response.models'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; @@ -10,16 +9,13 @@ import { isNotEmpty } from '../../shared/empty.util'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ResponseParsingService } from '../data/parsing.service'; import { RestRequest } from '../data/request.models'; -import { AuthType } from './auth-type'; import { AuthStatus } from './models/auth-status.model'; import { NormalizedAuthStatus } from './models/normalized-auth-status.model'; import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { DSpaceObject } from '../shared/dspace-object.model'; @Injectable() export class AuthResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = AuthObjectFactory; protected toCache = true; constructor(@Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, @@ -29,7 +25,7 @@ export class AuthResponseParsingService extends BaseResponseParsingService imple parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { if (isNotEmpty(data.payload) && isNotEmpty(data.payload._links) && (data.statusCode === 200)) { - const response = this.process<NormalizedObject<AuthStatus>, AuthType>(data.payload, request.uuid); + const response = this.process<NormalizedObject<AuthStatus>>(data.payload, request.uuid); return new AuthStatusResponse(response, data.statusCode, data.statusText); } else { return new AuthStatusResponse(data.payload as NormalizedAuthStatus, data.statusCode, data.statusText); diff --git a/src/app/core/cache/models/normalized-object-factory.ts b/src/app/core/cache/models/normalized-object-factory.ts deleted file mode 100644 index b83b39e437..0000000000 --- a/src/app/core/cache/models/normalized-object-factory.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { NormalizedBitstream } from './normalized-bitstream.model'; -import { NormalizedBundle } from './normalized-bundle.model'; -import { NormalizedItem } from './normalized-item.model'; -import { NormalizedCollection } from './normalized-collection.model'; -import { GenericConstructor } from '../../shared/generic-constructor'; -import { NormalizedCommunity } from './normalized-community.model'; -import { ResourceType } from '../../shared/resource-type'; -import { NormalizedObject } from './normalized-object.model'; -import { NormalizedLicense } from './normalized-license.model'; -import { NormalizedResourcePolicy } from './normalized-resource-policy.model'; -import { NormalizedWorkspaceItem } from '../../submission/models/normalized-workspaceitem.model'; -import { NormalizedEPerson } from '../../eperson/models/normalized-eperson.model'; -import { NormalizedGroup } from '../../eperson/models/normalized-group.model'; -import { NormalizedWorkflowItem } from '../../submission/models/normalized-workflowitem.model'; -import { NormalizedBitstreamFormat } from './normalized-bitstream-format.model'; -import { NormalizedMetadataSchema } from '../../metadata/normalized-metadata-schema.model'; -import { CacheableObject } from '../object-cache.reducer'; -import { NormalizedSubmissionDefinitionsModel } from '../../config/models/normalized-config-submission-definitions.model'; -import { NormalizedSubmissionFormsModel } from '../../config/models/normalized-config-submission-forms.model'; -import { NormalizedSubmissionSectionModel } from '../../config/models/normalized-config-submission-section.model'; -import { NormalizedAuthStatus } from '../../auth/models/normalized-auth-status.model'; - -export class NormalizedObjectFactory { - public static getConstructor(type: ResourceType): GenericConstructor<NormalizedObject<CacheableObject>> { - switch (type) { - case ResourceType.Bitstream: { - return NormalizedBitstream - } - case ResourceType.Bundle: { - return NormalizedBundle - } - case ResourceType.Item: { - return NormalizedItem - } - case ResourceType.Collection: { - return NormalizedCollection - } - case ResourceType.Community: { - return NormalizedCommunity - } - case ResourceType.BitstreamFormat: { - return NormalizedBitstreamFormat - } - case ResourceType.License: { - return NormalizedLicense - } - case ResourceType.ResourcePolicy: { - return NormalizedResourcePolicy - } - case ResourceType.EPerson: { - return NormalizedEPerson - } - case ResourceType.Group: { - return NormalizedGroup - } - case ResourceType.MetadataSchema: { - return NormalizedMetadataSchema - } - case ResourceType.MetadataField: { - return NormalizedGroup - } - case ResourceType.WorkspaceItem: { - return NormalizedWorkspaceItem - } - case ResourceType.WorkflowItem: { - return NormalizedWorkflowItem - } - case ResourceType.SubmissionDefinition: - case ResourceType.SubmissionDefinitions: { - return NormalizedSubmissionDefinitionsModel - } - case ResourceType.SubmissionForm: - case ResourceType.SubmissionForms: { - return NormalizedSubmissionFormsModel - } - case ResourceType.SubmissionSection: - case ResourceType.SubmissionSections: { - return NormalizedSubmissionSectionModel - } - default: { - return undefined; - } - } - } -} diff --git a/src/app/core/cache/response.models.ts b/src/app/core/cache/response.models.ts index 810dcf1799..753f9dab1e 100644 --- a/src/app/core/cache/response.models.ts +++ b/src/app/core/cache/response.models.ts @@ -8,13 +8,12 @@ import { IntegrationModel } from '../integration/models/integration.model'; import { RegistryMetadataschemasResponse } from '../registry/registry-metadataschemas-response.model'; import { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model'; import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstreamformats-response.model'; -import { AuthStatus } from '../auth/models/auth-status.model'; -import { MetadataSchema } from '../metadata/metadataschema.model'; -import { MetadataField } from '../metadata/metadatafield.model'; import { PaginatedList } from '../data/paginated-list'; import { SubmissionObject } from '../submission/models/submission-object.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { NormalizedAuthStatus } from '../auth/models/normalized-auth-status.model'; +import { MetadataField } from '../metadata/metadata-field.model'; +import { MetadataSchema } from '../metadata/metadata-schema.model'; /* tslint:disable:max-classes-per-file */ export class RestResponse { diff --git a/src/app/core/config/models/config-object-factory.ts b/src/app/core/config/models/config-object-factory.ts deleted file mode 100644 index 44b2e377c4..0000000000 --- a/src/app/core/config/models/config-object-factory.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { GenericConstructor } from '../../shared/generic-constructor'; -import { ConfigType } from './config-type'; -import { ConfigObject } from './config.model'; -import { NormalizedSubmissionDefinitionsModel } from './normalized-config-submission-definitions.model'; -import { NormalizedSubmissionFormsModel } from './normalized-config-submission-forms.model'; -import { NormalizedSubmissionSectionModel } from './normalized-config-submission-section.model'; -import { NormalizedSubmissionUploadsModel } from './normalized-config-submission-uploads.model'; - -/** - * Class to return normalized models for config objects - */ -export class ConfigObjectFactory { - public static getConstructor(type): GenericConstructor<ConfigObject> { - switch (type) { - case ConfigType.SubmissionDefinition: - case ConfigType.SubmissionDefinitions: { - return NormalizedSubmissionDefinitionsModel - } - case ConfigType.SubmissionForm: - case ConfigType.SubmissionForms: { - return NormalizedSubmissionFormsModel - } - case ConfigType.SubmissionSection: - case ConfigType.SubmissionSections: { - return NormalizedSubmissionSectionModel - } - case ConfigType.SubmissionUpload: - case ConfigType.SubmissionUploads: { - return NormalizedSubmissionUploadsModel - } - default: { - return undefined; - } - } - } -} diff --git a/src/app/core/config/models/normalized-config-submission-definitions.model.ts b/src/app/core/config/models/normalized-config-submission-definitions.model.ts index 0d98132c0f..87df838378 100644 --- a/src/app/core/config/models/normalized-config-submission-definitions.model.ts +++ b/src/app/core/config/models/normalized-config-submission-definitions.model.ts @@ -12,7 +12,7 @@ import { mapsTo } from '../../cache/builders/build-decorators'; */ @mapsTo(SubmissionDefinitionsModel) @inheritSerialization(NormalizedConfigObject) -@resourceType(ResourceType.SubmissionDefinitions) +@resourceType(ResourceType.SubmissionDefinitions, ResourceType.SubmissionDefinition) export class NormalizedSubmissionDefinitionsModel extends NormalizedConfigObject<SubmissionDefinitionsModel> { /** diff --git a/src/app/core/config/models/normalized-config-submission-forms.model.ts b/src/app/core/config/models/normalized-config-submission-forms.model.ts index a957e8c7fa..2856fe46fc 100644 --- a/src/app/core/config/models/normalized-config-submission-forms.model.ts +++ b/src/app/core/config/models/normalized-config-submission-forms.model.ts @@ -1,11 +1,16 @@ import { autoserialize, inheritSerialization } from 'cerialize'; import { NormalizedConfigObject } from './normalized-config.model'; import { FormRowModel, SubmissionFormsModel } from './config-submission-forms.model'; +import { resourceType } from '../../shared/resource-type.decorator'; +import { ResourceType } from '../../shared/resource-type'; +import { mapsTo } from '../../cache/builders/build-decorators'; /** * Normalized class for the configuration describing the submission form */ +@mapsTo(SubmissionFormsModel) @inheritSerialization(NormalizedConfigObject) +@resourceType(ResourceType.SubmissionForm, ResourceType.SubmissionForms) export class NormalizedSubmissionFormsModel extends NormalizedConfigObject<SubmissionFormsModel> { /** diff --git a/src/app/core/config/models/normalized-config-submission-section.model.ts b/src/app/core/config/models/normalized-config-submission-section.model.ts index c876acf607..174cd5a10a 100644 --- a/src/app/core/config/models/normalized-config-submission-section.model.ts +++ b/src/app/core/config/models/normalized-config-submission-section.model.ts @@ -3,11 +3,16 @@ import { SectionsType } from '../../../submission/sections/sections-type'; import { NormalizedConfigObject } from './normalized-config.model'; import { SubmissionFormsModel } from './config-submission-forms.model'; import { SubmissionSectionVisibility } from './config-submission-section.model'; +import { mapsTo } from '../../cache/builders/build-decorators'; +import { resourceType } from '../../shared/resource-type.decorator'; +import { ResourceType } from '../../shared/resource-type'; /** * Normalized class for the configuration describing the submission section */ +@mapsTo(SubmissionFormsModel) @inheritSerialization(NormalizedConfigObject) +@resourceType(ResourceType.SubmissionForm, ResourceType.SubmissionForms) export class NormalizedSubmissionSectionModel extends NormalizedConfigObject<SubmissionFormsModel> { /** diff --git a/src/app/core/data/base-response-parsing.service.ts b/src/app/core/data/base-response-parsing.service.ts index 334aadd379..15f52e0939 100644 --- a/src/app/core/data/base-response-parsing.service.ts +++ b/src/app/core/data/base-response-parsing.service.ts @@ -9,15 +9,15 @@ import { PaginatedList } from './paginated-list'; import { ResourceType } from '../shared/resource-type'; import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; import { isRestDataObject, isRestPaginatedList } from '../cache/builders/normalized-object-build.service'; +import { getNormalizedConstructorByType } from '../shared/resource-type.decorator'; /* tslint:disable:max-classes-per-file */ export abstract class BaseResponseParsingService { protected abstract EnvConfig: GlobalConfig; protected abstract objectCache: ObjectCacheService; - protected abstract objectFactory: any; protected abstract toCache: boolean; - protected process<ObjectDomain, ObjectType>(data: any, requestUUID: string): any { + protected process<ObjectDomain>(data: any, requestUUID: string): any { if (isNotEmpty(data)) { if (hasNoValue(data) || (typeof data !== 'object')) { return data; @@ -32,7 +32,7 @@ export abstract class BaseResponseParsingService { .keys(data._embedded) .filter((property) => data._embedded.hasOwnProperty(property)) .forEach((property) => { - const parsedObj = this.process<ObjectDomain, ObjectType>(data._embedded[property], requestUUID); + const parsedObj = this.process<ObjectDomain>(data._embedded[property], requestUUID); if (isNotEmpty(parsedObj)) { if (isRestPaginatedList(data._embedded[property])) { object[property] = parsedObj; @@ -61,7 +61,7 @@ export abstract class BaseResponseParsingService { } } - protected processPaginatedList<ObjectDomain, ObjectType>(data: any, requestUUID: string): PaginatedList<ObjectDomain> { + protected processPaginatedList<ObjectDomain>(data: any, requestUUID: string): PaginatedList<ObjectDomain> { const pageInfo: PageInfo = this.processPageInfo(data); let list = data._embedded; @@ -73,7 +73,7 @@ export abstract class BaseResponseParsingService { return new PaginatedList<ObjectDomain>(pageInfo, page, ); } - protected processArray<ObjectDomain, ObjectType>(data: any, requestUUID: string): ObjectDomain[] { + protected processArray<ObjectDomain>(data: any, requestUUID: string): ObjectDomain[] { let array: ObjectDomain[] = []; data.forEach((datum) => { array = [...array, this.process(datum, requestUUID)]; @@ -82,10 +82,10 @@ export abstract class BaseResponseParsingService { return array; } - protected deserialize<ObjectDomain, ObjectType>(obj): any { - const type: ObjectType = obj.type; + protected deserialize<ObjectDomain>(obj): any { + const type: ResourceType = obj.type; if (hasValue(type)) { - const normObjConstructor = this.objectFactory.getConstructor(type) as GenericConstructor<ObjectDomain>; + const normObjConstructor = getNormalizedConstructorByType(type) as GenericConstructor<ObjectDomain>; if (hasValue(normObjConstructor)) { const serializer = new DSpaceRESTv2Serializer(normObjConstructor); @@ -103,7 +103,7 @@ export abstract class BaseResponseParsingService { } } - protected cache<ObjectDomain, ObjectType>(obj, requestUUID) { + protected cache<ObjectDomain>(obj, requestUUID) { if (this.toCache) { this.addToObjectCache(obj, requestUUID); } diff --git a/src/app/core/data/metadatafield-parsing.service.ts b/src/app/core/data/metadatafield-parsing.service.ts index f9582c394d..092285e9c5 100644 --- a/src/app/core/data/metadatafield-parsing.service.ts +++ b/src/app/core/data/metadatafield-parsing.service.ts @@ -3,8 +3,8 @@ import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response. import { RestRequest } from './request.models'; import { ResponseParsingService } from './parsing.service'; import { Injectable } from '@angular/core'; -import { MetadatafieldSuccessResponse, MetadataschemaSuccessResponse, RestResponse } from '../cache/response.models'; -import { MetadataField } from '../metadata/metadatafield.model'; +import { MetadatafieldSuccessResponse, RestResponse } from '../cache/response.models'; +import { MetadataField } from '../metadata/metadata-field.model'; /** * A service responsible for parsing DSpaceRESTV2Response data related to a single MetadataField to a valid RestResponse diff --git a/src/app/core/integration/models/normalized-authority-value.model.ts b/src/app/core/integration/models/normalized-authority-value.model.ts index 5ebb61281d..6e6c7ee798 100644 --- a/src/app/core/integration/models/normalized-authority-value.model.ts +++ b/src/app/core/integration/models/normalized-authority-value.model.ts @@ -2,12 +2,15 @@ import { autoserialize, inheritSerialization } from 'cerialize'; import { IntegrationModel } from './integration.model'; import { mapsTo } from '../../cache/builders/build-decorators'; import { AuthorityValue } from './authority.value'; +import { resourceType } from '../../shared/resource-type.decorator'; +import { ResourceType } from '../../shared/resource-type'; /** * Normalized model class for an Authority Value */ @mapsTo(AuthorityValue) @inheritSerialization(IntegrationModel) +@resourceType(ResourceType.Authority) export class NormalizedAuthorityValue extends IntegrationModel { @autoserialize diff --git a/src/app/core/registry/registry-metadataschemas-response.model.ts b/src/app/core/registry/registry-metadataschemas-response.model.ts index 5f4799abd7..f27550bbe0 100644 --- a/src/app/core/registry/registry-metadataschemas-response.model.ts +++ b/src/app/core/registry/registry-metadataschemas-response.model.ts @@ -1,6 +1,6 @@ -import { MetadataSchema } from '../metadata/metadataschema.model'; import { PageInfo } from '../shared/page-info.model'; import { autoserialize, autoserializeAs } from 'cerialize'; +import { MetadataSchema } from '../metadata/metadata-schema.model'; export class RegistryMetadataschemasResponse { @autoserializeAs(MetadataSchema) diff --git a/src/app/core/shared/resource-type.decorator.ts b/src/app/core/shared/resource-type.decorator.ts index da5259b968..a063eb8310 100644 --- a/src/app/core/shared/resource-type.decorator.ts +++ b/src/app/core/shared/resource-type.decorator.ts @@ -2,15 +2,17 @@ import { CacheableObject } from '../cache/object-cache.reducer'; import { GenericConstructor } from './generic-constructor'; const resourceTypeForObjectMap = new Map(); -export function resourceType(resourceType: string) { + +export function resourceType(...resourceType: string[]) { return function decorator(objectConstructor: GenericConstructor<CacheableObject>) { if (!objectConstructor) { return; } - resourceTypeForObjectMap.set(resourceType, objectConstructor); + resourceType.forEach((rt: string) => resourceTypeForObjectMap.set(rt, objectConstructor) + ) }; } -export function rendersSectionType(resourceType: string) { +export function getNormalizedConstructorByType(resourceType: string) { return resourceTypeForObjectMap.get(resourceType); } diff --git a/src/app/core/shared/resource-type.ts b/src/app/core/shared/resource-type.ts index 02283a5dde..c4eeb7a27d 100644 --- a/src/app/core/shared/resource-type.ts +++ b/src/app/core/shared/resource-type.ts @@ -20,5 +20,6 @@ export enum ResourceType { SubmissionForms = 'submissionforms', SubmissionSections = 'submissionsections', SubmissionSection = 'submissionsection', - AuthStatus = 'status' + AuthStatus = 'status', + Authority = 'authority' } -- GitLab