DocumentEntryComparer.cs 3.3 KB

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