// // Class: IDatabaseEntity // Current CLR: 4.0.30319.34209 // System: Microsoft Visual Studio 10.0 // Author: dani // Created: 3/2/2015 9:08:47 PM // // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Collections.Generic; using System.Reflection; namespace bsmd.database { public abstract class DatabaseEntity : IMessageParagraph { protected Guid? id; protected string tablename; public enum ValidationBlock { BLOCK1, BLOCK2 } #region Properties /// /// Nachrichtentyp der abgeleiteten Meldeklassen /// public Message.NotificationClass MessageNotificationClass { get; set; } /// /// Referenz zur eigentlichen Schiffankunft /// public MessageCore MessageCore { get; set; } /// /// gemeinschaftliche Daten /// public Message MessageHeader { get; set; } /// /// SQL Table name to construct queries /// public string Tablename { get { return this.tablename; } } /// /// primary key /// public Guid? Id { get { return this.id; } } /// /// IsNew Flag /// public bool IsNew { get { return !this.id.HasValue; } } #endregion #region public funcs /// /// when it's time (during save), create id /// public void CreateId() { this.id = Guid.NewGuid(); } public abstract void PrepareSave(IDbCommand cmd); public virtual void PrepareDelete(IDbCommand cmd) { SqlCommand scmd = cmd as SqlCommand; scmd.CommandText = string.Format("DELETE FROM {0} WHERE Id = @ID", Tablename); scmd.Parameters.AddWithValue("@ID", this.Id); } public abstract void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria); public abstract List LoadList(IDataReader reader); public virtual void Validate(List errors, List violations) { errors = new List(); violations = new List(); } public virtual ValidationBlock GetValidationBlock() { return ValidationBlock.BLOCK1; } #endregion #region IMessageParagraph implementation public virtual string Title { get { string name = this.GetType().Name; return name; } } public virtual string Subtitle { get { return string.Empty; } } public virtual bool ShowChildrenAsTable { get { return false; } } /// /// must be overridden if it must make sense /// public virtual List> MessageText { get { List> result = new List>(); Type objType = this.GetType(); var props = objType.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(ShowReportAttribute))); foreach (PropertyInfo property in props) { bool isDouble = (property.PropertyType == typeof(Nullable)); object propValue = property.GetValue(this, null); string value = (propValue == null) ? string.Empty : (isDouble ? ((double) propValue).ToString("N2") : propValue.ToString()); string displayName = property.Name; if(Attribute.IsDefined(property, typeof(ReportDisplayNameAttribute))) { ReportDisplayNameAttribute reportDisplayNameAttribute = Attribute.GetCustomAttribute(property, typeof(ReportDisplayNameAttribute)) as ReportDisplayNameAttribute; displayName = reportDisplayNameAttribute.DisplayName; } result.Add(new KeyValuePair(displayName, value)); } return result; } } public virtual List ChildParagraphs { get { return null; } } #endregion } }