C2019-026 Compare the library document we are importing with one of same name in current database to see if we can use the exiting instead of creating a new one.

C2019-026 Move a byte array comparer function to the Volian.Base.Libary and made it static
C2019-026 Took a byte array comparer function from ROFSTExt.cs and made it static
This commit is contained in:
John Jenko 2019-06-14 16:31:10 +00:00
parent fa61b9c2a4
commit a0dadf2f9a
3 changed files with 40 additions and 14 deletions

View File

@ -4820,10 +4820,22 @@ namespace VEPROMS
DateTime dts = DateTime.Parse(xn.Attributes.GetNamedItem("dts").InnerText);
if (libtitle != "")
{
// B2019-035 better memory management. Prior logic would eat up memory (and not free it).
string libkey = libtitle + "_" + dts.ToString();
if (ExistingLibDocs.ContainsKey(libkey))
d = Document.Get(ExistingLibDocs[libkey]); // found library document in existing database
// C2019-026 if the lib doc title exists in the current database, compare it with the contents of what we
// are importing. If the same, use it, else enter a new lib doc appending the date/time
byte[] doccontent = Convert.FromBase64String(xn.Attributes.GetNamedItem("doccontent").InnerText);
if (ExistingLibDocs.ContainsKey(libtitle))
{
d = Document.Get(ExistingLibDocs[libtitle]);
if (!ByteArrayCompare.DoCompare(d.DocContent,doccontent))
d = null;
}
if (d == null)
{
// B2019-035 better memory management. Prior logic would eat up memory (and not free it).
string libkey = libtitle + "_" + dts.ToString();
if (ExistingLibDocs.ContainsKey(libkey))
d = Document.Get(ExistingLibDocs[libkey]); // found library document in existing database
}
}
if (d == null) // not found in existing database, create it
{

View File

@ -982,9 +982,9 @@ namespace VEPROMS.CSLA.Library
int size = Convert.ToInt32(roicfg.Image_Size);
byte[] tmpb = ROImageInfo.Decompress(roii.Content, size);
if (ByteArrayCompare(roii.Content, cmpFileContents))
if (ByteArrayCompare.DoCompare(roii.Content, cmpFileContents))
return imgId;
if (ByteArrayCompare(tmpb, fileContents))
if (ByteArrayCompare.DoCompare(tmpb, fileContents))
return imgId;
}
}
@ -993,14 +993,6 @@ namespace VEPROMS.CSLA.Library
return 0;
}
private bool ByteArrayCompare(byte[] ba1, byte[] ba2)
{
// we wrote our own byte array comparinson because the system's 'equals' did not work!
if (ba1.Length != ba2.Length) return false;
for (int i = 0; i < ba1.Length; i++)
if (ba1[i] != ba2[i]) return false;
return true;
}
private ROImageInfo GetMyImage(Dictionary<string, ROImageInfo> myImages, string imgname, DateTime dts)
{

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Volian.Base.Library
{
public static class ByteArrayCompare
{
// C2019-026 Took this from ROFSTExt.cs so that we can also use when importing procedures with library documents
public static bool DoCompare(byte[] ba1, byte[] ba2)
{
// we wrote our own byte array comparison because the system's 'equals' did not work!
if (ba1.Length != ba2.Length) return false;
for (int i = 0; i < ba1.Length; i++)
if (ba1[i] != ba2[i]) return false;
return true;
}
}
}