Moved normalizeSectionData function to SubmissionResponseParsingService

This commit is contained in:
Giuseppe Digilio
2019-02-07 18:47:09 +01:00
parent f6a88d846f
commit 546019b089
3 changed files with 47 additions and 46 deletions

View File

@@ -1,57 +1,13 @@
import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model'; import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model';
import { WorkspaceitemSectionLicenseObject } from './workspaceitem-section-license.model'; import { WorkspaceitemSectionLicenseObject } from './workspaceitem-section-license.model';
import { WorkspaceitemSectionUploadObject } from './workspaceitem-section-upload.model'; import { WorkspaceitemSectionUploadObject } from './workspaceitem-section-upload.model';
import { isNotNull } from '../../../shared/empty.util';
import { WorkspaceitemSectionRecycleObject } from './workspaceitem-section-recycle.model'; import { WorkspaceitemSectionRecycleObject } from './workspaceitem-section-recycle.model';
import { WorkspaceitemSectionDetectDuplicateObject } from './workspaceitem-section-deduplication.model'; import { WorkspaceitemSectionDetectDuplicateObject } from './workspaceitem-section-deduplication.model';
import { FormFieldMetadataValueObject } from '../../../shared/form/builder/models/form-field-metadata-value.model';
export class WorkspaceitemSectionsObject { export class WorkspaceitemSectionsObject {
[name: string]: WorkspaceitemSectionDataType; [name: string]: WorkspaceitemSectionDataType;
} }
export function isServerFormValue(obj: any): boolean {
return (typeof obj === 'object'
&& obj.hasOwnProperty('value')
&& obj.hasOwnProperty('language')
&& obj.hasOwnProperty('authority')
&& obj.hasOwnProperty('confidence')
&& obj.hasOwnProperty('place'))
}
export function normalizeSectionData(obj: any) {
let result: any = obj;
if (isNotNull(obj)) {
// If is an Instance of FormFieldMetadataValueObject normalize it
if (typeof obj === 'object' && isServerFormValue(obj)) {
// If authority property is set normalize as a FormFieldMetadataValueObject object
/* NOTE: Data received from server could have authority property equal to null, but into form
field's model is required a FormFieldMetadataValueObject object as field value, so instantiate it */
result = new FormFieldMetadataValueObject(
obj.value,
obj.language,
obj.authority,
(obj.display || obj.value),
obj.place,
obj.confidence,
obj.otherInformation
);
} else if (Array.isArray(obj)) {
result = [];
obj.forEach((item, index) => {
result[index] = normalizeSectionData(item);
});
} else if (typeof obj === 'object') {
result = Object.create({});
Object.keys(obj)
.forEach((key) => {
result[key] = normalizeSectionData(obj[key]);
});
}
}
return result;
}
export type WorkspaceitemSectionDataType export type WorkspaceitemSectionDataType
= WorkspaceitemSectionUploadObject = WorkspaceitemSectionUploadObject
| WorkspaceitemSectionFormObject | WorkspaceitemSectionFormObject

View File

@@ -14,10 +14,55 @@ import { NormalizedSubmissionObjectFactory } from './normalized-submission-objec
import { NormalizedObject } from '../cache/models/normalized-object.model'; import { NormalizedObject } from '../cache/models/normalized-object.model';
import { SubmissionResourceType } from './submission-resource-type'; import { SubmissionResourceType } from './submission-resource-type';
import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model'; import { NormalizedWorkspaceItem } from './models/normalized-workspaceitem.model';
import { normalizeSectionData } from './models/workspaceitem-sections.model';
import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model'; import { NormalizedWorkflowItem } from './models/normalized-workflowitem.model';
import { NormalizedEditItem } from './models/normalized-edititem.model'; import { NormalizedEditItem } from './models/normalized-edititem.model';
import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model';
export function isServerFormValue(obj: any): boolean {
return (typeof obj === 'object'
&& obj.hasOwnProperty('value')
&& obj.hasOwnProperty('language')
&& obj.hasOwnProperty('authority')
&& obj.hasOwnProperty('confidence')
&& obj.hasOwnProperty('place'))
}
export function normalizeSectionData(obj: any) {
let result: any = obj;
if (isNotNull(obj)) {
// If is an Instance of FormFieldMetadataValueObject normalize it
if (typeof obj === 'object' && isServerFormValue(obj)) {
// If authority property is set normalize as a FormFieldMetadataValueObject object
/* NOTE: Data received from server could have authority property equal to null, but into form
field's model is required a FormFieldMetadataValueObject object as field value, so instantiate it */
result = new FormFieldMetadataValueObject(
obj.value,
obj.language,
obj.authority,
(obj.display || obj.value),
obj.place,
obj.confidence,
obj.otherInformation
);
} else if (Array.isArray(obj)) {
result = [];
obj.forEach((item, index) => {
result[index] = normalizeSectionData(item);
});
} else if (typeof obj === 'object') {
result = Object.create({});
Object.keys(obj)
.forEach((key) => {
result[key] = normalizeSectionData(obj[key]);
});
}
}
return result;
}
/**
* Provides methods to parse response for a submission request.
*/
@Injectable() @Injectable()
export class SubmissionResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class SubmissionResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {

View File

@@ -7,7 +7,7 @@ import { first } from 'rxjs/operators';
import { SectionsService } from '../../sections/sections.service'; import { SectionsService } from '../../sections/sections.service';
import { hasValue, isEmpty, isNotEmpty } from '../../../shared/empty.util'; import { hasValue, isEmpty, isNotEmpty } from '../../../shared/empty.util';
import { Workspaceitem } from '../../../core/submission/models/workspaceitem.model'; import { Workspaceitem } from '../../../core/submission/models/workspaceitem.model';
import { normalizeSectionData } from '../../../core/submission/models/workspaceitem-sections.model'; import { normalizeSectionData } from '../../../core/submission/submission-response-parsing.service';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { UploaderOptions } from '../../../shared/uploader/uploader-options.model'; import { UploaderOptions } from '../../../shared/uploader/uploader-options.model';