Files
cms_thermo_active/Client.Config/ConfigController.cs
T
2017-12-21 08:30:49 +01:00

254 lines
8.5 KiB
C#

using Client.Utils;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Xml.Schema;
namespace Client.Config
{
public class ConfigController
{
const String ChromeScheme = "chrome";
public static void ReadStartupConfig()
{
int SoftwareId = 0;
// Read validation file
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema
readerSettings.Add(null, Constants.STARTUP_CONFIG_SCHEMA_PATH);
// Open file reader
XDocument xmlConfigFile = XDocument.Load(Constants.STARTUP_CONFIG_PATH);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
// Read XML Config
Config.ClientConfig = xmlConfigFile
.Descendants(Constants.CLIENT_CONFIG_KEY)
.Select(x => new SubModels.Client()
{
TranspColor = ValidateTranspColor(x.Element("TranspColor").Value),
RenderingMethod = ValidateRendering(x.Element("RenderingMethod").Value),
RunningOnSecondaryScreen = ValidateSecScreen(x.Element("RunningOnSecondaryScreen").Value)
}).FirstOrDefault();
Config.ConnectionConfig = xmlConfigFile
.Descendants(Constants.CONNECTION_CONFIG_KEY)
.Select(x => new SubModels.Connection()
{
Url = ValidateUrl(x.Element("Url").Value),
Id = ValidateClientID(x.Element("Id").Value),
DeleteCahceFolderOnStartup = ValidateDelCache(x.Element("DeleteCahceFolderOnStartup").Value),
}).FirstOrDefault();
Config.VendorHmiConfig = xmlConfigFile
.Descendants(Constants.VENDORHMI_CONFIG_KEY)
.Select(x => new SubModels.VendorHmi()
{
Enabled = ValidateOpenHmi(x.Element("Type").Value),
Type = ValidateNcType(x.Element("Type").Value)
}).FirstOrDefault();
Config.ExtSoftwaresConfig = xmlConfigFile
.Descendants(Constants.EXTSFT_CONFIG_KEY)
.Elements("Software")
.Select(x =>new SubModels.Software()
{
Path = ValidateSFTPath(x.Element("Path").Value),
Arguments = x.Element("Arguments").Value,
LongName = ValidateSFTLName(x.Element("LongName").Value),
ShortName = ValidateSFTSName(x.Element("ShortName").Value),
IconBase64 = ExtractBase64Icon(x.Element("Path").Value),
Id = SoftwareId++.ToString()
}
).ToArray();
// Read ARGS Config
if (!String.IsNullOrWhiteSpace(Arguments.Url))
Config.ConnectionConfig.Url = ValidateArgumentUrl(Arguments.Url);
}
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
throw new Exception(@"Configuration Error: " + e.Message);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region PROPERTIES_VALIDATOR
private static String ValidateUrl(String value)
{
Uri NewUrl;
if (Uri.TryCreate(value, UriKind.Absolute, out NewUrl) && (NewUrl.Scheme == Uri.UriSchemeHttp || NewUrl.Scheme == Uri.UriSchemeHttps || NewUrl.Scheme == Uri.UriSchemeFile || NewUrl.Scheme == ChromeScheme))
return value;
else
throw new Exception(@"Configuration Error: ""Connection - Url"" is not a valid URL");
}
private static String ValidateArgumentUrl(String value)
{
Uri NewUrl;
if (Uri.TryCreate(value, UriKind.Absolute, out NewUrl) && (NewUrl.Scheme == Uri.UriSchemeHttp || NewUrl.Scheme == Uri.UriSchemeHttps || NewUrl.Scheme == Uri.UriSchemeFile || NewUrl.Scheme == ChromeScheme))
return value;
else
throw new Exception(@"Argument Url Error: is not a valid URL");
}
private static Color ValidateTranspColor(String value)
{
Color color;
try
{
color = ColorTranslator.FromHtml(value);
return color;
}
catch (Exception)
{
throw new Exception(@"Configuration Error: ""Client - TranspColor"" is not a valid Hex Color");
}
}
private static Constants.Rendering ValidateRendering(string value)
{
if (value.ToUpper().Equals("CPU"))
return Constants.Rendering.CPU;
else if (value.ToUpper().Equals("GPU"))
return Constants.Rendering.GPU;
else
throw new Exception(@"Configuration Error: ""Client - RenderingMethod"" is not a valid Rendering Method");
}
private static bool ValidateSecScreen(string value)
{
Boolean secScreen;
if (Boolean.TryParse(value, out secScreen))
return secScreen;
else
throw new Exception(@"Configuration Error: ""Client - RunningOnSecondaryScreen"" is not a valid Boolean Type");
}
private static Boolean ValidateOpenHmi(String value)
{
String Nc = value.ToUpper();
if (Nc.Equals("NO_NC"))
return false;
else
return true;
}
private static ushort ValidateNcType(String value)
{
String Nc = value.ToUpper();
if (Nc.Equals("NO_NC") || Nc.Equals("DEMO"))
return 0;
else if(Nc.Equals("FANUC"))
return 1;
else if (Nc.Equals("SIEMENS"))
return 2;
else if (Nc.Equals("OSAI"))
return 3;
else
throw new Exception(@"Configuration Error: ""VendorHmi - Type"" is not a valid NC Type");
}
private static ushort ValidateClientID(String value)
{
ushort Client;
if (ushort.TryParse(value, out Client))
return Client;
else
throw new Exception(@"Configuration Error: ""Connection - Id"" is not a valid Id of CMS-Client");
}
private static Boolean ValidateDelCache(String value)
{
Boolean DelCache;
if (Boolean.TryParse(value, out DelCache))
return DelCache;
else
throw new Exception(@"Configuration Error: ""Connection - DeleteCahceFolderOnStartup"" is not a valid Boolean Type");
}
private static String ValidateSFTPath(String value)
{
if(File.Exists(value))
return value;
else
throw new Exception(@"Configuration Error: File """+ value + @""" not found");
}
private static String ValidateSFTSName(String value)
{
if (!String.IsNullOrEmpty(value))
{
if (value.Count() <= 3)
return value;
else
throw new Exception(@"Configuration Error: Short Name """ + value + @""" cannot be over 3 Letters");
}
else
throw new Exception(@"Configuration Error: Software Short Name Must be setted");
}
private static String ValidateSFTLName(String value)
{
if (!String.IsNullOrEmpty(value))
return value;
else
throw new Exception(@"Configuration Error: Software Long Name Must be setted");
}
private static String ExtractBase64Icon(String value)
{
Image im = Icon.ExtractAssociatedIcon(value).ToBitmap();
MemoryStream m = new MemoryStream();
im.Save(m, ImageFormat.Png);
return "data:image/png;base64," + Convert.ToBase64String(m.ToArray());
}
#endregion
}
}