apparatus-entries-parser.service.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Injectable } from '@angular/core';
  2. import { ParserRegister } from '.';
  3. import { ApparatusEntry, Reading, Witness, XMLElement } from '../../models/evt-models';
  4. @Injectable({
  5. providedIn: 'root',
  6. })
  7. export class ApparatusEntriesParserService {
  8. private appEntryTagName = 'app';
  9. public parseAppEntries(document: XMLElement) {
  10. const appParser = ParserRegister.get('evt-apparatus-entry-parser');
  11. return Array.from(document.querySelectorAll<XMLElement>(this.appEntryTagName))
  12. .map((appEntry) => appParser.parse(appEntry) as ApparatusEntry);
  13. }
  14. public getSignificantReadings(apps: ApparatusEntry[]) {
  15. const signRdgs = {};
  16. apps.forEach((app) => {
  17. signRdgs[app.id] = app.readings.concat(app.lemma).filter((rdg: Reading) => rdg.significant);
  18. });
  19. return signRdgs;
  20. }
  21. public getSignificantReadingsNumber(signRdgs: { [key: string]: ApparatusEntry[] }) {
  22. const signRdgsNumber = {};
  23. Object.keys(signRdgs).forEach((app) => {
  24. signRdgsNumber[app] = signRdgs[app].length;
  25. });
  26. return signRdgsNumber;
  27. }
  28. public getAppVariance(signRdgsNum: { [key: string]: number }, witList: Witness[]) {
  29. const appsVariance = {};
  30. if (Object.keys(witList).length > 1) {
  31. Object.keys(signRdgsNum).forEach((x) => {
  32. appsVariance[x] = signRdgsNum[x] / Object.keys(witList).length;
  33. });
  34. }
  35. return appsVariance;
  36. }
  37. }