Skip to content

Commit

Permalink
Added extension methods that will help to identify general ONIX files…
Browse files Browse the repository at this point in the history
… and (in particular) ONIX 3.0 files.
  • Loading branch information
jaerith committed Feb 23, 2021
1 parent 6900c2f commit bab55cd
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 5 deletions.
102 changes: 102 additions & 0 deletions OnixData/Extensions/OnixParserExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public static class OnixParserExtensions

private const string CONST_FILENAME_SKIP_REPLACE_MARKER = "SKIPREPLACECHARENC";

private const string CONST_ONIX_MSG_REF_TAG_START = "<" + OnixParser.CONST_ONIX_MESSAGE_REFERENCE_TAG;
private const string CONST_ONIX_MSG_SHORT_TAG_START = "<" + OnixParser.CONST_ONIX_MESSAGE_SHORT_TAG;

#endregion

static public bool DebugFlag = true;
Expand Down Expand Up @@ -293,6 +296,105 @@ public static int IndexOf(this StringBuilder sb, string value, int startIndex, b
return -1;
}

/// <summary>
/// Indicates whether or not the provided file is an ONIX file
/// </summary>
/// <param name="poTargetFile">The file being examined</param>
/// <returns>Boolean that indicates whether or not the file is an ONIX file</returns>
public static bool IsOnixFile(FileInfo poTargetFile)
{
string sFirstBlock = "";

using (var stream = File.OpenRead(poTargetFile.FullName))
{
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
char[] buffer = new char[256];

int n = reader.ReadBlock(buffer, 0, 256);

char[] result = new char[n];
Array.Copy(buffer, result, n);

sFirstBlock = new string(result);
}
}

return IsOnixFile(sFirstBlock);
}

/// <summary>
/// Indicates whether or not the provided string is an ONIX body
/// </summary>
/// <param name="psTargetFileContents">The string body being examined</param>
/// <returns>Boolean that indicates whether or not the string body is an ONIX type</returns>
public static bool IsOnixFile(string psTargetFileContents)
{
string sTargetTag = "";

if (psTargetFileContents.Contains(CONST_ONIX_MSG_SHORT_TAG_START))
sTargetTag = CONST_ONIX_MSG_SHORT_TAG_START;
else if (psTargetFileContents.Contains(CONST_ONIX_MSG_REF_TAG_START))
sTargetTag = CONST_ONIX_MSG_REF_TAG_START;

return (!String.IsNullOrEmpty(sTargetTag));
}

/// <summary>
/// Indicates whether or not the provided file is an ONIX 3.0 file
/// </summary>
/// <param name="poTargetFile">The file being examined</param>
/// <returns>Boolean that indicates whether or not the file is an ONIX 3.0 file</returns>
public static bool IsOnixVersion3File(FileInfo poTargetFile)
{
string sFirstBlock = "";

using (var stream = File.OpenRead(poTargetFile.FullName))
{
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
char[] buffer = new char[256];

int n = reader.ReadBlock(buffer, 0, 256);

char[] result = new char[n];
Array.Copy(buffer, result, n);

sFirstBlock = new string(result);
}
}

return IsOnixVersion3File(sFirstBlock);
}

/// <summary>
/// Indicates whether or not the provided string is an ONIX 3.0 body
/// </summary>
/// <param name="psTargetFileContents">The string body being examined</param>
/// <returns>Boolean that indicates whether or not the string body is an ONIX 3.0 type</returns>
public static bool IsOnixVersion3File(string psTargetFileContents)
{
bool bVersion3File = false;
string sTargetTag = "";

if (psTargetFileContents.Contains(CONST_ONIX_MSG_SHORT_TAG_START))
sTargetTag = CONST_ONIX_MSG_SHORT_TAG_START;
else if (psTargetFileContents.Contains(CONST_ONIX_MSG_REF_TAG_START))
sTargetTag = CONST_ONIX_MSG_REF_TAG_START;

if (!String.IsNullOrEmpty(sTargetTag))
{
int nONIXMsgStartIdx = psTargetFileContents.IndexOf(sTargetTag);
int nONIXMsgEndIdx = psTargetFileContents.IndexOf(">", nONIXMsgStartIdx);

string sONIXMsgTag = psTargetFileContents.Substring(nONIXMsgStartIdx, (nONIXMsgEndIdx - nONIXMsgStartIdx));
if (sONIXMsgTag.Contains("3.0"))
bVersion3File = true;
}

return bVersion3File;
}

/// <summary>
/// Removes all ONIX commentary bodies (which is useful for data providers who consistently
/// send problematic garbage data in large text segments)
Expand Down
10 changes: 5 additions & 5 deletions OnixData/OnixParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public class OnixParser : IDisposable, IEnumerable
{
#region CONSTANTS

private const int CONST_DTD_REFERENCE_LENGTH = 500;
public const int CONST_DTD_REFERENCE_LENGTH = 500;

private const string CONST_ONIX_MESSAGE_REFERENCE_TAG = "ONIXMessage";
private const string CONST_ONIX_MESSAGE_SHORT_TAG = "ONIXmessage";
public const string CONST_ONIX_MESSAGE_REFERENCE_TAG = "ONIXMessage";
public const string CONST_ONIX_MESSAGE_SHORT_TAG = "ONIXmessage";

private const string CONST_ONIX_HEADER_REFERENCE_TAG = "Header";
private const string CONST_ONIX_HEADER_SHORT_TAG = "header";
public const string CONST_ONIX_HEADER_REFERENCE_TAG = "Header";
public const string CONST_ONIX_HEADER_SHORT_TAG = "header";

#endregion

Expand Down

0 comments on commit bab55cd

Please sign in to comment.