From a5086b8d117cdad0efd2ab8e65e042643dac432e Mon Sep 17 00:00:00 2001
From: lotte <lotte_hofstede@hotmail.com>
Date: Wed, 24 Apr 2019 16:51:46 +0200
Subject: [PATCH] 61949: replacing object factories with decorator

---
 .../workflowitems-edit-page-routing.module.ts |  2 +-
 .../workflowitems-edit-page.module.ts         |  6 ++--
 src/app/app-routing.module.ts                 |  2 +-
 src/app/core/auth/auth-type.ts                |  5 ----
 .../models/normalized-auth-status.model.ts    |  2 ++
 .../normalized-bitstream-format.model.ts      |  3 ++
 .../models/normalized-bitstream.model.ts      |  2 ++
 .../cache/models/normalized-bundle.model.ts   |  2 ++
 .../models/normalized-collection.model.ts     |  2 ++
 .../models/normalized-community.model.ts      |  2 ++
 .../models/normalized-dspace-object.model.ts  |  2 ++
 .../cache/models/normalized-item.model.ts     |  2 ++
 .../cache/models/normalized-license.model.ts  |  3 ++
 .../cache/models/normalized-object-factory.ts |  4 +--
 .../normalized-resource-policy.model.ts       |  3 ++
 ...zed-config-submission-definitions.model.ts |  5 ++++
 src/app/core/core.module.ts                   |  4 +--
 .../models/normalized-eperson.model.ts        |  2 ++
 .../eperson/models/normalized-group.model.ts  |  2 ++
 ...field.model.ts => metadata-field.model.ts} |  9 +-----
 ...hema.model.ts => metadata-schema.model.ts} |  5 ----
 .../normalized-metadata-field.model.ts        | 30 +++++++++++++++++++
 .../normalized-metadata-schema.model.ts       |  5 +++-
 .../core/shared/resource-type.decorator.ts    | 16 ++++++++++
 src/app/core/shared/resource-type.ts          |  5 ++--
 .../models/normalized-workflowitem.model.ts   |  8 +++--
 .../models/normalized-workspaceitem.model.ts  | 10 ++++---
 .../submission/models/workflowitem.model.ts   |  6 ++--
 .../submission/models/workspaceitem.model.ts  |  4 +--
 .../submission/workflowitem-data.service.ts   |  6 ++--
 .../objects/submission-objects.effects.ts     |  8 ++---
 31 files changed, 118 insertions(+), 49 deletions(-)
 delete mode 100644 src/app/core/auth/auth-type.ts
 rename src/app/core/metadata/{metadatafield.model.ts => metadata-field.model.ts} (72%)
 rename src/app/core/metadata/{metadataschema.model.ts => metadata-schema.model.ts} (66%)
 create mode 100644 src/app/core/metadata/normalized-metadata-field.model.ts
 create mode 100644 src/app/core/shared/resource-type.decorator.ts

diff --git a/src/app/+workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/+workflowitems-edit-page/workflowitems-edit-page-routing.module.ts
index aa182eb291..d5df70698c 100644
--- a/src/app/+workflowitems-edit-page/workflowitems-edit-page-routing.module.ts
+++ b/src/app/+workflowitems-edit-page/workflowitems-edit-page-routing.module.ts
@@ -20,4 +20,4 @@ import { SubmissionEditComponent } from '../submission/edit/submission-edit.comp
 /**
  * This module defines the default component to load when navigating to the workflowitems edit page path.
  */
-export class WorkflowitemsEditPageRoutingModule { }
+export class WorkflowItemsEditPageRoutingModule { }
diff --git a/src/app/+workflowitems-edit-page/workflowitems-edit-page.module.ts b/src/app/+workflowitems-edit-page/workflowitems-edit-page.module.ts
index fbb53d8dcc..7a89f18c7d 100644
--- a/src/app/+workflowitems-edit-page/workflowitems-edit-page.module.ts
+++ b/src/app/+workflowitems-edit-page/workflowitems-edit-page.module.ts
@@ -1,12 +1,12 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { SharedModule } from '../shared/shared.module';
-import { WorkflowitemsEditPageRoutingModule } from './workflowitems-edit-page-routing.module';
+import { WorkflowItemsEditPageRoutingModule } from './workflowitems-edit-page-routing.module';
 import { SubmissionModule } from '../submission/submission.module';
 
 @NgModule({
   imports: [
-    WorkflowitemsEditPageRoutingModule,
+    WorkflowItemsEditPageRoutingModule,
     CommonModule,
     SharedModule,
     SubmissionModule,
@@ -16,6 +16,6 @@ import { SubmissionModule } from '../submission/submission.module';
 /**
  * This module handles all modules that need to access the workflowitems edit page.
  */
-export class WorkflowitemsEditPageModule {
+export class WorkflowItemsEditPageModule {
 
 }
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index be956ee895..266839f64b 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -31,7 +31,7 @@ export function getCommunityModulePath() {
       { path: 'logout', loadChildren: './+logout-page/logout-page.module#LogoutPageModule' },
       { path: 'submit', loadChildren: './+submit-page/submit-page.module#SubmitPageModule' },
       { path: 'workspaceitems', loadChildren: './+workspaceitems-edit-page/workspaceitems-edit-page.module#WorkspaceitemsEditPageModule' },
-      { path: 'workflowitems', loadChildren: './+workflowitems-edit-page/workflowitems-edit-page.module#WorkflowitemsEditPageModule' },
+      { path: 'workflowitems', loadChildren: './+workflowitems-edit-page/workflowitems-edit-page.module#WorkflowItemsEditPageModule' },
       { path: '**', pathMatch: 'full', component: PageNotFoundComponent },
     ])
   ],
diff --git a/src/app/core/auth/auth-type.ts b/src/app/core/auth/auth-type.ts
deleted file mode 100644
index f0460449ea..0000000000
--- a/src/app/core/auth/auth-type.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum AuthType {
-  EPerson = 'eperson',
-  Status = 'status',
-  Group = 'group'
-}
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 a13a996604..46d0177fdc 100644
--- a/src/app/core/auth/models/normalized-auth-status.model.ts
+++ b/src/app/core/auth/models/normalized-auth-status.model.ts
@@ -4,9 +4,11 @@ import { mapsTo, relationship } from '../../cache/builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
 import { NormalizedObject } from '../../cache/models/normalized-object.model';
 import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 @mapsTo(AuthStatus)
 @inheritSerialization(NormalizedObject)
+@resourceType(ResourceType.AuthStatus)
 export class NormalizedAuthStatus extends NormalizedObject<AuthStatus> {
   @autoserialize
   id: string;
diff --git a/src/app/core/cache/models/normalized-bitstream-format.model.ts b/src/app/core/cache/models/normalized-bitstream-format.model.ts
index 994792d535..66fbd84176 100644
--- a/src/app/core/cache/models/normalized-bitstream-format.model.ts
+++ b/src/app/core/cache/models/normalized-bitstream-format.model.ts
@@ -5,12 +5,15 @@ import { mapsTo } from '../builders/build-decorators';
 import { IDToUUIDSerializer } from '../id-to-uuid-serializer';
 import { NormalizedObject } from './normalized-object.model';
 import { SupportLevel } from './support-level.model';
+import { resourceType } from '../../shared/resource-type.decorator';
+import { ResourceType } from '../../shared/resource-type';
 
 /**
  * Normalized model class for a Bitstream Format
  */
 @mapsTo(BitstreamFormat)
 @inheritSerialization(NormalizedObject)
+@resourceType(ResourceType.BitstreamFormat)
 export class NormalizedBitstreamFormat extends NormalizedObject<BitstreamFormat> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-bitstream.model.ts b/src/app/core/cache/models/normalized-bitstream.model.ts
index 64a17aae84..c2042878da 100644
--- a/src/app/core/cache/models/normalized-bitstream.model.ts
+++ b/src/app/core/cache/models/normalized-bitstream.model.ts
@@ -4,12 +4,14 @@ import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { Bitstream } from '../../shared/bitstream.model';
 import { mapsTo, relationship } from '../builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * Normalized model class for a DSpace Bitstream
  */
 @mapsTo(Bitstream)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Bitstream)
 export class NormalizedBitstream extends NormalizedDSpaceObject<Bitstream> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-bundle.model.ts b/src/app/core/cache/models/normalized-bundle.model.ts
index 342b13629f..c77a1d027f 100644
--- a/src/app/core/cache/models/normalized-bundle.model.ts
+++ b/src/app/core/cache/models/normalized-bundle.model.ts
@@ -4,12 +4,14 @@ import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { Bundle } from '../../shared/bundle.model';
 import { mapsTo, relationship } from '../builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * Normalized model class for a DSpace Bundle
  */
 @mapsTo(Bundle)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Bundle)
 export class NormalizedBundle extends NormalizedDSpaceObject<Bundle> {
   /**
    * The primary bitstream of this Bundle
diff --git a/src/app/core/cache/models/normalized-collection.model.ts b/src/app/core/cache/models/normalized-collection.model.ts
index ddfcc29a2c..e726a967e7 100644
--- a/src/app/core/cache/models/normalized-collection.model.ts
+++ b/src/app/core/cache/models/normalized-collection.model.ts
@@ -4,12 +4,14 @@ import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { Collection } from '../../shared/collection.model';
 import { mapsTo, relationship } from '../builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * Normalized model class for a DSpace Collection
  */
 @mapsTo(Collection)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Collection)
 export class NormalizedCollection extends NormalizedDSpaceObject<Collection> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-community.model.ts b/src/app/core/cache/models/normalized-community.model.ts
index f561089949..85dce37e82 100644
--- a/src/app/core/cache/models/normalized-community.model.ts
+++ b/src/app/core/cache/models/normalized-community.model.ts
@@ -4,12 +4,14 @@ import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { Community } from '../../shared/community.model';
 import { mapsTo, relationship } from '../builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * Normalized model class for a DSpace Community
  */
 @mapsTo(Community)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Community)
 export class NormalizedCommunity extends NormalizedDSpaceObject<Community> {
 
   /**
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 e12faa4a77..84e3f41f42 100644
--- a/src/app/core/cache/models/normalized-dspace-object.model.ts
+++ b/src/app/core/cache/models/normalized-dspace-object.model.ts
@@ -4,11 +4,13 @@ import { MetadataMap, MetadataMapSerializer } from '../../shared/metadata.models
 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';
 
 /**
  * An model class for a DSpaceObject.
  */
 @mapsTo(DSpaceObject)
+@resourceType(ResourceType.DSpaceObject)
 export class NormalizedDSpaceObject<T extends DSpaceObject> extends NormalizedObject<T> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-item.model.ts b/src/app/core/cache/models/normalized-item.model.ts
index 9e8c034e81..c5be6d8e2e 100644
--- a/src/app/core/cache/models/normalized-item.model.ts
+++ b/src/app/core/cache/models/normalized-item.model.ts
@@ -4,12 +4,14 @@ import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { Item } from '../../shared/item.model';
 import { mapsTo, relationship } from '../builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * Normalized model class for a DSpace Item
  */
 @mapsTo(Item)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Item)
 export class NormalizedItem extends NormalizedDSpaceObject<Item> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-license.model.ts b/src/app/core/cache/models/normalized-license.model.ts
index 02bd1808c8..105a0f288e 100644
--- a/src/app/core/cache/models/normalized-license.model.ts
+++ b/src/app/core/cache/models/normalized-license.model.ts
@@ -2,12 +2,15 @@ import { autoserialize, inheritSerialization } from 'cerialize';
 import { mapsTo } from '../builders/build-decorators';
 import { NormalizedDSpaceObject } from './normalized-dspace-object.model';
 import { License } from '../../shared/license.model';
+import { resourceType } from '../../shared/resource-type.decorator';
+import { ResourceType } from '../../shared/resource-type';
 
 /**
  * Normalized model class for a Collection License
  */
 @mapsTo(License)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.License)
 export class NormalizedLicense extends NormalizedDSpaceObject<License> {
 
   /**
diff --git a/src/app/core/cache/models/normalized-object-factory.ts b/src/app/core/cache/models/normalized-object-factory.ts
index 2a0db803df..b83b39e437 100644
--- a/src/app/core/cache/models/normalized-object-factory.ts
+++ b/src/app/core/cache/models/normalized-object-factory.ts
@@ -59,10 +59,10 @@ export class NormalizedObjectFactory {
       case ResourceType.MetadataField: {
         return NormalizedGroup
       }
-      case ResourceType.Workspaceitem: {
+      case ResourceType.WorkspaceItem: {
         return NormalizedWorkspaceItem
       }
-      case ResourceType.Workflowitem: {
+      case ResourceType.WorkflowItem: {
         return NormalizedWorkflowItem
       }
       case ResourceType.SubmissionDefinition:
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 9438c1da0a..2f779d0773 100644
--- a/src/app/core/cache/models/normalized-resource-policy.model.ts
+++ b/src/app/core/cache/models/normalized-resource-policy.model.ts
@@ -5,12 +5,15 @@ import { mapsTo } from '../builders/build-decorators';
 import { NormalizedObject } from './normalized-object.model';
 import { IDToUUIDSerializer } from '../id-to-uuid-serializer';
 import { ActionType } from './action-type.model';
+import { resourceType } from '../../shared/resource-type.decorator';
+import { ResourceType } from '../../shared/resource-type';
 
 /**
  * Normalized model class for a Resource Policy
  */
 @mapsTo(ResourcePolicy)
 @inheritSerialization(NormalizedObject)
+@resourceType(ResourceType.ResourcePolicy)
 export class NormalizedResourcePolicy extends NormalizedObject<ResourcePolicy> {
 
   /**
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 3887c566c1..0d98132c0f 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
@@ -3,11 +3,16 @@ 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';
+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
  */
+@mapsTo(SubmissionDefinitionsModel)
 @inheritSerialization(NormalizedConfigObject)
+@resourceType(ResourceType.SubmissionDefinitions)
 export class NormalizedSubmissionDefinitionsModel extends NormalizedConfigObject<SubmissionDefinitionsModel> {
 
   /**
diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts
index 6e94028a0a..2ca5af0294 100644
--- a/src/app/core/core.module.ts
+++ b/src/app/core/core.module.ts
@@ -64,7 +64,7 @@ import { RegistryService } from './registry/registry.service';
 import { RegistryMetadataschemasResponseParsingService } from './data/registry-metadataschemas-response-parsing.service';
 import { RegistryMetadatafieldsResponseParsingService } from './data/registry-metadatafields-response-parsing.service';
 import { RegistryBitstreamformatsResponseParsingService } from './data/registry-bitstreamformats-response-parsing.service';
-import { WorkflowitemDataService } from './submission/workflowitem-data.service';
+import { WorkflowItemDataService } from './submission/workflowitem-data.service';
 import { NotificationsService } from '../shared/notifications/notifications.service';
 import { UploaderService } from '../shared/uploader/uploader.service';
 import { FileService } from './shared/file.service';
@@ -152,7 +152,7 @@ const PROVIDERS = [
   UUIDService,
   NotificationsService,
   WorkspaceitemDataService,
-  WorkflowitemDataService,
+  WorkflowItemDataService,
   UploaderService,
   FileService,
   DSpaceObjectDataService,
diff --git a/src/app/core/eperson/models/normalized-eperson.model.ts b/src/app/core/eperson/models/normalized-eperson.model.ts
index ad4b20ee80..01d9ef3681 100644
--- a/src/app/core/eperson/models/normalized-eperson.model.ts
+++ b/src/app/core/eperson/models/normalized-eperson.model.ts
@@ -6,9 +6,11 @@ import { NormalizedDSpaceObject } from '../../cache/models/normalized-dspace-obj
 import { EPerson } from './eperson.model';
 import { mapsTo, relationship } from '../../cache/builders/build-decorators';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 @mapsTo(EPerson)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.EPerson)
 export class NormalizedEPerson extends NormalizedDSpaceObject<EPerson> implements CacheableObject, ListableObject {
 
   /**
diff --git a/src/app/core/eperson/models/normalized-group.model.ts b/src/app/core/eperson/models/normalized-group.model.ts
index f86bec8628..776f248127 100644
--- a/src/app/core/eperson/models/normalized-group.model.ts
+++ b/src/app/core/eperson/models/normalized-group.model.ts
@@ -6,9 +6,11 @@ import { NormalizedDSpaceObject } from '../../cache/models/normalized-dspace-obj
 import { mapsTo, relationship } from '../../cache/builders/build-decorators';
 import { Group } from './group.model';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 @mapsTo(Group)
 @inheritSerialization(NormalizedDSpaceObject)
+@resourceType(ResourceType.Group)
 export class NormalizedGroup extends NormalizedDSpaceObject<Group> implements CacheableObject, ListableObject {
 
   /**
diff --git a/src/app/core/metadata/metadatafield.model.ts b/src/app/core/metadata/metadata-field.model.ts
similarity index 72%
rename from src/app/core/metadata/metadatafield.model.ts
rename to src/app/core/metadata/metadata-field.model.ts
index ba28b59d0e..f773ff8b49 100644
--- a/src/app/core/metadata/metadatafield.model.ts
+++ b/src/app/core/metadata/metadata-field.model.ts
@@ -1,25 +1,18 @@
-import { MetadataSchema } from './metadataschema.model';
-import { autoserialize } from 'cerialize';
 import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
 import { isNotEmpty } from '../../shared/empty.util';
+import { MetadataSchema } from './metadata-schema.model';
 
 export class MetadataField implements ListableObject {
-  @autoserialize
   id: number;
 
-  @autoserialize
   self: string;
 
-  @autoserialize
   element: string;
 
-  @autoserialize
   qualifier: string;
 
-  @autoserialize
   scopeNote: string;
 
-  @autoserialize
   schema: MetadataSchema;
 
   toString(separator: string = '.'): string {
diff --git a/src/app/core/metadata/metadataschema.model.ts b/src/app/core/metadata/metadata-schema.model.ts
similarity index 66%
rename from src/app/core/metadata/metadataschema.model.ts
rename to src/app/core/metadata/metadata-schema.model.ts
index 13fb8e8b4e..d141f56e2c 100644
--- a/src/app/core/metadata/metadataschema.model.ts
+++ b/src/app/core/metadata/metadata-schema.model.ts
@@ -1,16 +1,11 @@
-import { autoserialize } from 'cerialize';
 import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
 
 export class MetadataSchema implements ListableObject {
-  @autoserialize
   id: number;
 
-  @autoserialize
   self: string;
 
-  @autoserialize
   prefix: string;
 
-  @autoserialize
   namespace: string;
 }
diff --git a/src/app/core/metadata/normalized-metadata-field.model.ts b/src/app/core/metadata/normalized-metadata-field.model.ts
new file mode 100644
index 0000000000..29a3376532
--- /dev/null
+++ b/src/app/core/metadata/normalized-metadata-field.model.ts
@@ -0,0 +1,30 @@
+import { autoserialize, deserialize } from 'cerialize';
+import { mapsTo, relationship } from '../cache/builders/build-decorators';
+import { ResourceType } from '../shared/resource-type';
+import { resourceType } from '../shared/resource-type.decorator';
+import { MetadataField } from './metadata-field.model';
+import { NormalizedObject } from '../cache/models/normalized-object.model';
+import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
+
+@mapsTo(MetadataField)
+@resourceType(ResourceType.MetadataField)
+export class NormalizedMetadataField extends NormalizedObject<MetadataField> implements ListableObject {
+  @autoserialize
+  id: number;
+
+  @autoserialize
+  self: string;
+
+  @autoserialize
+  element: string;
+
+  @autoserialize
+  qualifier: string;
+
+  @autoserialize
+  scopeNote: string;
+
+  @deserialize
+  @relationship(ResourceType.MetadataSchema)
+  schema: string;
+}
diff --git a/src/app/core/metadata/normalized-metadata-schema.model.ts b/src/app/core/metadata/normalized-metadata-schema.model.ts
index c121938940..aa6eb6a50a 100644
--- a/src/app/core/metadata/normalized-metadata-schema.model.ts
+++ b/src/app/core/metadata/normalized-metadata-schema.model.ts
@@ -2,12 +2,15 @@ import { autoserialize } from 'cerialize';
 import { NormalizedObject } from '../cache/models/normalized-object.model';
 import { mapsTo } from '../cache/builders/build-decorators';
 import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
-import { MetadataSchema } from './metadataschema.model';
+import { resourceType } from '../shared/resource-type.decorator';
+import { ResourceType } from '../shared/resource-type';
+import { MetadataSchema } from './metadata-schema.model';
 
 /**
  * Normalized class for a DSpace MetadataSchema
  */
 @mapsTo(MetadataSchema)
+@resourceType(ResourceType.MetadataSchema)
 export class NormalizedMetadataSchema extends NormalizedObject<MetadataSchema> implements ListableObject {
   /**
    * The unique identifier for this schema
diff --git a/src/app/core/shared/resource-type.decorator.ts b/src/app/core/shared/resource-type.decorator.ts
new file mode 100644
index 0000000000..da5259b968
--- /dev/null
+++ b/src/app/core/shared/resource-type.decorator.ts
@@ -0,0 +1,16 @@
+import { CacheableObject } from '../cache/object-cache.reducer';
+import { GenericConstructor } from './generic-constructor';
+
+const resourceTypeForObjectMap = new Map();
+export function resourceType(resourceType: string) {
+  return function decorator(objectConstructor: GenericConstructor<CacheableObject>) {
+    if (!objectConstructor) {
+      return;
+    }
+    resourceTypeForObjectMap.set(resourceType, objectConstructor);
+  };
+}
+
+export function rendersSectionType(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 484f1ea6e2..02283a5dde 100644
--- a/src/app/core/shared/resource-type.ts
+++ b/src/app/core/shared/resource-type.ts
@@ -12,12 +12,13 @@ export enum ResourceType {
   MetadataSchema = 'metadataschema',
   MetadataField = 'metadatafield',
   License = 'license',
-  Workflowitem = 'workflowitem',
-  Workspaceitem = 'workspaceitem',
+  WorkflowItem = 'workflowitem',
+  WorkspaceItem = 'workspaceitem',
   SubmissionDefinitions = 'submissiondefinitions',
   SubmissionDefinition = 'submissiondefinition',
   SubmissionForm = 'submissionform',
   SubmissionForms = 'submissionforms',
   SubmissionSections = 'submissionsections',
   SubmissionSection = 'submissionsection',
+  AuthStatus = 'status'
 }
diff --git a/src/app/core/submission/models/normalized-workflowitem.model.ts b/src/app/core/submission/models/normalized-workflowitem.model.ts
index a3fa8992a2..354b8e7c06 100644
--- a/src/app/core/submission/models/normalized-workflowitem.model.ts
+++ b/src/app/core/submission/models/normalized-workflowitem.model.ts
@@ -1,16 +1,18 @@
 import { autoserialize, inheritSerialization } from 'cerialize';
 
 import { mapsTo, relationship } from '../../cache/builders/build-decorators';
-import { Workflowitem } from './workflowitem.model';
+import { WorkflowItem } from './workflowitem.model';
 import { NormalizedSubmissionObject } from './normalized-submission-object.model';
 import { ResourceType } from '../../shared/resource-type';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * An model class for a NormalizedWorkflowItem.
  */
-@mapsTo(Workflowitem)
+@mapsTo(WorkflowItem)
 @inheritSerialization(NormalizedSubmissionObject)
-export class NormalizedWorkflowItem extends NormalizedSubmissionObject<Workflowitem> {
+@resourceType(ResourceType.WorkflowItem)
+export class NormalizedWorkflowItem extends NormalizedSubmissionObject<WorkflowItem> {
 
   /**
    * The collection this workflowitem belonging to
diff --git a/src/app/core/submission/models/normalized-workspaceitem.model.ts b/src/app/core/submission/models/normalized-workspaceitem.model.ts
index 7c15925c98..a381aac00b 100644
--- a/src/app/core/submission/models/normalized-workspaceitem.model.ts
+++ b/src/app/core/submission/models/normalized-workspaceitem.model.ts
@@ -1,19 +1,21 @@
 import { autoserialize, inheritSerialization } from 'cerialize';
 
-import { Workspaceitem } from './workspaceitem.model';
+import { WorkspaceItem } from './workspaceitem.model';
 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';
+import { WorkflowItem } from './workflowitem.model';
+import { resourceType } from '../../shared/resource-type.decorator';
 
 /**
  * An model class for a NormalizedWorkspaceItem.
  */
-@mapsTo(Workspaceitem)
+@mapsTo(WorkspaceItem)
 @inheritSerialization(NormalizedDSpaceObject)
 @inheritSerialization(NormalizedSubmissionObject)
-export class NormalizedWorkspaceItem extends NormalizedSubmissionObject<Workflowitem> {
+@resourceType(ResourceType.WorkspaceItem)
+export class NormalizedWorkspaceItem extends NormalizedSubmissionObject<WorkflowItem> {
 
   /**
    * The collection this workspaceitem belonging to
diff --git a/src/app/core/submission/models/workflowitem.model.ts b/src/app/core/submission/models/workflowitem.model.ts
index f1a0467f43..4a1666fdef 100644
--- a/src/app/core/submission/models/workflowitem.model.ts
+++ b/src/app/core/submission/models/workflowitem.model.ts
@@ -1,7 +1,7 @@
-import { Workspaceitem } from './workspaceitem.model';
+import { WorkspaceItem } from './workspaceitem.model';
 
 /**
- * A model class for a Workflowitem.
+ * A model class for a WorkflowItem.
  */
-export class Workflowitem extends Workspaceitem {
+export class WorkflowItem extends WorkspaceItem {
 }
diff --git a/src/app/core/submission/models/workspaceitem.model.ts b/src/app/core/submission/models/workspaceitem.model.ts
index 6548191ba2..136ca346c1 100644
--- a/src/app/core/submission/models/workspaceitem.model.ts
+++ b/src/app/core/submission/models/workspaceitem.model.ts
@@ -1,8 +1,8 @@
 import { SubmissionObject } from './submission-object.model';
 
 /**
- * A model class for a Workspaceitem.
+ * A model class for a WorkspaceItem.
  */
-export class Workspaceitem extends SubmissionObject {
+export class WorkspaceItem extends SubmissionObject {
 
 }
diff --git a/src/app/core/submission/workflowitem-data.service.ts b/src/app/core/submission/workflowitem-data.service.ts
index e739a62e81..fd769745da 100644
--- a/src/app/core/submission/workflowitem-data.service.ts
+++ b/src/app/core/submission/workflowitem-data.service.ts
@@ -6,7 +6,7 @@ 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 { Workflowitem } from './models/workflowitem.model';
+import { WorkflowItem } from './models/workflowitem.model';
 import { HALEndpointService } from '../shared/hal-endpoint.service';
 import { FindAllOptions } from '../data/request.models';
 import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
@@ -18,12 +18,12 @@ import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service';
  * A service that provides methods to make REST requests with workflowitems endpoint.
  */
 @Injectable()
-export class WorkflowitemDataService extends DataService<Workflowitem> {
+export class WorkflowItemDataService extends DataService<WorkflowItem> {
   protected linkPath = 'workflowitems';
   protected forceBypassCache = true;
 
   constructor(
-    protected comparator: DSOChangeAnalyzer<Workflowitem>,
+    protected comparator: DSOChangeAnalyzer<WorkflowItem>,
     protected dataBuildService: NormalizedObjectBuildService,
     protected halService: HALEndpointService,
     protected http: HttpClient,
diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts
index f5c8887320..ba82fe1e65 100644
--- a/src/app/submission/objects/submission-objects.effects.ts
+++ b/src/app/submission/objects/submission-objects.effects.ts
@@ -30,9 +30,9 @@ import {
 } from './submission-objects.actions';
 import { SectionsService } from '../sections/sections.service';
 import { isEmpty, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
-import { Workspaceitem } from '../../core/submission/models/workspaceitem.model';
+import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
 import { SubmissionService } from '../submission.service';
-import { Workflowitem } from '../../core/submission/models/workflowitem.model';
+import { WorkflowItem } from '../../core/submission/models/workflowitem.model';
 import { NotificationsService } from '../../shared/notifications/notifications.service';
 import { SubmissionObject } from '../../core/submission/models/submission-object.model';
 import { TranslateService } from '@ngx-translate/core';
@@ -265,7 +265,7 @@ export class SubmissionObjectEffects {
     let canDeposit = true;
 
     if (isNotEmpty(response)) {
-      response.forEach((item: Workspaceitem | Workflowitem) => {
+      response.forEach((item: WorkspaceItem | WorkflowItem) => {
         const {errors} = item;
 
         if (errors && !isEmpty(errors)) {
@@ -303,7 +303,7 @@ export class SubmissionObjectEffects {
         this.notificationsService.success(null, this.translate.get('submission.sections.general.save_success_notice'));
       }
 
-      response.forEach((item: Workspaceitem | Workflowitem) => {
+      response.forEach((item: WorkspaceItem | WorkflowItem) => {
 
         let errorsList = Object.create({});
         const {errors} = item;
-- 
GitLab