nxlizenz_projects_visualstudio/NxLizenz/MainForm.cs
2020-12-01 12:16:15 +01:00

387 lines
10 KiB
C#

/*
* Erstellt mit SharpDevelop.
* Benutzer: 001142709
* Datum: 05.04.2018
* Zeit: 10:40
*
* Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
namespace NxLizenz
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
#region Version und Copyright
// Version und Copyright
string programName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen
string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
string copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
string icon = Application.StartupPath + "\\Info.bmp";
//Assembly Datum und Zeit
static DateTime value = AssemblyDateTime();
string date = value.ToShortDateString();
string time = value.ToLongTimeString();
private static DateTime AssemblyDateTime()
{
var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan( TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision));
//Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original)
return buildDateTime;
}
#endregion
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
string licenseName = "";
int licensesTotal = 0;
int licensesInUse = 0;
string licenseVersion = "";
string licenseVendor = "";
string licenseType = "";
List<User> tUsers = new List<User>();
private string LicenseServer { set; get; }
private LicensesList licenseList = new LicensesList();
// private Users users = new Users();
private UserList userList = new UserList();
void ComboBoxSelectLicenseServerSelectedIndexChanged(object sender, EventArgs e)
{
LicenseServer = comboBoxSelectLicenseServer.SelectedItem.ToString();
}
void ButtonEvaluateClick(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(LicenseServer))
{
Start(sender, e);
}
}
private void Start(object sender, EventArgs e)
{
//TODO: Lizenzen lesen
string fileName = @"H:\Programmieren\SharpDevelop\NxLizenz\Daten\149_UGS_LICENSE_FILE.txt";
//TODO: Lizenzliste füllen
if (licenseList.AllLicenses.Count == 0)
{
ReadLicenseFile(fileName);
}
DrawDisplay(licenseList.AllLicenses.Count, sender, e);
}
private void ReadLicenseFile(string fileName)
{
using (var sr = new StreamReader(fileName, Encoding.Default))
{
bool read = false;
bool secondLine = false;
bool nextLine = false;
int emptyLine = 0;
string line = "";
int count = -1;
//Datei zeilenweise einlesen bis das Ende der Datei erreicht ist
while (!sr.EndOfStream)
{
line = sr.ReadLine(); //Zeile einlesen
if (read)
{
if (line.StartsWith("Users of "))
{
count ++;
Users users = new Users();
if (emptyLine == 1)
{
//User einlesen
ExtractUser("", count - 1);
//Wenn ein neuer Block beginnt, dann die ermittelten Werte schreiben
WriteLicenceValueBlock(count - 1);
emptyLine = 0;
}
if (emptyLine == 3)
{
//Wenn ein neuer Block beginnt, dann die ermittelten Werte schreiben
WriteLicenceValueBlock(count - 1);
emptyLine = 0;
}
//LicenseName, LicenseTotal und LicenseUsed extrahieren
var license = new License();
ExtractLicenses(line, count);
}
if (String.IsNullOrEmpty(line))
{
emptyLine ++;
}
if (secondLine)
{
secondLine = false; //Wieder zurücksetzen
//Den Lizentyp aus der Zeile extrahieren
licenseType = line.Remove(0, 2);
licenseType = licenseType.Remove(line.LastIndexOf(" ") - 2);
}
if (line.StartsWith(" \""))
{
//Setzen damit auch die nächste Zeile in den Block mit aufgenommen wird
secondLine = true;
//Lizenzversion und Lizenztyp extrahieren
licenseVersion = line.Remove(line.IndexOf(",")).Remove(0, line.IndexOf("v") + 1);
licenseVendor = line.Remove(0, line.IndexOf(":") + 1);
}
if (emptyLine == 2 & !String.IsNullOrEmpty(line))
{
//User einlesen
ExtractUser(line, count);
}
}
if (nextLine)
{
read = true; //Ab jetzt wird ausgewertet
nextLine = false; //Zurücksetzen, damit die Abfrage nicht mehr durchlaufen wird
}
if (line.Contains("Feature usage info:"))
{
nextLine = true; //Die nächste Zeile darf nicht berücksichtigt werden, aber dann wird ausgewertet
}
}
//Die Werte des letzten Blocks schreiben
WriteLicenceValueBlock(count);
}
}
private void ExtractLicenses(string line, int count)
{
string lic = "";
string inUse = "";
string total = "";
lic = line.Remove(line.IndexOf(":")).Replace("Users of ", "");
line = line.Remove(0, line.IndexOf("Total of ") + 9);
if (line.Contains(" licenses in use)"))
{
line = line.Replace(" licenses in use)", "");
}
else
{
line = line.Replace(" license in use)", "");
}
inUse = line.Remove(0, line.LastIndexOf(" ") + 1);
total = line.Remove(line.IndexOf(" "));
//Bis zum schreiben zwischenspeichern
licenseName = lic;
licensesTotal = Convert.ToInt32(total);
licensesInUse = Convert.ToInt32(inUse);
}
private void ExtractUser(string line, int count)
{
string idNumber = "";
string firstName = "";
string sureName = "";
string temp = "";
string computerName = "";
User user = new User();
if (String.IsNullOrEmpty(line))
{
user.FirstName = "";
user.SurName = "";
user.IdNumber = "";
user.ComputerName = "";
}
else
{
if (line.Contains("TcServer"))
{
temp = line.Replace(" ", "");
idNumber = temp.Remove(temp.IndexOf(" Tc"));
temp = temp.Remove(0, temp.IndexOf(" ") + 1);
computerName = temp.Remove(temp.IndexOf(" "));
temp = temp.Remove(0, temp.IndexOf(" Tc") + 9);
temp = temp.Remove(temp.IndexOf(" ("));
if (temp.Contains("_"))
{
firstName = temp.Remove(0, temp.IndexOf("_") + 1);
sureName = temp.Remove(temp.IndexOf("_"));
}
else
{
firstName = "";
sureName = temp;
}
}
else
{
temp = line.Replace(" ", "");
idNumber = temp.Remove(temp.IndexOf(" "));
temp = temp.Remove(0, temp.IndexOf(" ") + 1);
computerName = temp.Remove(temp.IndexOf(" "));
temp = ExtractRealUserName(idNumber);
firstName = temp.Remove(0, temp.IndexOf(" ") + 1);
sureName = temp.Remove(temp.IndexOf(" "));
}
user.FirstName = firstName;
user.SurName = sureName;
user.IdNumber = idNumber;
user.ComputerName = computerName;
}
tUsers.Add(user);
}
private string ExtractRealUserName(string idNumber)
{
string username = "";
//TODO: Auswerten
username = "no Name"; //TODO: Nur zum Testen. Mauss dann wieder entfernt werden
return username;
}
private void WriteLicenceValueBlock(int count)
{
var license = new License();
license.LicenseName = licenseName;
license.LicensesTotal = licensesTotal;
license.LicensesInUse = licensesInUse;
license.LicenseVersion = licenseVersion;
license.LicenseVendor = licenseVendor;
license.LicenseType = licenseType;
licenseList.Add(license);
Users users = new Users();
for (int i = 0; i < tUsers.Count; i++)
{
users.Add(tUsers[i]);
}
tUsers.Clear();
userList.Add(users);
//Den ersten Eintrag aus der Liste löschen
if (count == 0)
{
licenseList.AllLicenses.RemoveAt(0);
userList.AllUsers.RemoveAt(0);
}
}
private void DrawDisplay(int countLicenses, object sender, EventArgs e)
{
int width = 860;
int hight = 72 + 90 * countLicenses;
this.ClientSize = new System.Drawing.Size(width, hight);
for (int i = 0; i < countLicenses; i++)
{
AddControl_Click(sender, e, i);
}
}
private void AddControl_Click(object sender, EventArgs e, int i)
{
const int xPos = 12;
const int yPos = 70;
var lic = new LicenseItem();
lic.Name = string.Format("LicItem[{0}]", i);
lic.Location = new Point((xPos), yPos + 90 * i);
lic.Size = new Size (618, 80);
lic.LicName = licenseList.AllLicenses[i].LicenseName;
lic.Available = licenseList.AllLicenses[i].LicensesTotal;
lic.InUse = licenseList.AllLicenses[i].LicensesInUse;
lic.Version = licenseList.AllLicenses[i].LicenseVersion;
lic.Vendor = licenseList.AllLicenses[i].LicenseVendor;
lic.Type = licenseList.AllLicenses[i].LicenseType;
lic.MouseClick += new MouseEventHandler(this.LicenseItemClick);
lic.Refresh();
this.Controls.Add(lic);
lic.ShowCurrentValues();
}
private void LicenseItemClick(object sender, EventArgs e)
{
// enter code here.
LicenseItem lic = (LicenseItem)sender;
// MessageBox.Show(lic.Name + " was clicked");
int index = Convert.ToInt32(lic.Name.Remove(0, lic.Name.IndexOf("[") + 1).Replace("]",""));
// MessageBox.Show(CreateUserList(index));
Users users = userList.AllUsers[index];
UserView uv = new UserView(users);
uv.ShowDialog();
}
private string CreateUserList(int index)
{
string userL = "";
Users users = userList.AllUsers[index];
for (int i = 0; i < users.AllUsers.Count; i++)
{
if (users.AllUsers[i].FirstName == "")
{
userL = "There is no license in use.";
}
else
{
userL += String.Concat("Name: ", users.AllUsers[i].FirstName, " ", users.AllUsers[i].SurName, " User Id: ", users.AllUsers[i].IdNumber, " Computername: ", users.AllUsers[i].ComputerName, "\n");
}
}
return userL;
}
}
}