//***************************************************************************// // Nevet generál egy entitáslista DA-jának // //***************************************************************************// proc GenerateEntityCollectionDAName(startrole, endrole) return [startrole] "_" [endrole] "_DA"; end proc //***************************************************************************// // Legenerálja a magadott osztályhoz tartozó entitáslista DA-inak tejles // // forráskódját // //***************************************************************************// template GenerateEntityCollectionDAs(MClass) [loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))] [loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))] [if (([StartRole.multiplicity] == "0..*") or ([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*"))] internal class [GenerateEntityCollectionDAName([EndClass.name], DefineRoleName([StartRole]))] : EntityCollectionDA<[EndClass.name], [MClass.name]> { internal protected [GenerateEntityCollectionDAName([EndClass.name], DefineRoleName([StartRole]))]([EndClass.name] owner) : base(owner) { } private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")]) "; public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection) { new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID); } public override void AddItem([MClass.name] entity) { entity.[ConvertRoleToName([EndRole])] = Owner.ID; [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); assochandler.BeforeInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); assochandler.BeforeInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] entity.Insert(true); [if ([StartRole.id] < [EndRole.id])] assochandler.AfterInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] assochandler.AfterInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] } public override void DeleteItem([MClass.name] entity) { [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); assochandler.BeforeDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); assochandler.BeforeDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] entity.Delete(true); // egyszeruen töröljük az asszociációs osztályt [if ([StartRole.id] < [EndRole.id])] assochandler.AfterDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] assochandler.AfterDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] } } [end if] [if (([EndRole.multiplicity] == "0..*") or ([EndRole.multiplicity] == "1..*") or ([EndRole.multiplicity] == "*"))] internal class [GenerateEntityCollectionDAName([StartClass.name], DefineRoleName([EndRole]))] : EntityCollectionDA<[StartClass.name], [MClass.name]> { internal protected [GenerateEntityCollectionDAName([StartClass.name], DefineRoleName([EndRole]))]([StartClass.name] owner) : base(owner) { } private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName("ID")]) "; public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection) { new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID); } public override void AddItem([MClass.name] entity) { entity.[ConvertRoleToName([StartRole])] = Owner.ID; [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); assochandler.BeforeInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); assochandler.BeforeInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] entity.Insert(true); [if ([StartRole.id] < [EndRole.id])] assochandler.AfterInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] assochandler.AfterInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] } public override void DeleteItem([MClass.name] entity) { [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); assochandler.BeforeDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); assochandler.BeforeDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] entity.Delete(true); // egyszeruen töröljük az asszociációs osztályt [if ([StartRole.id] < [EndRole.id])] assochandler.AfterDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]); [else] assochandler.AfterDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]); [end if] } } [end if] [end loop] [end loop] [loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (GetStereoType([PartnerClass]) == "Entity"))] [if ([StartRole.id] != [EndRole.id])] [if (HasAssociationClass([CurrentAssoc]) == "")] [if ([StartRole.multiplicity] == "*" or [StartRole.multiplicity] == "1..*" or [StartRole.multiplicity] == "0..*")] [if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([StartRole])))] /// /// Az osztály elvégzi az UML modell '[PartnerClass.name] -> [MClass.name] ([DefineRoleName([StartRole])])' /// asszociációjának teljes kezelését. /// internal class [GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))] : EntityCollectionDA<[PartnerClass.name], [MClass.name]> { internal protected [GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))]([PartnerClass.name] owner) : base(owner) { } [if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")] // Nincs kapcsolótábla private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")]) "; [else] // Kapcsolótábla van private const string m_Filter = @" and (exists (select 1 from [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] where [ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([MClass.name])].ID and [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")])) "; [end if] public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection) { new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID); } private static [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("Insert" DefineRoleName([StartRole]))]() { [GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()](); [if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")] // nincs kapcsolótábla... result.CommandText = @"update [ConvertNameToSQLTableName([MClass.name])] set [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))] where (ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])"; [else] // kapcsolótábla van... result.CommandText = @"insert into [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], [ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))]) values (:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))], :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])"; [end if] result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]", [GetCSharpSQLIDType()]); result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]", [GetCSharpSQLIDType()]); return result; } private void DoAdd([PartnerClass.name] owner, [MClass.name] partner) { using ([GetCSharpSQLCommandType()] command = [GenerateCommandCreatorName("Insert" DefineRoleName([StartRole]))]()) { [GenerateCommandInit("command")] command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]"\].Value = owner.ID; command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]"\].Value = partner.ID; command.ExecuteNonQuery(); } } public override void AddItem([MClass.name] entity) { [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); [end if] [if ([StartRole.id] < [EndRole.id])] assochandler.BeforeInsert(entity, this.Owner); [else] assochandler.BeforeInsert(this.Owner, entity); [end if] [if ([EndRole.multiplicity] == "1")] entity.Modify[DefineRoleName([EndRole])](this.Owner); if (entity.State == EntityState.Modified) { entity.UpdateAssociations(true); } else { entity.Insert(true); } [else] this.DoAdd(this.Owner, entity); [end if] [if ([StartRole.id] < [EndRole.id])] assochandler.AfterInsert(entity, this.Owner); [else] assochandler.AfterInsert(this.Owner, entity); [end if] } private static [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("Delete" DefineRoleName([StartRole]))]() { [GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()](); [if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")] // nincs kapcsolótábla... result.CommandText = @"update [ConvertNameToSQLTableName([MClass.name])] set [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = null where ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))] and ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])"; [else] // kapcsolótábla van... result.CommandText = @"delete from [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] where ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]) and ([ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])"; [end if] result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]", [GetCSharpSQLIDType()]); result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]", [GetCSharpSQLIDType()]); return result; } private void DoRemove([PartnerClass.name] owner, [MClass.name] partner) { using ([GetCSharpSQLCommandType()] command = [GenerateCommandCreatorName("Delete" DefineRoleName([StartRole]))]()) { [GenerateCommandInit("command")] command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]"\].Value = owner.ID; command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]"\].Value = partner.ID; command.ExecuteNonQuery(); } } public override void DeleteItem([MClass.name] entity) { [if ([StartRole.id] < [EndRole.id])] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]"); [else] var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]"); [end if] [if ([StartRole.id] < [EndRole.id])] assochandler.BeforeDelete(entity, this.Owner); [else] assochandler.BeforeDelete(this.Owner, entity); [end if] [if ([EndRole.multiplicity] == "1")] entity.Delete(true); [else] this.DoRemove(this.Owner, entity); [end if] [if ([StartRole.id] < [EndRole.id])] assochandler.AfterDelete(entity, this.Owner); [else] assochandler.AfterDelete(this.Owner, entity); [end if] } } [end if] [end if] [end if] [end if] [end loop] end template