diff --git a/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.ts b/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.ts index 6b3e05c818bfa6a795cac2c7543c7d9ca611f3f6..8148b89bd4cbccc2b5156040c7ef104fe9e0eff6 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.ts +++ b/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.ts @@ -17,9 +17,9 @@ import { NotificationsService } from '../../../shared/notifications/notification import { GLOBAL_CONFIG, GlobalConfig } from '../../../../config'; import { TranslateService } from '@ngx-translate/core'; import { RegistryService } from '../../../core/registry/registry.service'; -import { MetadataField } from '../../../core/metadata/metadatafield.model'; import { MetadatumViewModel } from '../../../core/shared/metadata.models'; import { Metadata } from '../../../core/shared/metadata.utils'; +import { MetadataField } from '../../../core/metadata/metadata-field.model'; @Component({ selector: 'ds-item-metadata', diff --git a/src/app/core/auth/models/auth-status.model.ts b/src/app/core/auth/models/auth-status.model.ts index 6e722a80c907f6e51b57b85ee15ae765d26aff4e..40ca71aa1b631d31faba43ca856b0b7b9ad6271f 100644 --- a/src/app/core/auth/models/auth-status.model.ts +++ b/src/app/core/auth/models/auth-status.model.ts @@ -3,9 +3,10 @@ import { AuthTokenInfo } from './auth-token-info.model'; import { EPerson } from '../../eperson/models/eperson.model'; import { RemoteData } from '../../data/remote-data'; import { Observable } from 'rxjs'; -import { CacheableObject } from '../../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../../cache/object-cache.reducer'; +import { ResourceType } from '../../shared/resource-type'; -export class AuthStatus implements CacheableObject { +export class AuthStatus implements CacheableObject, TypedObject { id: string; @@ -20,4 +21,7 @@ export class AuthStatus implements CacheableObject { token?: AuthTokenInfo; self: string; + + type: ResourceType; + } 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 46d0177fdc29bf79bdae2700e7c95a466855c973..50956935efa7eeb073f028173c1079bab6cf628e 100644 --- a/src/app/core/auth/models/normalized-auth-status.model.ts +++ b/src/app/core/auth/models/normalized-auth-status.model.ts @@ -31,4 +31,8 @@ export class NormalizedAuthStatus extends NormalizedObject<AuthStatus> { @relationship(ResourceType.EPerson, false) @autoserialize eperson: string; + + + @autoserialize + type: ResourceType; } diff --git a/src/app/core/cache/builders/normalized-object-build.service.ts b/src/app/core/cache/builders/normalized-object-build.service.ts index 79665fec3d237fbcbdc9e322a16d0c7a2668d464..357ae718725d79ffc7611818504666687ef5cf69 100644 --- a/src/app/core/cache/builders/normalized-object-build.service.ts +++ b/src/app/core/cache/builders/normalized-object-build.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { NormalizedObject } from '../models/normalized-object.model'; -import { CacheableObject } from '../object-cache.reducer'; import { getRelationships } from './build-decorators'; -import { NormalizedObjectFactory } from '../models/normalized-object-factory'; import { hasValue, isNotEmpty } from '../../../shared/empty.util'; +import { TypedObject } from '../object-cache.reducer'; +import { getNormalizedConstructorByType } from '../../shared/resource-type.decorator'; /** * Return true if halObj has a value for `_links.self` @@ -35,8 +35,8 @@ export class NormalizedObjectBuildService { * * @param {TDomain} domainModel a domain model */ - normalize<T extends CacheableObject>(domainModel: T): NormalizedObject<T> { - const normalizedConstructor = NormalizedObjectFactory.getConstructor(domainModel.type); + normalize<T extends TypedObject>(domainModel: T): NormalizedObject<T> { + const normalizedConstructor = getNormalizedConstructorByType(domainModel.type); const relationships = getRelationships(normalizedConstructor) || []; const normalizedModel = Object.assign({}, domainModel) as any; diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index c0b359e7ea3e0ee163e911a0b27b33541ec91b47..18687e254d4afae6b7a6efe05bb4d172095543eb 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -21,7 +21,7 @@ import { getRequestFromRequestUUID, getResourceLinksFromResponse } from '../../shared/operators'; -import { CacheableObject } from '../object-cache.reducer'; +import { CacheableObject, TypedObject } from '../object-cache.reducer'; @Injectable() export class RemoteDataBuildService { @@ -29,7 +29,7 @@ export class RemoteDataBuildService { protected requestService: RequestService) { } - buildSingle<T extends CacheableObject>(href$: string | Observable<string>): Observable<RemoteData<T>> { + buildSingle<T extends TypedObject & CacheableObject>(href$: string | Observable<string>): Observable<RemoteData<T>> { if (typeof href$ === 'string') { href$ = observableOf(href$); } @@ -107,7 +107,7 @@ export class RemoteDataBuildService { ); } - buildList<T extends CacheableObject>(href$: string | Observable<string>): Observable<RemoteData<PaginatedList<T>>> { + buildList<T extends TypedObject & CacheableObject>(href$: string | Observable<string>): Observable<RemoteData<PaginatedList<T>>> { if (typeof href$ === 'string') { href$ = observableOf(href$); } @@ -149,7 +149,7 @@ export class RemoteDataBuildService { return this.toRemoteDataObservable(requestEntry$, payload$); } - build<T extends CacheableObject>(normalized: NormalizedObject<T>): T { + build<T extends TypedObject & CacheableObject>(normalized: NormalizedObject<T>): T { const links: any = {}; const relationships = getRelationships(normalized.constructor) || []; diff --git a/src/app/core/cache/models/normalized-dspace-object.model.ts b/src/app/core/cache/models/normalized-dspace-object.model.ts index 84e3f41f42aa3109b67136bbb98519c258bf7677..65da89a4eba2b2c943f0579001263d66dc0ce6b1 100644 --- a/src/app/core/cache/models/normalized-dspace-object.model.ts +++ b/src/app/core/cache/models/normalized-dspace-object.model.ts @@ -5,13 +5,14 @@ import { ResourceType } from '../../shared/resource-type'; import { mapsTo } from '../builders/build-decorators'; import { NormalizedObject } from './normalized-object.model'; import { resourceType } from '../../shared/resource-type.decorator'; +import { TypedObject } from '../object-cache.reducer'; /** * An model class for a DSpaceObject. */ @mapsTo(DSpaceObject) @resourceType(ResourceType.DSpaceObject) -export class NormalizedDSpaceObject<T extends DSpaceObject> extends NormalizedObject<T> { +export class NormalizedDSpaceObject<T extends DSpaceObject> extends NormalizedObject<T> implements TypedObject { /** * The link to the rest endpoint where this object can be found @@ -40,7 +41,7 @@ export class NormalizedDSpaceObject<T extends DSpaceObject> extends NormalizedOb /** * A string representing the kind of DSpaceObject, e.g. community, item, … */ - @autoserializeAs(String) + @autoserializeAs(ResourceType) type: ResourceType; /** diff --git a/src/app/core/cache/models/normalized-object.model.ts b/src/app/core/cache/models/normalized-object.model.ts index 6ac8985d64c9233a08afb2eca8a2c53dc46d6d48..a80da98cca19383b370ab867344885185f614bad 100644 --- a/src/app/core/cache/models/normalized-object.model.ts +++ b/src/app/core/cache/models/normalized-object.model.ts @@ -1,10 +1,10 @@ -import { CacheableObject } from '../object-cache.reducer'; +import { CacheableObject, TypedObject } from '../object-cache.reducer'; import { autoserialize } from 'cerialize'; import { ResourceType } from '../../shared/resource-type'; /** * An abstract model class for a NormalizedObject. */ -export abstract class NormalizedObject<T extends CacheableObject> implements CacheableObject { +export abstract class NormalizedObject<T extends TypedObject> implements CacheableObject, TypedObject { /** * The link to the rest endpoint where this object can be found diff --git a/src/app/core/cache/object-cache.reducer.ts b/src/app/core/cache/object-cache.reducer.ts index 982c77341e397de6c88a625ae934af4475accb59..97a48af1c1ab2a63a71f8e6ce5d091c5f1a52b96 100644 --- a/src/app/core/cache/object-cache.reducer.ts +++ b/src/app/core/cache/object-cache.reducer.ts @@ -32,6 +32,9 @@ export interface Patch { operations: Operation[]; } +export interface TypedObject { + type: ResourceType; +} /** * An interface to represent objects that can be cached * @@ -40,7 +43,6 @@ export interface Patch { export interface CacheableObject { uuid?: string; self: string; - type?: ResourceType; // isNew: boolean; // dirtyType: DirtyType; // hasDirtyAttributes: boolean; @@ -48,6 +50,8 @@ export interface CacheableObject { // save(): void; } +// export type TypedCacheableObject = TypedObject & CacheableObject; + /** * An entry in the ObjectCache */ diff --git a/src/app/core/config/config-response-parsing.service.ts b/src/app/core/config/config-response-parsing.service.ts index b81dc07624b9ca9a61d9366848a674899960292c..de85b911bdc7b7badcdc50300e13276bff9dbbb1 100644 --- a/src/app/core/config/config-response-parsing.service.ts +++ b/src/app/core/config/config-response-parsing.service.ts @@ -16,8 +16,6 @@ import { ObjectCacheService } from '../cache/object-cache.service'; @Injectable() export class ConfigResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - - protected objectFactory = ConfigObjectFactory; protected toCache = false; constructor( diff --git a/src/app/core/config/models/config.model.ts b/src/app/core/config/models/config.model.ts index 81f20a0b3c00a660817ba7ff227a1ebc5f9a7af1..2a7c3da882039e88a03b4f9adcc08eb5a184f746 100644 --- a/src/app/core/config/models/config.model.ts +++ b/src/app/core/config/models/config.model.ts @@ -1,7 +1,7 @@ -import { CacheableObject } from '../../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../../cache/object-cache.reducer'; import { ResourceType } from '../../shared/resource-type'; -export abstract class ConfigObject implements CacheableObject { +export abstract class ConfigObject implements CacheableObject, TypedObject { /** * The name for this configuration 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 174cd5a10a688ae0aaaad70a4ce42551bff21ecc..3f9bca8b7b2698d3bfb08579f6c8f52a04a9f0d2 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 @@ -2,7 +2,10 @@ import { autoserialize, inheritSerialization } from 'cerialize'; 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 { + SubmissionSectionModel, + 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'; @@ -10,10 +13,10 @@ import { ResourceType } from '../../shared/resource-type'; /** * Normalized class for the configuration describing the submission section */ -@mapsTo(SubmissionFormsModel) +@mapsTo(SubmissionSectionModel) @inheritSerialization(NormalizedConfigObject) -@resourceType(ResourceType.SubmissionForm, ResourceType.SubmissionForms) -export class NormalizedSubmissionSectionModel extends NormalizedConfigObject<SubmissionFormsModel> { +@resourceType(ResourceType.SubmissionSection, ResourceType.SubmissionSections) +export class NormalizedSubmissionSectionModel extends NormalizedConfigObject<SubmissionSectionModel> { /** * The header for this section diff --git a/src/app/core/config/models/normalized-config.model.ts b/src/app/core/config/models/normalized-config.model.ts index 0b751585885658ec6e8af666a83d996793ac02f0..c463cd8b08f851dde14b1c5251284ebcb6e7b1c8 100644 --- a/src/app/core/config/models/normalized-config.model.ts +++ b/src/app/core/config/models/normalized-config.model.ts @@ -1,13 +1,13 @@ import { autoserialize, inheritSerialization } from 'cerialize'; import { NormalizedObject } from '../../cache/models/normalized-object.model'; -import { CacheableObject } from '../../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../../cache/object-cache.reducer'; import { ResourceType } from '../../shared/resource-type'; /** * Normalized abstract class for a configuration object */ @inheritSerialization(NormalizedObject) -export abstract class NormalizedConfigObject<T extends CacheableObject> implements CacheableObject { +export abstract class NormalizedConfigObject<T extends CacheableObject> implements CacheableObject, TypedObject { /** * The name for this configuration 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 4690d738ed6e3e324933abfd612ce5dd1cc68a20..5e6a9acaca01f590003319602f517beba9f7f07a 100644 --- a/src/app/core/data/browse-entries-response-parsing.service.ts +++ b/src/app/core/data/browse-entries-response-parsing.service.ts @@ -18,9 +18,6 @@ import { RestRequest } from './request.models'; @Injectable() export class BrowseEntriesResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = { - getConstructor: () => BrowseEntry - }; protected toCache = false; constructor( diff --git a/src/app/core/data/browse-items-response-parsing-service.ts b/src/app/core/data/browse-items-response-parsing-service.ts index fb950f6c6833f3cb34ade4943da240f5c14a7623..324b36199abad6a765be423921d75fdcfb13cd44 100644 --- a/src/app/core/data/browse-items-response-parsing-service.ts +++ b/src/app/core/data/browse-items-response-parsing-service.ts @@ -18,10 +18,6 @@ import { NormalizedDSpaceObject } from '../cache/models/normalized-dspace-object */ @Injectable() export class BrowseItemsResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - - protected objectFactory = { - getConstructor: () => DSpaceObject - }; protected toCache = false; constructor( diff --git a/src/app/core/data/dso-response-parsing.service.ts b/src/app/core/data/dso-response-parsing.service.ts index eb95cdae8ac15f1ba951cf9a8647856dd092854d..d6c3b2caa601afa20f197841141df5957f7f910c 100644 --- a/src/app/core/data/dso-response-parsing.service.ts +++ b/src/app/core/data/dso-response-parsing.service.ts @@ -4,8 +4,6 @@ import { ObjectCacheService } from '../cache/object-cache.service'; import { GlobalConfig } from '../../../config/global-config.interface'; import { GLOBAL_CONFIG } from '../../../config'; import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { ResourceType } from '../shared/resource-type'; -import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; import { RestResponse, DSOSuccessResponse } from '../cache/response.models'; import { RestRequest } from './request.models'; @@ -17,8 +15,6 @@ import { DSpaceObject } from '../shared/dspace-object.model'; @Injectable() export class DSOResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - - protected objectFactory = NormalizedObjectFactory; protected toCache = true; constructor( @@ -34,7 +30,7 @@ export class DSOResponseParsingService extends BaseResponseParsingService implem if (hasValue(data.payload) && hasValue(data.payload.page) && data.payload.page.totalElements === 0) { processRequestDTO = { page: [] }; } else { - processRequestDTO = this.process<NormalizedObject<DSpaceObject>, ResourceType>(data.payload, request.uuid); + processRequestDTO = this.process<NormalizedObject<DSpaceObject>>(data.payload, request.uuid); } let objectList = processRequestDTO; 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 e65e31764204434bb48d10c20901505393186f2d..15f520b2496f7086ac47e0fb665f6a3328051edc 100644 --- a/src/app/core/data/facet-config-response-parsing.service.ts +++ b/src/app/core/data/facet-config-response-parsing.service.ts @@ -15,7 +15,6 @@ import { GLOBAL_CONFIG } from '../../../config'; @Injectable() export class FacetConfigResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - objectFactory = {}; toCache = false; constructor( @Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, 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 e03c1a78df68191fe4e1f44889fd297a9f419a0d..b67cef97c00be8be3e40261249cfcfdffe3740c9 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 @@ -17,7 +17,6 @@ import { GLOBAL_CONFIG } from '../../../config'; @Injectable() export class FacetValueMapResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - objectFactory = {}; toCache = false; constructor( 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 e7665ebed2d1ae1397e4d073df4edbbba59227bd..49d72e0a01b4279d8aef790f2d0353e69aae2758 100644 --- a/src/app/core/data/facet-value-response-parsing.service.ts +++ b/src/app/core/data/facet-value-response-parsing.service.ts @@ -12,7 +12,6 @@ import { GlobalConfig } from '../../../config/global-config.interface'; @Injectable() export class FacetValueResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - objectFactory = {}; toCache = false; constructor( @Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, diff --git a/src/app/core/eperson/eperson-response-parsing.service.ts b/src/app/core/eperson/eperson-response-parsing.service.ts index 6c591b0b99391ed7bc97cf6ed55c9d7d81755092..481f37d1fa54731f9953f9ff92826722859ab57f 100644 --- a/src/app/core/eperson/eperson-response-parsing.service.ts +++ b/src/app/core/eperson/eperson-response-parsing.service.ts @@ -9,8 +9,6 @@ import { BaseResponseParsingService } from '../data/base-response-parsing.servic import { GLOBAL_CONFIG } from '../../../config'; import { GlobalConfig } from '../../../config/global-config.interface'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; -import { ResourceType } from '../shared/resource-type'; import { DSpaceObject } from '../shared/dspace-object.model'; /** @@ -19,7 +17,6 @@ import { DSpaceObject } from '../shared/dspace-object.model'; @Injectable() export class EpersonResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = NormalizedObjectFactory; protected toCache = false; constructor( @@ -31,7 +28,7 @@ export class EpersonResponseParsingService extends BaseResponseParsingService im parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { if (isNotEmpty(data.payload) && isNotEmpty(data.payload._links)) { - const epersonDefinition = this.process<DSpaceObject,ResourceType>(data.payload, request.href); + const epersonDefinition = this.process<DSpaceObject>(data.payload, request.href); return new EpersonSuccessResponse(epersonDefinition[Object.keys(epersonDefinition)[0]], data.statusCode, data.statusText, this.processPageInfo(data.payload)); } else { return new ErrorResponse( diff --git a/src/app/core/integration/integration-object-factory.ts b/src/app/core/integration/integration-object-factory.ts deleted file mode 100644 index f66a070fdfa3c5bbdbc5484909dbef51d85a95ce..0000000000000000000000000000000000000000 --- a/src/app/core/integration/integration-object-factory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { GenericConstructor } from '../shared/generic-constructor'; -import { IntegrationType } from './intergration-type'; -import { IntegrationModel } from './models/integration.model'; -import { NormalizedAuthorityValue } from './models/normalized-authority-value.model'; - -export class IntegrationObjectFactory { - public static getConstructor(type): GenericConstructor<IntegrationModel> { - switch (type) { - case IntegrationType.Authority: { - return NormalizedAuthorityValue; - } - default: { - return undefined; - } - } - } -} diff --git a/src/app/core/integration/integration-response-parsing.service.ts b/src/app/core/integration/integration-response-parsing.service.ts index 2d3693cf3d007f360d534acbf3b8d12310ed7147..9793a69218b38b2c6da1d4eea5a56870cf539e37 100644 --- a/src/app/core/integration/integration-response-parsing.service.ts +++ b/src/app/core/integration/integration-response-parsing.service.ts @@ -8,21 +8,19 @@ import { RestResponse } from '../cache/response.models'; import { isNotEmpty } from '../../shared/empty.util'; -import { IntegrationObjectFactory } from './integration-object-factory'; import { BaseResponseParsingService } from '../data/base-response-parsing.service'; import { GLOBAL_CONFIG } from '../../../config'; import { GlobalConfig } from '../../../config/global-config.interface'; import { ObjectCacheService } from '../cache/object-cache.service'; import { IntegrationModel } from './models/integration.model'; -import { IntegrationType } from './intergration-type'; import { AuthorityValue } from './models/authority.value'; import { PaginatedList } from '../data/paginated-list'; +import { ResourceType } from '../shared/resource-type'; @Injectable() export class IntegrationResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = IntegrationObjectFactory; protected toCache = true; constructor( @@ -34,7 +32,7 @@ export class IntegrationResponseParsingService extends BaseResponseParsingServic parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { if (isNotEmpty(data.payload) && isNotEmpty(data.payload._links)) { - const dataDefinition = this.process<IntegrationModel,IntegrationType>(data.payload, request.uuid); + const dataDefinition = this.process<IntegrationModel>(data.payload, request.uuid); return new IntegrationSuccessResponse(this.processResponse(dataDefinition), data.statusCode, data.statusText, this.processPageInfo(data.payload)); } else { return new ErrorResponse( @@ -49,7 +47,7 @@ export class IntegrationResponseParsingService extends BaseResponseParsingServic protected processResponse(data: PaginatedList<IntegrationModel>): any { const returnList = Array.of(); data.page.forEach((item, index) => { - if (item.type === IntegrationType.Authority) { + if (item.type === ResourceType.Authority) { data.page[index] = Object.assign(new AuthorityValue(), item); } }); diff --git a/src/app/core/integration/intergration-type.ts b/src/app/core/integration/intergration-type.ts deleted file mode 100644 index 882dc6d8ce51f11e67c6bcfae0f9454c993c437e..0000000000000000000000000000000000000000 --- a/src/app/core/integration/intergration-type.ts +++ /dev/null @@ -1,4 +0,0 @@ - -export enum IntegrationType { - Authority = 'authority' -} diff --git a/src/app/core/shared/bitstream-format.model.ts b/src/app/core/shared/bitstream-format.model.ts index 9af345e6074f6f64c48cdb9b520042aaf2868ad5..c46df1724db98ac0fe38291845deea08652068a0 100644 --- a/src/app/core/shared/bitstream-format.model.ts +++ b/src/app/core/shared/bitstream-format.model.ts @@ -1,11 +1,11 @@ -import { CacheableObject } from '../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../cache/object-cache.reducer'; import { ResourceType } from './resource-type'; /** * Model class for a Bitstream Format */ -export class BitstreamFormat implements CacheableObject { +export class BitstreamFormat implements CacheableObject, TypedObject { /** * Short description of this Bitstream Format diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/browse-definition.model.ts index 05263858c6072bda8b4fcd740c17340624c29787..fe5fdd439bdf36eba2fc0ca69b56c9d046b97d6c 100644 --- a/src/app/core/shared/browse-definition.model.ts +++ b/src/app/core/shared/browse-definition.model.ts @@ -1,7 +1,9 @@ import { autoserialize, autoserializeAs } from 'cerialize'; import { SortOption } from './sort-option.model'; +import { ResourceType } from './resource-type'; +import { TypedObject } from '../cache/object-cache.reducer'; -export class BrowseDefinition { +export class BrowseDefinition implements TypedObject { @autoserialize id: string; @@ -15,7 +17,7 @@ export class BrowseDefinition { defaultSortOrder: string; @autoserialize - type: string; + type: ResourceType; @autoserializeAs('metadata') metadataKeys: string[]; diff --git a/src/app/core/shared/browse-entry.model.ts b/src/app/core/shared/browse-entry.model.ts index 932c6946d16ab22894523cd99fba8cea4a1ad379..6f018ceddee3f2c95734accc6263a7b825931a3b 100644 --- a/src/app/core/shared/browse-entry.model.ts +++ b/src/app/core/shared/browse-entry.model.ts @@ -1,10 +1,14 @@ import { autoserialize, autoserializeAs } from 'cerialize'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; +import { ResourceType } from './resource-type'; +import { resourceType } from './resource-type.decorator'; +import { CacheableObject, TypedObject } from '../cache/object-cache.reducer'; -export class BrowseEntry implements ListableObject { +@resourceType(ResourceType.BrowseEntry) +export class BrowseEntry implements ListableObject, TypedObject { @autoserialize - type: string; + type: ResourceType; @autoserialize authority: string; diff --git a/src/app/core/shared/dspace-object.model.ts b/src/app/core/shared/dspace-object.model.ts index 71c6ee7837b57d6cd4c8cac830a527c6aba869a2..422e215c9093b33903c64b1174713f652d2cbe82 100644 --- a/src/app/core/shared/dspace-object.model.ts +++ b/src/app/core/shared/dspace-object.model.ts @@ -3,7 +3,7 @@ import { Observable } from 'rxjs'; import { MetadataMap, MetadataValue, MetadataValueFilter, MetadatumViewModel } from './metadata.models'; import { Metadata } from './metadata.utils'; import { isUndefined } from '../../shared/empty.util'; -import { CacheableObject } from '../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../cache/object-cache.reducer'; import { RemoteData } from '../data/remote-data'; import { ResourceType } from './resource-type'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; @@ -11,7 +11,7 @@ import { ListableObject } from '../../shared/object-collection/shared/listable-o /** * An abstract model class for a DSpaceObject. */ -export class DSpaceObject implements CacheableObject, ListableObject { +export class DSpaceObject implements CacheableObject, ListableObject, TypedObject { private _name: string; diff --git a/src/app/core/shared/resource-policy.model.ts b/src/app/core/shared/resource-policy.model.ts index ee3d5293f52c2c60db6220255b2b65228065283d..21dcd44b01f81c3aba1cbc4b967eb1c98fc846b1 100644 --- a/src/app/core/shared/resource-policy.model.ts +++ b/src/app/core/shared/resource-policy.model.ts @@ -1,4 +1,4 @@ -import { CacheableObject } from '../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../cache/object-cache.reducer'; import { ResourceType } from './resource-type'; import { Group } from '../eperson/models/group.model'; import { ActionType } from '../cache/models/action-type.model'; @@ -6,7 +6,7 @@ import { ActionType } from '../cache/models/action-type.model'; /** * Model class for a Resource Policy */ -export class ResourcePolicy implements CacheableObject { +export class ResourcePolicy implements CacheableObject, TypedObject { /** * The action that is allowed by this Resource Policy */ diff --git a/src/app/core/shared/resource-type.decorator.ts b/src/app/core/shared/resource-type.decorator.ts index a063eb831062de8131b44403cc55e15c45c8094f..28b2c7cefe78d324262aadd1eaa38ceeb09c1864 100644 --- a/src/app/core/shared/resource-type.decorator.ts +++ b/src/app/core/shared/resource-type.decorator.ts @@ -1,10 +1,11 @@ -import { CacheableObject } from '../cache/object-cache.reducer'; +import { CacheableObject, TypedObject } from '../cache/object-cache.reducer'; import { GenericConstructor } from './generic-constructor'; +import { ResourceType } from './resource-type'; const resourceTypeForObjectMap = new Map(); -export function resourceType(...resourceType: string[]) { - return function decorator(objectConstructor: GenericConstructor<CacheableObject>) { +export function resourceType(...resourceType: ResourceType[]) { + return function decorator(objectConstructor: GenericConstructor<TypedObject>) { if (!objectConstructor) { return; } @@ -13,6 +14,6 @@ export function resourceType(...resourceType: string[]) { }; } -export function getNormalizedConstructorByType(resourceType: string) { +export function getNormalizedConstructorByType(resourceType: ResourceType) { return resourceTypeForObjectMap.get(resourceType); } diff --git a/src/app/core/shared/resource-type.ts b/src/app/core/shared/resource-type.ts index c4eeb7a27d94fa0daa4d04777b4addfee8fb6eb9..47c59b95dcc45698f20dce2a80c8a05be6b4427d 100644 --- a/src/app/core/shared/resource-type.ts +++ b/src/app/core/shared/resource-type.ts @@ -21,5 +21,6 @@ export enum ResourceType { SubmissionSections = 'submissionsections', SubmissionSection = 'submissionsection', AuthStatus = 'status', - Authority = 'authority' + Authority = 'authority', + BrowseEntry = 'browseEntry', } diff --git a/src/app/core/submission/submission-response-parsing.service.ts b/src/app/core/submission/submission-response-parsing.service.ts index 20dfb43cbd4e6e94eccc97805c7a1afd55ac80b4..494e4db46baf8bbcded00ccd562782db6ed49a50 100644 --- a/src/app/core/submission/submission-response-parsing.service.ts +++ b/src/app/core/submission/submission-response-parsing.service.ts @@ -15,7 +15,6 @@ import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model'; import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model'; import { SubmissionObject } from './models/submission-object.model'; -import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; /** * Export a function to check if object has same properties of FormFieldMetadataValueObject @@ -75,7 +74,6 @@ export function normalizeSectionData(obj: any) { @Injectable() export class SubmissionResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = NormalizedObjectFactory; protected toCache = false; constructor(@Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, @@ -94,7 +92,7 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService if (isNotEmpty(data.payload) && isNotEmpty(data.payload._links) && (data.statusCode === 201 || data.statusCode === 200)) { - const dataDefinition = this.processResponse<SubmissionObject | ConfigObject, SubmissionResourceType>(data.payload, request.href); + const dataDefinition = this.processResponse<SubmissionObject | ConfigObject>(data.payload, request.href); return new SubmissionSuccessResponse(dataDefinition, data.statusCode, data.statusText, this.processPageInfo(data.payload)); } else if (isEmpty(data.payload) && data.statusCode === 204) { // Response from a DELETE request @@ -116,8 +114,8 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService * @param {string} requestHref * @returns {any[]} */ - protected processResponse<ObjectDomain, ObjectType>(data: any, requestHref: string): any[] { - const dataDefinition = this.process<ObjectDomain, ObjectType>(data, requestHref); + protected processResponse<ObjectDomain>(data: any, requestHref: string): any[] { + const dataDefinition = this.process<ObjectDomain>(data, requestHref); const normalizedDefinition = Array.of(); const processedList = Array.isArray(dataDefinition) ? dataDefinition : Array.of(dataDefinition);