Update of /cvsroot/jcframework/dotnet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31996 Modified Files: CClassMap.vb CCursor.vb CMultiRetrieveCriteria.vb CMultiSummaryCriteria.vb CPersistenceBroker.vb CSelectInCriteria.vb CSummaryCriteria.vb Log Message: Retrieve criteria now handle objects that don't inherit from CPersistentObject Index: CMultiSummaryCriteria.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CMultiSummaryCriteria.vb,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- CMultiSummaryCriteria.vb 21 Jul 2004 02:55:38 -0000 1.10 +++ CMultiSummaryCriteria.vb 18 Oct 2004 00:08:10 -0000 1.11 @@ -107,7 +107,7 @@ ''' [rbanks] 18/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public ReadOnly Property getFirstObject() As CPersistentObject + Public ReadOnly Property getFirstObject() As IPersistableObject Get If m_objectsToJoin.Count = 0 Then Return Nothing @@ -138,6 +138,14 @@ Me.ClassMap = obj.getClassMap(obj) End Sub + Public Sub New(ByVal obj As Object) + Me.New() + Dim injObj As CInjectedObject + injObj = New CInjectedObject(obj) + Me.addObjectToJoin(injObj, Nothing, "") + Me.ClassMap = injObj.getClassMap + End Sub + Protected Overrides Sub Finalize() m_objectsToJoin = Nothing m_groupAttributes = Nothing @@ -168,20 +176,20 @@ ''' [rbanks] 18/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub addObjectToJoin(ByVal obj As CPersistentObject, ByVal fromObj As CPersistentObject, ByVal assocName As String) + Public Sub addObjectToJoin(ByVal obj As IPersistableObject, ByVal fromObj As IPersistableObject, ByVal assocName As String) Dim mapName As String - Dim persobj As CPersistentObject + Dim persobj As IPersistableObject Dim bfound As Boolean = False Dim cm, cm2 As CClassMap Dim am As CUDAMap Dim i As Integer If m_objectsToJoin.Count = 0 Then - m_joins = New CJoin(obj.getClassMap(obj), "t1") - Me.ClassMap = obj.getClassMap(obj) + m_joins = New CJoin(obj.GetClassMap, "t1") + Me.ClassMap = obj.GetClassMap m_fromCMaps.Add(Me.ClassMap) m_objectsToJoin.Add(obj) - cm = obj.getClassMap(obj).SuperClass + cm = obj.GetClassMap.SuperClass i = 2 While Not cm Is Nothing m_fromCMaps.Add(cm) @@ -194,8 +202,8 @@ End While Exit Sub End If - cm = fromObj.getClassMap(fromObj) - i = 0 'Used to track the index of the from object + cm = fromObj.GetClassMap + i = 0 'Used to track the index of the from object For Each cm2 In m_fromCMaps i += 1 If cm2.Name = cm.Name Then @@ -208,7 +216,7 @@ Exit Sub End If - cm2 = fromObj.getClassMap(fromObj) + cm2 = fromObj.GetClassMap am = cm2.GetAssociationMapByName(assocName) If am Is Nothing Then Throw New NoAssociationException("Invalid association " & assocName & " selected - no such association exists") @@ -362,7 +370,7 @@ Public Function getSqlStatementParameters() As CSqlStatement Dim statement As New CSqlStatement Dim i As Short - Dim persObj As CPersistentObject + Dim persObj As IPersistableObject Dim cm As CClassMap Dim isFirst As Boolean = True Dim s As String Index: CPersistenceBroker.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CPersistenceBroker.vb,v retrieving revision 1.65 retrieving revision 1.66 diff -u -d -r1.65 -r1.66 --- CPersistenceBroker.vb 15 Oct 2004 06:42:56 -0000 1.65 +++ CPersistenceBroker.vb 18 Oct 2004 00:08:10 -0000 1.66 @@ -954,6 +954,18 @@ getClassMap = ClassMap End Function + Public Function getClassMap(ByVal pType As Type) As CClassMap + Dim ClassMap As CClassMap + ClassMap = m_classMaps.Item(pType.Name) + If ClassMap Is Nothing Then + ClassMap = m_classMaps.Item(pType.FullName) + End If + If (ClassMap Is Nothing) Then + Throw New NoClassMapException("No class map for " & pType.FullName) + End If + Return ClassMap + End Function + '''----------------------------------------------------------------------------- ''' <summary> ''' Retrieves a _CRelationalDatabase object by name @@ -1290,7 +1302,7 @@ '''----------------------------------------------------------------------------- Public Function processMultiRetrieveCriteria(ByRef pCriteria As CMultiRetrieveCriteria, ByVal fullObjects As Boolean) As CCursor Dim clMap As CClassMap - clMap = pCriteria.getFirstObject.getClassMap(pCriteria.getFirstObject) + clMap = pCriteria.getFirstObject.GetClassMap Dim conn As _CConnection conn = clMap.RelationalDatabase.getConnection(Nothing) @@ -1334,7 +1346,7 @@ '''----------------------------------------------------------------------------- Public Function processMultiSummaryCriteria(ByRef pCriteria As CMultiSummaryCriteria) As CCursor Dim clMap As CClassMap - clMap = pCriteria.getFirstObject.getClassMap(pCriteria.getFirstObject) + clMap = pCriteria.getFirstObject.GetClassMap Dim conn As _CConnection conn = clMap.RelationalDatabase.getConnection(Nothing) @@ -2099,10 +2111,10 @@ If TypeOf (obj) Is CPersistentObject Then If Not CType(obj, CPersistentObject).IsValid Then Return queue 'Do not save if object is not valid End If - If obj.isReadOnly Then + If obj.IsReadOnly Then Return queue End If - If (Not obj.Persistent) And obj.isModifyOnly Then + If (Not obj.Persistent) And obj.IsModifyOnly Then Return queue End If If includeBaseObject Then @@ -2113,7 +2125,7 @@ 'Determine if the object needs saving 'But, countinue to determine if the object's associations need saving If includeBaseObject AndAlso _ - (obj.IsDirty AndAlso Not obj.IsProxy AndAlso Not obj.isReadOnly AndAlso Not obj.isModifyOnly) Then + (obj.IsDirty AndAlso Not obj.IsProxy AndAlso Not obj.IsReadOnly AndAlso Not obj.IsModifyOnly) Then If TypeOf (obj) Is CPersistentObject Then If Not CType(obj, CPersistentObject).IsValid Then 'Do not save if object is not valid obj.IsDirty = False 'Added to queue so clear dirty flag @@ -2131,7 +2143,7 @@ 'obj.IsDirty = False 'Now process the object associations to see what else needs saving - cm = obj.getClassMap() + cm = obj.GetClassMap() For i = 1 To cm.getStraightAssociationMapSize udamap = cm.getStraightAssociationMap(i) @@ -2451,4 +2463,12 @@ End If End Sub + Friend Property InjectedObjects() As CInjectedObjects + Get + Return m_injectedObjects + End Get + Set(ByVal Value As CInjectedObjects) + m_injectedObjects = Value + End Set + End Property End Class \ No newline at end of file Index: CMultiRetrieveCriteria.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CMultiRetrieveCriteria.vb,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- CMultiRetrieveCriteria.vb 7 Oct 2004 23:15:10 -0000 1.14 +++ CMultiRetrieveCriteria.vb 18 Oct 2004 00:08:10 -0000 1.15 @@ -106,7 +106,7 @@ ''' [rbanks] 18/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public ReadOnly Property getFirstObject() As CPersistentObject + Public ReadOnly Property getFirstObject() As IPersistableObject Get If m_objectsToJoin.Count = 0 Then Return Nothing @@ -126,7 +126,7 @@ m_offset = -1 m_rows = -1 m_Having = Nothing - m_fullObjects = False 'default to proxy objects only + m_fullObjects = False 'default to proxy objects only End Sub Public Sub New(ByVal obj As CPersistentObject) @@ -136,6 +136,16 @@ m_joins = New CJoin(obj.getClassMap(obj), "t1") End Sub + Public Sub New(ByVal obj As Object) + Me.New() + Dim injObj As CInjectedObject + Dim pbroker As CPersistenceBroker = modPersistenceBrokerSingleton.getPersistenceBrokerInstance + injObj = pbroker.LocateOrCreateInjObject(obj) + Me.addObjectToJoin(injObj, Nothing, "") + Me.ClassMap = pbroker.getClassMap(obj.GetType) + m_joins = New CJoin(Me.ClassMap, "t1") + End Sub + Protected Overrides Sub Finalize() m_objectsToJoin = Nothing m_groupAttributes = Nothing @@ -164,20 +174,20 @@ ''' [rbanks] 18/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub addObjectToJoin(ByVal obj As CPersistentObject, ByVal fromObj As CPersistentObject, ByVal assocName As String) + Public Sub addObjectToJoin(ByVal obj As IPersistableObject, ByVal fromObj As IPersistableObject, ByVal assocName As String) Dim mapName As String - Dim persobj As CPersistentObject + Dim persobj As IPersistableObject Dim bfound As Boolean = False Dim cm, cm2 As CClassMap Dim am As CUDAMap Dim i As Integer If m_objectsToJoin.Count = 0 Then - m_joins = New CJoin(obj.getClassMap(obj), "t1") - Me.ClassMap = obj.getClassMap(obj) + m_joins = New CJoin(obj.GetClassMap, "t1") + Me.ClassMap = obj.GetClassMap m_fromCMaps.Add(Me.ClassMap) m_objectsToJoin.Add("t1", obj) - cm = obj.getClassMap(obj).SuperClass + cm = obj.GetClassMap.SuperClass i = 2 While Not cm Is Nothing m_fromCMaps.Add(cm) @@ -190,8 +200,8 @@ End While Exit Sub End If - cm = fromObj.getClassMap(fromObj) - i = 0 'Used to track the index of the from object + cm = fromObj.GetClassMap + i = 0 'Used to track the index of the from object For Each cm2 In m_fromCMaps i += 1 If cm2.Name = cm.Name Then @@ -207,7 +217,7 @@ If am Is Nothing Then Throw New NoAssociationException("Invalid association " & assocName & " selected - no such association exists") End If - cm = obj.getClassMap(obj) + cm = obj.GetClassMap m_fromCMaps.Add(cm) i = m_fromCMaps.Count mapName = "t" & i.ToString @@ -331,7 +341,7 @@ Dim statement As New CSqlStatement Dim i As Short Dim j As Short - Dim persObj As CPersistentObject + Dim persObj As IPersistableObject Dim cm As CClassMap Dim isFirst As Boolean = True Dim mapName As String @@ -361,7 +371,7 @@ statement.addSqlClause(", ") End If statement.addSqlClause(cm.getAttributeMap(i).ColumnMap.getAliasQualifiedName(mapName) & _ - Me.ClassMap.RelationalDatabase.getClauseStringAs & cm.getAttributeMap(i).ColumnMap.getAliasName(mapName)) + Me.ClassMap.RelationalDatabase.getClauseStringAs & cm.getAttributeMap(i).ColumnMap.getAliasName(mapName)) End If Next i Next @@ -476,7 +486,7 @@ ''' [rbanks] 19/05/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- - Public Function getObjectAlias(ByVal obj As CPersistentObject) As String + Public Function getObjectAlias(ByVal obj As IPersistableObject) As String Return getObjectAlias(obj, 0) End Function @@ -494,10 +504,10 @@ ''' [rbanks] 19/05/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- - Public Function getObjectAlias(ByVal obj As CPersistentObject, ByVal offset As Integer) As String + Public Function getObjectAlias(ByVal obj As IPersistableObject, ByVal offset As Integer) As String Dim i As Integer = 0 For Each o As DictionaryEntry In m_objectsToJoin - If o.Value.GetType Is obj.GetType Then + If o.Value.GetType Is obj.GetSourceObject.GetType Then If i = offset Then Return o.Key Else Index: CSelectInCriteria.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CSelectInCriteria.vb,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- CSelectInCriteria.vb 21 Jul 2004 02:55:38 -0000 1.5 +++ CSelectInCriteria.vb 18 Oct 2004 00:08:10 -0000 1.6 @@ -80,7 +80,7 @@ ''' [rbanks] 17/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public ReadOnly Property getFirstObject() As CPersistentObject + Public ReadOnly Property getFirstObject() As IPersistableObject Get If m_objectsToJoin.Count = 0 Then Return Nothing @@ -126,6 +126,16 @@ ' m_joins = New CJoin(obj.getClassMap(obj), m_SQC.ToString & "s1") End Sub + Public Sub New(ByVal obj As Object) + Me.New() + Dim injObj As CInjectedObject + Dim pbroker As CPersistenceBroker = modPersistenceBrokerSingleton.getPersistenceBrokerInstance + injObj = New CInjectedObject(obj) + Me.addObjectToJoin(injObj, Nothing, "") + Me.ClassMap = injObj.getClassMap + ' m_joins = New CJoin(obj.getClassMap(obj), m_SQC.ToString & "s1") + End Sub + Protected Overrides Sub Finalize() m_objectsToJoin = Nothing m_joins = Nothing @@ -145,20 +155,20 @@ ''' [rbanks] 17/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub addObjectToJoin(ByVal obj As CPersistentObject, ByVal fromObj As CPersistentObject, ByVal assocName As String) + Public Sub addObjectToJoin(ByVal obj As IPersistableObject, ByVal fromObj As IPersistableObject, ByVal assocName As String) Dim mapName As String - Dim persobj As CPersistentObject + Dim persobj As IPersistableObject Dim bfound As Boolean = False Dim cm, cm2 As CClassMap Dim am As CUDAMap Dim i As Integer If m_objectsToJoin.Count = 0 Then - m_joins = New CJoin(obj.getClassMap(obj), "s" & m_SQC.ToString & "1") - Me.ClassMap = obj.getClassMap(obj) + m_joins = New CJoin(obj.GetClassMap, "s" & m_SQC.ToString & "1") + Me.ClassMap = obj.GetClassMap m_fromCMaps.Add(Me.ClassMap) m_objectsToJoin.Add(obj) - cm = obj.getClassMap(obj).SuperClass + cm = obj.GetClassMap.SuperClass i = 2 While Not cm Is Nothing m_fromCMaps.Add(cm) @@ -171,8 +181,8 @@ End While Exit Sub End If - cm = fromObj.getClassMap(fromObj) - i = 0 'Used to track the index of the from object + cm = fromObj.GetClassMap + i = 0 'Used to track the index of the from object For Each cm2 In m_fromCMaps i += 1 If cm2.Name = cm.Name Then @@ -189,7 +199,7 @@ If am Is Nothing Then Throw New NoAssociationException("Invalid association selected - no such association exists") End If - cm = obj.getClassMap(obj) + cm = obj.GetClassMap m_fromCMaps.Add(cm) i = m_fromCMaps.Count mapName = "s" & m_SQC.ToString & i.ToString @@ -244,7 +254,7 @@ Dim statement As New CSqlStatement Dim i As Short Dim j As Short - Dim persObj As CPersistentObject + Dim persObj As IPersistableObject Dim cm As CClassMap Dim isFirst As Boolean = True Dim mapName As String Index: CCursor.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CCursor.vb,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- CCursor.vb 7 Sep 2004 00:36:34 -0000 1.9 +++ CCursor.vb 18 Oct 2004 00:08:10 -0000 1.10 @@ -235,6 +235,58 @@ ''' [rbanks] 4/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- + Public Sub loadObject(ByRef obj As Object) + loadObject(obj, 0) + End Sub + + Public Sub loadObject(ByRef obj As Object, ByVal offset As Integer) + Dim _alias As String = "" + Dim mr As CMultiRetrieveCriteria + Dim clMap As CClassMap + Dim pbroker As CPersistenceBroker = modPersistenceBrokerSingleton.getPersistenceBrokerInstance + Dim injObj As CInjectedObject + + injobj = pbroker.LocateOrCreateInjObject(obj) + If Not m_parentCriteria Is Nothing Then + If m_parentCriteria.GetType Is GetType(CMultiRetrieveCriteria) Then + mr = m_parentCriteria + _alias = mr.getObjectAlias(injObj, offset) + clMap = pbroker.getClassMap(obj.GetType) + If Not m_holdsProxies Then + clMap.retrieveObject(clMap, injObj, m_row, _alias) + If clMap.AssociationMapCount > 0 Then + injObj.AssociationsLoaded = False + Else + injObj.AssociationsLoaded = True + End If + pbroker.InjectedObjects.Add(injObj) + Else + 'need to retrieve the proxy and then load the object + clMap.retrieveProxy(injObj, m_row, _alias) + pbroker.retrieveObject(injObj, False, True) + pbroker.InjectedObjects.Add(injObj) + End If + Exit Sub + End If + End If + + clMap = pbroker.getClassMap(obj.GetType) + If Not m_holdsProxies Then + clMap.retrieveObject(injobj, m_row) + If clMap.AssociationMapCount > 0 Then + injobj.AssociationsLoaded = False + Else + injobj.AssociationsLoaded = True + End If + pbroker.InjectedObjects.Add(injObj) + Else + 'need to retrieve the proxy and then load the object + clMap.retrieveProxy(injObj, m_row) + pbroker.retrieveObject(injObj, False, True) + pbroker.InjectedObjects.Add(injObj) + End If + End Sub + Public Sub loadObject(ByRef obj As CPersistentObject) loadObject(obj, 0) End Sub @@ -357,7 +409,7 @@ 'TO DO: Handle errors If Not m_holdsProxies Then obj.getClassMap(obj).retrieveObject(obj, m_row) - obj.IsDirty = False 'Clear the dirty flag after initial loading of the object + obj.IsDirty = False 'Clear the dirty flag after initial loading of the object 'Add object to cache broker.addToCache(obj) broker.retrieveAssociations(obj, obj.getClassMap(obj).RelationalDatabase.getConnection(Nothing), m_classMap, True) Index: CClassMap.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CClassMap.vb,v retrieving revision 1.33 retrieving revision 1.34 diff -u -d -r1.33 -r1.34 --- CClassMap.vb 15 Oct 2004 06:42:56 -0000 1.33 +++ CClassMap.vb 18 Oct 2004 00:08:10 -0000 1.34 @@ -1476,9 +1476,9 @@ ''' [rbanks] 27/11/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub retrieveProxy(ByRef obj As CPersistentObject, ByVal rw As DataRow) + Public Sub retrieveProxy(ByRef obj As IPersistableObject, ByVal rw As DataRow) Dim tm As CTableMap - tm = obj.getClassMap(obj).Tables.Item(1) + tm = obj.GetClassMap.Tables.Item(1) Call retrieveProxy(obj, rw, tm.Name) End Sub @@ -1495,11 +1495,11 @@ ''' [rbanks] 27/11/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub retrieveProxy(ByRef obj As CPersistentObject, ByVal rw As DataRow, ByVal pAlias As String) + Public Sub retrieveProxy(ByRef obj As IPersistableObject, ByVal rw As DataRow, ByVal pAlias As String) Dim ClassMap As CClassMap Dim tmpObj As Object If obj Is Nothing Then - Throw New RetrieveException("Source object has not been instantiated yet") + Throw New RetrieveException("Target object has not been instantiated yet") End If ClassMap = Me Dim i As Short @@ -1519,7 +1519,7 @@ End If Catch ex As Exception End Try - obj.setAttributeValue(AttrMap.Name, tmpObj) + obj.SetAttributeValue(AttrMap.Name, tmpObj) End If Next i ClassMap = ClassMap.SuperClass @@ -1552,7 +1552,7 @@ End If Catch ex As Exception End Try - obj.setAttributeValue(AttrMap.Name, tmpObj) + obj.SetAttributeValue(AttrMap.Name, tmpObj) If Not IsDBNull(tmpObj) And Not tmpObj Is Nothing Then obj.Persistent = True End If Index: CSummaryCriteria.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CSummaryCriteria.vb,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- CSummaryCriteria.vb 21 Jul 2004 02:55:38 -0000 1.8 +++ CSummaryCriteria.vb 18 Oct 2004 00:08:10 -0000 1.9 @@ -323,7 +323,7 @@ ''' [rbanks] 17/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Function perform(ByVal obj As CPersistentObject) As CCursor + Public Function perform(ByVal obj As IPersistableObject) As CCursor Static persistentBroker As CPersistenceBroker persistentBroker = getPersistenceBrokerInstance() perform = persistentBroker.Instance.processSummaryCriteria(obj, Me) |