using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using LuhnNet; using Newtonsoft.Json; //Do not remove - Required for JObject using Newtonsoft.Json.Linq; using Shinydocs.CognitiveToolkit.Core.Tools.ScrollTools.RunScript; using Shinydocs.CognitiveToolkit.Scripting; using Shinydocs.CognitiveToolkit.Utilities; //Do not remove - Required for JObject public class NormalizeExtension : IScript { private static string Version = "2.6.0"; // ScriptLogger allows you to log to the same index as the rest of the cognitive toolkit. // See https://github.com/serilog/serilog/wiki/Writing-Log-Events for message formatting information private readonly ScriptLogger _log = new ScriptLogger(); private string[] _fieldsToReturn = { "id", "extension" }; private string _indexName; private string _query; private string _serverUrl; private int _threads; private int _nodesPerRequest; private RunScriptDocumentUpdater _documentUpdater; /// /// SetUp Called before executing run /// /// Array of command line arguments passed in, excluding the Script File Path ("-p") and Script Class Name ("-c") parameters used by the RunScript tool public void SetUp(string[] arguments) { _log.Information(string.Format("Using version {0}", Version)); Console.WriteLine(string.Format("Using version {0}", Version)); try { Dictionary options; // OptionsParser will parse an array of arguments into a dictionary of flags and values if (OptionsParser.TryParse(arguments, out options)) { OptionsParser.ParseStandardOptions(options, out _serverUrl, out _indexName, out _threads, out _nodesPerRequest); OptionsParser.ParseQueryOption(options, out _query); _documentUpdater = new RunScriptDocumentUpdater(_serverUrl, _indexName, _fieldsToReturn, _nodesPerRequest, _threads); _log.Information(string.Format("Tool setup method -q = {0} -u = {1} " + "-i = {2} ", _query, _serverUrl, _indexName)); } else { throw new ArgumentException("Failed to parse arguments. Tool requires exactly the following parameters -q (Query or Path to QueryFile) -u (Index Server Url) -i (IndexName)."); } } catch (Exception ex) { Console.WriteLine("Tool requires exactly the following parameters -q (Query or Path to QueryFile) -u (Index Server Url) -i (IndexName). " + ex.Message); throw; } } public void Run() { _documentUpdater.Update(_query, LowerCaseAndNoLeadingPeriod); } public Dictionary LowerCaseAndNoLeadingPeriod(JObject document) { var extension = document["extension"].ToString(); if (extension.StartsWith(".")) extension = extension.Substring(1); document["extension"] = extension.ToLower(); return new Dictionary() { {"extension", document["extension"]} }; } public void TearDown() { } }