Source: models/models.base.js

  1. /**
  2. * Base object.
  3. *
  4. * @module models/base
  5. */
  6. export default class ModelsBase {
  7. constructor() {
  8. this._id = -1;
  9. }
  10. /**
  11. * Merge 2 arrays of models.
  12. * Merge the target array into the reference array.
  13. *
  14. * @param {Array.<Models>} referenceArray - Array to be merge against
  15. * @param {Array.<Models>} targetArray - Array to be merged against reference.
  16. *
  17. * @return {boolean} True if merge was sucessful. False if something went wrong.
  18. */
  19. mergeModels(referenceArray, targetArray) {
  20. if (!(this._validateModelArray(referenceArray) && this._validateModelArray(targetArray))) {
  21. window.console.log('invalid inputs provided.');
  22. return false;
  23. }
  24. for (let i = 0, targetLength = targetArray.length; i < targetLength; i++) {
  25. // test targetArray against existing targetArray
  26. for (let j = 0, refLength = referenceArray.length; j < refLength; j++) {
  27. if (referenceArray[j].merge(targetArray[i])) {
  28. // merged successfully
  29. break;
  30. } else if (j === referenceArray.length - 1) {
  31. // last merge was not successful
  32. // this is a new targetArray
  33. referenceArray.push(targetArray[i]);
  34. }
  35. }
  36. }
  37. return true;
  38. }
  39. /**
  40. * Merge model against current model.
  41. */
  42. merge(model) {
  43. // make sure model is valid
  44. if (!this.validate(model)) {
  45. return false;
  46. }
  47. // they can be merged if they match
  48. if (this._id === model._id) {
  49. return true;
  50. }
  51. return false;
  52. }
  53. /**
  54. * Validate a model.
  55. *
  56. * @return {boolean} True if model is valid. False if not.
  57. */
  58. validate(model) {
  59. if (!(model && model !== null && typeof model.merge === 'function')) {
  60. return false;
  61. }
  62. return true;
  63. }
  64. /**
  65. * Validate array of models.
  66. *
  67. * @param {Array.<Models>} modelArray - Array containing models.
  68. *
  69. * @return {boolean} True if array is valid. False if not.
  70. */
  71. _validateModelArray(modelArray) {
  72. if (!(modelArray !== null && Array === modelArray.constructor)) {
  73. window.console.log('invalid model array provided.');
  74. return false;
  75. }
  76. for (let i = 0; i < modelArray.length; i++) {
  77. if (
  78. !(
  79. modelArray[i] &&
  80. modelArray[i] !== null &&
  81. typeof modelArray[i].validate === 'function' &&
  82. modelArray[i].validate(modelArray[i])
  83. )
  84. ) {
  85. return false;
  86. }
  87. }
  88. return true;
  89. }
  90. }