DocumentEntryComparer.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Collections.Generic;
  3. using BO.AppServer.Metadata.Dto;
  4. using BO.AppServer.Metadata.Enums;
  5. using BO.Console.Commands.Workspace.Sync.Diff;
  6. using Quadarax.Foundation.Core.Data.Diff;
  7. namespace BO.Console.Commands.Workspace.Sync
  8. {
  9. internal class DocumentEntryComparer
  10. {
  11. #region *** Private fields ***
  12. private IList<DocumentItem> _local = new List<DocumentItem>();
  13. private IList<DocumentItem> _remote = new List<DocumentItem>();
  14. #endregion
  15. #region *** Public Operations ***
  16. public void AddLocalDocument(string directoryName, string fileName, long fileSize)
  17. {
  18. var doc = ParseDocumentDirectory(directoryName);
  19. if (doc != null)
  20. {
  21. var art = ParseArtifactFileName(fileName);
  22. if (art != null)
  23. {
  24. var item = new DocumentItem();
  25. item.ArtName = art.Item3;
  26. item.ArtExt = art.Item4;
  27. item.ArtId = art.Item1;
  28. item.ArtLength = fileSize;
  29. item.DocId = doc.Item1;
  30. item.DocName = doc.Item2;
  31. item.ArtType = art.Item2.ToLower() == "input" ? ArtifactTypeEnum.Input : ArtifactTypeEnum.Output;
  32. item.IsLocal = true;
  33. _local.Add(item);
  34. }
  35. }
  36. }
  37. public void AddLocalDocumentNew(string fileName, bool bIn = true)
  38. {
  39. }
  40. public void AddRemoteDocument(DocumentRDto document)
  41. {
  42. foreach (var art in document.Artifacts)
  43. {
  44. var item = new DocumentItem();
  45. item.ArtName = art.Name;
  46. item.ArtExt = art.Extension;
  47. item.ArtId = art.Id;
  48. item.ArtLength = art.Length;
  49. item.DocId = document.Id;
  50. item.DocName = document.Name;
  51. item.IsLocal = false;
  52. art.Type = art.Type;
  53. _remote.Add(item);
  54. }
  55. }
  56. public DiffComparator<DocumentEntry> GetComparator()
  57. {
  58. return new DiffComparator<DocumentEntry>(_local, _remote);
  59. }
  60. public bool ValidateDocumentDirectory(string directoryName)
  61. {
  62. return ParseDocumentDirectory(directoryName)!=null;
  63. }
  64. public bool ValidateArtifactFileName(string artifactFileName)
  65. {
  66. return ParseArtifactFileName(artifactFileName) != null;
  67. }
  68. #endregion
  69. //<documentId:8>.<document_name_normalized>
  70. private Tuple<long, string> ParseDocumentDirectory(string directoryName)
  71. {
  72. var parts = directoryName.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
  73. if (parts.Length != 2)
  74. return null;
  75. if (!long.TryParse(parts[0], out var id))
  76. return null;
  77. return new Tuple<long, string>(id, parts[1]);
  78. }
  79. // <arifact_id>.<artifact_type>.<artifact_name>.<artifaxt_ext>
  80. private Tuple<long, string, string, string> ParseArtifactFileName(string artifactFileName)
  81. {
  82. var parts = artifactFileName.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
  83. if (parts.Length != 4)
  84. return null;
  85. if (!long.TryParse(parts[0], out var id))
  86. return null;
  87. return new Tuple<long, string, string, string>(id, parts[1], parts[2], parts[3]);
  88. }
  89. }
  90. }