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 2248b62509..e12faa4a77 100644 --- a/src/app/core/cache/models/normalized-dspace-object.model.ts +++ b/src/app/core/cache/models/normalized-dspace-object.model.ts @@ -31,9 +31,6 @@ export class NormalizedDSpaceObject extends NormalizedOb /** * The universally unique identifier of this DSpaceObject - * - * Repeated here to make the serialization work, - * inheritSerialization doesn't seem to work for more than one level */ @autoserializeAs(String) uuid: string; diff --git a/src/app/core/cache/models/normalized-license.model.ts b/src/app/core/cache/models/normalized-license.model.ts index 1457394c9d..02bd1808c8 100644 --- a/src/app/core/cache/models/normalized-license.model.ts +++ b/src/app/core/cache/models/normalized-license.model.ts @@ -8,7 +8,7 @@ import { License } from '../../shared/license.model'; */ @mapsTo(License) @inheritSerialization(NormalizedDSpaceObject) -export class NormalizedLicense extends NormalizedDSpaceObject { +export class NormalizedLicense extends NormalizedDSpaceObject { /** * A boolean representing if this License is custom or not diff --git a/src/app/core/cache/models/normalized-object-factory.ts b/src/app/core/cache/models/normalized-object-factory.ts index 9a9c948a85..53d7f475fc 100644 --- a/src/app/core/cache/models/normalized-object-factory.ts +++ b/src/app/core/cache/models/normalized-object-factory.ts @@ -13,11 +13,11 @@ 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 { SubmissionDefinitionsModel } from '../../config/models/config-submission-definitions.model'; -import { SubmissionFormsModel } from '../../config/models/config-submission-forms.model'; -import { SubmissionSectionModel } from '../../config/models/config-submission-section.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'; export class NormalizedObjectFactory { public static getConstructor(type: ResourceType): GenericConstructor> { @@ -46,9 +46,6 @@ export class NormalizedObjectFactory { case ResourceType.ResourcePolicy: { return NormalizedResourcePolicy } - case ResourceType.Workspaceitem: { - return NormalizedWorkspaceItem - } case ResourceType.EPerson: { return NormalizedEPerson } @@ -61,23 +58,23 @@ export class NormalizedObjectFactory { case ResourceType.MetadataField: { return NormalizedGroup } + case ResourceType.Workspaceitem: { + return NormalizedWorkspaceItem + } case ResourceType.Workflowitem: { return NormalizedWorkflowItem } - case ResourceType.BitstreamFormat: { - return NormalizedBitstreamFormat - } case ResourceType.SubmissionDefinition: case ResourceType.SubmissionDefinitions: { - return SubmissionDefinitionsModel + return NormalizedSubmissionDefinitionsModel } case ResourceType.SubmissionForm: case ResourceType.SubmissionForms: { - return SubmissionFormsModel + return NormalizedSubmissionFormsModel } case ResourceType.SubmissionSection: case ResourceType.SubmissionSections: { - return SubmissionSectionModel + return NormalizedSubmissionSectionModel } default: { return undefined; diff --git a/src/app/core/cache/models/normalized-object.model.ts b/src/app/core/cache/models/normalized-object.model.ts index de04572dcd..6ac8985d64 100644 --- a/src/app/core/cache/models/normalized-object.model.ts +++ b/src/app/core/cache/models/normalized-object.model.ts @@ -13,11 +13,8 @@ export abstract class NormalizedObject implements Cac self: string; /** - * The universally unique identifier of this Object + * A string representing the kind of DSpaceObject, e.g. community, item, … */ - @autoserialize - uuid: string; - @autoserialize type: ResourceType; 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 02e8352622..9438c1da0a 100644 --- a/src/app/core/cache/models/normalized-resource-policy.model.ts +++ b/src/app/core/cache/models/normalized-resource-policy.model.ts @@ -1,10 +1,9 @@ import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { ResourcePolicy } from '../../shared/resource-policy.model'; -import { mapsTo, relationship } from '../builders/build-decorators'; +import { mapsTo } from '../builders/build-decorators'; import { NormalizedObject } from './normalized-object.model'; import { IDToUUIDSerializer } from '../id-to-uuid-serializer'; -import { ResourceType } from '../../shared/resource-type'; import { ActionType } from './action-type.model'; /** diff --git a/src/app/core/cache/response.models.ts b/src/app/core/cache/response.models.ts index 5640ac54d2..a734eba812 100644 --- a/src/app/core/cache/response.models.ts +++ b/src/app/core/cache/response.models.ts @@ -11,8 +11,9 @@ import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstream import { AuthStatus } from '../auth/models/auth-status.model'; import { MetadataSchema } from '../metadata/metadataschema.model'; import { MetadataField } from '../metadata/metadatafield.model'; -import { NormalizedObject } from './models/normalized-object.model'; import { PaginatedList } from '../data/paginated-list'; +import { SubmissionObject } from '../submission/models/submission-object.model'; +import { DSpaceObject } from '../shared/dspace-object.model'; /* tslint:disable:max-classes-per-file */ export class RestResponse { @@ -233,7 +234,7 @@ export class PostPatchSuccessResponse extends RestResponse { export class SubmissionSuccessResponse extends RestResponse { constructor( - public dataDefinition: Array, + public dataDefinition: Array, public statusCode: number, public statusText: string, public pageInfo?: PageInfo @@ -244,7 +245,7 @@ export class SubmissionSuccessResponse extends RestResponse { export class EpersonSuccessResponse extends RestResponse { constructor( - public epersonDefinition: NormalizedObject[], + public epersonDefinition: DSpaceObject[], public statusCode: number, public statusText: string, public pageInfo?: PageInfo diff --git a/src/app/core/config/config-response-parsing.service.spec.ts b/src/app/core/config/config-response-parsing.service.spec.ts index 32c29fdda1..7c69f1bdb3 100644 --- a/src/app/core/config/config-response-parsing.service.spec.ts +++ b/src/app/core/config/config-response-parsing.service.spec.ts @@ -6,10 +6,10 @@ import { ConfigRequest } from '../data/request.models'; import { Store } from '@ngrx/store'; import { CoreState } from '../core.reducers'; -import { SubmissionDefinitionsModel } from './models/config-submission-definitions.model'; import { PaginatedList } from '../data/paginated-list'; import { PageInfo } from '../shared/page-info.model'; -import { SubmissionSectionModel } from './models/config-submission-section.model'; +import { NormalizedSubmissionDefinitionsModel } from './models/normalized-config-submission-definitions.model'; +import { NormalizedSubmissionSectionModel } from './models/normalized-config-submission-section.model'; describe('ConfigResponseParsingService', () => { let service: ConfigResponseParsingService; @@ -173,7 +173,7 @@ describe('ConfigResponseParsingService', () => { self: 'https://rest.api/config/submissiondefinitions/traditional/sections' }); const definitions = - Object.assign(new SubmissionDefinitionsModel(), { + Object.assign(new NormalizedSubmissionDefinitionsModel(), { isDefault: true, name: 'traditional', type: 'submissiondefinition', @@ -183,7 +183,7 @@ describe('ConfigResponseParsingService', () => { }, self: 'https://rest.api/config/submissiondefinitions/traditional', sections: new PaginatedList(pageinfo, [ - Object.assign(new SubmissionSectionModel(), { + Object.assign(new NormalizedSubmissionSectionModel(), { header: 'submit.progressbar.describe.stepone', mandatory: true, sectionType: 'submission-form', @@ -198,7 +198,7 @@ describe('ConfigResponseParsingService', () => { }, self: 'https://rest.api/config/submissionsections/traditionalpageone', }), - Object.assign(new SubmissionSectionModel(), { + Object.assign(new NormalizedSubmissionSectionModel(), { header: 'submit.progressbar.describe.steptwo', mandatory: true, sectionType: 'submission-form', @@ -213,7 +213,7 @@ describe('ConfigResponseParsingService', () => { }, self: 'https://rest.api/config/submissionsections/traditionalpagetwo', }), - Object.assign(new SubmissionSectionModel(), { + Object.assign(new NormalizedSubmissionSectionModel(), { header: 'submit.progressbar.upload', mandatory: false, sectionType: 'upload', @@ -228,7 +228,7 @@ describe('ConfigResponseParsingService', () => { }, self: 'https://rest.api/config/submissionsections/upload', }), - Object.assign(new SubmissionSectionModel(), { + Object.assign(new NormalizedSubmissionSectionModel(), { header: 'submit.progressbar.license', mandatory: true, sectionType: 'license', diff --git a/src/app/core/config/models/config-object-factory.ts b/src/app/core/config/models/config-object-factory.ts index 08a10201b9..5dbba7a11f 100644 --- a/src/app/core/config/models/config-object-factory.ts +++ b/src/app/core/config/models/config-object-factory.ts @@ -1,30 +1,29 @@ import { GenericConstructor } from '../../shared/generic-constructor'; - -import { SubmissionSectionModel } from './config-submission-section.model'; -import { SubmissionFormsModel } from './config-submission-forms.model'; -import { SubmissionDefinitionsModel } from './config-submission-definitions.model'; import { ConfigType } from './config-type'; import { ConfigObject } from './config.model'; -import { SubmissionUploadsModel } from './config-submission-uploads.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'; export class ConfigObjectFactory { public static getConstructor(type): GenericConstructor { switch (type) { case ConfigType.SubmissionDefinition: case ConfigType.SubmissionDefinitions: { - return SubmissionDefinitionsModel + return NormalizedSubmissionDefinitionsModel } case ConfigType.SubmissionForm: case ConfigType.SubmissionForms: { - return SubmissionFormsModel + return NormalizedSubmissionFormsModel } case ConfigType.SubmissionSection: case ConfigType.SubmissionSections: { - return SubmissionSectionModel + return NormalizedSubmissionSectionModel } case ConfigType.SubmissionUpload: case ConfigType.SubmissionUploads: { - return SubmissionUploadsModel + return NormalizedSubmissionUploadsModel } default: { return undefined; diff --git a/src/app/core/config/models/config-submission-definitions.model.ts b/src/app/core/config/models/config-submission-definitions.model.ts index 0247f13944..8bbbc90056 100644 --- a/src/app/core/config/models/config-submission-definitions.model.ts +++ b/src/app/core/config/models/config-submission-definitions.model.ts @@ -1,15 +1,17 @@ -import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { ConfigObject } from './config.model'; import { SubmissionSectionModel } from './config-submission-section.model'; import { PaginatedList } from '../../data/paginated-list'; -@inheritSerialization(ConfigObject) export class SubmissionDefinitionsModel extends ConfigObject { - @autoserialize + /** + * A boolean representing if this submission definition is the default or not + */ isDefault: boolean; - @autoserializeAs(SubmissionSectionModel) + /** + * A list of SubmissionSectionModel that are present in this submission definition + */ sections: PaginatedList; } diff --git a/src/app/core/config/models/config-submission-forms.model.ts b/src/app/core/config/models/config-submission-forms.model.ts index 98d3bf9ce7..ee0962f0e9 100644 --- a/src/app/core/config/models/config-submission-forms.model.ts +++ b/src/app/core/config/models/config-submission-forms.model.ts @@ -1,14 +1,20 @@ -import { autoserialize, inheritSerialization } from 'cerialize'; import { ConfigObject } from './config.model'; import { FormFieldModel } from '../../../shared/form/builder/models/form-field.model'; +/** + * An interface that define a form row and its properties. + */ export interface FormRowModel { fields: FormFieldModel[]; } -@inheritSerialization(ConfigObject) +/** + * A model class for a NormalizedObject. + */ export class SubmissionFormsModel extends ConfigObject { - @autoserialize + /** + * An array of [FormRowModel] that are present in this form + */ rows: FormRowModel[]; } diff --git a/src/app/core/config/models/config-submission-section.model.ts b/src/app/core/config/models/config-submission-section.model.ts index 69b5af2d1a..377a8869e1 100644 --- a/src/app/core/config/models/config-submission-section.model.ts +++ b/src/app/core/config/models/config-submission-section.model.ts @@ -1,23 +1,34 @@ -import { autoserialize, inheritSerialization } from 'cerialize'; import { ConfigObject } from './config.model'; import { SectionsType } from '../../../submission/sections/sections-type'; -@inheritSerialization(ConfigObject) +/** + * An interface that define section visibility and its properties. + */ +export interface SubmissionSectionVisibility { + main: any, + other: any +} + export class SubmissionSectionModel extends ConfigObject { - @autoserialize + /** + * The header for this section + */ header: string; - @autoserialize + /** + * A boolean representing if this submission section is the mandatory or not + */ mandatory: boolean; - @autoserialize + /** + * A string representing the kind of section object + */ sectionType: SectionsType; - @autoserialize - visibility: { - main: any, - other: any - } + /** + * The [SubmissionSectionVisibility] object for this section + */ + visibility: SubmissionSectionVisibility } diff --git a/src/app/core/config/models/config-submission-uploads.model.ts b/src/app/core/config/models/config-submission-uploads.model.ts index 0e5b15d388..8bb9ba7f1e 100644 --- a/src/app/core/config/models/config-submission-uploads.model.ts +++ b/src/app/core/config/models/config-submission-uploads.model.ts @@ -1,30 +1,21 @@ -import {autoserialize, autoserializeAs, inheritSerialization} from 'cerialize'; import { ConfigObject } from './config.model'; import { AccessConditionOption } from './config-access-condition-option.model'; -import {SubmissionFormsModel} from './config-submission-forms.model'; +import { SubmissionFormsModel } from './config-submission-forms.model'; -/** - * Normalized model class for the configuration describing the submission upload section - */ -@inheritSerialization(ConfigObject) export class SubmissionUploadsModel extends ConfigObject { /** * A list of available bitstream access conditions */ - @autoserialize accessConditionOptions: AccessConditionOption[]; /** * An object representing the configuration describing the bistream metadata form */ - @autoserializeAs(SubmissionFormsModel) metadata: SubmissionFormsModel; - @autoserialize required: boolean; - @autoserialize maxSize: number; } diff --git a/src/app/core/config/models/config-type.ts b/src/app/core/config/models/config-type.ts index a240035eb9..91371f10f5 100644 --- a/src/app/core/config/models/config-type.ts +++ b/src/app/core/config/models/config-type.ts @@ -1,8 +1,3 @@ -/** - * TODO replace with actual string enum after upgrade to TypeScript 2.4: - * https://github.com/Microsoft/TypeScript/pull/15486 - */ - export enum ConfigType { SubmissionDefinitions = 'submissiondefinitions', SubmissionDefinition = 'submissiondefinition', diff --git a/src/app/core/config/models/config.model.ts b/src/app/core/config/models/config.model.ts index 05b98873c0..81f20a0b3c 100644 --- a/src/app/core/config/models/config.model.ts +++ b/src/app/core/config/models/config.model.ts @@ -1,10 +1,27 @@ -import { autoserialize, inheritSerialization } from 'cerialize'; -import { NormalizedObject } from '../../cache/models/normalized-object.model'; +import { CacheableObject } from '../../cache/object-cache.reducer'; +import { ResourceType } from '../../shared/resource-type'; -@inheritSerialization(NormalizedObject) -export abstract class ConfigObject extends NormalizedObject { +export abstract class ConfigObject implements CacheableObject { - @autoserialize + /** + * The name for this configuration + */ public name: string; + /** + * A string representing the kind of config object + */ + public type: ResourceType; + + /** + * The links to all related resources returned by the rest api. + */ + public _links: { + [name: string]: string + }; + + /** + * The link to the rest endpoint where this config object can be found + */ + self: string; } 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 new file mode 100644 index 0000000000..3887c566c1 --- /dev/null +++ b/src/app/core/config/models/normalized-config-submission-definitions.model.ts @@ -0,0 +1,25 @@ +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; +import { SubmissionSectionModel } from './config-submission-section.model'; +import { PaginatedList } from '../../data/paginated-list'; +import { NormalizedConfigObject } from './normalized-config.model'; +import { SubmissionDefinitionsModel } from './config-submission-definitions.model'; + +/** + * Normalized class for the configuration describing the submission + */ +@inheritSerialization(NormalizedConfigObject) +export class NormalizedSubmissionDefinitionsModel extends NormalizedConfigObject { + + /** + * A boolean representing if this submission definition is the default or not + */ + @autoserialize + isDefault: boolean; + + /** + * A list of SubmissionSectionModel that are present in this submission definition + */ + @autoserializeAs(SubmissionSectionModel) + sections: PaginatedList; + +} 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 new file mode 100644 index 0000000000..a957e8c7fa --- /dev/null +++ b/src/app/core/config/models/normalized-config-submission-forms.model.ts @@ -0,0 +1,16 @@ +import { autoserialize, inheritSerialization } from 'cerialize'; +import { NormalizedConfigObject } from './normalized-config.model'; +import { FormRowModel, SubmissionFormsModel } from './config-submission-forms.model'; + +/** + * Normalized class for the configuration describing the submission form + */ +@inheritSerialization(NormalizedConfigObject) +export class NormalizedSubmissionFormsModel extends NormalizedConfigObject { + + /** + * An array of [FormRowModel] that are present in this form + */ + @autoserialize + rows: FormRowModel[]; +} 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 new file mode 100644 index 0000000000..c876acf607 --- /dev/null +++ b/src/app/core/config/models/normalized-config-submission-section.model.ts @@ -0,0 +1,37 @@ +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'; + +/** + * Normalized class for the configuration describing the submission section + */ +@inheritSerialization(NormalizedConfigObject) +export class NormalizedSubmissionSectionModel extends NormalizedConfigObject { + + /** + * The header for this section + */ + @autoserialize + header: string; + + /** + * A boolean representing if this submission section is the mandatory or not + */ + @autoserialize + mandatory: boolean; + + /** + * A string representing the kind of section object + */ + @autoserialize + sectionType: SectionsType; + + /** + * The [SubmissionSectionVisibility] object for this section + */ + @autoserialize + visibility: SubmissionSectionVisibility + +} diff --git a/src/app/core/config/models/normalized-config-submission-uploads.model.ts b/src/app/core/config/models/normalized-config-submission-uploads.model.ts new file mode 100644 index 0000000000..e49171d6a7 --- /dev/null +++ b/src/app/core/config/models/normalized-config-submission-uploads.model.ts @@ -0,0 +1,31 @@ +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; +import { AccessConditionOption } from './config-access-condition-option.model'; +import { SubmissionFormsModel } from './config-submission-forms.model'; +import { NormalizedConfigObject } from './normalized-config.model'; +import { SubmissionUploadsModel } from './config-submission-uploads.model'; + +/** + * Normalized class for the configuration describing the submission upload section + */ +@inheritSerialization(NormalizedConfigObject) +export class NormalizedSubmissionUploadsModel extends NormalizedConfigObject { + + /** + * A list of available bitstream access conditions + */ + @autoserialize + accessConditionOptions: AccessConditionOption[]; + + /** + * An object representing the configuration describing the bistream metadata form + */ + @autoserializeAs(SubmissionFormsModel) + metadata: SubmissionFormsModel; + + @autoserialize + required: boolean; + + @autoserialize + maxSize: number; + +} diff --git a/src/app/core/config/models/normalized-config.model.ts b/src/app/core/config/models/normalized-config.model.ts new file mode 100644 index 0000000000..0b75158588 --- /dev/null +++ b/src/app/core/config/models/normalized-config.model.ts @@ -0,0 +1,38 @@ +import { autoserialize, inheritSerialization } from 'cerialize'; +import { NormalizedObject } from '../../cache/models/normalized-object.model'; +import { CacheableObject } from '../../cache/object-cache.reducer'; +import { ResourceType } from '../../shared/resource-type'; + +/** + * Normalized abstract class for a configuration object + */ +@inheritSerialization(NormalizedObject) +export abstract class NormalizedConfigObject implements CacheableObject { + + /** + * The name for this configuration + */ + @autoserialize + public name: string; + + /** + * A string representing the kind of config object + */ + @autoserialize + public type: ResourceType; + + /** + * The links to all related resources returned by the rest api. + */ + @autoserialize + public _links: { + [name: string]: string + }; + + /** + * The link to the rest endpoint where this config object can be found + */ + @autoserialize + self: string; + +} diff --git a/src/app/core/eperson/eperson-response-parsing.service.ts b/src/app/core/eperson/eperson-response-parsing.service.ts index 56429340da..6c591b0b99 100644 --- a/src/app/core/eperson/eperson-response-parsing.service.ts +++ b/src/app/core/eperson/eperson-response-parsing.service.ts @@ -9,9 +9,9 @@ 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 { NormalizedObject } from '../cache/models/normalized-object.model'; import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; import { ResourceType } from '../shared/resource-type'; +import { DSpaceObject } from '../shared/dspace-object.model'; /** * Provides method to parse response from eperson endpoint. @@ -31,7 +31,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(data.payload, request.href); + const epersonDefinition = this.process(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/eperson/eperson.service.ts b/src/app/core/eperson/eperson.service.ts index 6aff82421d..70ecf3f59e 100644 --- a/src/app/core/eperson/eperson.service.ts +++ b/src/app/core/eperson/eperson.service.ts @@ -1,13 +1,12 @@ import { Observable } from 'rxjs'; import { FindAllOptions } from '../data/request.models'; -import { NormalizedObject } from '../cache/models/normalized-object.model'; import { DataService } from '../data/data.service'; import { CacheableObject } from '../cache/object-cache.reducer'; /** * An abstract class that provides methods to make HTTP request to eperson endpoint. */ -export abstract class EpersonService extends DataService { +export abstract class EpersonService extends DataService { public getBrowseEndpoint(options: FindAllOptions): Observable { return this.halService.getEndpoint(this.linkPath); diff --git a/src/app/core/eperson/group-eperson.service.ts b/src/app/core/eperson/group-eperson.service.ts index 0e12c55139..07a1bb6aba 100644 --- a/src/app/core/eperson/group-eperson.service.ts +++ b/src/app/core/eperson/group-eperson.service.ts @@ -9,7 +9,6 @@ import { EpersonService } from './eperson.service'; import { RequestService } from '../data/request.service'; import { FindAllOptions } from '../data/request.models'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { NormalizedGroup } from './models/normalized-group.model'; import { Group } from './models/group.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CoreState } from '../core.reducers'; @@ -25,13 +24,13 @@ import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; * Provides methods to retrieve eperson group resources. */ @Injectable() -export class GroupEpersonService extends EpersonService { +export class GroupEpersonService extends EpersonService { protected linkPath = 'groups'; protected browseEndpoint = ''; protected forceBypassCache = false; constructor( - protected comparator: DSOChangeAnalyzer, + protected comparator: DSOChangeAnalyzer, protected dataBuildService: NormalizedObjectBuildService, protected http: HttpClient, protected notificationsService: NotificationsService, diff --git a/src/app/core/eperson/models/group.model.ts b/src/app/core/eperson/models/group.model.ts index 6ebedba48d..27fa0ef595 100644 --- a/src/app/core/eperson/models/group.model.ts +++ b/src/app/core/eperson/models/group.model.ts @@ -6,5 +6,7 @@ export class Group extends DSpaceObject { public handle: string; + public name: string; + public permanent: boolean; } diff --git a/src/app/core/eperson/models/normalized-eperson.model.ts b/src/app/core/eperson/models/normalized-eperson.model.ts index 1032c84db1..6bb66e93e6 100644 --- a/src/app/core/eperson/models/normalized-eperson.model.ts +++ b/src/app/core/eperson/models/normalized-eperson.model.ts @@ -14,9 +14,6 @@ export class NormalizedEPerson extends NormalizedDSpaceObject implement @autoserialize public handle: string; - @autoserialize - public name: string; - @autoserializeAs(NormalizedGroup) groups: Group[]; diff --git a/src/app/core/eperson/models/normalized-group.model.ts b/src/app/core/eperson/models/normalized-group.model.ts index 34a0da7adf..8cfd24524c 100644 --- a/src/app/core/eperson/models/normalized-group.model.ts +++ b/src/app/core/eperson/models/normalized-group.model.ts @@ -1,4 +1,4 @@ -import { autoserialize, inheritSerialization } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { CacheableObject } from '../../cache/object-cache.reducer'; import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; import { NormalizedDSpaceObject } from '../../cache/models/normalized-dspace-object.model'; @@ -9,6 +9,9 @@ import { Group } from './group.model'; @inheritSerialization(NormalizedDSpaceObject) export class NormalizedGroup extends NormalizedDSpaceObject implements CacheableObject, ListableObject { + @autoserializeAs(NormalizedGroup) + groups: Group[]; + @autoserialize public handle: string; diff --git a/src/app/core/submission/models/normalized-edititem.model.ts b/src/app/core/submission/models/normalized-edititem.model.ts index cb30eead62..5615512399 100644 --- a/src/app/core/submission/models/normalized-edititem.model.ts +++ b/src/app/core/submission/models/normalized-edititem.model.ts @@ -5,6 +5,6 @@ import { EditItem } from './edititem.model'; @mapsTo(EditItem) @inheritSerialization(NormalizedSubmissionObject) -export class NormalizedEditItem extends NormalizedSubmissionObject { +export class NormalizedEditItem extends NormalizedSubmissionObject { } diff --git a/src/app/core/submission/models/normalized-submission-object.model.ts b/src/app/core/submission/models/normalized-submission-object.model.ts index 013ec742e8..8091781760 100644 --- a/src/app/core/submission/models/normalized-submission-object.model.ts +++ b/src/app/core/submission/models/normalized-submission-object.model.ts @@ -1,13 +1,15 @@ import { autoserialize, inheritSerialization } from 'cerialize'; + import { NormalizedDSpaceObject } from '../../cache/models/normalized-dspace-object.model'; import { WorkspaceitemSectionsObject } from './workspaceitem-sections.model'; import { SubmissionObjectError } from './submission-object.model'; +import { DSpaceObject } from '../../shared/dspace-object.model'; /** * An abstract model class for a NormalizedSubmissionObject. */ @inheritSerialization(NormalizedDSpaceObject) -export class NormalizedSubmissionObject extends NormalizedDSpaceObject { +export class NormalizedSubmissionObject extends NormalizedDSpaceObject { /** * The workspaceitem/workflowitem identifier diff --git a/src/app/core/submission/models/normalized-workflowitem.model.ts b/src/app/core/submission/models/normalized-workflowitem.model.ts index 12d33f06c6..0ea4ff6150 100644 --- a/src/app/core/submission/models/normalized-workflowitem.model.ts +++ b/src/app/core/submission/models/normalized-workflowitem.model.ts @@ -7,7 +7,7 @@ import { ResourceType } from '../../shared/resource-type'; @mapsTo(Workflowitem) @inheritSerialization(NormalizedSubmissionObject) -export class NormalizedWorkflowItem extends NormalizedSubmissionObject { +export class NormalizedWorkflowItem extends NormalizedSubmissionObject { @autoserialize @relationship(ResourceType.Collection, false) diff --git a/src/app/core/submission/models/normalized-workspaceitem.model.ts b/src/app/core/submission/models/normalized-workspaceitem.model.ts index 56a956878b..7ec40d6524 100644 --- a/src/app/core/submission/models/normalized-workspaceitem.model.ts +++ b/src/app/core/submission/models/normalized-workspaceitem.model.ts @@ -5,11 +5,12 @@ import { NormalizedSubmissionObject } from './normalized-submission-object.model import { mapsTo, relationship } from '../../cache/builders/build-decorators'; import { NormalizedDSpaceObject } from '../../cache/models/normalized-dspace-object.model'; import { ResourceType } from '../../shared/resource-type'; +import { Workflowitem } from './workflowitem.model'; @mapsTo(Workspaceitem) @inheritSerialization(NormalizedDSpaceObject) @inheritSerialization(NormalizedSubmissionObject) -export class NormalizedWorkspaceItem extends NormalizedSubmissionObject { +export class NormalizedWorkspaceItem extends NormalizedSubmissionObject { @autoserialize @relationship(ResourceType.Collection, false) diff --git a/src/app/core/submission/normalized-submission-object-factory.ts b/src/app/core/submission/normalized-submission-object-factory.ts deleted file mode 100644 index 31cfc074c9..0000000000 --- a/src/app/core/submission/normalized-submission-object-factory.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { SubmissionDefinitionsModel } from '../config/models/config-submission-definitions.model'; -import { SubmissionFormsModel } from '../config/models/config-submission-forms.model'; -import { SubmissionSectionModel } from '../config/models/config-submission-section.model'; -import { GenericConstructor } from '../shared/generic-constructor'; -import { NormalizedBitstream } from '../cache/models/normalized-bitstream.model'; -import { NormalizedBundle } from '../cache/models/normalized-bundle.model'; -import { NormalizedCollection } from '../cache/models/normalized-collection.model'; -import { NormalizedCommunity } from '../cache/models/normalized-community.model'; -import { NormalizedItem } from '../cache/models/normalized-item.model'; -import { NormalizedLicense } from '../cache/models/normalized-license.model'; -import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model'; -import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { ConfigObject } from '../config/models/config.model'; -import { SubmissionResourceType } from './submission-resource-type'; -import { NormalizedResourcePolicy } from '../cache/models/normalized-resource-policy.model'; -import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model'; -import { NormalizedEditItem } from './models/normalized-edititem.model'; -import { ResourceType } from '../shared/resource-type'; -import { NormalizedEPerson } from '../eperson/models/normalized-eperson.model'; -import { NormalizedGroup } from '../eperson/models/normalized-group.model'; - -export class NormalizedSubmissionObjectFactory { - public static getConstructor(type: SubmissionResourceType): GenericConstructor { - switch (type) { - case SubmissionResourceType.Bitstream: { - return NormalizedBitstream - } - case SubmissionResourceType.Bundle: { - return NormalizedBundle - } - case SubmissionResourceType.Item: { - return NormalizedItem - } - case SubmissionResourceType.Collection: { - return NormalizedCollection - } - case SubmissionResourceType.Community: { - return NormalizedCommunity - } - case SubmissionResourceType.ResourcePolicy: { - return NormalizedResourcePolicy - } - case SubmissionResourceType.License: { - return NormalizedLicense - } - case SubmissionResourceType.EPerson: { - return NormalizedEPerson - } - case SubmissionResourceType.Group: { - return NormalizedGroup - } - case SubmissionResourceType.WorkspaceItem: { - return NormalizedWorkspaceItem - } - case SubmissionResourceType.WorkflowItem: { - return NormalizedWorkflowItem - } - case SubmissionResourceType.EditItem: { - return NormalizedEditItem - } - case SubmissionResourceType.SubmissionDefinition: - case SubmissionResourceType.SubmissionDefinitions: { - return SubmissionDefinitionsModel - } - case SubmissionResourceType.SubmissionForm: - case SubmissionResourceType.SubmissionForms: { - return SubmissionFormsModel - } - case SubmissionResourceType.SubmissionSection: - case SubmissionResourceType.SubmissionSections: { - return SubmissionSectionModel - } - default: { - return undefined; - } - } - } -} diff --git a/src/app/core/submission/submission-response-parsing.service.ts b/src/app/core/submission/submission-response-parsing.service.ts index c9c944d74d..abce34808e 100644 --- a/src/app/core/submission/submission-response-parsing.service.ts +++ b/src/app/core/submission/submission-response-parsing.service.ts @@ -10,13 +10,13 @@ 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 { NormalizedSubmissionObjectFactory } from './normalized-submission-object-factory'; -import { NormalizedObject } from '../cache/models/normalized-object.model'; import { SubmissionResourceType } from './submission-resource-type'; import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model'; import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model'; import { NormalizedEditItem } from './models/normalized-edititem.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 function isServerFormValue(obj: any): boolean { return (typeof obj === 'object' @@ -66,7 +66,7 @@ export function normalizeSectionData(obj: any) { @Injectable() export class SubmissionResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { - protected objectFactory = NormalizedSubmissionObjectFactory; + protected objectFactory = NormalizedObjectFactory; protected toCache = false; constructor(@Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, @@ -78,7 +78,7 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService if (isNotEmpty(data.payload) && isNotEmpty(data.payload._links) && (data.statusCode === 201 || data.statusCode === 200)) { - const dataDefinition = this.processResponse(data.payload, request.href); + const dataDefinition = this.processResponse(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 @@ -94,7 +94,7 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService } protected processResponse(data: any, requestHref: string): any[] { - const dataDefinition = this.process(data, requestHref); + const dataDefinition = this.process(data, requestHref); const normalizedDefinition = Array.of(); const processedList = Array.isArray(dataDefinition) ? dataDefinition : Array.of(dataDefinition); diff --git a/src/app/core/submission/workflowitem-data.service.ts b/src/app/core/submission/workflowitem-data.service.ts index 4468ffdf04..266d2b5411 100644 --- a/src/app/core/submission/workflowitem-data.service.ts +++ b/src/app/core/submission/workflowitem-data.service.ts @@ -6,7 +6,6 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { CoreState } from '../core.reducers'; import { DataService } from '../data/data.service'; import { RequestService } from '../data/request.service'; -import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model'; import { Workflowitem } from './models/workflowitem.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { FindAllOptions } from '../data/request.models'; @@ -16,12 +15,12 @@ import { ObjectCacheService } from '../cache/object-cache.service'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; @Injectable() -export class WorkflowitemDataService extends DataService { +export class WorkflowitemDataService extends DataService { protected linkPath = 'workflowitems'; protected forceBypassCache = true; constructor( - protected comparator: DSOChangeAnalyzer, + protected comparator: DSOChangeAnalyzer, protected dataBuildService: NormalizedObjectBuildService, protected halService: HALEndpointService, protected http: HttpClient, diff --git a/src/app/core/submission/workspaceitem-data.service.ts b/src/app/core/submission/workspaceitem-data.service.ts index 2edd086fd0..119bfb66cc 100644 --- a/src/app/core/submission/workspaceitem-data.service.ts +++ b/src/app/core/submission/workspaceitem-data.service.ts @@ -7,7 +7,6 @@ import { CoreState } from '../core.reducers'; import { DataService } from '../data/data.service'; import { RequestService } from '../data/request.service'; import { Workspaceitem } from './models/workspaceitem.model'; -import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { FindAllOptions } from '../data/request.models'; import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service'; @@ -16,12 +15,12 @@ import { ObjectCacheService } from '../cache/object-cache.service'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; @Injectable() -export class WorkspaceitemDataService extends DataService { +export class WorkspaceitemDataService extends DataService { protected linkPath = 'workspaceitems'; protected forceBypassCache = true; constructor( - protected comparator: DSOChangeAnalyzer, + protected comparator: DSOChangeAnalyzer, protected dataBuildService: NormalizedObjectBuildService, protected halService: HALEndpointService, protected http: HttpClient, diff --git a/src/app/shared/notifications/notifications.service.ts b/src/app/shared/notifications/notifications.service.ts index 4a8d5fb912..85c9d26dfb 100644 --- a/src/app/shared/notifications/notifications.service.ts +++ b/src/app/shared/notifications/notifications.service.ts @@ -52,6 +52,7 @@ export class NotificationsService { options: Partial = {}, html: boolean = false): INotification { const notificationOptions = { ...this.getDefaultOptions(), ...options }; + console.log(notificationOptions); const notification = new Notification(uniqueId(), NotificationType.Info, title, content, notificationOptions, html); this.add(notification); return notification; diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index f892a554e9..7dde19a306 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -772,7 +772,7 @@ describe('SubmissionService test suite', () => { it('should return true/false when section is loading/not loading', fakeAsync(() => { spyOn((service as any).translate, 'get').and.returnValue(observableOf('test')); - spyOn((service as any).notificationsService, 'info').and.callThrough(); + spyOn((service as any).notificationsService, 'info'); service.notifyNewSection(submissionId, sectionId); flush(); @@ -864,7 +864,7 @@ describe('SubmissionService test suite', () => { }) ); - const result = service.retrieveSubmission('826').subscribe((r) => { + service.retrieveSubmission('826').subscribe((r) => { expect(r).toEqual(new RemoteData( false, false,