Adds source to the each item in the export concordances file.
This commit is contained in:
+32
-3
@@ -1,8 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Rsdo.Concordancer.Core.Constants;
|
using Rsdo.Concordancer.Core.Constants;
|
||||||
using Rsdo.Concordancer.Core.Interfaces;
|
using Rsdo.Concordancer.Core.Interfaces;
|
||||||
using Rsdo.Concordancer.Core.Model;
|
using Rsdo.Concordancer.Core.Model;
|
||||||
@@ -11,6 +14,7 @@ using Rsdo.Concordancer.Core.Search.Queries.Concordances;
|
|||||||
using Rsdo.Concordancer.ServiceModel.Requests.Concordances;
|
using Rsdo.Concordancer.ServiceModel.Requests.Concordances;
|
||||||
using Rsdo.Concordancer.ServiceModel.Shared;
|
using Rsdo.Concordancer.ServiceModel.Shared;
|
||||||
using Rsdo.Concordancer.ServiceModel.Types;
|
using Rsdo.Concordancer.ServiceModel.Types;
|
||||||
|
using Rsdo.Concordancer.Services.Framework.DbContext;
|
||||||
using Rsdo.Concordancer.Services.Search.QueryFactories;
|
using Rsdo.Concordancer.Services.Search.QueryFactories;
|
||||||
using Rsdo.Concordancer.Services.Services.ParagraphService;
|
using Rsdo.Concordancer.Services.Services.ParagraphService;
|
||||||
|
|
||||||
@@ -18,15 +22,18 @@ namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances;
|
|||||||
|
|
||||||
public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequestHandler<ExportConcordances, ExportConcordancesResponse>
|
public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequestHandler<ExportConcordances, ExportConcordancesResponse>
|
||||||
{
|
{
|
||||||
|
private readonly CorpusDbContext dbContext;
|
||||||
private readonly IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory;
|
private readonly IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory;
|
||||||
private readonly ISearchEngine searchEngine;
|
private readonly ISearchEngine searchEngine;
|
||||||
|
|
||||||
public ExportConcordancesHandler(
|
public ExportConcordancesHandler(
|
||||||
|
CorpusDbContext dbContext,
|
||||||
IParagraphService paragraphService,
|
IParagraphService paragraphService,
|
||||||
IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory,
|
IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory,
|
||||||
ISearchEngine searchEngine)
|
ISearchEngine searchEngine)
|
||||||
: base(paragraphService)
|
: base(paragraphService)
|
||||||
{
|
{
|
||||||
|
this.dbContext = dbContext;
|
||||||
this.queryFactory = queryFactory;
|
this.queryFactory = queryFactory;
|
||||||
this.searchEngine = searchEngine;
|
this.searchEngine = searchEngine;
|
||||||
}
|
}
|
||||||
@@ -42,6 +49,9 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
|||||||
// Get search items
|
// Get search items
|
||||||
var items = await GetItems(query, result.EntityIds);
|
var items = await GetItems(query, result.EntityIds);
|
||||||
|
|
||||||
|
// Get sources
|
||||||
|
var sources = await GetSources(items);
|
||||||
|
|
||||||
// Export
|
// Export
|
||||||
var stream = new MemoryStream();
|
var stream = new MemoryStream();
|
||||||
await using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
|
await using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
|
||||||
@@ -52,7 +62,7 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
|||||||
// Write items
|
// Write items
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
{
|
{
|
||||||
await WriteItem(writer, item);
|
await WriteItem(writer, item, sources[item.ParagraphId]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,6 +75,21 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<Dictionary<Guid, string>> GetSources(List<SearchConcordancesResponseItem> items)
|
||||||
|
{
|
||||||
|
var paragraphIds = items.Select(i => i.ParagraphId).ToList();
|
||||||
|
var sources = await dbContext.Paragraph.Include(p => p.Text)
|
||||||
|
.Where(p => paragraphIds.Contains(p.Id))
|
||||||
|
.Select(
|
||||||
|
p => new
|
||||||
|
{
|
||||||
|
p.Id,
|
||||||
|
p.Text.SourceFile,
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
return sources.ToDictionary(x => x.Id, x => Path.GetFileNameWithoutExtension(x.SourceFile));
|
||||||
|
}
|
||||||
|
|
||||||
private static async Task WriteContext(StreamWriter writer, List<ConcordanceToken> tokens)
|
private static async Task WriteContext(StreamWriter writer, List<ConcordanceToken> tokens)
|
||||||
{
|
{
|
||||||
if (tokens != null)
|
if (tokens != null)
|
||||||
@@ -91,16 +116,20 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
|||||||
await writer.WriteAsync("Iskani niz");
|
await writer.WriteAsync("Iskani niz");
|
||||||
await writer.WriteAsync("\t");
|
await writer.WriteAsync("\t");
|
||||||
await writer.WriteAsync("Desno besedilo");
|
await writer.WriteAsync("Desno besedilo");
|
||||||
|
await writer.WriteAsync("\t");
|
||||||
|
await writer.WriteAsync("Vir");
|
||||||
await writer.WriteLineAsync();
|
await writer.WriteLineAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task WriteItem(StreamWriter writer, SearchConcordancesResponseItem item)
|
private static async Task WriteItem(StreamWriter writer, SearchConcordancesResponseItem item, string source)
|
||||||
{
|
{
|
||||||
await WriteContext(writer, item.LeftContext);
|
await WriteContext(writer, item.LeftContext);
|
||||||
await writer.WriteAsync("\t");
|
await writer.WriteAsync("\t");
|
||||||
await writer.WriteAsync(item.CenterContext.Form);
|
await writer.WriteAsync(item.CenterContext.Form);
|
||||||
await writer.WriteAsync("\t");
|
await writer.WriteAsync("\t");
|
||||||
await WriteContext(writer, item.RightContext);
|
await WriteContext(writer, item.RightContext);
|
||||||
|
await writer.WriteAsync("\t");
|
||||||
|
await writer.WriteAsync(source);
|
||||||
await writer.WriteLineAsync();
|
await writer.WriteLineAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user