-
Notifications
You must be signed in to change notification settings - Fork 8
/
JournalPageToJournalPageDTOMapper.cs
60 lines (51 loc) · 2.4 KB
/
JournalPageToJournalPageDTOMapper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Text.RegularExpressions;
using OSPSuite.Assets;
using OSPSuite.Core.Journal;
using OSPSuite.Core.Services;
using OSPSuite.Presentation.DTO.Journal;
namespace OSPSuite.Presentation.Mappers
{
public interface IJournalPageToJournalPageDTOMapper
{
JournalPageDTO MapFrom(JournalPage journalPage, Func<JournalPage, string> descriptionFunc = null);
void Update(JournalPageDTO journalPageDTO, JournalPage journalPage, Func<JournalPage, string> descriptionFunc = null);
}
public class JournalPageToJournalPageDTOMapper : IJournalPageToJournalPageDTOMapper
{
private readonly DateTimeFormatter _dateTimeFormatter;
public JournalPageToJournalPageDTOMapper()
{
_dateTimeFormatter = new DateTimeFormatter();
}
public JournalPageDTO MapFrom(JournalPage journalPage, Func<JournalPage, string> descriptionFunc = null)
{
var workingJournalItemDTO = new JournalPageDTO(journalPage);
Update(workingJournalItemDTO, journalPage, descriptionFunc);
return workingJournalItemDTO;
}
public void Update(JournalPageDTO journalPageDTO, JournalPage journalPage, Func<JournalPage, string> descriptionFunc = null)
{
if (descriptionFunc == null)
descriptionFunc = x => x.Description;
journalPageDTO.Title = journalPage.Title;
journalPageDTO.CreatedAt = journalPage.CreatedAt;
journalPageDTO.UpdatedAt = journalPage.UpdatedAt;
journalPageDTO.Description = descriptionFunc(journalPage);
journalPageDTO.CreatedBy = journalPage.CreatedBy;
journalPageDTO.UpdatedBy = journalPage.UpdatedBy;
journalPageDTO.Tags = journalPage.Tags;
journalPageDTO.UniqueIndex = journalPage.UniqueIndex;
journalPageDTO.Origin = journalPage.Origin;
journalPageDTO.CreatedAtBy = Captions.Journal.CreatedAtBy(_dateTimeFormatter.Format(journalPage.CreatedAt), journalPage.CreatedBy);
journalPageDTO.UpdatedAtBy = Captions.Journal.UpdatedAtBy(_dateTimeFormatter.Format(journalPage.UpdatedAt), journalPage.UpdatedBy);
journalPageDTO.LineCount = lineCountFor(journalPageDTO.Description);
}
private int lineCountFor(string description)
{
if (string.IsNullOrEmpty(description))
return 0;
return Math.Max(Regex.Matches(description, "<br>", RegexOptions.IgnoreCase).Count + 1, 1);
}
}
}