annotate Agendas/trunk/src/Agendas.NHibernate/GenericWellKnownInstanceType.cs @ 140:3639803112c6

Refactoring de la relación entre Evento y Estado
author nelopauselli
date Fri, 29 Jul 2011 16:30:53 -0300
parents
children
rev   line source
140
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
1 using System;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
2 using System.Collections.Generic;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
3 using System.Data;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
4 using System.Linq;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
5 using NHibernate.SqlTypes;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
6 using NHibernate.UserTypes;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
7
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
8 namespace Agendas.NHibernate
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
9 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
10 [Serializable]
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
11 public abstract class GenericWellKnownInstanceType<T, TId> : IUserType where T : class
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
12 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
13 //private static readonly SqlType[] ReturnSqlTypes = { SqlTypeFactory.Int32 };
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
14 private Func<T, TId, bool> findPredicate;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
15 private Func<T, TId> idGetter;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
16 private IEnumerable<T> repository;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
17
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
18 /// <summary>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
19 /// Base constructor
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
20 /// </summary>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
21 /// <param name="repository">The collection that represent a in-memory repository.</param>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
22 /// <param name="findPredicate">The predicate an instance by the persisted value.</param>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
23 /// <param name="idGetter">The getter of the persisted value.</param>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
24 protected GenericWellKnownInstanceType(IEnumerable<T> repository, Func<T, TId, bool> findPredicate, Func<T, TId> idGetter)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
25 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
26 this.repository = repository;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
27 this.findPredicate = findPredicate;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
28 this.idGetter = idGetter;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
29 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
30
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
31 //public SqlType[] SqlTypes
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
32 //{
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
33 // get { return ReturnSqlTypes; }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
34 //}
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
35
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
36 public Type ReturnedType
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
37 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
38 get { return typeof(T); }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
39 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
40
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
41 public bool IsMutable
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
42 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
43 get { return false; }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
44 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
45
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
46 public new bool Equals(object x, object y)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
47 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
48 if (ReferenceEquals(x, y))
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
49 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
50 return true;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
51 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
52 if (ReferenceEquals(null, x) || ReferenceEquals(null, y))
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
53 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
54 return false;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
55 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
56
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
57 return x.Equals(y);
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
58 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
59
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
60 public int GetHashCode(object x)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
61 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
62 return (x == null) ? 0 : x.GetHashCode();
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
63 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
64
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
65 public object NullSafeGet(IDataReader rs, string[] names, object owner)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
66 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
67 int index0 = rs.GetOrdinal(names[0]);
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
68 if (rs.IsDBNull(index0))
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
69 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
70 return null;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
71 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
72
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
73 var value = (TId)rs.GetValue(index0);
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
74 return repository.FirstOrDefault(x => findPredicate(x, value));
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
75 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
76
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
77 public void NullSafeSet(IDbCommand cmd, object value, int index)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
78 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
79 if (value == null)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
80 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
81 ((IDbDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
82 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
83 else
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
84 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
85 ((IDbDataParameter)cmd.Parameters[index]).Value = idGetter((T)value);
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
86 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
87 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
88
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
89 public object DeepCopy(object value)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
90 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
91 return value;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
92 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
93
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
94 public object Replace(object original, object target, object owner)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
95 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
96 return original;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
97 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
98
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
99 public object Assemble(object cached, object owner)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
100 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
101 return cached;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
102 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
103
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
104 public object Disassemble(object value)
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
105 {
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
106 return value;
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
107 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
108
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
109 /// <summary>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
110 /// The SQL types for the columns mapped by this type.
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
111 /// </summary>
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
112 public abstract SqlType[] SqlTypes { get; }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
113 }
3639803112c6 Refactoring de la relación entre Evento y Estado
nelopauselli
parents:
diff changeset
114 }