LongTextHelper
using kCura.WinEDDS;
using kCura.WinEDDS.Exporters;
using Relativity.DataExchange.Export.VolumeManagerV2.Repository;
using Relativity.DataExchange.Service;
using System;
using System.Linq;
using System.Text;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Text
{
public class LongTextHelper
{
private const int _MISSING_EXTRACTED_TEXT_FIELD_ID = -1;
private readonly ExportFile _exportSettings;
private readonly IFieldService _fieldService;
private readonly LongTextRepository _longTextRepository;
public const string EXTRACTED_TEXT_COLUMN_NAME = "ExtractedText";
public LongTextHelper(ExportFile exportSettings, IFieldService fieldService, LongTextRepository longTextRepository)
{
_fieldService = fieldService;
_longTextRepository = longTextRepository;
_exportSettings = exportSettings;
}
public bool IsLongTextField(kCura.WinEDDS.ViewFieldInfo fieldInfo)
{
return IsLongTextField(fieldInfo.FieldType);
}
public bool IsLongTextField(FieldType fieldType)
{
if (fieldType != FieldType.Text)
return fieldType == FieldType.OffTableText;
return true;
}
public string GetTextFromField(ObjectExportInfo artifact, string fieldName)
{
object obj = artifact.Metadata[_fieldService.GetOrdinalIndex(fieldName)];
if (obj is byte[])
obj = Encoding.Unicode.GetString((byte[])obj);
if (obj != null)
return obj.ToString();
return string.Empty;
}
public bool IsTextTooLong(string text)
{
return text == "#KCURA99DF2F0FEB88420388879F1282A55760#";
}
public bool IsTextTooLong(ObjectExportInfo artifact, string fieldName)
{
string textFromField = GetTextFromField(artifact, fieldName);
return IsTextTooLong(textFromField);
}
public bool IsExtractedTextMissing()
{
return _fieldService.GetOrdinalIndex("ExtractedText") >= _fieldService.GetColumns().Length;
}
public int GetFieldArtifactId(string fieldName)
{
if (fieldName == "ExtractedText" && IsExtractedTextMissing()) {
LoadFileType.FileFormat? logFileFormat = _exportSettings.LogFileFormat;
LoadFileType.FileFormat fileFormat = LoadFileType.FileFormat.IPRO_FullText;
if ((logFileFormat.GetValueOrDefault() == fileFormat) & logFileFormat.HasValue)
return -1;
throw new ArgumentException("Field " + fieldName + " not found.");
}
int ordinalIndex = _fieldService.GetOrdinalIndex(fieldName);
return _fieldService.GetColumns()[ordinalIndex].FieldArtifactId;
}
public bool IsTextPrecedenceSet()
{
if (_exportSettings.SelectedTextFields == null || _exportSettings.SelectedTextFields.Length == 0)
return false;
return _exportSettings.SelectedTextFields.Any((kCura.WinEDDS.ViewFieldInfo x) => x != null);
}
public kCura.WinEDDS.ViewFieldInfo GetTextPrecedenceField(ObjectExportInfo artifact)
{
if (_exportSettings.SelectedTextFields != null) {
int fieldArtifactId = (int)artifact.Metadata[_fieldService.GetOrdinalIndex("KCURA FULL TEXT SOURCE")];
return _exportSettings.SelectedTextFields.FirstOrDefault((kCura.WinEDDS.ViewFieldInfo x) => x.FieldArtifactId == fieldArtifactId);
}
return null;
}
public kCura.WinEDDS.ViewFieldInfo GetTextPrecedenceTrueField(ObjectExportInfo artifact, kCura.WinEDDS.ViewFieldInfo field)
{
if (field == null || field.AvfColumnName == "Text Precedence")
return GetTextPrecedenceField(artifact);
return field;
}
public string GetLongTextFileLocation(ObjectExportInfo artifact, int fieldArtifactId)
{
return _longTextRepository.GetTextFileLocation(artifact.ArtifactID, fieldArtifactId);
}
public Encoding GetLongTextFieldFileEncoding(kCura.WinEDDS.ViewFieldInfo field)
{
if (field.IsUnicodeEnabled)
return Encoding.Unicode;
return Encoding.Default;
}
}
}