Files
MyMcKesson/TomcatServer/CrossProduct.Core/Utilities.cs
2016-07-27 00:32:34 -04:00

544 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using System.Data;
using System.Collections;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using System.Collections.Specialized;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace CrossProduct.Core
{
/// <summary>
/// generic utility functions available to all crossproducts
/// </summary>
public class Utils
{
static private byte[] Key = { 0x31, 0x02, 0x03, 0x14, 0x05, 0x06, 0x17, 0x08, 0x09, 0x17, 0x11, 0x12, 0x13, 0x14, 0x35, 0x16, 0x31, 0x02, 0x03, 0x14, 0x05, 0x06, 0x17, 0x08, 0x09, 0x17, 0x11, 0x12, 0x13, 0x14, 0x35, 0x16 };
static private byte[] IV = { 0x21, 0x22, 0x33, 0x14, 0x05, 0x06, 0x17, 0x08, 0x09, 0x47, 0x11, 0x52, 0x13, 0x74, 0x15, 0x26 };
/// <summary>
/// Initializes a new instance of the <see cref="Utilities"/> class.
/// </summary>
/// Change Made On: 6/4/2009
public Utils()
{
}
/// <summary>
/// Gets the product version.
/// </summary>
/// <returns></returns>
/// Changed On: 1/24/20081
static public byte[] GetProductVersion() // Named this way on purpose.
{
return Key;
}
/// <summary>
/// Gets the product serial.
/// </summary>
/// <returns></returns>
/// Changed On: 1/24/2008
static public byte[] GetProductSerial() // Named this way on purpose.
{
return IV;
}
/// <summary>
/// Determines whether [is alpha numberic] [the specified input].
/// </summary>
/// <param name="Input">The input.</param>
/// <returns>
/// <c>true</c> if [is alpha numberic] [the specified input]; otherwise, <c>false</c>.
/// </returns>
static public bool IsAlphaNumberic(string Input)
{
foreach (char c in Input)
{
if (char.IsDigit(c))
continue;
if (char.IsLetter(c))
continue;
if (char.IsWhiteSpace(c))
continue;
return false;
}
return true;
}
/// <summary>
/// Left trim a string to a Max Lenth.
/// </summary>
/// <param name="Input">The input.</param>
/// <param name="MaxLen">The max len.</param>
/// <returns></returns>
static public string LeftTrimString(string Input, int MaxLen)
{
int pLen = Input.Length;
string Output = Input;
if (pLen > MaxLen)
{
Output = Input.Remove(0, pLen - MaxLen);
}
return Output;
}
/// <summary>
/// Uses Symmetric encryption to encrypt a String.
/// </summary>
/// <param name="sLicenseKey">The s license key.</param>
/// <param name="Key">The key.</param>
/// <param name="IV">The IV.</param>
/// <returns></returns>
static public string EncryptKey(string sLicenseKey, byte[] Key, byte[] IV)
{
SymmetricAlgorithm CryptoSvc = new RijndaelManaged();
CryptoSvc.Key = Key;
CryptoSvc.IV = IV;
ICryptoTransform encrypto = CryptoSvc.CreateEncryptor();
byte[] bytIn = StringToByteArray(sLicenseKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, encrypto,
CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
byte[] bytOut = ms.GetBuffer();
int i = 0;
for (i = 0; i < bytOut.Length; i++)
if (bytOut[i] == 0)
break;
string Encrypted = System.Convert.ToBase64String(bytOut, 0, i);
return Encrypted;
}
/// <summary>
/// MD5 encrypt a string and then encode result as base64 string.
/// </summary>
/// <param name="sSource">The s source.</param>
/// <param name="TrimLength">Length of the trim.</param>
/// <returns></returns>
static public string MD5EncryptMsg(string sSource, int TrimLength)
{
string s64Trimmed = "";
// Create encryption code.
ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] data1ToHash = ascii.GetBytes(sSource);
byte[] hashvalue = (new MD5CryptoServiceProvider()).ComputeHash(data1ToHash);
string s64Encoded = Convert.ToBase64String(hashvalue);
if (s64Encoded.Length > TrimLength)
{
s64Trimmed = s64Encoded.Substring(0, TrimLength);
}
else
{
s64Trimmed = s64Encoded;
}
return s64Trimmed;
}
/// <summary>
/// Uses Symmetric Decryption to decrypt a key.
/// </summary>
/// <param name="Source">The source.</param>
/// <param name="Key">The key.</param>
/// <param name="IV">The IV.</param>
/// <returns></returns>
static public string DecryptKey(string Source, byte[] Key, byte[] IV)
{
try
{
SymmetricAlgorithm CryptoSvc = new RijndaelManaged();
CryptoSvc.Key = Key;
CryptoSvc.IV = IV;
ICryptoTransform encrypto = CryptoSvc.CreateDecryptor();
byte[] bytIn = System.Convert.FromBase64String(Source);
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn,
0, bytIn.Length);
CryptoStream cs = new CryptoStream(ms, encrypto,
CryptoStreamMode.Read);
System.IO.StreamReader sr = new System.IO.StreamReader(cs);
return (sr.ReadToEnd());
}
catch (Exception)
{
return "";
}
}
/// <summary>
/// Strings to byte array.
/// </summary>
/// <param name="source">The source.</param>
/// <returns></returns>
/// Changed On: 1/24/2008
static public byte[] StringToByteArray(string source)
{
ASCIIEncoding Encoder = new ASCIIEncoding();
byte[] Buffer = Encoder.GetBytes(source);
return Buffer;
}
/// <summary>
/// Convert standard string to base 64 encoded string.
/// </summary>
/// <param name="source">The source.</param>
/// <returns></returns>
static public string StringToBase64String(string source)
{
try
{
// Convert our Message to Base 64 encoded string.
byte[] ba = StringToByteArray(source);
string b64Encoded = Convert.ToBase64String(ba);
return b64Encoded;
}
catch (Exception e)
{
throw new Exception("Can not encode message. Error = " + e.Message);
}
}
/// <summary>
/// Convert a byte array to an ascii string.
/// </summary>
/// <param name="source">The source.</param>
/// <returns></returns>
static public string ByteArrayToString(byte[] source)
{
ASCIIEncoding Encoder = new ASCIIEncoding();
char[] CharArray = Encoder.GetChars(source);
string ret = new string(CharArray);
return ret;
}
/// <summary>
/// Creates a random 32 character GUID for use as a unique key
/// in HL7 tables.
/// </summary>
/// <returns></returns>
static public string CreateGUID()
{
Guid g = Guid.NewGuid();
string s = g.ToString("N"); // 32 character guid.
return s;
}
/// <summary>
/// Opens a text file and reads into a string, which it returns.
/// </summary>
/// <param name="filePath">The file path.</param>
/// <returns></returns>
static public string LoadTextFileIntoString(string filePath)
{
FileInfo aFile = new FileInfo(filePath);
if (aFile.Exists == false)
{
throw new ApplicationException("File not found: " + filePath);
}
FileStream fs = null;
StreamReader r = null;
string s = "";
try
{
fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
r = new StreamReader(fs);
r.BaseStream.Seek(0, SeekOrigin.Begin);
s = r.ReadToEnd();
}
catch (Exception e)
{
string t = e.Message;
}
finally
{
r.Close();
fs.Close();
}
return s;
}
/// <summary>
/// Builds a list of comma seperated and bracket delimited column names
/// from a passed enumeration.
/// Replaces "_" with a space in the column name.
/// Replaces "_0_" with a '#' character in the column name.
/// Replaces "_1_" with a ' - ' string in the column name.
/// (Bit ugly, but allows us to use Enumerations for Column names
/// which greatly helps us reduce ordinal indexing errors when
/// reading DataReader results. It's a tradeoff).
/// </summary>
/// <param name="src">The SRC.</param>
/// <returns></returns>
static public string BuildColumnList(Array src)
{
StringBuilder b = new StringBuilder();
foreach (string s in src)
{
string s0 = s.Replace("_0_", "#");
string s1 = s0.Replace("_1_", " - ");
string s2 = s1.Replace('_', ' ');
b.AppendFormat("[{0}], ", s2);
}
// Remove trailing comma
string t = b.ToString();
RemoveTrailingComma(ref t);
return t;
}
/// <summary>
/// Removes the trailing comma from a string if it has one.
/// </summary>
/// <param name="id">The id.</param>
static public void RemoveTrailingComma(ref string id)
{
if (id.LastIndexOf(",") != -1)
id = id.Remove(id.LastIndexOf(","), 1);
}
/// <summary>
/// Formats DateTime object to "MM/DD/YYYY HH:MM:SS AM"
/// This is suitable for inserts into Sql Server.
/// </summary>
/// <param name="dt">The dt.</param>
/// <returns></returns>
static public string SqlDTString(DateTime dt)
{
if (dt.Year < 1753) // sql server limit check.
{
return "01/01/1753 01:01:01 AM";
}
string s = dt.ToShortDateString() + " " + dt.ToLongTimeString();
return s;
}
/// <summary>
/// Formats DateTime object to "MM/DD/YYYY HH:MM:SS"
/// Where HH is in military time.
/// This is suitable for inserts into Advantage Server.
/// Note, Advantage requires the leading 0 on hours, minutes, seconds
/// </summary>
/// <param name="dt">The dt.</param>
/// <returns></returns>
static public string AdvDTStringJustDate(DateTime dt)
{
// medisoft 15 is having a fit with the time, they only want the date
//string td = dt.TimeOfDay.ToString();
//string s = dt.ToShortDateString() + " " + td;
//return s;
return dt.ToShortDateString() + " 00:00:00";
}
/// <summary>
/// returns only the time for the given date in a format that Advantage can use
/// </summary>
/// <param name="dt">The dt.</param>
/// <returns></returns>
static public string AdvTimeOnlyString(DateTime dt)
{
return dt.ToLongTimeString();
}
/// <summary>
/// Convert "Mm/Dd/YYYY" and "HHMM" strings to a valid DateTime structure.
/// </summary>
/// <param name="Date">The date.</param>
/// <param name="Time">The time.</param>
/// <returns></returns>
static public DateTime CreateDtFromStrings(string Date, string Time)
{
DateTime iDate = DateTime.Now;
try
{
iDate = DateTime.Parse(Date);
string HH = Time.Substring(0, 2);
int iHours = Int32.Parse(HH);
string MM = Time.Substring(2, 2);
int iMins = Int32.Parse(MM);
iDate = iDate.AddHours((double)iHours);
iDate = iDate.AddMinutes((double)iMins);
return iDate;
}
catch (Exception e)
{
return iDate;
}
}
/// <summary>
/// Creates a comma seperated string list of the passed in collection.
/// </summary>
/// <param name="src">The SRC.</param>
/// <returns></returns>
static public string BuildValueList(StringCollection src)
{
StringBuilder b = new StringBuilder();
foreach (string s in src)
{
b.AppendFormat("{0},", s);
}
// Remove trailing comma
string t = b.ToString();
RemoveTrailingComma(ref t);
return t;
}
/// <summary>
/// Formats DateTime object to "MM/DD/YYYY HH:MM:SS"
/// Where HH is in military time.
/// This is suitable for inserts into Advantage Server.
/// Note, Advantage requires the leading 0 on hours, minutes, seconds
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
static public string AdvDTString(DateTime dt)
{
string td = dt.TimeOfDay.ToString();
string s = dt.ToShortDateString() + " " + td;
return s;
}
/// <summary>
/// Advs the DT string date only.
/// </summary>
/// <param name="dt">The dt.</param>
/// <returns></returns>
static public string AdvDTStringDateOnly(DateTime dt)
{
if (dt == new DateTime())
{
return new DateTime(0, 0, 0).ToShortDateString() + " 00:00:00";
}
else
{
return new DateTime(dt.Year, dt.Month, dt.Day).ToShortDateString() + " 00:00:00";
}
}
/// <summary>
/// Firsts the day of last month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the first day of the last month of the month given. eg. date is in december, will return november 1</returns>
public static DateTime FirstDayOfLastMonth(DateTime date)
{
if ((date.Month - 1) == 0)
{
//this is january, return last december
return new DateTime(date.Year - 1, 12, 1);
}
else
{
return new DateTime(date.Year, date.Month - 1, 1);
}
}
/// <summary>
/// Lasts the day of last month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the last day of the last month of the month given. eg. date is in december, will return november 31</returns>
public static DateTime LastDayOfLastMonth(DateTime date)
{
return date.AddMonths(-1).AddDays(-1);
}
/// <summary>
/// Firsts the day of week.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the date of the sunday before the given date</returns>
public static DateTime FirstDayOfWeek(DateTime date)
{
//get the day of week for the given date, subtract it to get sunday
int dayOfWeek = (int)date.DayOfWeek;
return DateTime.Now.AddDays(-dayOfWeek);
}
/// <summary>
/// Lasts the day of week.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the date of the saturday following the given date</returns>
public static DateTime LastDayOfWeek(DateTime date)
{
//get the day of week for the given date and add 7-it to get to the next saturday
int dayOfWeek = (int)date.DayOfWeek;
return DateTime.Now.AddDays(7 - dayOfWeek);
}
/// <summary>
/// Firsts the day of next month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the first day of the next month of the given date</returns>
public static DateTime FirstDayOfNextMonth(DateTime date)
{
return new DateTime(date.Year, date.Month + 1, 1);
}
/// <summary>
/// Lasts the day of next month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the last day of the next month of the given date</returns>
public static DateTime LastDayOfNextMonth(DateTime date)
{
return FirstDayOfNextMonth(date).AddMonths(1).AddDays(-1);
}
/// <summary>
/// Firsts the day of current month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the first day of the current month</returns>
public static DateTime FirstDayOfCurrentMonth(DateTime date)
{
return new DateTime(date.Year, date.Month, 1);
}
/// <summary>
/// Lasts the day of current month.
/// </summary>
/// <param name="date">The date.</param>
/// <returns>the last day of the current month</returns>
public static DateTime LastDayOfCurrentMonth(DateTime date)
{
return FirstDayOfCurrentMonth(date).AddMonths(1).AddDays(-1);
}
}
}