//
// 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
}
}